summaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
Diffstat (limited to 'web')
-rw-r--r--web/react/.eslintrc3
-rw-r--r--web/react/components/admin_console/admin_controller.jsx62
-rw-r--r--web/react/components/admin_console/admin_sidebar.jsx205
-rw-r--r--web/react/components/admin_console/email_settings.jsx311
-rw-r--r--web/react/components/admin_console/jobs_settings.jsx183
-rw-r--r--web/react/components/admin_console/logs.jsx88
-rw-r--r--web/react/components/admin_console/select_team_modal.jsx124
-rw-r--r--web/react/components/authorize.jsx72
-rw-r--r--web/react/components/change_url_modal.jsx177
-rw-r--r--web/react/components/channel_header.jsx8
-rw-r--r--web/react/components/email_verify.jsx6
-rw-r--r--web/react/components/file_upload.jsx9
-rw-r--r--web/react/components/find_team.jsx7
-rw-r--r--web/react/components/get_link_modal.jsx5
-rw-r--r--web/react/components/invite_member_modal.jsx99
-rw-r--r--web/react/components/login.jsx7
-rw-r--r--web/react/components/message_wrapper.jsx10
-rw-r--r--web/react/components/navbar.jsx2
-rw-r--r--web/react/components/navbar_dropdown.jsx5
-rw-r--r--web/react/components/new_channel.jsx211
-rw-r--r--web/react/components/new_channel_flow.jsx206
-rw-r--r--web/react/components/new_channel_modal.jsx198
-rw-r--r--web/react/components/password_reset_form.jsx3
-rw-r--r--web/react/components/popover_list_members.jsx2
-rw-r--r--web/react/components/post_body.jsx36
-rw-r--r--web/react/components/post_list.jsx6
-rw-r--r--web/react/components/register_app_modal.jsx249
-rw-r--r--web/react/components/rhs_comment.jsx10
-rw-r--r--web/react/components/rhs_root_post.jsx7
-rw-r--r--web/react/components/search_bar.jsx4
-rw-r--r--web/react/components/search_results_item.jsx16
-rw-r--r--web/react/components/setting_item_max.jsx2
-rw-r--r--web/react/components/setting_picture.jsx4
-rw-r--r--web/react/components/sidebar.jsx102
-rw-r--r--web/react/components/sidebar_header.jsx3
-rw-r--r--web/react/components/sidebar_right_menu.jsx5
-rw-r--r--web/react/components/signup_team_complete.jsx10
-rw-r--r--web/react/components/signup_user_complete.jsx13
-rw-r--r--web/react/components/team_general_tab.jsx9
-rw-r--r--web/react/components/team_import_tab.jsx2
-rw-r--r--web/react/components/team_signup_allowed_domains_page.jsx143
-rw-r--r--web/react/components/team_signup_choose_auth.jsx7
-rw-r--r--web/react/components/team_signup_display_name_page.jsx5
-rw-r--r--web/react/components/team_signup_password_page.jsx5
-rw-r--r--web/react/components/team_signup_send_invites_page.jsx18
-rw-r--r--web/react/components/team_signup_url_page.jsx13
-rw-r--r--web/react/components/team_signup_username_page.jsx5
-rw-r--r--web/react/components/team_signup_welcome_page.jsx3
-rw-r--r--web/react/components/team_signup_with_email.jsx3
-rw-r--r--web/react/components/team_signup_with_sso.jsx5
-rw-r--r--web/react/components/unread_channel_indicator.jsx35
-rw-r--r--web/react/components/user_profile.jsx3
-rw-r--r--web/react/components/user_settings.jsx10
-rw-r--r--web/react/components/user_settings_appearance.jsx17
-rw-r--r--web/react/components/user_settings_developer.jsx93
-rw-r--r--web/react/components/user_settings_general.jsx5
-rw-r--r--web/react/components/user_settings_modal.jsx11
-rw-r--r--web/react/components/user_settings_notifications.jsx3
-rw-r--r--web/react/components/view_image.jsx21
-rw-r--r--web/react/package.json8
-rw-r--r--web/react/pages/admin_console.jsx25
-rw-r--r--web/react/pages/authorize.jsx21
-rw-r--r--web/react/pages/channel.jsx40
-rw-r--r--web/react/pages/home.jsx6
-rw-r--r--web/react/pages/login.jsx8
-rw-r--r--web/react/pages/password_reset.jsx12
-rw-r--r--web/react/pages/signup_team.jsx8
-rw-r--r--web/react/pages/signup_team_complete.jsx8
-rw-r--r--web/react/pages/signup_user_complete.jsx16
-rw-r--r--web/react/pages/verify.jsx8
-rw-r--r--web/react/stores/admin_store.jsx58
-rw-r--r--web/react/stores/config_store.jsx69
-rw-r--r--web/react/stores/post_store.jsx1
-rw-r--r--web/react/utils/async_client.jsx52
-rw-r--r--web/react/utils/client.jsx46
-rw-r--r--web/react/utils/config.js48
-rw-r--r--web/react/utils/constants.jsx4
-rw-r--r--web/react/utils/text_formatting.jsx268
-rw-r--r--web/react/utils/utils.jsx221
-rw-r--r--web/sass-files/sass/partials/_admin-console.scss185
-rw-r--r--web/sass-files/sass/partials/_base.scss8
-rw-r--r--web/sass-files/sass/partials/_command-box.scss16
-rw-r--r--web/sass-files/sass/partials/_forms.scss33
-rw-r--r--web/sass-files/sass/partials/_headers.scss10
-rw-r--r--web/sass-files/sass/partials/_responsive.scss7
-rw-r--r--web/sass-files/sass/partials/_sidebar--left.scss17
-rw-r--r--web/sass-files/sass/partials/_signup.scss15
-rw-r--r--web/sass-files/sass/styles.scss2
-rw-r--r--web/static/css/bootstrap-3.3.1.min.css5
-rw-r--r--web/static/css/bootstrap-3.3.5.css (renamed from web/static/css/bootstrap-3.3.1.css)688
-rw-r--r--web/static/css/bootstrap-3.3.5.min.css5
-rw-r--r--web/static/help/about.html (renamed from web/static/help/configure_links.html)4
-rw-r--r--web/static/help/help.html24
-rw-r--r--web/static/help/privacy.html24
-rw-r--r--web/static/help/report_problem.html24
-rw-r--r--web/static/help/terms.html24
-rwxr-xr-xweb/static/images/emoji/+1.pngbin0 -> 5075 bytes
-rwxr-xr-xweb/static/images/emoji/-1.pngbin0 -> 5070 bytes
-rwxr-xr-xweb/static/images/emoji/100.pngbin0 -> 3251 bytes
-rwxr-xr-xweb/static/images/emoji/1234.pngbin0 -> 4751 bytes
-rwxr-xr-xweb/static/images/emoji/8ball.pngbin0 -> 4141 bytes
-rwxr-xr-xweb/static/images/emoji/a.pngbin0 -> 3154 bytes
-rwxr-xr-xweb/static/images/emoji/ab.pngbin0 -> 3859 bytes
-rwxr-xr-xweb/static/images/emoji/abc.pngbin0 -> 4247 bytes
-rwxr-xr-xweb/static/images/emoji/abcd.pngbin0 -> 4471 bytes
-rwxr-xr-xweb/static/images/emoji/accept.pngbin0 -> 4729 bytes
-rwxr-xr-xweb/static/images/emoji/aerial_tramway.pngbin0 -> 3489 bytes
-rwxr-xr-xweb/static/images/emoji/airplane.pngbin0 -> 4740 bytes
-rwxr-xr-xweb/static/images/emoji/alarm_clock.pngbin0 -> 7062 bytes
-rwxr-xr-xweb/static/images/emoji/alien.pngbin0 -> 5457 bytes
-rwxr-xr-xweb/static/images/emoji/ambulance.pngbin0 -> 3708 bytes
-rwxr-xr-xweb/static/images/emoji/anchor.pngbin0 -> 4479 bytes
-rwxr-xr-xweb/static/images/emoji/angel.pngbin0 -> 6672 bytes
-rwxr-xr-xweb/static/images/emoji/anger.pngbin0 -> 3079 bytes
-rwxr-xr-xweb/static/images/emoji/angry.pngbin0 -> 5037 bytes
-rwxr-xr-xweb/static/images/emoji/anguished.pngbin0 -> 5091 bytes
-rwxr-xr-xweb/static/images/emoji/ant.pngbin0 -> 2851 bytes
-rwxr-xr-xweb/static/images/emoji/apple.pngbin0 -> 5630 bytes
-rwxr-xr-xweb/static/images/emoji/aquarius.pngbin0 -> 5096 bytes
-rwxr-xr-xweb/static/images/emoji/aries.pngbin0 -> 4343 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_backward.pngbin0 -> 3180 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_double_down.pngbin0 -> 3179 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_double_up.pngbin0 -> 3611 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_down.pngbin0 -> 3006 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_down_small.pngbin0 -> 2889 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_forward.pngbin0 -> 3201 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_heading_down.pngbin0 -> 3521 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_heading_up.pngbin0 -> 3520 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_left.pngbin0 -> 3041 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_lower_left.pngbin0 -> 3342 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_lower_right.pngbin0 -> 3334 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_right.pngbin0 -> 3022 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_right_hook.pngbin0 -> 3712 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_up.pngbin0 -> 3073 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_up_down.pngbin0 -> 3542 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_up_small.pngbin0 -> 3185 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_upper_left.pngbin0 -> 3227 bytes
-rwxr-xr-xweb/static/images/emoji/arrow_upper_right.pngbin0 -> 3235 bytes
-rwxr-xr-xweb/static/images/emoji/arrows_clockwise.pngbin0 -> 1399 bytes
-rwxr-xr-xweb/static/images/emoji/arrows_counterclockwise.pngbin0 -> 4816 bytes
-rwxr-xr-xweb/static/images/emoji/art.pngbin0 -> 6744 bytes
-rwxr-xr-xweb/static/images/emoji/articulated_lorry.pngbin0 -> 2938 bytes
-rwxr-xr-xweb/static/images/emoji/astonished.pngbin0 -> 6043 bytes
-rwxr-xr-xweb/static/images/emoji/atm.pngbin0 -> 4072 bytes
-rwxr-xr-xweb/static/images/emoji/b.pngbin0 -> 3025 bytes
-rwxr-xr-xweb/static/images/emoji/baby.pngbin0 -> 5921 bytes
-rwxr-xr-xweb/static/images/emoji/baby_bottle.pngbin0 -> 4461 bytes
-rwxr-xr-xweb/static/images/emoji/baby_chick.pngbin0 -> 3961 bytes
-rwxr-xr-xweb/static/images/emoji/baby_symbol.pngbin0 -> 2967 bytes
-rwxr-xr-xweb/static/images/emoji/back.pngbin0 -> 5434 bytes
-rwxr-xr-xweb/static/images/emoji/baggage_claim.pngbin0 -> 3502 bytes
-rwxr-xr-xweb/static/images/emoji/balloon.pngbin0 -> 2300 bytes
-rwxr-xr-xweb/static/images/emoji/ballot_box_with_check.pngbin0 -> 1829 bytes
-rwxr-xr-xweb/static/images/emoji/bamboo.pngbin0 -> 4672 bytes
-rwxr-xr-xweb/static/images/emoji/banana.pngbin0 -> 3915 bytes
-rwxr-xr-xweb/static/images/emoji/bangbang.pngbin0 -> 1387 bytes
-rwxr-xr-xweb/static/images/emoji/bank.pngbin0 -> 5583 bytes
-rwxr-xr-xweb/static/images/emoji/bar_chart.pngbin0 -> 2449 bytes
-rwxr-xr-xweb/static/images/emoji/barber.pngbin0 -> 4252 bytes
-rwxr-xr-xweb/static/images/emoji/baseball.pngbin0 -> 6032 bytes
-rwxr-xr-xweb/static/images/emoji/basketball.pngbin0 -> 6386 bytes
-rwxr-xr-xweb/static/images/emoji/bath.pngbin0 -> 3210 bytes
-rwxr-xr-xweb/static/images/emoji/bathtub.pngbin0 -> 2784 bytes
-rwxr-xr-xweb/static/images/emoji/battery.pngbin0 -> 3812 bytes
-rwxr-xr-xweb/static/images/emoji/bear.pngbin0 -> 5561 bytes
-rwxr-xr-xweb/static/images/emoji/bee.pngbin0 -> 5851 bytes
-rwxr-xr-xweb/static/images/emoji/beer.pngbin0 -> 6097 bytes
-rwxr-xr-xweb/static/images/emoji/beers.pngbin0 -> 6591 bytes
-rwxr-xr-xweb/static/images/emoji/beetle.pngbin0 -> 5255 bytes
-rwxr-xr-xweb/static/images/emoji/beginner.pngbin0 -> 2761 bytes
-rwxr-xr-xweb/static/images/emoji/bell.pngbin0 -> 4859 bytes
-rwxr-xr-xweb/static/images/emoji/bento.pngbin0 -> 5730 bytes
-rwxr-xr-xweb/static/images/emoji/bicyclist.pngbin0 -> 6472 bytes
-rwxr-xr-xweb/static/images/emoji/bike.pngbin0 -> 4722 bytes
-rwxr-xr-xweb/static/images/emoji/bikini.pngbin0 -> 3890 bytes
-rwxr-xr-xweb/static/images/emoji/bird.pngbin0 -> 4878 bytes
-rwxr-xr-xweb/static/images/emoji/birthday.pngbin0 -> 5404 bytes
-rwxr-xr-xweb/static/images/emoji/black_circle.pngbin0 -> 2369 bytes
-rwxr-xr-xweb/static/images/emoji/black_joker.pngbin0 -> 3877 bytes
-rwxr-xr-xweb/static/images/emoji/black_medium_small_square.pngbin0 -> 3495 bytes
-rwxr-xr-xweb/static/images/emoji/black_medium_square.pngbin0 -> 4035 bytes
-rwxr-xr-xweb/static/images/emoji/black_nib.pngbin0 -> 2352 bytes
-rwxr-xr-xweb/static/images/emoji/black_small_square.pngbin0 -> 3061 bytes
-rwxr-xr-xweb/static/images/emoji/black_square.pngbin0 -> 1332 bytes
-rwxr-xr-xweb/static/images/emoji/black_square_button.pngbin0 -> 1337 bytes
-rwxr-xr-xweb/static/images/emoji/blossom.pngbin0 -> 4232 bytes
-rwxr-xr-xweb/static/images/emoji/blowfish.pngbin0 -> 3737 bytes
-rwxr-xr-xweb/static/images/emoji/blue_book.pngbin0 -> 5092 bytes
-rwxr-xr-xweb/static/images/emoji/blue_car.pngbin0 -> 4081 bytes
-rwxr-xr-xweb/static/images/emoji/blue_heart.pngbin0 -> 4094 bytes
-rwxr-xr-xweb/static/images/emoji/blush.pngbin0 -> 5188 bytes
-rwxr-xr-xweb/static/images/emoji/boar.pngbin0 -> 4840 bytes
-rwxr-xr-xweb/static/images/emoji/boat.pngbin0 -> 3833 bytes
-rwxr-xr-xweb/static/images/emoji/bomb.pngbin0 -> 5208 bytes
-rwxr-xr-xweb/static/images/emoji/book.pngbin0 -> 6050 bytes
-rwxr-xr-xweb/static/images/emoji/bookmark.pngbin0 -> 4649 bytes
-rwxr-xr-xweb/static/images/emoji/bookmark_tabs.pngbin0 -> 3150 bytes
-rwxr-xr-xweb/static/images/emoji/books.pngbin0 -> 6539 bytes
-rwxr-xr-xweb/static/images/emoji/boom.pngbin0 -> 3772 bytes
-rwxr-xr-xweb/static/images/emoji/boot.pngbin0 -> 3327 bytes
-rwxr-xr-xweb/static/images/emoji/bouquet.pngbin0 -> 6915 bytes
-rwxr-xr-xweb/static/images/emoji/bow.pngbin0 -> 5143 bytes
-rwxr-xr-xweb/static/images/emoji/bowling.pngbin0 -> 4184 bytes
-rwxr-xr-xweb/static/images/emoji/bowtie.pngbin0 -> 6478 bytes
-rwxr-xr-xweb/static/images/emoji/boy.pngbin0 -> 5946 bytes
-rwxr-xr-xweb/static/images/emoji/bread.pngbin0 -> 6214 bytes
-rwxr-xr-xweb/static/images/emoji/bride_with_veil.pngbin0 -> 8515 bytes
-rwxr-xr-xweb/static/images/emoji/bridge_at_night.pngbin0 -> 5137 bytes
-rwxr-xr-xweb/static/images/emoji/briefcase.pngbin0 -> 2698 bytes
-rwxr-xr-xweb/static/images/emoji/broken_heart.pngbin0 -> 4118 bytes
-rwxr-xr-xweb/static/images/emoji/bug.pngbin0 -> 5945 bytes
-rwxr-xr-xweb/static/images/emoji/bulb.pngbin0 -> 4490 bytes
-rwxr-xr-xweb/static/images/emoji/bullettrain_front.pngbin0 -> 4992 bytes
-rwxr-xr-xweb/static/images/emoji/bullettrain_side.pngbin0 -> 3842 bytes
-rwxr-xr-xweb/static/images/emoji/bus.pngbin0 -> 4065 bytes
-rwxr-xr-xweb/static/images/emoji/busstop.pngbin0 -> 1676 bytes
-rwxr-xr-xweb/static/images/emoji/bust_in_silhouette.pngbin0 -> 2005 bytes
-rwxr-xr-xweb/static/images/emoji/busts_in_silhouette.pngbin0 -> 3021 bytes
-rwxr-xr-xweb/static/images/emoji/cactus.pngbin0 -> 4509 bytes
-rwxr-xr-xweb/static/images/emoji/cake.pngbin0 -> 6129 bytes
-rwxr-xr-xweb/static/images/emoji/calendar.pngbin0 -> 2920 bytes
-rwxr-xr-xweb/static/images/emoji/calling.pngbin0 -> 4037 bytes
-rwxr-xr-xweb/static/images/emoji/camel.pngbin0 -> 4485 bytes
-rwxr-xr-xweb/static/images/emoji/camera.pngbin0 -> 4661 bytes
-rwxr-xr-xweb/static/images/emoji/cancer.pngbin0 -> 5384 bytes
-rwxr-xr-xweb/static/images/emoji/candy.pngbin0 -> 4502 bytes
-rwxr-xr-xweb/static/images/emoji/capital_abcd.pngbin0 -> 5136 bytes
-rwxr-xr-xweb/static/images/emoji/capricorn.pngbin0 -> 4670 bytes
-rwxr-xr-xweb/static/images/emoji/car.pngbin0 -> 4278 bytes
-rwxr-xr-xweb/static/images/emoji/card_index.pngbin0 -> 3749 bytes
-rwxr-xr-xweb/static/images/emoji/carousel_horse.pngbin0 -> 5893 bytes
-rwxr-xr-xweb/static/images/emoji/cat.pngbin0 -> 5987 bytes
-rwxr-xr-xweb/static/images/emoji/cat2.pngbin0 -> 5644 bytes
-rwxr-xr-xweb/static/images/emoji/cd.pngbin0 -> 6718 bytes
-rwxr-xr-xweb/static/images/emoji/chart.pngbin0 -> 4331 bytes
-rwxr-xr-xweb/static/images/emoji/chart_with_downwards_trend.pngbin0 -> 2897 bytes
-rwxr-xr-xweb/static/images/emoji/chart_with_upwards_trend.pngbin0 -> 2930 bytes
-rwxr-xr-xweb/static/images/emoji/checkered_flag.pngbin0 -> 1675 bytes
-rwxr-xr-xweb/static/images/emoji/cherries.pngbin0 -> 5604 bytes
-rwxr-xr-xweb/static/images/emoji/cherry_blossom.pngbin0 -> 7174 bytes
-rwxr-xr-xweb/static/images/emoji/chestnut.pngbin0 -> 5875 bytes
-rwxr-xr-xweb/static/images/emoji/chicken.pngbin0 -> 3988 bytes
-rwxr-xr-xweb/static/images/emoji/children_crossing.pngbin0 -> 3460 bytes
-rwxr-xr-xweb/static/images/emoji/chocolate_bar.pngbin0 -> 5249 bytes
-rwxr-xr-xweb/static/images/emoji/christmas_tree.pngbin0 -> 4721 bytes
-rwxr-xr-xweb/static/images/emoji/church.pngbin0 -> 4653 bytes
-rwxr-xr-xweb/static/images/emoji/cinema.pngbin0 -> 3573 bytes
-rwxr-xr-xweb/static/images/emoji/circus_tent.pngbin0 -> 4683 bytes
-rwxr-xr-xweb/static/images/emoji/city_sunrise.pngbin0 -> 4312 bytes
-rwxr-xr-xweb/static/images/emoji/city_sunset.pngbin0 -> 3841 bytes
-rwxr-xr-xweb/static/images/emoji/cl.pngbin0 -> 3493 bytes
-rwxr-xr-xweb/static/images/emoji/clap.pngbin0 -> 7110 bytes
-rwxr-xr-xweb/static/images/emoji/clapper.pngbin0 -> 4192 bytes
-rwxr-xr-xweb/static/images/emoji/clipboard.pngbin0 -> 4663 bytes
-rwxr-xr-xweb/static/images/emoji/clock1.pngbin0 -> 2590 bytes
-rwxr-xr-xweb/static/images/emoji/clock10.pngbin0 -> 2590 bytes
-rwxr-xr-xweb/static/images/emoji/clock1030.pngbin0 -> 2817 bytes
-rwxr-xr-xweb/static/images/emoji/clock11.pngbin0 -> 2587 bytes
-rwxr-xr-xweb/static/images/emoji/clock1130.pngbin0 -> 2854 bytes
-rwxr-xr-xweb/static/images/emoji/clock12.pngbin0 -> 2504 bytes
-rwxr-xr-xweb/static/images/emoji/clock1230.pngbin0 -> 2797 bytes
-rwxr-xr-xweb/static/images/emoji/clock130.pngbin0 -> 2837 bytes
-rwxr-xr-xweb/static/images/emoji/clock2.pngbin0 -> 2595 bytes
-rwxr-xr-xweb/static/images/emoji/clock230.pngbin0 -> 2853 bytes
-rwxr-xr-xweb/static/images/emoji/clock3.pngbin0 -> 2492 bytes
-rwxr-xr-xweb/static/images/emoji/clock330.pngbin0 -> 2739 bytes
-rwxr-xr-xweb/static/images/emoji/clock4.pngbin0 -> 2619 bytes
-rwxr-xr-xweb/static/images/emoji/clock430.pngbin0 -> 2803 bytes
-rwxr-xr-xweb/static/images/emoji/clock5.pngbin0 -> 2624 bytes
-rwxr-xr-xweb/static/images/emoji/clock530.pngbin0 -> 2832 bytes
-rwxr-xr-xweb/static/images/emoji/clock6.pngbin0 -> 2577 bytes
-rwxr-xr-xweb/static/images/emoji/clock630.pngbin0 -> 2730 bytes
-rwxr-xr-xweb/static/images/emoji/clock7.pngbin0 -> 2615 bytes
-rwxr-xr-xweb/static/images/emoji/clock730.pngbin0 -> 2794 bytes
-rwxr-xr-xweb/static/images/emoji/clock8.pngbin0 -> 2603 bytes
-rwxr-xr-xweb/static/images/emoji/clock830.pngbin0 -> 2792 bytes
-rwxr-xr-xweb/static/images/emoji/clock9.pngbin0 -> 2486 bytes
-rwxr-xr-xweb/static/images/emoji/clock930.pngbin0 -> 2746 bytes
-rwxr-xr-xweb/static/images/emoji/closed_book.pngbin0 -> 4847 bytes
-rwxr-xr-xweb/static/images/emoji/closed_lock_with_key.pngbin0 -> 5701 bytes
-rwxr-xr-xweb/static/images/emoji/closed_umbrella.pngbin0 -> 3868 bytes
-rwxr-xr-xweb/static/images/emoji/cloud.pngbin0 -> 3860 bytes
-rwxr-xr-xweb/static/images/emoji/clubs.pngbin0 -> 1685 bytes
-rwxr-xr-xweb/static/images/emoji/cn.pngbin0 -> 3634 bytes
-rwxr-xr-xweb/static/images/emoji/cocktail.pngbin0 -> 2949 bytes
-rwxr-xr-xweb/static/images/emoji/coffee.pngbin0 -> 4306 bytes
-rwxr-xr-xweb/static/images/emoji/cold_sweat.pngbin0 -> 5972 bytes
-rwxr-xr-xweb/static/images/emoji/collision.pngbin0 -> 3772 bytes
-rwxr-xr-xweb/static/images/emoji/computer.pngbin0 -> 1705 bytes
-rwxr-xr-xweb/static/images/emoji/confetti_ball.pngbin0 -> 5521 bytes
-rwxr-xr-xweb/static/images/emoji/confounded.pngbin0 -> 5857 bytes
-rwxr-xr-xweb/static/images/emoji/confused.pngbin0 -> 4633 bytes
-rwxr-xr-xweb/static/images/emoji/congratulations.pngbin0 -> 4881 bytes
-rwxr-xr-xweb/static/images/emoji/construction.pngbin0 -> 3700 bytes
-rwxr-xr-xweb/static/images/emoji/construction_worker.pngbin0 -> 6193 bytes
-rwxr-xr-xweb/static/images/emoji/convenience_store.pngbin0 -> 4073 bytes
-rwxr-xr-xweb/static/images/emoji/cookie.pngbin0 -> 8149 bytes
-rwxr-xr-xweb/static/images/emoji/cool.pngbin0 -> 4182 bytes
-rwxr-xr-xweb/static/images/emoji/cop.pngbin0 -> 7141 bytes
-rwxr-xr-xweb/static/images/emoji/copyright.pngbin0 -> 1579 bytes
-rwxr-xr-xweb/static/images/emoji/corn.pngbin0 -> 6694 bytes
-rwxr-xr-xweb/static/images/emoji/couple.pngbin0 -> 7615 bytes
-rwxr-xr-xweb/static/images/emoji/couple_with_heart.pngbin0 -> 7370 bytes
-rwxr-xr-xweb/static/images/emoji/couplekiss.pngbin0 -> 7219 bytes
-rwxr-xr-xweb/static/images/emoji/cow.pngbin0 -> 5745 bytes
-rwxr-xr-xweb/static/images/emoji/cow2.pngbin0 -> 5303 bytes
-rwxr-xr-xweb/static/images/emoji/credit_card.pngbin0 -> 2648 bytes
-rwxr-xr-xweb/static/images/emoji/crescent_moon.pngbin0 -> 3541 bytes
-rwxr-xr-xweb/static/images/emoji/crocodile.pngbin0 -> 6125 bytes
-rwxr-xr-xweb/static/images/emoji/crossed_flags.pngbin0 -> 4015 bytes
-rwxr-xr-xweb/static/images/emoji/crown.pngbin0 -> 5655 bytes
-rwxr-xr-xweb/static/images/emoji/cry.pngbin0 -> 5699 bytes
-rwxr-xr-xweb/static/images/emoji/crying_cat_face.pngbin0 -> 6682 bytes
-rwxr-xr-xweb/static/images/emoji/crystal_ball.pngbin0 -> 6236 bytes
-rwxr-xr-xweb/static/images/emoji/cupid.pngbin0 -> 5413 bytes
-rwxr-xr-xweb/static/images/emoji/curly_loop.pngbin0 -> 1129 bytes
-rwxr-xr-xweb/static/images/emoji/currency_exchange.pngbin0 -> 1959 bytes
-rwxr-xr-xweb/static/images/emoji/curry.pngbin0 -> 5336 bytes
-rwxr-xr-xweb/static/images/emoji/custard.pngbin0 -> 5810 bytes
-rwxr-xr-xweb/static/images/emoji/customs.pngbin0 -> 3899 bytes
-rwxr-xr-xweb/static/images/emoji/cyclone.pngbin0 -> 4890 bytes
-rwxr-xr-xweb/static/images/emoji/dancer.pngbin0 -> 3726 bytes
-rwxr-xr-xweb/static/images/emoji/dancers.pngbin0 -> 7918 bytes
-rwxr-xr-xweb/static/images/emoji/dango.pngbin0 -> 4449 bytes
-rwxr-xr-xweb/static/images/emoji/dart.pngbin0 -> 5437 bytes
-rwxr-xr-xweb/static/images/emoji/dash.pngbin0 -> 5448 bytes
-rwxr-xr-xweb/static/images/emoji/date.pngbin0 -> 2977 bytes
-rwxr-xr-xweb/static/images/emoji/de.pngbin0 -> 2640 bytes
-rwxr-xr-xweb/static/images/emoji/deciduous_tree.pngbin0 -> 7263 bytes
-rwxr-xr-xweb/static/images/emoji/department_store.pngbin0 -> 5159 bytes
-rwxr-xr-xweb/static/images/emoji/diamond_shape_with_a_dot_inside.pngbin0 -> 5698 bytes
-rwxr-xr-xweb/static/images/emoji/diamonds.pngbin0 -> 2785 bytes
-rwxr-xr-xweb/static/images/emoji/disappointed.pngbin0 -> 4764 bytes
-rwxr-xr-xweb/static/images/emoji/disappointed_relieved.pngbin0 -> 5648 bytes
-rwxr-xr-xweb/static/images/emoji/dizzy.pngbin0 -> 2990 bytes
-rwxr-xr-xweb/static/images/emoji/dizzy_face.pngbin0 -> 6278 bytes
-rwxr-xr-xweb/static/images/emoji/do_not_litter.pngbin0 -> 5277 bytes
-rwxr-xr-xweb/static/images/emoji/dog.pngbin0 -> 5945 bytes
-rwxr-xr-xweb/static/images/emoji/dog2.pngbin0 -> 5931 bytes
-rwxr-xr-xweb/static/images/emoji/dollar.pngbin0 -> 4622 bytes
-rwxr-xr-xweb/static/images/emoji/dolls.pngbin0 -> 7138 bytes
-rwxr-xr-xweb/static/images/emoji/dolphin.pngbin0 -> 4343 bytes
-rwxr-xr-xweb/static/images/emoji/donut.pngbin0 -> 5209 bytes
-rwxr-xr-xweb/static/images/emoji/door.pngbin0 -> 3310 bytes
-rwxr-xr-xweb/static/images/emoji/doughnut.pngbin0 -> 5209 bytes
-rwxr-xr-xweb/static/images/emoji/dragon.pngbin0 -> 7749 bytes
-rwxr-xr-xweb/static/images/emoji/dragon_face.pngbin0 -> 6737 bytes
-rwxr-xr-xweb/static/images/emoji/dress.pngbin0 -> 3631 bytes
-rwxr-xr-xweb/static/images/emoji/dromedary_camel.pngbin0 -> 5139 bytes
-rwxr-xr-xweb/static/images/emoji/droplet.pngbin0 -> 3139 bytes
-rwxr-xr-xweb/static/images/emoji/dvd.pngbin0 -> 6993 bytes
-rwxr-xr-xweb/static/images/emoji/e-mail.pngbin0 -> 2128 bytes
-rwxr-xr-xweb/static/images/emoji/ear.pngbin0 -> 4335 bytes
-rwxr-xr-xweb/static/images/emoji/ear_of_rice.pngbin0 -> 4758 bytes
-rwxr-xr-xweb/static/images/emoji/earth_africa.pngbin0 -> 7164 bytes
-rwxr-xr-xweb/static/images/emoji/earth_americas.pngbin0 -> 7039 bytes
-rwxr-xr-xweb/static/images/emoji/earth_asia.pngbin0 -> 7303 bytes
-rwxr-xr-xweb/static/images/emoji/egg.pngbin0 -> 5211 bytes
-rwxr-xr-xweb/static/images/emoji/eggplant.pngbin0 -> 4672 bytes
-rwxr-xr-xweb/static/images/emoji/eight.pngbin0 -> 3844 bytes
-rwxr-xr-xweb/static/images/emoji/eight_pointed_black_star.pngbin0 -> 3271 bytes
-rwxr-xr-xweb/static/images/emoji/eight_spoked_asterisk.pngbin0 -> 4012 bytes
-rwxr-xr-xweb/static/images/emoji/electric_plug.pngbin0 -> 2758 bytes
-rwxr-xr-xweb/static/images/emoji/elephant.pngbin0 -> 5086 bytes
-rwxr-xr-xweb/static/images/emoji/email.pngbin0 -> 2697 bytes
-rwxr-xr-xweb/static/images/emoji/end.pngbin0 -> 1134 bytes
-rwxr-xr-xweb/static/images/emoji/envelope.pngbin0 -> 1655 bytes
-rwxr-xr-xweb/static/images/emoji/es.pngbin0 -> 4302 bytes
-rwxr-xr-xweb/static/images/emoji/euro.pngbin0 -> 3942 bytes
-rwxr-xr-xweb/static/images/emoji/european_castle.pngbin0 -> 5427 bytes
-rwxr-xr-xweb/static/images/emoji/european_post_office.pngbin0 -> 4816 bytes
-rwxr-xr-xweb/static/images/emoji/evergreen_tree.pngbin0 -> 4924 bytes
-rwxr-xr-xweb/static/images/emoji/exclamation.pngbin0 -> 1175 bytes
-rwxr-xr-xweb/static/images/emoji/expressionless.pngbin0 -> 4022 bytes
-rwxr-xr-xweb/static/images/emoji/eyeglasses.pngbin0 -> 4929 bytes
-rwxr-xr-xweb/static/images/emoji/eyes.pngbin0 -> 4367 bytes
-rwxr-xr-xweb/static/images/emoji/facepunch.pngbin0 -> 4833 bytes
-rwxr-xr-xweb/static/images/emoji/factory.pngbin0 -> 5558 bytes
-rwxr-xr-xweb/static/images/emoji/fallen_leaf.pngbin0 -> 4890 bytes
-rwxr-xr-xweb/static/images/emoji/family.pngbin0 -> 7211 bytes
-rwxr-xr-xweb/static/images/emoji/fast_forward.pngbin0 -> 3105 bytes
-rwxr-xr-xweb/static/images/emoji/fax.pngbin0 -> 4650 bytes
-rwxr-xr-xweb/static/images/emoji/fearful.pngbin0 -> 5600 bytes
-rwxr-xr-xweb/static/images/emoji/feelsgood.pngbin0 -> 1150 bytes
-rwxr-xr-xweb/static/images/emoji/feet.pngbin0 -> 1529 bytes
-rwxr-xr-xweb/static/images/emoji/ferris_wheel.pngbin0 -> 6213 bytes
-rwxr-xr-xweb/static/images/emoji/file_folder.pngbin0 -> 4013 bytes
-rwxr-xr-xweb/static/images/emoji/finnadie.pngbin0 -> 1186 bytes
-rwxr-xr-xweb/static/images/emoji/fire.pngbin0 -> 3886 bytes
-rwxr-xr-xweb/static/images/emoji/fire_engine.pngbin0 -> 4862 bytes
-rwxr-xr-xweb/static/images/emoji/fireworks.pngbin0 -> 6269 bytes
-rwxr-xr-xweb/static/images/emoji/first_quarter_moon.pngbin0 -> 5967 bytes
-rwxr-xr-xweb/static/images/emoji/first_quarter_moon_with_face.pngbin0 -> 4280 bytes
-rwxr-xr-xweb/static/images/emoji/fish.pngbin0 -> 4721 bytes
-rwxr-xr-xweb/static/images/emoji/fish_cake.pngbin0 -> 5818 bytes
-rwxr-xr-xweb/static/images/emoji/fishing_pole_and_fish.pngbin0 -> 4470 bytes
-rwxr-xr-xweb/static/images/emoji/fist.pngbin0 -> 5880 bytes
-rwxr-xr-xweb/static/images/emoji/five.pngbin0 -> 3593 bytes
-rwxr-xr-xweb/static/images/emoji/flags.pngbin0 -> 6124 bytes
-rwxr-xr-xweb/static/images/emoji/flashlight.pngbin0 -> 5024 bytes
-rwxr-xr-xweb/static/images/emoji/floppy_disk.pngbin0 -> 3215 bytes
-rwxr-xr-xweb/static/images/emoji/flower_playing_cards.pngbin0 -> 3434 bytes
-rwxr-xr-xweb/static/images/emoji/flushed.pngbin0 -> 5845 bytes
-rwxr-xr-xweb/static/images/emoji/foggy.pngbin0 -> 4623 bytes
-rwxr-xr-xweb/static/images/emoji/football.pngbin0 -> 6712 bytes
-rwxr-xr-xweb/static/images/emoji/fork_and_knife.pngbin0 -> 3608 bytes
-rwxr-xr-xweb/static/images/emoji/fountain.pngbin0 -> 5087 bytes
-rwxr-xr-xweb/static/images/emoji/four.pngbin0 -> 3176 bytes
-rwxr-xr-xweb/static/images/emoji/four_leaf_clover.pngbin0 -> 5995 bytes
-rwxr-xr-xweb/static/images/emoji/fr.pngbin0 -> 3398 bytes
-rwxr-xr-xweb/static/images/emoji/free.pngbin0 -> 3605 bytes
-rwxr-xr-xweb/static/images/emoji/fried_shrimp.pngbin0 -> 7550 bytes
-rwxr-xr-xweb/static/images/emoji/fries.pngbin0 -> 6405 bytes
-rwxr-xr-xweb/static/images/emoji/frog.pngbin0 -> 4823 bytes
-rwxr-xr-xweb/static/images/emoji/frowning.pngbin0 -> 4733 bytes
-rwxr-xr-xweb/static/images/emoji/fu.pngbin0 -> 4687 bytes
-rwxr-xr-xweb/static/images/emoji/fuelpump.pngbin0 -> 4296 bytes
-rwxr-xr-xweb/static/images/emoji/full_moon.pngbin0 -> 6458 bytes
-rwxr-xr-xweb/static/images/emoji/full_moon_with_face.pngbin0 -> 7165 bytes
-rwxr-xr-xweb/static/images/emoji/game_die.pngbin0 -> 2956 bytes
-rwxr-xr-xweb/static/images/emoji/gb.pngbin0 -> 5894 bytes
-rwxr-xr-xweb/static/images/emoji/gem.pngbin0 -> 4855 bytes
-rwxr-xr-xweb/static/images/emoji/gemini.pngbin0 -> 4296 bytes
-rwxr-xr-xweb/static/images/emoji/ghost.pngbin0 -> 4513 bytes
-rwxr-xr-xweb/static/images/emoji/gift.pngbin0 -> 6712 bytes
-rwxr-xr-xweb/static/images/emoji/gift_heart.pngbin0 -> 6013 bytes
-rwxr-xr-xweb/static/images/emoji/girl.pngbin0 -> 6314 bytes
-rwxr-xr-xweb/static/images/emoji/globe_with_meridians.pngbin0 -> 5837 bytes
-rwxr-xr-xweb/static/images/emoji/goat.pngbin0 -> 4889 bytes
-rwxr-xr-xweb/static/images/emoji/goberserk.pngbin0 -> 1334 bytes
-rwxr-xr-xweb/static/images/emoji/godmode.pngbin0 -> 1042 bytes
-rwxr-xr-xweb/static/images/emoji/golf.pngbin0 -> 3548 bytes
-rwxr-xr-xweb/static/images/emoji/grapes.pngbin0 -> 5423 bytes
-rwxr-xr-xweb/static/images/emoji/green_apple.pngbin0 -> 6205 bytes
-rwxr-xr-xweb/static/images/emoji/green_book.pngbin0 -> 5090 bytes
-rwxr-xr-xweb/static/images/emoji/green_heart.pngbin0 -> 4432 bytes
-rwxr-xr-xweb/static/images/emoji/grey_exclamation.pngbin0 -> 790 bytes
-rwxr-xr-xweb/static/images/emoji/grey_question.pngbin0 -> 1057 bytes
-rwxr-xr-xweb/static/images/emoji/grimacing.pngbin0 -> 5327 bytes
-rwxr-xr-xweb/static/images/emoji/grin.pngbin0 -> 5721 bytes
-rwxr-xr-xweb/static/images/emoji/grinning.pngbin0 -> 5550 bytes
-rwxr-xr-xweb/static/images/emoji/guardsman.pngbin0 -> 3587 bytes
-rwxr-xr-xweb/static/images/emoji/guitar.pngbin0 -> 4382 bytes
-rwxr-xr-xweb/static/images/emoji/gun.pngbin0 -> 3161 bytes
-rwxr-xr-xweb/static/images/emoji/haircut.pngbin0 -> 7100 bytes
-rwxr-xr-xweb/static/images/emoji/hamburger.pngbin0 -> 5706 bytes
-rwxr-xr-xweb/static/images/emoji/hammer.pngbin0 -> 3670 bytes
-rwxr-xr-xweb/static/images/emoji/hamster.pngbin0 -> 7221 bytes
-rwxr-xr-xweb/static/images/emoji/hand.pngbin0 -> 4161 bytes
-rwxr-xr-xweb/static/images/emoji/handbag.pngbin0 -> 5449 bytes
-rwxr-xr-xweb/static/images/emoji/hankey.pngbin0 -> 4754 bytes
-rwxr-xr-xweb/static/images/emoji/hash.pngbin0 -> 3742 bytes
-rwxr-xr-xweb/static/images/emoji/hatched_chick.pngbin0 -> 5646 bytes
-rwxr-xr-xweb/static/images/emoji/hatching_chick.pngbin0 -> 5928 bytes
-rwxr-xr-xweb/static/images/emoji/headphones.pngbin0 -> 1910 bytes
-rwxr-xr-xweb/static/images/emoji/hear_no_evil.pngbin0 -> 6550 bytes
-rwxr-xr-xweb/static/images/emoji/heart.pngbin0 -> 3302 bytes
-rwxr-xr-xweb/static/images/emoji/heart_decoration.pngbin0 -> 3507 bytes
-rwxr-xr-xweb/static/images/emoji/heart_eyes.pngbin0 -> 5758 bytes
-rwxr-xr-xweb/static/images/emoji/heart_eyes_cat.pngbin0 -> 6176 bytes
-rwxr-xr-xweb/static/images/emoji/heartbeat.pngbin0 -> 4052 bytes
-rwxr-xr-xweb/static/images/emoji/heartpulse.pngbin0 -> 6269 bytes
-rwxr-xr-xweb/static/images/emoji/hearts.pngbin0 -> 2925 bytes
-rwxr-xr-xweb/static/images/emoji/heavy_check_mark.pngbin0 -> 924 bytes
-rwxr-xr-xweb/static/images/emoji/heavy_division_sign.pngbin0 -> 264 bytes
-rwxr-xr-xweb/static/images/emoji/heavy_dollar_sign.pngbin0 -> 1150 bytes
-rwxr-xr-xweb/static/images/emoji/heavy_exclamation_mark.pngbin0 -> 1315 bytes
-rwxr-xr-xweb/static/images/emoji/heavy_minus_sign.pngbin0 -> 176 bytes
-rwxr-xr-xweb/static/images/emoji/heavy_multiplication_x.pngbin0 -> 591 bytes
-rwxr-xr-xweb/static/images/emoji/heavy_plus_sign.pngbin0 -> 264 bytes
-rwxr-xr-xweb/static/images/emoji/helicopter.pngbin0 -> 4100 bytes
-rwxr-xr-xweb/static/images/emoji/herb.pngbin0 -> 5889 bytes
-rwxr-xr-xweb/static/images/emoji/hibiscus.pngbin0 -> 8322 bytes
-rwxr-xr-xweb/static/images/emoji/high_brightness.pngbin0 -> 4060 bytes
-rwxr-xr-xweb/static/images/emoji/high_heel.pngbin0 -> 4557 bytes
-rwxr-xr-xweb/static/images/emoji/hocho.pngbin0 -> 2455 bytes
-rwxr-xr-xweb/static/images/emoji/honey_pot.pngbin0 -> 5830 bytes
-rwxr-xr-xweb/static/images/emoji/honeybee.pngbin0 -> 5851 bytes
-rwxr-xr-xweb/static/images/emoji/horse.pngbin0 -> 4582 bytes
-rwxr-xr-xweb/static/images/emoji/horse_racing.pngbin0 -> 5905 bytes
-rwxr-xr-xweb/static/images/emoji/hospital.pngbin0 -> 4887 bytes
-rwxr-xr-xweb/static/images/emoji/hotel.pngbin0 -> 5123 bytes
-rwxr-xr-xweb/static/images/emoji/hotsprings.pngbin0 -> 3538 bytes
-rwxr-xr-xweb/static/images/emoji/hourglass.pngbin0 -> 4492 bytes
-rwxr-xr-xweb/static/images/emoji/hourglass_flowing_sand.pngbin0 -> 4291 bytes
-rwxr-xr-xweb/static/images/emoji/house.pngbin0 -> 3510 bytes
-rwxr-xr-xweb/static/images/emoji/house_with_garden.pngbin0 -> 6089 bytes
-rwxr-xr-xweb/static/images/emoji/hurtrealbad.pngbin0 -> 1456 bytes
-rwxr-xr-xweb/static/images/emoji/hushed.pngbin0 -> 4941 bytes
-rwxr-xr-xweb/static/images/emoji/ice_cream.pngbin0 -> 5469 bytes
-rwxr-xr-xweb/static/images/emoji/icecream.pngbin0 -> 4603 bytes
-rwxr-xr-xweb/static/images/emoji/id.pngbin0 -> 3905 bytes
-rwxr-xr-xweb/static/images/emoji/ideograph_advantage.pngbin0 -> 3088 bytes
-rwxr-xr-xweb/static/images/emoji/imp.pngbin0 -> 6621 bytes
-rwxr-xr-xweb/static/images/emoji/inbox_tray.pngbin0 -> 3700 bytes
-rwxr-xr-xweb/static/images/emoji/incoming_envelope.pngbin0 -> 2206 bytes
-rwxr-xr-xweb/static/images/emoji/information_desk_person.pngbin0 -> 6605 bytes
-rwxr-xr-xweb/static/images/emoji/information_source.pngbin0 -> 3670 bytes
-rwxr-xr-xweb/static/images/emoji/innocent.pngbin0 -> 7000 bytes
-rwxr-xr-xweb/static/images/emoji/interrobang.pngbin0 -> 2875 bytes
-rwxr-xr-xweb/static/images/emoji/iphone.pngbin0 -> 3499 bytes
-rwxr-xr-xweb/static/images/emoji/it.pngbin0 -> 3495 bytes
-rwxr-xr-xweb/static/images/emoji/izakaya_lantern.pngbin0 -> 4064 bytes
-rwxr-xr-xweb/static/images/emoji/jack_o_lantern.pngbin0 -> 5633 bytes
-rwxr-xr-xweb/static/images/emoji/japan.pngbin0 -> 4085 bytes
-rwxr-xr-xweb/static/images/emoji/japanese_castle.pngbin0 -> 4939 bytes
-rwxr-xr-xweb/static/images/emoji/japanese_goblin.pngbin0 -> 5159 bytes
-rwxr-xr-xweb/static/images/emoji/japanese_ogre.pngbin0 -> 7147 bytes
-rwxr-xr-xweb/static/images/emoji/jeans.pngbin0 -> 3470 bytes
-rwxr-xr-xweb/static/images/emoji/joy.pngbin0 -> 6339 bytes
-rwxr-xr-xweb/static/images/emoji/joy_cat.pngbin0 -> 7190 bytes
-rwxr-xr-xweb/static/images/emoji/jp.pngbin0 -> 2827 bytes
-rwxr-xr-xweb/static/images/emoji/key.pngbin0 -> 3452 bytes
-rwxr-xr-xweb/static/images/emoji/keycap_ten.pngbin0 -> 4095 bytes
-rwxr-xr-xweb/static/images/emoji/kimono.pngbin0 -> 4938 bytes
-rwxr-xr-xweb/static/images/emoji/kiss.pngbin0 -> 6276 bytes
-rwxr-xr-xweb/static/images/emoji/kissing.pngbin0 -> 4790 bytes
-rwxr-xr-xweb/static/images/emoji/kissing_cat.pngbin0 -> 6801 bytes
-rwxr-xr-xweb/static/images/emoji/kissing_closed_eyes.pngbin0 -> 5563 bytes
-rwxr-xr-xweb/static/images/emoji/kissing_face.pngbin0 -> 5563 bytes
-rwxr-xr-xweb/static/images/emoji/kissing_heart.pngbin0 -> 5767 bytes
-rwxr-xr-xweb/static/images/emoji/kissing_smiling_eyes.pngbin0 -> 4999 bytes
-rwxr-xr-xweb/static/images/emoji/koala.pngbin0 -> 5687 bytes
-rwxr-xr-xweb/static/images/emoji/koko.pngbin0 -> 2854 bytes
-rwxr-xr-xweb/static/images/emoji/kr.pngbin0 -> 5105 bytes
-rwxr-xr-xweb/static/images/emoji/large_blue_circle.pngbin0 -> 4637 bytes
-rwxr-xr-xweb/static/images/emoji/large_blue_diamond.pngbin0 -> 3790 bytes
-rwxr-xr-xweb/static/images/emoji/large_orange_diamond.pngbin0 -> 3849 bytes
-rwxr-xr-xweb/static/images/emoji/last_quarter_moon.pngbin0 -> 6149 bytes
-rwxr-xr-xweb/static/images/emoji/last_quarter_moon_with_face.pngbin0 -> 4328 bytes
-rwxr-xr-xweb/static/images/emoji/laughing.pngbin0 -> 6347 bytes
-rwxr-xr-xweb/static/images/emoji/leaves.pngbin0 -> 5571 bytes
-rwxr-xr-xweb/static/images/emoji/ledger.pngbin0 -> 5921 bytes
-rwxr-xr-xweb/static/images/emoji/left_luggage.pngbin0 -> 4025 bytes
-rwxr-xr-xweb/static/images/emoji/left_right_arrow.pngbin0 -> 3413 bytes
-rwxr-xr-xweb/static/images/emoji/leftwards_arrow_with_hook.pngbin0 -> 3775 bytes
-rwxr-xr-xweb/static/images/emoji/lemon.pngbin0 -> 6055 bytes
-rwxr-xr-xweb/static/images/emoji/leo.pngbin0 -> 4913 bytes
-rwxr-xr-xweb/static/images/emoji/leopard.pngbin0 -> 5348 bytes
-rwxr-xr-xweb/static/images/emoji/libra.pngbin0 -> 4218 bytes
-rwxr-xr-xweb/static/images/emoji/light_rail.pngbin0 -> 3792 bytes
-rwxr-xr-xweb/static/images/emoji/link.pngbin0 -> 2619 bytes
-rwxr-xr-xweb/static/images/emoji/lips.pngbin0 -> 3738 bytes
-rwxr-xr-xweb/static/images/emoji/lipstick.pngbin0 -> 3384 bytes
-rwxr-xr-xweb/static/images/emoji/lock.pngbin0 -> 3676 bytes
-rwxr-xr-xweb/static/images/emoji/lock_with_ink_pen.pngbin0 -> 4967 bytes
-rwxr-xr-xweb/static/images/emoji/lollipop.pngbin0 -> 5771 bytes
-rwxr-xr-xweb/static/images/emoji/loop.pngbin0 -> 3417 bytes
-rwxr-xr-xweb/static/images/emoji/loudspeaker.pngbin0 -> 6001 bytes
-rwxr-xr-xweb/static/images/emoji/love_hotel.pngbin0 -> 5941 bytes
-rwxr-xr-xweb/static/images/emoji/love_letter.pngbin0 -> 2467 bytes
-rwxr-xr-xweb/static/images/emoji/low_brightness.pngbin0 -> 2498 bytes
-rwxr-xr-xweb/static/images/emoji/m.pngbin0 -> 4734 bytes
-rwxr-xr-xweb/static/images/emoji/mag.pngbin0 -> 3040 bytes
-rwxr-xr-xweb/static/images/emoji/mag_right.pngbin0 -> 3629 bytes
-rwxr-xr-xweb/static/images/emoji/mahjong.pngbin0 -> 3309 bytes
-rwxr-xr-xweb/static/images/emoji/mailbox.pngbin0 -> 4196 bytes
-rwxr-xr-xweb/static/images/emoji/mailbox_closed.pngbin0 -> 4360 bytes
-rwxr-xr-xweb/static/images/emoji/mailbox_with_mail.pngbin0 -> 4581 bytes
-rwxr-xr-xweb/static/images/emoji/mailbox_with_no_mail.pngbin0 -> 3101 bytes
-rwxr-xr-xweb/static/images/emoji/man.pngbin0 -> 6023 bytes
-rwxr-xr-xweb/static/images/emoji/man_with_gua_pi_mao.pngbin0 -> 5324 bytes
-rwxr-xr-xweb/static/images/emoji/man_with_turban.pngbin0 -> 6528 bytes
-rwxr-xr-xweb/static/images/emoji/mans_shoe.pngbin0 -> 4749 bytes
-rwxr-xr-xweb/static/images/emoji/maple_leaf.pngbin0 -> 4450 bytes
-rwxr-xr-xweb/static/images/emoji/mask.pngbin0 -> 5235 bytes
-rwxr-xr-xweb/static/images/emoji/massage.pngbin0 -> 6036 bytes
-rwxr-xr-xweb/static/images/emoji/meat_on_bone.pngbin0 -> 5425 bytes
-rwxr-xr-xweb/static/images/emoji/mega.pngbin0 -> 4680 bytes
-rwxr-xr-xweb/static/images/emoji/melon.pngbin0 -> 8233 bytes
-rwxr-xr-xweb/static/images/emoji/memo.pngbin0 -> 4945 bytes
-rwxr-xr-xweb/static/images/emoji/mens.pngbin0 -> 3368 bytes
-rwxr-xr-xweb/static/images/emoji/metal.pngbin0 -> 3098 bytes
-rwxr-xr-xweb/static/images/emoji/metro.pngbin0 -> 3402 bytes
-rwxr-xr-xweb/static/images/emoji/microphone.pngbin0 -> 3680 bytes
-rwxr-xr-xweb/static/images/emoji/microscope.pngbin0 -> 4130 bytes
-rwxr-xr-xweb/static/images/emoji/milky_way.pngbin0 -> 5878 bytes
-rwxr-xr-xweb/static/images/emoji/minibus.pngbin0 -> 3113 bytes
-rwxr-xr-xweb/static/images/emoji/minidisc.pngbin0 -> 5594 bytes
-rwxr-xr-xweb/static/images/emoji/mobile_phone_off.pngbin0 -> 3521 bytes
-rwxr-xr-xweb/static/images/emoji/money_with_wings.pngbin0 -> 7584 bytes
-rwxr-xr-xweb/static/images/emoji/moneybag.pngbin0 -> 5500 bytes
-rwxr-xr-xweb/static/images/emoji/monkey.pngbin0 -> 4973 bytes
-rwxr-xr-xweb/static/images/emoji/monkey_face.pngbin0 -> 5348 bytes
-rwxr-xr-xweb/static/images/emoji/monorail.pngbin0 -> 4311 bytes
-rwxr-xr-xweb/static/images/emoji/mortar_board.pngbin0 -> 4164 bytes
-rwxr-xr-xweb/static/images/emoji/mount_fuji.pngbin0 -> 5004 bytes
-rwxr-xr-xweb/static/images/emoji/mountain_bicyclist.pngbin0 -> 9511 bytes
-rwxr-xr-xweb/static/images/emoji/mountain_cableway.pngbin0 -> 4405 bytes
-rwxr-xr-xweb/static/images/emoji/mountain_railway.pngbin0 -> 7448 bytes
-rwxr-xr-xweb/static/images/emoji/mouse.pngbin0 -> 6625 bytes
-rwxr-xr-xweb/static/images/emoji/mouse2.pngbin0 -> 4087 bytes
-rwxr-xr-xweb/static/images/emoji/movie_camera.pngbin0 -> 4081 bytes
-rwxr-xr-xweb/static/images/emoji/moyai.pngbin0 -> 2166 bytes
-rwxr-xr-xweb/static/images/emoji/muscle.pngbin0 -> 4672 bytes
-rwxr-xr-xweb/static/images/emoji/mushroom.pngbin0 -> 4887 bytes
-rwxr-xr-xweb/static/images/emoji/musical_keyboard.pngbin0 -> 1944 bytes
-rwxr-xr-xweb/static/images/emoji/musical_note.pngbin0 -> 3188 bytes
-rwxr-xr-xweb/static/images/emoji/musical_score.pngbin0 -> 1497 bytes
-rwxr-xr-xweb/static/images/emoji/mute.pngbin0 -> 6635 bytes
-rwxr-xr-xweb/static/images/emoji/nail_care.pngbin0 -> 5814 bytes
-rwxr-xr-xweb/static/images/emoji/name_badge.pngbin0 -> 3985 bytes
-rwxr-xr-xweb/static/images/emoji/neckbeard.pngbin0 -> 6247 bytes
-rwxr-xr-xweb/static/images/emoji/necktie.pngbin0 -> 6116 bytes
-rwxr-xr-xweb/static/images/emoji/negative_squared_cross_mark.pngbin0 -> 3853 bytes
-rwxr-xr-xweb/static/images/emoji/neutral_face.pngbin0 -> 4843 bytes
-rwxr-xr-xweb/static/images/emoji/new.pngbin0 -> 3927 bytes
-rwxr-xr-xweb/static/images/emoji/new_moon.pngbin0 -> 5276 bytes
-rwxr-xr-xweb/static/images/emoji/new_moon_with_face.pngbin0 -> 6708 bytes
-rwxr-xr-xweb/static/images/emoji/newspaper.pngbin0 -> 5180 bytes
-rwxr-xr-xweb/static/images/emoji/ng.pngbin0 -> 4201 bytes
-rwxr-xr-xweb/static/images/emoji/nine.pngbin0 -> 3776 bytes
-rwxr-xr-xweb/static/images/emoji/no_bell.pngbin0 -> 5944 bytes
-rwxr-xr-xweb/static/images/emoji/no_bicycles.pngbin0 -> 5661 bytes
-rwxr-xr-xweb/static/images/emoji/no_entry.pngbin0 -> 3514 bytes
-rwxr-xr-xweb/static/images/emoji/no_entry_sign.pngbin0 -> 3287 bytes
-rwxr-xr-xweb/static/images/emoji/no_good.pngbin0 -> 7034 bytes
-rwxr-xr-xweb/static/images/emoji/no_mobile_phones.pngbin0 -> 5083 bytes
-rwxr-xr-xweb/static/images/emoji/no_mouth.pngbin0 -> 4632 bytes
-rwxr-xr-xweb/static/images/emoji/no_pedestrians.pngbin0 -> 5485 bytes
-rwxr-xr-xweb/static/images/emoji/no_smoking.pngbin0 -> 4212 bytes
-rwxr-xr-xweb/static/images/emoji/non-potable_water.pngbin0 -> 5202 bytes
-rwxr-xr-xweb/static/images/emoji/nose.pngbin0 -> 3703 bytes
-rwxr-xr-xweb/static/images/emoji/notebook.pngbin0 -> 6001 bytes
-rwxr-xr-xweb/static/images/emoji/notebook_with_decorative_cover.pngbin0 -> 5329 bytes
-rwxr-xr-xweb/static/images/emoji/notes.pngbin0 -> 1536 bytes
-rwxr-xr-xweb/static/images/emoji/nut_and_bolt.pngbin0 -> 2169 bytes
-rwxr-xr-xweb/static/images/emoji/o.pngbin0 -> 2538 bytes
-rwxr-xr-xweb/static/images/emoji/o2.pngbin0 -> 3498 bytes
-rwxr-xr-xweb/static/images/emoji/ocean.pngbin0 -> 5777 bytes
-rwxr-xr-xweb/static/images/emoji/octocat.pngbin0 -> 3738 bytes
-rwxr-xr-xweb/static/images/emoji/octopus.pngbin0 -> 5779 bytes
-rwxr-xr-xweb/static/images/emoji/oden.pngbin0 -> 5543 bytes
-rwxr-xr-xweb/static/images/emoji/office.pngbin0 -> 5156 bytes
-rwxr-xr-xweb/static/images/emoji/ok.pngbin0 -> 4158 bytes
-rwxr-xr-xweb/static/images/emoji/ok_hand.pngbin0 -> 4598 bytes
-rwxr-xr-xweb/static/images/emoji/ok_woman.pngbin0 -> 7527 bytes
-rwxr-xr-xweb/static/images/emoji/older_man.pngbin0 -> 6733 bytes
-rwxr-xr-xweb/static/images/emoji/older_woman.pngbin0 -> 5977 bytes
-rwxr-xr-xweb/static/images/emoji/on.pngbin0 -> 1472 bytes
-rwxr-xr-xweb/static/images/emoji/oncoming_automobile.pngbin0 -> 7469 bytes
-rwxr-xr-xweb/static/images/emoji/oncoming_bus.pngbin0 -> 5305 bytes
-rwxr-xr-xweb/static/images/emoji/oncoming_police_car.pngbin0 -> 5683 bytes
-rwxr-xr-xweb/static/images/emoji/oncoming_taxi.pngbin0 -> 6287 bytes
-rwxr-xr-xweb/static/images/emoji/one.pngbin0 -> 2825 bytes
-rwxr-xr-xweb/static/images/emoji/open_file_folder.pngbin0 -> 4292 bytes
-rwxr-xr-xweb/static/images/emoji/open_hands.pngbin0 -> 4950 bytes
-rwxr-xr-xweb/static/images/emoji/open_mouth.pngbin0 -> 4519 bytes
-rwxr-xr-xweb/static/images/emoji/ophiuchus.pngbin0 -> 4434 bytes
-rwxr-xr-xweb/static/images/emoji/orange_book.pngbin0 -> 5085 bytes
-rwxr-xr-xweb/static/images/emoji/outbox_tray.pngbin0 -> 3683 bytes
-rwxr-xr-xweb/static/images/emoji/ox.pngbin0 -> 5935 bytes
-rwxr-xr-xweb/static/images/emoji/package.pngbin0 -> 8449 bytes
-rwxr-xr-xweb/static/images/emoji/page_facing_up.pngbin0 -> 2178 bytes
-rwxr-xr-xweb/static/images/emoji/page_with_curl.pngbin0 -> 3715 bytes
-rwxr-xr-xweb/static/images/emoji/pager.pngbin0 -> 4022 bytes
-rwxr-xr-xweb/static/images/emoji/palm_tree.pngbin0 -> 3663 bytes
-rwxr-xr-xweb/static/images/emoji/panda_face.pngbin0 -> 4814 bytes
-rwxr-xr-xweb/static/images/emoji/paperclip.pngbin0 -> 2478 bytes
-rwxr-xr-xweb/static/images/emoji/parking.pngbin0 -> 3083 bytes
-rwxr-xr-xweb/static/images/emoji/part_alternation_mark.pngbin0 -> 2681 bytes
-rwxr-xr-xweb/static/images/emoji/partly_sunny.pngbin0 -> 5169 bytes
-rwxr-xr-xweb/static/images/emoji/passport_control.pngbin0 -> 4018 bytes
-rwxr-xr-xweb/static/images/emoji/paw_prints.pngbin0 -> 2471 bytes
-rwxr-xr-xweb/static/images/emoji/peach.pngbin0 -> 5920 bytes
-rwxr-xr-xweb/static/images/emoji/pear.pngbin0 -> 6936 bytes
-rwxr-xr-xweb/static/images/emoji/pencil.pngbin0 -> 4945 bytes
-rwxr-xr-xweb/static/images/emoji/pencil2.pngbin0 -> 4348 bytes
-rwxr-xr-xweb/static/images/emoji/penguin.pngbin0 -> 4746 bytes
-rwxr-xr-xweb/static/images/emoji/pensive.pngbin0 -> 5062 bytes
-rwxr-xr-xweb/static/images/emoji/performing_arts.pngbin0 -> 6287 bytes
-rwxr-xr-xweb/static/images/emoji/persevere.pngbin0 -> 5519 bytes
-rwxr-xr-xweb/static/images/emoji/person_frowning.pngbin0 -> 4826 bytes
-rwxr-xr-xweb/static/images/emoji/person_with_blond_hair.pngbin0 -> 6622 bytes
-rwxr-xr-xweb/static/images/emoji/person_with_pouting_face.pngbin0 -> 5428 bytes
-rwxr-xr-xweb/static/images/emoji/phone.pngbin0 -> 5495 bytes
-rwxr-xr-xweb/static/images/emoji/pig.pngbin0 -> 5996 bytes
-rwxr-xr-xweb/static/images/emoji/pig2.pngbin0 -> 4797 bytes
-rwxr-xr-xweb/static/images/emoji/pig_nose.pngbin0 -> 4761 bytes
-rwxr-xr-xweb/static/images/emoji/pill.pngbin0 -> 5022 bytes
-rwxr-xr-xweb/static/images/emoji/pineapple.pngbin0 -> 5634 bytes
-rwxr-xr-xweb/static/images/emoji/pisces.pngbin0 -> 4441 bytes
-rwxr-xr-xweb/static/images/emoji/pizza.pngbin0 -> 5273 bytes
-rwxr-xr-xweb/static/images/emoji/plus1.pngbin0 -> 5075 bytes
-rwxr-xr-xweb/static/images/emoji/point_down.pngbin0 -> 3225 bytes
-rwxr-xr-xweb/static/images/emoji/point_left.pngbin0 -> 3085 bytes
-rwxr-xr-xweb/static/images/emoji/point_right.pngbin0 -> 3079 bytes
-rwxr-xr-xweb/static/images/emoji/point_up.pngbin0 -> 3431 bytes
-rwxr-xr-xweb/static/images/emoji/point_up_2.pngbin0 -> 3181 bytes
-rwxr-xr-xweb/static/images/emoji/police_car.pngbin0 -> 3349 bytes
-rwxr-xr-xweb/static/images/emoji/poodle.pngbin0 -> 6852 bytes
-rwxr-xr-xweb/static/images/emoji/poop.pngbin0 -> 4754 bytes
-rwxr-xr-xweb/static/images/emoji/post_office.pngbin0 -> 5136 bytes
-rwxr-xr-xweb/static/images/emoji/postal_horn.pngbin0 -> 4735 bytes
-rwxr-xr-xweb/static/images/emoji/postbox.pngbin0 -> 3388 bytes
-rwxr-xr-xweb/static/images/emoji/potable_water.pngbin0 -> 3934 bytes
-rwxr-xr-xweb/static/images/emoji/pouch.pngbin0 -> 4642 bytes
-rwxr-xr-xweb/static/images/emoji/poultry_leg.pngbin0 -> 4200 bytes
-rwxr-xr-xweb/static/images/emoji/pound.pngbin0 -> 4235 bytes
-rwxr-xr-xweb/static/images/emoji/pouting_cat.pngbin0 -> 4918 bytes
-rwxr-xr-xweb/static/images/emoji/pray.pngbin0 -> 6203 bytes
-rwxr-xr-xweb/static/images/emoji/princess.pngbin0 -> 7920 bytes
-rwxr-xr-xweb/static/images/emoji/punch.pngbin0 -> 4833 bytes
-rwxr-xr-xweb/static/images/emoji/purple_heart.pngbin0 -> 4295 bytes
-rwxr-xr-xweb/static/images/emoji/purse.pngbin0 -> 5033 bytes
-rwxr-xr-xweb/static/images/emoji/pushpin.pngbin0 -> 3793 bytes
-rwxr-xr-xweb/static/images/emoji/put_litter_in_its_place.pngbin0 -> 4091 bytes
-rwxr-xr-xweb/static/images/emoji/question.pngbin0 -> 1711 bytes
-rwxr-xr-xweb/static/images/emoji/rabbit.pngbin0 -> 5677 bytes
-rwxr-xr-xweb/static/images/emoji/rabbit2.pngbin0 -> 4425 bytes
-rwxr-xr-xweb/static/images/emoji/racehorse.pngbin0 -> 4735 bytes
-rwxr-xr-xweb/static/images/emoji/radio.pngbin0 -> 6150 bytes
-rwxr-xr-xweb/static/images/emoji/radio_button.pngbin0 -> 2198 bytes
-rwxr-xr-xweb/static/images/emoji/rage.pngbin0 -> 5410 bytes
-rwxr-xr-xweb/static/images/emoji/rage1.pngbin0 -> 1086 bytes
-rwxr-xr-xweb/static/images/emoji/rage2.pngbin0 -> 1098 bytes
-rwxr-xr-xweb/static/images/emoji/rage3.pngbin0 -> 1119 bytes
-rwxr-xr-xweb/static/images/emoji/rage4.pngbin0 -> 1270 bytes
-rwxr-xr-xweb/static/images/emoji/railway_car.pngbin0 -> 3648 bytes
-rwxr-xr-xweb/static/images/emoji/rainbow.pngbin0 -> 5314 bytes
-rwxr-xr-xweb/static/images/emoji/raised_hand.pngbin0 -> 4161 bytes
-rwxr-xr-xweb/static/images/emoji/raised_hands.pngbin0 -> 5375 bytes
-rwxr-xr-xweb/static/images/emoji/raising_hand.pngbin0 -> 6177 bytes
-rwxr-xr-xweb/static/images/emoji/ram.pngbin0 -> 6531 bytes
-rwxr-xr-xweb/static/images/emoji/ramen.pngbin0 -> 6574 bytes
-rwxr-xr-xweb/static/images/emoji/rat.pngbin0 -> 5434 bytes
-rwxr-xr-xweb/static/images/emoji/recycle.pngbin0 -> 3704 bytes
-rwxr-xr-xweb/static/images/emoji/red_car.pngbin0 -> 4278 bytes
-rwxr-xr-xweb/static/images/emoji/red_circle.pngbin0 -> 3946 bytes
-rwxr-xr-xweb/static/images/emoji/registered.pngbin0 -> 1613 bytes
-rwxr-xr-xweb/static/images/emoji/relaxed.pngbin0 -> 5455 bytes
-rwxr-xr-xweb/static/images/emoji/relieved.pngbin0 -> 5364 bytes
-rwxr-xr-xweb/static/images/emoji/repeat.pngbin0 -> 4009 bytes
-rwxr-xr-xweb/static/images/emoji/repeat_one.pngbin0 -> 4287 bytes
-rwxr-xr-xweb/static/images/emoji/restroom.pngbin0 -> 4142 bytes
-rwxr-xr-xweb/static/images/emoji/revolving_hearts.pngbin0 -> 5472 bytes
-rwxr-xr-xweb/static/images/emoji/rewind.pngbin0 -> 3056 bytes
-rwxr-xr-xweb/static/images/emoji/ribbon.pngbin0 -> 5581 bytes
-rwxr-xr-xweb/static/images/emoji/rice.pngbin0 -> 4645 bytes
-rwxr-xr-xweb/static/images/emoji/rice_ball.pngbin0 -> 5371 bytes
-rwxr-xr-xweb/static/images/emoji/rice_cracker.pngbin0 -> 7787 bytes
-rwxr-xr-xweb/static/images/emoji/rice_scene.pngbin0 -> 6261 bytes
-rwxr-xr-xweb/static/images/emoji/ring.pngbin0 -> 5232 bytes
-rwxr-xr-xweb/static/images/emoji/rocket.pngbin0 -> 5388 bytes
-rwxr-xr-xweb/static/images/emoji/roller_coaster.pngbin0 -> 5148 bytes
-rwxr-xr-xweb/static/images/emoji/rooster.pngbin0 -> 6168 bytes
-rwxr-xr-xweb/static/images/emoji/rose.pngbin0 -> 4202 bytes
-rwxr-xr-xweb/static/images/emoji/rotating_light.pngbin0 -> 6620 bytes
-rwxr-xr-xweb/static/images/emoji/round_pushpin.pngbin0 -> 1936 bytes
-rwxr-xr-xweb/static/images/emoji/rowboat.pngbin0 -> 5357 bytes
-rwxr-xr-xweb/static/images/emoji/ru.pngbin0 -> 3920 bytes
-rwxr-xr-xweb/static/images/emoji/rugby_football.pngbin0 -> 7781 bytes
-rwxr-xr-xweb/static/images/emoji/runner.pngbin0 -> 3137 bytes
-rwxr-xr-xweb/static/images/emoji/running.pngbin0 -> 3137 bytes
-rwxr-xr-xweb/static/images/emoji/running_shirt_with_sash.pngbin0 -> 5701 bytes
-rwxr-xr-xweb/static/images/emoji/sa.pngbin0 -> 3556 bytes
-rwxr-xr-xweb/static/images/emoji/sagittarius.pngbin0 -> 4505 bytes
-rwxr-xr-xweb/static/images/emoji/sailboat.pngbin0 -> 3833 bytes
-rwxr-xr-xweb/static/images/emoji/sake.pngbin0 -> 5073 bytes
-rwxr-xr-xweb/static/images/emoji/sandal.pngbin0 -> 3974 bytes
-rwxr-xr-xweb/static/images/emoji/santa.pngbin0 -> 6271 bytes
-rwxr-xr-xweb/static/images/emoji/satellite.pngbin0 -> 4867 bytes
-rwxr-xr-xweb/static/images/emoji/satisfied.pngbin0 -> 6347 bytes
-rwxr-xr-xweb/static/images/emoji/saxophone.pngbin0 -> 4252 bytes
-rwxr-xr-xweb/static/images/emoji/school.pngbin0 -> 5446 bytes
-rwxr-xr-xweb/static/images/emoji/school_satchel.pngbin0 -> 5741 bytes
-rwxr-xr-xweb/static/images/emoji/scissors.pngbin0 -> 3837 bytes
-rwxr-xr-xweb/static/images/emoji/scorpius.pngbin0 -> 4566 bytes
-rwxr-xr-xweb/static/images/emoji/scream.pngbin0 -> 6482 bytes
-rwxr-xr-xweb/static/images/emoji/scream_cat.pngbin0 -> 6844 bytes
-rwxr-xr-xweb/static/images/emoji/scroll.pngbin0 -> 6749 bytes
-rwxr-xr-xweb/static/images/emoji/seat.pngbin0 -> 6059 bytes
-rwxr-xr-xweb/static/images/emoji/secret.pngbin0 -> 5364 bytes
-rwxr-xr-xweb/static/images/emoji/see_no_evil.pngbin0 -> 6828 bytes
-rwxr-xr-xweb/static/images/emoji/seedling.pngbin0 -> 2190 bytes
-rwxr-xr-xweb/static/images/emoji/seven.pngbin0 -> 3055 bytes
-rwxr-xr-xweb/static/images/emoji/shaved_ice.pngbin0 -> 5908 bytes
-rwxr-xr-xweb/static/images/emoji/sheep.pngbin0 -> 4732 bytes
-rwxr-xr-xweb/static/images/emoji/shell.pngbin0 -> 5115 bytes
-rwxr-xr-xweb/static/images/emoji/ship.pngbin0 -> 4233 bytes
-rwxr-xr-xweb/static/images/emoji/shipit.pngbin0 -> 9351 bytes
-rwxr-xr-xweb/static/images/emoji/shirt.pngbin0 -> 4676 bytes
-rwxr-xr-xweb/static/images/emoji/shit.pngbin0 -> 4754 bytes
-rwxr-xr-xweb/static/images/emoji/shoe.pngbin0 -> 4799 bytes
-rwxr-xr-xweb/static/images/emoji/shower.pngbin0 -> 7520 bytes
-rwxr-xr-xweb/static/images/emoji/signal_strength.pngbin0 -> 3231 bytes
-rwxr-xr-xweb/static/images/emoji/six.pngbin0 -> 3791 bytes
-rwxr-xr-xweb/static/images/emoji/six_pointed_star.pngbin0 -> 4854 bytes
-rwxr-xr-xweb/static/images/emoji/ski.pngbin0 -> 4167 bytes
-rwxr-xr-xweb/static/images/emoji/skull.pngbin0 -> 2428 bytes
-rwxr-xr-xweb/static/images/emoji/sleeping.pngbin0 -> 5409 bytes
-rwxr-xr-xweb/static/images/emoji/sleepy.pngbin0 -> 5837 bytes
-rwxr-xr-xweb/static/images/emoji/slot_machine.pngbin0 -> 4605 bytes
-rwxr-xr-xweb/static/images/emoji/small_blue_diamond.pngbin0 -> 1817 bytes
-rwxr-xr-xweb/static/images/emoji/small_orange_diamond.pngbin0 -> 1944 bytes
-rwxr-xr-xweb/static/images/emoji/small_red_triangle.pngbin0 -> 2054 bytes
-rwxr-xr-xweb/static/images/emoji/small_red_triangle_down.pngbin0 -> 2157 bytes
-rwxr-xr-xweb/static/images/emoji/smile.pngbin0 -> 5890 bytes
-rwxr-xr-xweb/static/images/emoji/smile_cat.pngbin0 -> 6117 bytes
-rwxr-xr-xweb/static/images/emoji/smiley.pngbin0 -> 5794 bytes
-rwxr-xr-xweb/static/images/emoji/smiley_cat.pngbin0 -> 6083 bytes
-rwxr-xr-xweb/static/images/emoji/smiling_imp.pngbin0 -> 7189 bytes
-rwxr-xr-xweb/static/images/emoji/smirk.pngbin0 -> 5307 bytes
-rwxr-xr-xweb/static/images/emoji/smirk_cat.pngbin0 -> 6062 bytes
-rwxr-xr-xweb/static/images/emoji/smoking.pngbin0 -> 2875 bytes
-rwxr-xr-xweb/static/images/emoji/snail.pngbin0 -> 6657 bytes
-rwxr-xr-xweb/static/images/emoji/snake.pngbin0 -> 4069 bytes
-rwxr-xr-xweb/static/images/emoji/snowboarder.pngbin0 -> 5356 bytes
-rwxr-xr-xweb/static/images/emoji/snowflake.pngbin0 -> 5637 bytes
-rwxr-xr-xweb/static/images/emoji/snowman.pngbin0 -> 4658 bytes
-rwxr-xr-xweb/static/images/emoji/sob.pngbin0 -> 5709 bytes
-rwxr-xr-xweb/static/images/emoji/soccer.pngbin0 -> 4878 bytes
-rwxr-xr-xweb/static/images/emoji/soon.pngbin0 -> 1551 bytes
-rwxr-xr-xweb/static/images/emoji/sos.pngbin0 -> 4262 bytes
-rwxr-xr-xweb/static/images/emoji/sound.pngbin0 -> 5024 bytes
-rwxr-xr-xweb/static/images/emoji/space_invader.pngbin0 -> 4353 bytes
-rwxr-xr-xweb/static/images/emoji/spades.pngbin0 -> 1719 bytes
-rwxr-xr-xweb/static/images/emoji/spaghetti.pngbin0 -> 6955 bytes
-rwxr-xr-xweb/static/images/emoji/sparkle.pngbin0 -> 8904 bytes
-rwxr-xr-xweb/static/images/emoji/sparkler.pngbin0 -> 5696 bytes
-rwxr-xr-xweb/static/images/emoji/sparkles.pngbin0 -> 2209 bytes
-rwxr-xr-xweb/static/images/emoji/sparkling_heart.pngbin0 -> 5357 bytes
-rwxr-xr-xweb/static/images/emoji/speak_no_evil.pngbin0 -> 5977 bytes
-rwxr-xr-xweb/static/images/emoji/speaker.pngbin0 -> 5173 bytes
-rwxr-xr-xweb/static/images/emoji/speech_balloon.pngbin0 -> 2130 bytes
-rwxr-xr-xweb/static/images/emoji/speedboat.pngbin0 -> 3512 bytes
-rwxr-xr-xweb/static/images/emoji/squirrel.pngbin0 -> 9351 bytes
-rwxr-xr-xweb/static/images/emoji/star.pngbin0 -> 3628 bytes
-rwxr-xr-xweb/static/images/emoji/star2.pngbin0 -> 4068 bytes
-rwxr-xr-xweb/static/images/emoji/stars.pngbin0 -> 4366 bytes
-rwxr-xr-xweb/static/images/emoji/station.pngbin0 -> 4836 bytes
-rwxr-xr-xweb/static/images/emoji/statue_of_liberty.pngbin0 -> 6075 bytes
-rwxr-xr-xweb/static/images/emoji/steam_locomotive.pngbin0 -> 5159 bytes
-rwxr-xr-xweb/static/images/emoji/stew.pngbin0 -> 5365 bytes
-rwxr-xr-xweb/static/images/emoji/straight_ruler.pngbin0 -> 3797 bytes
-rwxr-xr-xweb/static/images/emoji/strawberry.pngbin0 -> 5477 bytes
-rwxr-xr-xweb/static/images/emoji/stuck_out_tongue.pngbin0 -> 5215 bytes
-rwxr-xr-xweb/static/images/emoji/stuck_out_tongue_closed_eyes.pngbin0 -> 5785 bytes
-rwxr-xr-xweb/static/images/emoji/stuck_out_tongue_winking_eye.pngbin0 -> 6007 bytes
-rwxr-xr-xweb/static/images/emoji/sun_with_face.pngbin0 -> 7958 bytes
-rwxr-xr-xweb/static/images/emoji/sunflower.pngbin0 -> 6567 bytes
-rwxr-xr-xweb/static/images/emoji/sunglasses.pngbin0 -> 5730 bytes
-rwxr-xr-xweb/static/images/emoji/sunny.pngbin0 -> 3802 bytes
-rwxr-xr-xweb/static/images/emoji/sunrise.pngbin0 -> 3914 bytes
-rwxr-xr-xweb/static/images/emoji/sunrise_over_mountains.pngbin0 -> 6594 bytes
-rwxr-xr-xweb/static/images/emoji/surfer.pngbin0 -> 6259 bytes
-rwxr-xr-xweb/static/images/emoji/sushi.pngbin0 -> 5257 bytes
-rwxr-xr-xweb/static/images/emoji/suspect.pngbin0 -> 1016 bytes
-rwxr-xr-xweb/static/images/emoji/suspension_railway.pngbin0 -> 3937 bytes
-rwxr-xr-xweb/static/images/emoji/sweat.pngbin0 -> 5576 bytes
-rwxr-xr-xweb/static/images/emoji/sweat_drops.pngbin0 -> 4782 bytes
-rwxr-xr-xweb/static/images/emoji/sweat_smile.pngbin0 -> 6519 bytes
-rwxr-xr-xweb/static/images/emoji/sweet_potato.pngbin0 -> 5551 bytes
-rwxr-xr-xweb/static/images/emoji/swimmer.pngbin0 -> 4378 bytes
-rwxr-xr-xweb/static/images/emoji/symbols.pngbin0 -> 5434 bytes
-rwxr-xr-xweb/static/images/emoji/syringe.pngbin0 -> 3027 bytes
-rwxr-xr-xweb/static/images/emoji/tada.pngbin0 -> 5945 bytes
-rwxr-xr-xweb/static/images/emoji/tanabata_tree.pngbin0 -> 4296 bytes
-rwxr-xr-xweb/static/images/emoji/tangerine.pngbin0 -> 6645 bytes
-rwxr-xr-xweb/static/images/emoji/taurus.pngbin0 -> 4733 bytes
-rwxr-xr-xweb/static/images/emoji/taxi.pngbin0 -> 3744 bytes
-rwxr-xr-xweb/static/images/emoji/tea.pngbin0 -> 5954 bytes
-rwxr-xr-xweb/static/images/emoji/telephone.pngbin0 -> 5495 bytes
-rwxr-xr-xweb/static/images/emoji/telephone_receiver.pngbin0 -> 2001 bytes
-rwxr-xr-xweb/static/images/emoji/telescope.pngbin0 -> 3252 bytes
-rwxr-xr-xweb/static/images/emoji/tennis.pngbin0 -> 5976 bytes
-rwxr-xr-xweb/static/images/emoji/tent.pngbin0 -> 4482 bytes
-rwxr-xr-xweb/static/images/emoji/thought_balloon.pngbin0 -> 2521 bytes
-rwxr-xr-xweb/static/images/emoji/three.pngbin0 -> 3758 bytes
-rwxr-xr-xweb/static/images/emoji/thumbsdown.pngbin0 -> 5070 bytes
-rwxr-xr-xweb/static/images/emoji/thumbsup.pngbin0 -> 5075 bytes
-rwxr-xr-xweb/static/images/emoji/ticket.pngbin0 -> 3091 bytes
-rwxr-xr-xweb/static/images/emoji/tiger.pngbin0 -> 6051 bytes
-rwxr-xr-xweb/static/images/emoji/tiger2.pngbin0 -> 5744 bytes
-rwxr-xr-xweb/static/images/emoji/tired_face.pngbin0 -> 6174 bytes
-rwxr-xr-xweb/static/images/emoji/tm.pngbin0 -> 842 bytes
-rwxr-xr-xweb/static/images/emoji/toilet.pngbin0 -> 1733 bytes
-rwxr-xr-xweb/static/images/emoji/tokyo_tower.pngbin0 -> 4802 bytes
-rwxr-xr-xweb/static/images/emoji/tomato.pngbin0 -> 5748 bytes
-rwxr-xr-xweb/static/images/emoji/tongue.pngbin0 -> 3662 bytes
-rwxr-xr-xweb/static/images/emoji/top.pngbin0 -> 3785 bytes
-rwxr-xr-xweb/static/images/emoji/tophat.pngbin0 -> 3009 bytes
-rwxr-xr-xweb/static/images/emoji/tractor.pngbin0 -> 5671 bytes
-rwxr-xr-xweb/static/images/emoji/traffic_light.pngbin0 -> 3535 bytes
-rwxr-xr-xweb/static/images/emoji/train.pngbin0 -> 3905 bytes
-rwxr-xr-xweb/static/images/emoji/train2.pngbin0 -> 4817 bytes
-rwxr-xr-xweb/static/images/emoji/tram.pngbin0 -> 4869 bytes
-rwxr-xr-xweb/static/images/emoji/triangular_flag_on_post.pngbin0 -> 1399 bytes
-rwxr-xr-xweb/static/images/emoji/triangular_ruler.pngbin0 -> 2706 bytes
-rwxr-xr-xweb/static/images/emoji/trident.pngbin0 -> 4833 bytes
-rwxr-xr-xweb/static/images/emoji/triumph.pngbin0 -> 6164 bytes
-rwxr-xr-xweb/static/images/emoji/trolleybus.pngbin0 -> 4431 bytes
-rwxr-xr-xweb/static/images/emoji/trollface.pngbin0 -> 4901 bytes
-rwxr-xr-xweb/static/images/emoji/trophy.pngbin0 -> 5520 bytes
-rwxr-xr-xweb/static/images/emoji/tropical_drink.pngbin0 -> 4189 bytes
-rwxr-xr-xweb/static/images/emoji/tropical_fish.pngbin0 -> 5846 bytes
-rwxr-xr-xweb/static/images/emoji/truck.pngbin0 -> 3721 bytes
-rwxr-xr-xweb/static/images/emoji/trumpet.pngbin0 -> 4373 bytes
-rwxr-xr-xweb/static/images/emoji/tshirt.pngbin0 -> 4676 bytes
-rwxr-xr-xweb/static/images/emoji/tulip.pngbin0 -> 6065 bytes
-rwxr-xr-xweb/static/images/emoji/turtle.pngbin0 -> 5336 bytes
-rwxr-xr-xweb/static/images/emoji/tv.pngbin0 -> 5242 bytes
-rwxr-xr-xweb/static/images/emoji/twisted_rightwards_arrows.pngbin0 -> 4313 bytes
-rwxr-xr-xweb/static/images/emoji/two.pngbin0 -> 3518 bytes
-rwxr-xr-xweb/static/images/emoji/two_hearts.pngbin0 -> 3565 bytes
-rwxr-xr-xweb/static/images/emoji/two_men_holding_hands.pngbin0 -> 6994 bytes
-rwxr-xr-xweb/static/images/emoji/two_women_holding_hands.pngbin0 -> 7633 bytes
-rwxr-xr-xweb/static/images/emoji/u5272.pngbin0 -> 4533 bytes
-rwxr-xr-xweb/static/images/emoji/u5408.pngbin0 -> 3890 bytes
-rwxr-xr-xweb/static/images/emoji/u55b6.pngbin0 -> 3411 bytes
-rwxr-xr-xweb/static/images/emoji/u6307.pngbin0 -> 4103 bytes
-rwxr-xr-xweb/static/images/emoji/u6708.pngbin0 -> 3011 bytes
-rwxr-xr-xweb/static/images/emoji/u6709.pngbin0 -> 3198 bytes
-rwxr-xr-xweb/static/images/emoji/u6e80.pngbin0 -> 4419 bytes
-rwxr-xr-xweb/static/images/emoji/u7121.pngbin0 -> 3942 bytes
-rwxr-xr-xweb/static/images/emoji/u7533.pngbin0 -> 3048 bytes
-rwxr-xr-xweb/static/images/emoji/u7981.pngbin0 -> 5175 bytes
-rwxr-xr-xweb/static/images/emoji/u7a7a.pngbin0 -> 4180 bytes
-rwxr-xr-xweb/static/images/emoji/uk.pngbin0 -> 5894 bytes
-rwxr-xr-xweb/static/images/emoji/umbrella.pngbin0 -> 4745 bytes
-rwxr-xr-xweb/static/images/emoji/unamused.pngbin0 -> 5315 bytes
-rwxr-xr-xweb/static/images/emoji/underage.pngbin0 -> 5722 bytes
-rwxr-xr-xweb/static/images/emoji/unlock.pngbin0 -> 3551 bytes
-rwxr-xr-xweb/static/images/emoji/up.pngbin0 -> 3721 bytes
-rwxr-xr-xweb/static/images/emoji/us.pngbin0 -> 6285 bytes
-rwxr-xr-xweb/static/images/emoji/v.pngbin0 -> 4669 bytes
-rwxr-xr-xweb/static/images/emoji/vertical_traffic_light.pngbin0 -> 3422 bytes
-rwxr-xr-xweb/static/images/emoji/vhs.pngbin0 -> 3145 bytes
-rwxr-xr-xweb/static/images/emoji/vibration_mode.pngbin0 -> 3906 bytes
-rwxr-xr-xweb/static/images/emoji/video_camera.pngbin0 -> 5090 bytes
-rwxr-xr-xweb/static/images/emoji/video_game.pngbin0 -> 4947 bytes
-rwxr-xr-xweb/static/images/emoji/violin.pngbin0 -> 4915 bytes
-rwxr-xr-xweb/static/images/emoji/virgo.pngbin0 -> 4869 bytes
-rwxr-xr-xweb/static/images/emoji/volcano.pngbin0 -> 6167 bytes
-rwxr-xr-xweb/static/images/emoji/vs.pngbin0 -> 3424 bytes
-rwxr-xr-xweb/static/images/emoji/walking.pngbin0 -> 2468 bytes
-rwxr-xr-xweb/static/images/emoji/waning_crescent_moon.pngbin0 -> 5885 bytes
-rwxr-xr-xweb/static/images/emoji/waning_gibbous_moon.pngbin0 -> 6443 bytes
-rwxr-xr-xweb/static/images/emoji/warning.pngbin0 -> 3173 bytes
-rwxr-xr-xweb/static/images/emoji/watch.pngbin0 -> 5189 bytes
-rwxr-xr-xweb/static/images/emoji/water_buffalo.pngbin0 -> 4774 bytes
-rwxr-xr-xweb/static/images/emoji/watermelon.pngbin0 -> 5501 bytes
-rwxr-xr-xweb/static/images/emoji/wave.pngbin0 -> 5046 bytes
-rwxr-xr-xweb/static/images/emoji/wavy_dash.pngbin0 -> 696 bytes
-rwxr-xr-xweb/static/images/emoji/waxing_crescent_moon.pngbin0 -> 6198 bytes
-rwxr-xr-xweb/static/images/emoji/waxing_gibbous_moon.pngbin0 -> 6357 bytes
-rwxr-xr-xweb/static/images/emoji/wc.pngbin0 -> 4088 bytes
-rwxr-xr-xweb/static/images/emoji/weary.pngbin0 -> 6279 bytes
-rwxr-xr-xweb/static/images/emoji/wedding.pngbin0 -> 5847 bytes
-rwxr-xr-xweb/static/images/emoji/whale.pngbin0 -> 4940 bytes
-rwxr-xr-xweb/static/images/emoji/whale2.pngbin0 -> 5944 bytes
-rwxr-xr-xweb/static/images/emoji/wheelchair.pngbin0 -> 4224 bytes
-rwxr-xr-xweb/static/images/emoji/white_check_mark.pngbin0 -> 3445 bytes
-rwxr-xr-xweb/static/images/emoji/white_circle.pngbin0 -> 2477 bytes
-rwxr-xr-xweb/static/images/emoji/white_flower.pngbin0 -> 4391 bytes
-rwxr-xr-xweb/static/images/emoji/white_large_square.pngbin0 -> 1411 bytes
-rwxr-xr-xweb/static/images/emoji/white_medium_small_square.pngbin0 -> 3598 bytes
-rwxr-xr-xweb/static/images/emoji/white_medium_square.pngbin0 -> 4192 bytes
-rwxr-xr-xweb/static/images/emoji/white_small_square.pngbin0 -> 3068 bytes
-rwxr-xr-xweb/static/images/emoji/white_square_button.pngbin0 -> 1725 bytes
-rwxr-xr-xweb/static/images/emoji/wind_chime.pngbin0 -> 3487 bytes
-rwxr-xr-xweb/static/images/emoji/wine_glass.pngbin0 -> 3151 bytes
-rwxr-xr-xweb/static/images/emoji/wink.pngbin0 -> 5253 bytes
-rwxr-xr-xweb/static/images/emoji/wolf.pngbin0 -> 4845 bytes
-rwxr-xr-xweb/static/images/emoji/woman.pngbin0 -> 6895 bytes
-rwxr-xr-xweb/static/images/emoji/womans_clothes.pngbin0 -> 4075 bytes
-rwxr-xr-xweb/static/images/emoji/womans_hat.pngbin0 -> 8101 bytes
-rwxr-xr-xweb/static/images/emoji/womens.pngbin0 -> 3892 bytes
-rwxr-xr-xweb/static/images/emoji/worried.pngbin0 -> 5152 bytes
-rwxr-xr-xweb/static/images/emoji/wrench.pngbin0 -> 2775 bytes
-rwxr-xr-xweb/static/images/emoji/x.pngbin0 -> 2044 bytes
-rwxr-xr-xweb/static/images/emoji/yellow_heart.pngbin0 -> 4414 bytes
-rwxr-xr-xweb/static/images/emoji/yen.pngbin0 -> 4989 bytes
-rwxr-xr-xweb/static/images/emoji/yum.pngbin0 -> 5886 bytes
-rwxr-xr-xweb/static/images/emoji/zap.pngbin0 -> 2233 bytes
-rwxr-xr-xweb/static/images/emoji/zero.pngbin0 -> 3590 bytes
-rwxr-xr-xweb/static/images/emoji/zzz.pngbin0 -> 2027 bytes
-rw-r--r--web/static/js/bootstrap-3.3.1.min.js7
-rw-r--r--web/static/js/bootstrap-3.3.5.js (renamed from web/static/js/bootstrap-3.3.1.js)475
-rw-r--r--web/static/js/bootstrap-3.3.5.min.js7
-rwxr-xr-xweb/static/js/emojify.min.js4
-rw-r--r--web/static/js/jasny-bootstrap.js1024
-rw-r--r--web/static/js/jasny-bootstrap.min.js6
-rwxr-xr-xweb/static/js/perfect-scrollbar-0.6.3.jquery.min.js2
-rwxr-xr-xweb/static/js/perfect-scrollbar-0.6.5.jquery.js (renamed from web/static/js/perfect-scrollbar-0.6.3.jquery.js)65
-rwxr-xr-xweb/static/js/perfect-scrollbar-0.6.5.jquery.min.js2
-rw-r--r--web/static/js/react-bootstrap-0.25.1.js15678
-rw-r--r--web/static/js/react-bootstrap-0.25.1.min.js13
-rw-r--r--web/static/js/react-with-addons-0.13.1.min.js16
-rw-r--r--web/static/js/react-with-addons-0.13.3.js (renamed from web/static/js/react-with-addons-0.13.1.js)144
-rw-r--r--web/static/js/react-with-addons-0.13.3.min.js18
-rw-r--r--web/templates/admin_console.html24
-rw-r--r--web/templates/authorize.html26
-rw-r--r--web/templates/channel.html3
-rw-r--r--web/templates/footer.html10
-rw-r--r--web/templates/head.html52
-rw-r--r--web/templates/home.html2
-rw-r--r--web/templates/login.html2
-rw-r--r--web/templates/password_reset.html2
-rw-r--r--web/templates/signup_team.html4
-rw-r--r--web/templates/signup_team_complete.html2
-rw-r--r--web/templates/signup_user_complete.html2
-rw-r--r--web/templates/verify.html2
-rw-r--r--web/templates/welcome.html2
-rw-r--r--web/web.go257
-rw-r--r--web/web_test.go134
1006 files changed, 21358 insertions, 1531 deletions
diff --git a/web/react/.eslintrc b/web/react/.eslintrc
index 53cc75913..c0d0bb200 100644
--- a/web/react/.eslintrc
+++ b/web/react/.eslintrc
@@ -18,7 +18,8 @@
"es6": true
},
"globals": {
- "React": false
+ "React": false,
+ "ReactBootstrap": false
},
"rules": {
"comma-dangle": [2, "never"],
diff --git a/web/react/components/admin_console/admin_controller.jsx b/web/react/components/admin_console/admin_controller.jsx
new file mode 100644
index 000000000..68984c9e0
--- /dev/null
+++ b/web/react/components/admin_console/admin_controller.jsx
@@ -0,0 +1,62 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var AdminSidebar = require('./admin_sidebar.jsx');
+var EmailTab = require('./email_settings.jsx');
+var JobsTab = require('./jobs_settings.jsx');
+var LogsTab = require('./logs.jsx');
+var Navbar = require('../../components/navbar.jsx');
+
+export default class AdminController extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.selectTab = this.selectTab.bind(this);
+
+ this.state = {
+ selected: 'email_settings'
+ };
+ }
+
+ selectTab(tab) {
+ this.setState({selected: tab});
+ }
+
+ render() {
+ var tab = '';
+
+ if (this.state.selected === 'email_settings') {
+ tab = <EmailTab />;
+ } else if (this.state.selected === 'job_settings') {
+ tab = <JobsTab />;
+ } else if (this.state.selected === 'logs') {
+ tab = <LogsTab />;
+ }
+
+ return (
+ <div className='container-fluid'>
+ <div
+ className='sidebar--menu'
+ id='sidebar-menu'
+ />
+ <AdminSidebar
+ selected={this.state.selected}
+ selectTab={this.selectTab}
+ />
+ <div className='inner__wrap channel__wrap'>
+ <div className='row header'>
+ <Navbar teamDisplayName='Admin Console' />
+ </div>
+ <div className='row main'>
+ <div
+ id='app-content'
+ className='app__content admin'
+ >
+ {tab}
+ </div>
+ </div>
+ </div>
+ </div>
+ );
+ }
+} \ No newline at end of file
diff --git a/web/react/components/admin_console/admin_sidebar.jsx b/web/react/components/admin_console/admin_sidebar.jsx
new file mode 100644
index 000000000..a04bceef5
--- /dev/null
+++ b/web/react/components/admin_console/admin_sidebar.jsx
@@ -0,0 +1,205 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var SidebarHeader = require('../sidebar_header.jsx');
+
+export default class AdminSidebar extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.isSelected = this.isSelected.bind(this);
+ this.handleClick = this.handleClick.bind(this);
+
+ this.state = {
+ };
+ }
+
+ handleClick(name) {
+ this.props.selectTab(name);
+ }
+
+ isSelected(name) {
+ if (this.props.selected === name) {
+ return 'active';
+ }
+
+ return '';
+ }
+
+ componentDidMount() {
+ $('.nav__menu-item').on('click', function clickme(e) {
+ e.preventDefault();
+ $(this).closest('.sidebar--collapsable').find('.nav__menu-item').removeClass('active');
+ $(this).addClass('active');
+ $(this).closest('.sidebar--collapsable').find('.nav__sub-menu').addClass('hide');
+ $(this).next('.nav__sub-menu').removeClass('hide');
+ });
+
+ $('.nav__sub-menu a').on('click', function clickme(e) {
+ e.preventDefault();
+ $(this).closest('.nav__sub-menu').find('a').removeClass('active');
+ $(this).addClass('active');
+ });
+
+ $('.nav__sub-menu-item').on('click', function clickme(e) {
+ e.preventDefault();
+ $(this).closest('.sidebar--collapsable').find('.nav__inner-menu').addClass('hide');
+ $(this).closest('li').next('li').find('.nav__inner-menu').removeClass('hide');
+ $(this).closest('li').next('li').find('.nav__inner-menu li:first a').addClass('active');
+ });
+
+ $('.nav__inner-menu a').on('click', function clickme() {
+ $(this).closest('.nav__inner-menu').closest('li').prev('li').find('a').addClass('active');
+ });
+
+ $('.nav__sub-menu .menu__close').on('click', function close() {
+ var menuItem = $(this).closest('li');
+ menuItem.next('li').remove();
+ menuItem.remove();
+ });
+ }
+
+ render() {
+ return (
+ <div className='sidebar--left sidebar--collapsable'>
+ <div>
+ <SidebarHeader
+ teamDisplayName='Admin Console'
+ teamType='I'
+ />
+ <ul className='nav nav-pills nav-stacked'>
+ <li>
+ <a href='#'
+ className='nav__menu-item active'
+ >
+ <span className='icon fa fa-gear'></span> <span>{'Basic Settings'}</span></a>
+ <ul className='nav nav__sub-menu'>
+ <li>
+ <a
+ href='#'
+ className={this.isSelected('email_settings')}
+ onClick={this.handleClick.bind(null, 'email_settings')}
+ >
+ {'Email Settings'}
+ </a>
+ </li>
+ <li>
+ <a
+ href='#'
+ className={this.isSelected('logs')}
+ onClick={this.handleClick.bind(null, 'logs')}
+ >
+ {'Logs'}
+ </a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a
+ href='#'
+ className='nav__menu-item'
+ >
+ <span className='icon fa fa-gear'></span> <span>{'Jobs'}</span>
+ </a>
+ <ul className='nav nav__sub-menu hide'>
+ <li>
+ <a
+ href='#'
+ className={this.isSelected('job_settings')}
+ onClick={this.handleClick.bind(null, 'job_settings')}
+ >
+ {'Job Settings'}
+ </a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a
+ href='#'
+ className='nav__menu-item'
+ >
+ <span className='icon fa fa-gear'></span>
+ <span>{'Team Settings (306)'}</span>
+ <span className='menu-icon--right'>
+ <i className='fa fa-plus'></i>
+ </span>
+ </a>
+ <ul className='nav nav__sub-menu hide'>
+ <li>
+ <a
+ href='#'
+ className='nav__sub-menu-item active'
+ >
+ {'Adal '}
+ <span className='menu-icon--right menu__close'>{'x'}</span>
+ </a>
+ </li>
+ <li>
+ <ul className='nav nav__inner-menu'>
+ <li>
+ <a
+ href='#'
+ className='active'
+ >
+ {'- Users'}
+ </a>
+ </li>
+ <li><a href='#'>{'- View Statistics'}</a></li>
+ <li>
+ <a href='#'>
+ {'- View Audit Log'}
+ <span className='badge pull-right small'>{'1'}</span>
+ </a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a
+ href='#'
+ className='nav__sub-menu-item'
+ >
+ {'Boole '}
+ <span className='menu-icon--right menu__close'>{'x'}</span>
+ </a>
+ </li>
+ <li>
+ <ul className='nav nav__inner-menu hide'>
+ <li>
+ <a
+ href='#'
+ className='active'
+ >
+ {'- Users'}
+ </a>
+ </li>
+ <li><a href='#'>{'- View Statistics'}</a></li>
+ <li>
+ <a href='#'>
+ {'- View Audit Log'}
+ <span className='badge pull-right small'>{'1'}</span>
+ </a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <span
+ data-toggle='modal'
+ data-target='#select-team'
+ className='nav-more'
+ >
+ {'Select a team'}
+ </span>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+ );
+ }
+}
+
+AdminSidebar.propTypes = {
+ selected: React.PropTypes.string,
+ selectTab: React.PropTypes.func
+}; \ No newline at end of file
diff --git a/web/react/components/admin_console/email_settings.jsx b/web/react/components/admin_console/email_settings.jsx
new file mode 100644
index 000000000..e8fb25858
--- /dev/null
+++ b/web/react/components/admin_console/email_settings.jsx
@@ -0,0 +1,311 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+export default class EmailSettings extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ };
+ }
+
+ render() {
+ return (
+ <div className='wrapper--fixed'>
+ <h3>{'Email Settings'}</h3>
+ <form
+ className='form-horizontal'
+ role='form'
+ >
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='email'
+ >
+ {'Bypass Email: '}
+ <a
+ href='#'
+ data-trigger='hover click'
+ data-toggle='popover'
+ data-position='bottom'
+ data-content={'Here\'s some more help text inside a popover for the Bypass Email field just to show how popovers look.'}
+ >
+ {'(?)'}
+ </a>
+ </label>
+ <div className='col-sm-8'>
+ <label className='radio-inline'>
+ <input
+ type='radio'
+ name='byPassEmail'
+ value='option1'
+ />
+ {'True'}
+ </label>
+ <label className='radio-inline'>
+ <input
+ type='radio'
+ name='byPassEmail'
+ value='option2'
+ />
+ {'False'}
+ </label>
+ <p className='help-text'>{'This is some sample help text for the Bypass Email field'}</p>
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='smtpUsername'
+ >
+ {'SMTP Username:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='email'
+ className='form-control'
+ id='smtpUsername'
+ placeholder='Enter your SMTP username'
+ value=''
+ />
+ <div className='help-text'>
+ <div className='alert alert-warning'><i className='fa fa-warning'></i>{' This is some error text for the Bypass Email field'}</div>
+ </div>
+ <p className='help-text'>{'This is some sample help text for the SMTP username field'}</p>
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='smtpPassword'
+ >
+ {'SMTP Password:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='password'
+ className='form-control'
+ id='smtpPassword'
+ placeholder='Enter your SMTP password'
+ value=''
+ />
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='smtpServer'
+ >
+ {'SMTP Server:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='text'
+ className='form-control'
+ id='smtpServer'
+ placeholder='Enter your SMTP server'
+ value=''
+ />
+ <div className='help-text'>
+ <a
+ href='#'
+ className='help-link'
+ >
+ {'Test Connection'}
+ </a>
+ <div className='alert alert-success'><i className='fa fa-check'></i>{' Connection successful'}</div>
+ <div className='alert alert-warning hide'><i className='fa fa-warning'></i>{' Connection unsuccessful'}</div>
+ </div>
+ </div>
+ </div>
+ <div className='form-group'>
+ <label className='control-label col-sm-4'>{'Use TLS:'}</label>
+ <div className='col-sm-8'>
+ <label className='radio-inline'>
+ <input
+ type='radio'
+ name='tls'
+ value='option1'
+ />
+ {'True'}
+ </label>
+ <label className='radio-inline'>
+ <input
+ type='radio'
+ name='tls'
+ value='option2'
+ />
+ {'False'}
+ </label>
+ </div>
+ </div>
+ <div className='form-group'>
+ <label className='control-label col-sm-4'>{'Use Start TLS:'}</label>
+ <div className='col-sm-8'>
+ <label className='radio-inline'>
+ <input
+ type='radio'
+ name='starttls'
+ value='option1'
+ />
+ {'True'}
+ </label>
+ <label className='radio-inline'>
+ <input
+ type='radio'
+ name='starttls'
+ value='option2'
+ />
+ {'False'}
+ </label>
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='feedbackEmail'
+ >
+ {'Feedback Email:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='text'
+ className='form-control'
+ id='feedbackEmail'
+ placeholder='Enter your feedback email'
+ value=''
+ />
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='feedbackUsername'
+ >
+ {'Feedback Username:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='text'
+ className='form-control'
+ id='feedbackUsername'
+ placeholder='Enter your feedback username'
+ value=''
+ />
+ </div>
+ </div>
+ <div className='form-group'>
+ <div className='col-sm-offset-4 col-sm-8'>
+ <div className='checkbox'>
+ <label><input type='checkbox' />{'Remember me'}</label>
+ </div>
+ </div>
+ </div>
+
+ <div
+ className='panel-group'
+ id='accordion'
+ role='tablist'
+ aria-multiselectable='true'
+ >
+ <div className='panel panel-default'>
+ <div
+ className='panel-heading'
+ role='tab'
+ id='headingOne'
+ >
+ <h3 className='panel-title'>
+ <a
+ className='collapsed'
+ role='button'
+ data-toggle='collapse'
+ data-parent='#accordion'
+ href='#collapseOne'
+ aria-expanded='true'
+ aria-controls='collapseOne'
+ >
+ {'Advanced Settings '}
+ <i className='fa fa-plus'></i>
+ <i className='fa fa-minus'></i>
+ </a>
+ </h3>
+ </div>
+ <div
+ id='collapseOne'
+ className='panel-collapse collapse'
+ role='tabpanel'
+ aria-labelledby='headingOne'
+ >
+ <div className='panel-body'>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='feedbackUsername'
+ >
+ {'Apple push server:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='text'
+ className='form-control'
+ id='feedbackUsername'
+ placeholder='Enter your Apple push server'
+ value=''
+ />
+ <p className='help-text'>{'This is some sample help text for the Apple push server field'}</p>
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='feedbackUsername'
+ >
+ {'Apple push certificate public:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='text'
+ className='form-control'
+ id='feedbackUsername'
+ placeholder='Enter your public apple push certificate'
+ value=''
+ />
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='feedbackUsername'
+ >
+ {'Apple push certificate private:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='text'
+ className='form-control'
+ id='feedbackUsername'
+ placeholder='Enter your private apple push certificate'
+ value=''
+ />
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div className='form-group'>
+ <div className='col-sm-12'>
+ <button
+ type='submit'
+ className='btn btn-primary'
+ >
+ {'Save'}
+ </button>
+ </div>
+ </div>
+ </form>
+ </div>
+ );
+ }
+} \ No newline at end of file
diff --git a/web/react/components/admin_console/jobs_settings.jsx b/web/react/components/admin_console/jobs_settings.jsx
new file mode 100644
index 000000000..0b4fc4185
--- /dev/null
+++ b/web/react/components/admin_console/jobs_settings.jsx
@@ -0,0 +1,183 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+export default class Jobs extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ };
+ }
+
+ render() {
+ return (
+ <div className='wrapper--fixed'>
+ <h3>{' ************** JOB Settings'}</h3>
+ <form
+ className='form-horizontal'
+ role='form'
+ >
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='email'
+ >
+ {'Bypass Email: '}
+ <a
+ href='#'
+ data-trigger='hover click'
+ data-toggle='popover'
+ data-position='bottom'
+ data-content={'Here\'s some more help text inside a popover for the Bypass Email field just to show how popovers look.'}
+ >
+ {'(?)'}
+ </a>
+ </label>
+ <div className='col-sm-8'>
+ <label className='radio-inline'>
+ <input
+ type='radio'
+ name='byPassEmail'
+ value='option1'
+ />
+ {'True'}
+ </label>
+ <label className='radio-inline'>
+ <input
+ type='radio'
+ name='byPassEmail'
+ value='option2'
+ />
+ {'False'}
+ </label>
+ <p className='help-text'>{'This is some sample help text for the Bypass Email field'}</p>
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='smtpUsername'
+ >
+ {'SMTP Username:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='email'
+ className='form-control'
+ id='smtpUsername'
+ placeholder='Enter your SMTP username'
+ value=''
+ />
+ <div className='help-text'>
+ <div className='alert alert-warning'><i className='fa fa-warning'></i>{' This is some error text for the Bypass Email field'}</div>
+ </div>
+ <p className='help-text'>{'This is some sample help text for the SMTP username field'}</p>
+ </div>
+ </div>
+ <div
+ className='panel-group'
+ id='accordion'
+ role='tablist'
+ aria-multiselectable='true'
+ >
+ <div className='panel panel-default'>
+ <div
+ className='panel-heading'
+ role='tab'
+ id='headingOne'
+ >
+ <h3 className='panel-title'>
+ <a
+ className='collapsed'
+ role='button'
+ data-toggle='collapse'
+ data-parent='#accordion'
+ href='#collapseOne'
+ aria-expanded='true'
+ aria-controls='collapseOne'
+ >
+ {'Advanced Settings '}
+ <i className='fa fa-plus'></i>
+ <i className='fa fa-minus'></i>
+ </a>
+ </h3>
+ </div>
+ <div
+ id='collapseOne'
+ className='panel-collapse collapse'
+ role='tabpanel'
+ aria-labelledby='headingOne'
+ >
+ <div className='panel-body'>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='feedbackUsername'
+ >
+ {'Apple push server:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='text'
+ className='form-control'
+ id='feedbackUsername'
+ placeholder='Enter your Apple push server'
+ value=''
+ />
+ <p className='help-text'>{'This is some sample help text for the Apple push server field'}</p>
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='feedbackUsername'
+ >
+ {'Apple push certificate public:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='text'
+ className='form-control'
+ id='feedbackUsername'
+ placeholder='Enter your public apple push certificate'
+ value=''
+ />
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ htmlFor='feedbackUsername'
+ >
+ {'Apple push certificate private:'}
+ </label>
+ <div className='col-sm-8'>
+ <input
+ type='text'
+ className='form-control'
+ id='feedbackUsername'
+ placeholder='Enter your private apple push certificate'
+ value=''
+ />
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div className='form-group'>
+ <div className='col-sm-12'>
+ <button
+ type='submit'
+ className='btn btn-primary'
+ >
+ {'Save'}
+ </button>
+ </div>
+ </div>
+ </form>
+ </div>
+ );
+ }
+} \ No newline at end of file
diff --git a/web/react/components/admin_console/logs.jsx b/web/react/components/admin_console/logs.jsx
new file mode 100644
index 000000000..d7de76a94
--- /dev/null
+++ b/web/react/components/admin_console/logs.jsx
@@ -0,0 +1,88 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var AdminStore = require('../../stores/admin_store.jsx');
+var LoadingScreen = require('../loading_screen.jsx');
+var AsyncClient = require('../../utils/async_client.jsx');
+
+export default class Logs extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.onLogListenerChange = this.onLogListenerChange.bind(this);
+ this.reload = this.reload.bind(this);
+
+ this.state = {
+ logs: AdminStore.getLogs()
+ };
+ }
+
+ componentDidMount() {
+ AdminStore.addLogChangeListener(this.onLogListenerChange);
+ AsyncClient.getLogs();
+ }
+ componentWillUnmount() {
+ AdminStore.removeLogChangeListener(this.onLogListenerChange);
+ }
+ onLogListenerChange() {
+ this.setState({
+ logs: AdminStore.getLogs()
+ });
+ }
+
+ reload() {
+ AdminStore.saveLogs(null);
+ this.setState({
+ logs: null
+ });
+
+ AsyncClient.getLogs();
+ }
+
+ render() {
+ var content = null;
+
+ if (this.state.logs === null) {
+ content = <LoadingScreen />;
+ } else {
+ content = [];
+
+ for (var i = 0; i < this.state.logs.length; i++) {
+ var style = {
+ whiteSpace: 'nowrap',
+ fontFamily: 'monospace'
+ };
+
+ if (this.state.logs[i].indexOf('[EROR]') > 0) {
+ style.color = 'red';
+ }
+
+ content.push(<br key={'br_' + i} />);
+ content.push(
+ <span
+ key={'log_' + i}
+ style={style}
+ >
+ {this.state.logs[i]}
+ </span>
+ );
+ }
+ }
+
+ return (
+ <div className='panel'>
+ <h3>{'Server Logs'}</h3>
+ <button
+ type='submit'
+ className='btn btn-primary'
+ onClick={this.reload}
+ >
+ {'Reload'}
+ </button>
+ <div className='log__panel'>
+ {content}
+ </div>
+ </div>
+ );
+ }
+} \ No newline at end of file
diff --git a/web/react/components/admin_console/select_team_modal.jsx b/web/react/components/admin_console/select_team_modal.jsx
new file mode 100644
index 000000000..fa30de7b2
--- /dev/null
+++ b/web/react/components/admin_console/select_team_modal.jsx
@@ -0,0 +1,124 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+export default class SelectTeam extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ };
+ }
+
+ render() {
+ return (
+ <div className='modal fade'
+ id='select-team'
+ tabIndex='-1'
+ role='dialog'
+ aria-labelledby='teamsModalLabel'
+ >
+ <div className='modal-dialog'
+ role='document'
+ >
+ <div className='modal-content'>
+ <div className='modal-header'>
+ <button
+ type='button'
+ className='close'
+ data-dismiss='modal'
+ aria-label='Close'
+ >
+ <span aria-hidden='true'>&times;</span>
+ </button>
+ <h4
+ className='modal-title'
+ id='teamsModalLabel'
+ >
+ {'Select a team'}
+ </h4>
+ </div>
+ <div className='modal-body'>
+ <table className='more-channel-table table'>
+ <tbody>
+ <tr>
+ <td>
+ <p className='more-channel-name'>{'Descartes'}</p>
+ </td>
+ <td className='td--action'>
+ <button className='btn btn-primary'>{'Join'}</button>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p className='more-channel-name'>{'Grouping'}</p>
+ </td>
+ <td className='td--action'>
+ <button className='btn btn-primary'>{'Join'}</button>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p className='more-channel-name'>{'Adventure'}</p>
+ </td>
+ <td className='td--action'>
+ <button className='btn btn-primary'>{'Join'}</button>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p className='more-channel-name'>{'Crossroads'}</p>
+ </td>
+ <td className='td--action'>
+ <button className='btn btn-primary'>{'Join'}</button>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p className='more-channel-name'>{'Sky scraping'}</p>
+ </td>
+ <td className='td--action'>
+ <button className='btn btn-primary'>{'Join'}</button>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p className='more-channel-name'>{'Outdoors'}</p>
+ </td>
+ <td className='td--action'>
+ <button className='btn btn-primary'>{'Join'}</button>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p className='more-channel-name'>{'Microsoft'}</p>
+ </td>
+ <td className='td--action'>
+ <button className='btn btn-primary'>{'Join'}</button>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p className='more-channel-name'>{'Apple'}</p>
+ </td>
+ <td className='td--action'>
+ <button className='btn btn-primary'>{'Join'}</button>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div className='modal-footer'>
+ <button
+ type='button'
+ className='btn btn-default'
+ data-dismiss='modal'
+ >
+ {'Close'}
+ </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ );
+ }
+} \ No newline at end of file
diff --git a/web/react/components/authorize.jsx b/web/react/components/authorize.jsx
new file mode 100644
index 000000000..dd4479ad4
--- /dev/null
+++ b/web/react/components/authorize.jsx
@@ -0,0 +1,72 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var Client = require('../utils/client.jsx');
+
+export default class Authorize extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.handleAllow = this.handleAllow.bind(this);
+ this.handleDeny = this.handleDeny.bind(this);
+
+ this.state = {};
+ }
+ handleAllow() {
+ const responseType = this.props.responseType;
+ const clientId = this.props.clientId;
+ const redirectUri = this.props.redirectUri;
+ const state = this.props.state;
+ const scope = this.props.scope;
+
+ Client.allowOAuth2(responseType, clientId, redirectUri, state, scope,
+ (data) => {
+ if (data.redirect) {
+ window.location.replace(data.redirect);
+ }
+ },
+ () => {}
+ );
+ }
+ handleDeny() {
+ window.location.replace(this.props.redirectUri + '?error=access_denied');
+ }
+ render() {
+ return (
+ <div className='authorize-box'>
+ <div className='authorize-inner'>
+ <h3>{'An application would like to connect to your '}{this.props.teamName}{' account'}</h3>
+ <label>{'The app '}{this.props.appName}{' would like the ability to access and modify your basic information.'}</label>
+ <br/>
+ <br/>
+ <label>{'Allow '}{this.props.appName}{' access?'}</label>
+ <br/>
+ <button
+ type='submit'
+ className='btn authorize-btn'
+ onClick={this.handleDeny}
+ >
+ {'Deny'}
+ </button>
+ <button
+ type='submit'
+ className='btn btn-primary authorize-btn'
+ onClick={this.handleAllow}
+ >
+ {'Allow'}
+ </button>
+ </div>
+ </div>
+ );
+ }
+}
+
+Authorize.propTypes = {
+ appName: React.PropTypes.string,
+ teamName: React.PropTypes.string,
+ responseType: React.PropTypes.string,
+ clientId: React.PropTypes.string,
+ redirectUri: React.PropTypes.string,
+ state: React.PropTypes.string,
+ scope: React.PropTypes.string
+};
diff --git a/web/react/components/change_url_modal.jsx b/web/react/components/change_url_modal.jsx
new file mode 100644
index 000000000..3553e1107
--- /dev/null
+++ b/web/react/components/change_url_modal.jsx
@@ -0,0 +1,177 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var Modal = ReactBootstrap.Modal;
+var Utils = require('../utils/utils.jsx');
+
+export default class ChangeUrlModal extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.onURLChanged = this.onURLChanged.bind(this);
+ this.doSubmit = this.doSubmit.bind(this);
+ this.doCancel = this.doCancel.bind(this);
+
+ this.state = {
+ currentURL: props.currentURL,
+ urlError: '',
+ userEdit: false
+ };
+ }
+ componentWillReceiveProps(nextProps) {
+ // This check prevents the url being deleted when we re-render
+ // because of user status check
+ if (!this.state.userEdit) {
+ this.setState({
+ currentURL: nextProps.currentURL
+ });
+ }
+ }
+ componentDidUpdate(prevProps) {
+ if (this.props.show === true && prevProps.show === false) {
+ React.findDOMNode(this.refs.urlinput).select();
+ }
+ }
+ onURLChanged(e) {
+ const url = e.target.value.trim();
+ this.setState({currentURL: url.replace(/[^A-Za-z0-9-_]/g, '').toLowerCase(), userEdit: true});
+ }
+ getURLError(url) {
+ let error = []; //eslint-disable-line prefer-const
+ if (url.length < 2) {
+ error.push(<span key='error1'>{'Must be longer than two characters'}<br/></span>);
+ }
+ if (url.charAt(0) === '-' || url.charAt(0) === '_') {
+ error.push(<span key='error2'>{'Must start with a letter or number'}<br/></span>);
+ }
+ if (url.length > 1 && (url.charAt(url.length - 1) === '-' || url.charAt(url.length - 1) === '_')) {
+ error.push(<span key='error3'>{'Must end with a letter or number'}<br/></span>);
+ }
+ if (url.indexOf('__') > -1) {
+ error.push(<span key='error4'>{'Can not contain two underscores in a row.'}<br/></span>);
+ }
+
+ // In case of error we don't detect
+ if (error.length === 0) {
+ error.push(<span key='errorlast'>{'Invalid URL'}<br/></span>);
+ }
+ return error;
+ }
+ doSubmit(e) {
+ e.preventDefault();
+
+ const url = React.findDOMNode(this.refs.urlinput).value;
+ const cleanedURL = Utils.cleanUpUrlable(url);
+ if (cleanedURL !== url || url.length < 2 || url.indexOf('__') > -1) {
+ this.setState({urlError: this.getURLError(url)});
+ return;
+ }
+ this.setState({urlError: '', userEdit: false});
+ this.props.onModalSubmit(url);
+ }
+ doCancel() {
+ this.setState({urlError: '', userEdit: false});
+ this.props.onModalDismissed();
+ }
+ render() {
+ let urlClass = 'input-group input-group--limit';
+ let urlError = null;
+ let serverError = null;
+
+ if (this.state.urlError) {
+ urlClass += ' has-error';
+ urlError = (<p className='input__help error'>{this.state.urlError}</p>);
+ }
+
+ if (this.props.serverError) {
+ serverError = <div className='form-group has-error'><p className='input__help error'>{this.props.serverError}</p></div>;
+ }
+
+ const fullTeamUrl = Utils.getTeamURLFromAddressBar();
+ const teamURL = Utils.getShortenedTeamURL();
+
+ return (
+ <Modal
+ show={this.props.show}
+ onHide={this.doCancel}
+ >
+ <Modal.Header closeButton={true}>
+ <Modal.Title>{this.props.title}</Modal.Title>
+ </Modal.Header>
+ <form
+ role='form'
+ className='form-horizontal'
+ >
+ <Modal.Body>
+ <div className='modal-intro'>{this.props.description}</div>
+ <div className='form-group'>
+ <label className='col-sm-2 form__label control-label'>{this.props.urlLabel}</label>
+ <div className='col-sm-10'>
+ <div className={urlClass}>
+ <span
+ data-toggle='tooltip'
+ title={fullTeamUrl}
+ className='input-group-addon'
+ >
+ {teamURL}
+ </span>
+ <input
+ type='text'
+ ref='urlinput'
+ className='form-control'
+ maxLength='22'
+ onChange={this.onURLChanged}
+ value={this.state.currentURL}
+ autoFocus={true}
+ tabIndex='1'
+ />
+ </div>
+ {urlError}
+ {serverError}
+ </div>
+ </div>
+ </Modal.Body>
+ <Modal.Footer>
+ <button
+ type='button'
+ className='btn btn-default'
+ onClick={this.doCancel}
+ >
+ {'Close'}
+ </button>
+ <button
+ onClick={this.doSubmit}
+ type='submit'
+ className='btn btn-primary'
+ tabIndex='2'
+ >
+ {this.props.submitButtonText}
+ </button>
+ </Modal.Footer>
+ </form>
+ </Modal>
+ );
+ }
+}
+
+ChangeUrlModal.defaultProps = {
+ show: false,
+ title: 'Change URL',
+ desciption: '',
+ urlLabel: 'URL',
+ submitButtonText: 'Save',
+ currentURL: '',
+ serverError: ''
+};
+
+ChangeUrlModal.propTypes = {
+ show: React.PropTypes.bool.isRequired,
+ title: React.PropTypes.string,
+ description: React.PropTypes.string,
+ urlLabel: React.PropTypes.string,
+ submitButtonText: React.PropTypes.string,
+ currentURL: React.PropTypes.string,
+ serverError: React.PropTypes.string,
+ onModalSubmit: React.PropTypes.func.isRequired,
+ onModalDismissed: React.PropTypes.func.isRequired
+};
diff --git a/web/react/components/channel_header.jsx b/web/react/components/channel_header.jsx
index db23a5831..0dbbc20d4 100644
--- a/web/react/components/channel_header.jsx
+++ b/web/react/components/channel_header.jsx
@@ -8,6 +8,7 @@ const SocketStore = require('../stores/socket_store.jsx');
const NavbarSearchBox = require('./search_bar.jsx');
const AsyncClient = require('../utils/async_client.jsx');
const Client = require('../utils/client.jsx');
+const TextFormatting = require('../utils/text_formatting.jsx');
const Utils = require('../utils/utils.jsx');
const MessageWrapper = require('./message_wrapper.jsx');
const PopoverListMembers = require('./popover_list_members.jsx');
@@ -107,7 +108,6 @@ export default class ChannelHeader extends React.Component {
}
const channel = this.state.channel;
- const description = Utils.textToJsx(channel.description, {singleline: true, noMentionHighlight: true});
const popoverContent = React.renderToString(<MessageWrapper message={channel.description}/>);
let channelTitle = channel.display_name;
const currentId = UserStore.getCurrentId();
@@ -326,9 +326,9 @@ export default class ChannelHeader extends React.Component {
data-toggle='popover'
data-content={popoverContent}
className='description'
- >
- {description}
- </div>
+ onClick={TextFormatting.handleClick}
+ dangerouslySetInnerHTML={{__html: TextFormatting.formatText(channel.description, {singleline: true, mentionHighlight: false})}}
+ />
</div>
</th>
<th>
diff --git a/web/react/components/email_verify.jsx b/web/react/components/email_verify.jsx
index 95948c8dd..92123956f 100644
--- a/web/react/components/email_verify.jsx
+++ b/web/react/components/email_verify.jsx
@@ -1,8 +1,6 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
-import {config} from '../utils/config.js';
-
export default class EmailVerify extends React.Component {
constructor(props) {
super(props);
@@ -19,10 +17,10 @@ export default class EmailVerify extends React.Component {
var body = '';
var resend = '';
if (this.props.isVerified === 'true') {
- title = config.SiteName + ' Email Verified';
+ title = global.window.config.SiteName + ' Email Verified';
body = <p>Your email has been verified! Click <a href={this.props.teamURL + '?email=' + this.props.userEmail}>here</a> to log in.</p>;
} else {
- title = config.SiteName + ' Email Not Verified';
+ title = global.window.config.SiteName + ' Email Not Verified';
body = <p>Please verify your email address. Check your inbox for an email.</p>;
resend = (
<button
diff --git a/web/react/components/file_upload.jsx b/web/react/components/file_upload.jsx
index 534f0136e..3cb284171 100644
--- a/web/react/components/file_upload.jsx
+++ b/web/react/components/file_upload.jsx
@@ -20,12 +20,11 @@ export default class FileUpload extends React.Component {
}
fileUploadSuccess(channelId, data) {
- var parsedData = $.parseJSON(data);
- this.props.onFileUpload(parsedData.filenames, parsedData.client_ids, channelId);
+ this.props.onFileUpload(data.filenames, data.client_ids, channelId);
var requests = this.state.requests;
- for (var j = 0; j < parsedData.client_ids.length; j++) {
- delete requests[parsedData.client_ids[j]];
+ for (var j = 0; j < data.client_ids.length; j++) {
+ delete requests[data.client_ids[j]];
}
this.setState({requests: requests});
}
@@ -53,7 +52,7 @@ export default class FileUpload extends React.Component {
}
// generate a unique id that can be used by other components to refer back to this upload
- var clientId = utils.generateId();
+ let clientId = utils.generateId();
// prepare data to be uploaded
var formData = new FormData();
diff --git a/web/react/components/find_team.jsx b/web/react/components/find_team.jsx
index 52988886c..eb2683a88 100644
--- a/web/react/components/find_team.jsx
+++ b/web/react/components/find_team.jsx
@@ -3,7 +3,6 @@
var utils = require('../utils/utils.jsx');
var client = require('../utils/client.jsx');
-import {strings} from '../utils/config.js';
export default class FindTeam extends React.Component {
constructor(props) {
@@ -51,8 +50,8 @@ export default class FindTeam extends React.Component {
if (this.state.sent) {
return (
<div>
- <h4>{'Find Your ' + utils.toTitleCase(strings.Team)}</h4>
- <p>{'An email was sent with links to any ' + strings.TeamPlural + ' to which you are a member.'}</p>
+ <h4>{'Find Your team'}</h4>
+ <p>{'An email was sent with links to any teams to which you are a member.'}</p>
</div>
);
}
@@ -61,7 +60,7 @@ export default class FindTeam extends React.Component {
<div>
<h4>Find Your Team</h4>
<form onSubmit={this.handleSubmit}>
- <p>{'Get an email with links to any ' + strings.TeamPlural + ' to which you are a member.'}</p>
+ <p>{'Get an email with links to any teams to which you are a member.'}</p>
<div className='form-group'>
<label className='control-label'>Email</label>
<div className={emailErrorClass}>
diff --git a/web/react/components/get_link_modal.jsx b/web/react/components/get_link_modal.jsx
index 1f25ea0b7..5d8b13f00 100644
--- a/web/react/components/get_link_modal.jsx
+++ b/web/react/components/get_link_modal.jsx
@@ -2,7 +2,6 @@
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
-import {strings} from '../utils/config.js';
export default class GetLinkModal extends React.Component {
constructor(props) {
@@ -76,9 +75,9 @@ export default class GetLinkModal extends React.Component {
</div>
<div className='modal-body'>
<p>
- Send {strings.Team + 'mates'} the link below for them to sign-up to this {strings.Team} site.
+ Send teammates the link below for them to sign-up to this team site.
<br /><br />
- Be careful not to share this link publicly, since anyone with the link can join your {strings.Team}.
+ Be careful not to share this link publicly, since anyone with the link can join your team.
</p>
<textarea
className='form-control no-resize'
diff --git a/web/react/components/invite_member_modal.jsx b/web/react/components/invite_member_modal.jsx
index c1cfa7800..650a72516 100644
--- a/web/react/components/invite_member_modal.jsx
+++ b/web/react/components/invite_member_modal.jsx
@@ -2,11 +2,9 @@
// See License.txt for license information.
var utils = require('../utils/utils.jsx');
-var ConfigStore = require('../stores/config_store.jsx');
var Client = require('../utils/client.jsx');
var UserStore = require('../stores/user_store.jsx');
var ConfirmModal = require('./confirm_modal.jsx');
-import {config} from '../utils/config.js';
export default class InviteMemberModal extends React.Component {
constructor(props) {
@@ -23,7 +21,7 @@ export default class InviteMemberModal extends React.Component {
emailErrors: {},
firstNameErrors: {},
lastNameErrors: {},
- emailEnabled: !ConfigStore.getSettingAsBoolean('ByPassEmail', false)
+ emailEnabled: !global.window.config.ByPassEmail
};
}
@@ -79,23 +77,9 @@ export default class InviteMemberModal extends React.Component {
emailErrors[index] = '';
}
- if (config.AllowInviteNames) {
- invite.firstName = React.findDOMNode(this.refs['first_name' + index]).value.trim();
- if (!invite.firstName && config.RequireInviteNames) {
- firstNameErrors[index] = 'This is a required field';
- valid = false;
- } else {
- firstNameErrors[index] = '';
- }
+ invite.firstName = React.findDOMNode(this.refs['first_name' + index]).value.trim();
- invite.lastName = React.findDOMNode(this.refs['last_name' + index]).value.trim();
- if (!invite.lastName && config.RequireInviteNames) {
- lastNameErrors[index] = 'This is a required field';
- valid = false;
- } else {
- lastNameErrors[index] = '';
- }
- }
+ invite.lastName = React.findDOMNode(this.refs['last_name' + index]).value.trim();
invites.push(invite);
}
@@ -143,10 +127,8 @@ export default class InviteMemberModal extends React.Component {
for (var i = 0; i < inviteIds.length; i++) {
var index = inviteIds[i];
React.findDOMNode(this.refs['email' + index]).value = '';
- if (config.AllowInviteNames) {
- React.findDOMNode(this.refs['first_name' + index]).value = '';
- React.findDOMNode(this.refs['last_name' + index]).value = '';
- }
+ React.findDOMNode(this.refs['first_name' + index]).value = '';
+ React.findDOMNode(this.refs['last_name' + index]).value = '';
}
this.setState({
@@ -210,44 +192,43 @@ export default class InviteMemberModal extends React.Component {
}
var nameFields = null;
- if (config.AllowInviteNames) {
- var firstNameClass = 'form-group';
- if (firstNameError) {
- firstNameClass += ' has-error';
- }
- var lastNameClass = 'form-group';
- if (lastNameError) {
- lastNameClass += ' has-error';
- }
- nameFields = (<div className='row--invite'>
- <div className='col-sm-6'>
- <div className={firstNameClass}>
- <input
- type='text'
- className='form-control'
- ref={'first_name' + index}
- placeholder='First name'
- maxLength='64'
- disabled={!this.state.emailEnabled}
- />
- {firstNameError}
- </div>
+
+ var firstNameClass = 'form-group';
+ if (firstNameError) {
+ firstNameClass += ' has-error';
+ }
+ var lastNameClass = 'form-group';
+ if (lastNameError) {
+ lastNameClass += ' has-error';
+ }
+ nameFields = (<div className='row--invite'>
+ <div className='col-sm-6'>
+ <div className={firstNameClass}>
+ <input
+ type='text'
+ className='form-control'
+ ref={'first_name' + index}
+ placeholder='First name'
+ maxLength='64'
+ disabled={!this.state.emailEnabled}
+ />
+ {firstNameError}
</div>
- <div className='col-sm-6'>
- <div className={lastNameClass}>
- <input
- type='text'
- className='form-control'
- ref={'last_name' + index}
- placeholder='Last name'
- maxLength='64'
- disabled={!this.state.emailEnabled}
- />
- {lastNameError}
- </div>
+ </div>
+ <div className='col-sm-6'>
+ <div className={lastNameClass}>
+ <input
+ type='text'
+ className='form-control'
+ ref={'last_name' + index}
+ placeholder='Last name'
+ maxLength='64'
+ disabled={!this.state.emailEnabled}
+ />
+ {lastNameError}
</div>
- </div>);
- }
+ </div>
+ </div>);
inviteSections[index] = (
<div key={'key' + index}>
diff --git a/web/react/components/login.jsx b/web/react/components/login.jsx
index b20c62833..ffc07a4dd 100644
--- a/web/react/components/login.jsx
+++ b/web/react/components/login.jsx
@@ -6,7 +6,6 @@ const Client = require('../utils/client.jsx');
const UserStore = require('../stores/user_store.jsx');
const BrowserStore = require('../stores/browser_store.jsx');
const Constants = require('../utils/constants.jsx');
-import {config, strings} from '../utils/config.js';
export default class Login extends React.Component {
constructor(props) {
@@ -177,7 +176,7 @@ export default class Login extends React.Component {
<div className='signup-team__container'>
<h5 className='margin--less'>Sign in to:</h5>
<h2 className='signup-team__name'>{teamDisplayName}</h2>
- <h2 className='signup-team__subdomain'>on {config.SiteName}</h2>
+ <h2 className='signup-team__subdomain'>on {global.window.config.SiteName}</h2>
<form onSubmit={this.handleSubmit}>
<div className={'form-group' + errorClass}>
{serverError}
@@ -185,11 +184,11 @@ export default class Login extends React.Component {
{loginMessage}
{emailSignup}
<div className='form-group margin--extra form-group--small'>
- <span><a href='/find_team'>{'Find other ' + strings.TeamPlural}</a></span>
+ <span><a href='/find_team'>{'Find other teams'}</a></span>
</div>
{forgotPassword}
<div className='margin--extra'>
- <span>{'Want to create your own ' + strings.Team + '? '}
+ <span>{'Want to create your own team? '}
<a
href='/'
className='signup-team-login'
diff --git a/web/react/components/message_wrapper.jsx b/web/react/components/message_wrapper.jsx
index bce305853..5adf4f228 100644
--- a/web/react/components/message_wrapper.jsx
+++ b/web/react/components/message_wrapper.jsx
@@ -1,7 +1,7 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
-var Utils = require('../utils/utils.jsx');
+var TextFormatting = require('../utils/text_formatting.jsx');
export default class MessageWrapper extends React.Component {
constructor(props) {
@@ -10,10 +10,7 @@ export default class MessageWrapper extends React.Component {
}
render() {
if (this.props.message) {
- var inner = Utils.textToJsx(this.props.message, this.props.options);
- return (
- <div>{inner}</div>
- );
+ return <div dangerouslySetInnerHTML={{__html: TextFormatting.formatText(this.props.message, this.props.options)}}/>;
}
return <div/>;
@@ -21,8 +18,7 @@ export default class MessageWrapper extends React.Component {
}
MessageWrapper.defaultProps = {
- message: null,
- options: null
+ message: ''
};
MessageWrapper.propTypes = {
message: React.PropTypes.string,
diff --git a/web/react/components/navbar.jsx b/web/react/components/navbar.jsx
index 2258bf2b3..cae9f12e4 100644
--- a/web/react/components/navbar.jsx
+++ b/web/react/components/navbar.jsx
@@ -332,7 +332,7 @@ export default class Navbar extends React.Component {
popoverContent = React.renderToString(
<MessageWrapper
message={channel.description}
- options={{singleline: true, noMentionHighlight: true}}
+ options={{singleline: true, mentionHighlight: false}}
/>
);
isAdmin = this.state.member.roles.indexOf('admin') > -1;
diff --git a/web/react/components/navbar_dropdown.jsx b/web/react/components/navbar_dropdown.jsx
index 99cdfa1ad..b7566cfb9 100644
--- a/web/react/components/navbar_dropdown.jsx
+++ b/web/react/components/navbar_dropdown.jsx
@@ -7,7 +7,6 @@ var UserStore = require('../stores/user_store.jsx');
var TeamStore = require('../stores/team_store.jsx');
var Constants = require('../utils/constants.jsx');
-import {config} from '../utils/config.js';
function getStateFromStores() {
return {teams: UserStore.getTeams(), currentTeam: TeamStore.getCurrent()};
@@ -188,7 +187,7 @@ export default class NavbarDropdown extends React.Component {
<li>
<a
target='_blank'
- href={config.HelpLink}
+ href='/static/help/help.html'
>
Help
</a>
@@ -196,7 +195,7 @@ export default class NavbarDropdown extends React.Component {
<li>
<a
target='_blank'
- href={config.ReportProblemLink}
+ href='/static/help/report_problem.html'
>
Report a Problem
</a>
diff --git a/web/react/components/new_channel.jsx b/web/react/components/new_channel.jsx
deleted file mode 100644
index 1a11fc652..000000000
--- a/web/react/components/new_channel.jsx
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
-// See License.txt for license information.
-
-var utils = require('../utils/utils.jsx');
-var client = require('../utils/client.jsx');
-var asyncClient = require('../utils/async_client.jsx');
-var UserStore = require('../stores/user_store.jsx');
-
-export default class NewChannelModal extends React.Component {
- constructor() {
- super();
-
- this.handleSubmit = this.handleSubmit.bind(this);
- this.displayNameKeyUp = this.displayNameKeyUp.bind(this);
- this.handleClose = this.handleClose.bind(this);
-
- this.state = {channelType: ''};
- }
- handleSubmit(e) {
- e.preventDefault();
-
- var channel = {};
- var state = {serverError: ''};
-
- channel.display_name = React.findDOMNode(this.refs.display_name).value.trim();
- if (!channel.display_name) {
- state.displayNameError = 'This field is required';
- state.inValid = true;
- } else if (channel.display_name.length > 22) {
- state.displayNameError = 'This field must be less than 22 characters';
- state.inValid = true;
- } else {
- state.displayNameError = '';
- }
-
- channel.name = React.findDOMNode(this.refs.channel_name).value.trim();
- if (!channel.name) {
- state.nameError = 'This field is required';
- state.inValid = true;
- } else if (channel.name.length > 22) {
- state.nameError = 'This field must be less than 22 characters';
- state.inValid = true;
- } else {
- var cleanedName = utils.cleanUpUrlable(channel.name);
- if (cleanedName !== channel.name) {
- state.nameError = "Must be lowercase alphanumeric characters, allowing '-' but not starting or ending with '-'";
- state.inValid = true;
- } else {
- state.nameError = '';
- }
- }
-
- this.setState(state);
-
- if (state.inValid) {
- return;
- }
-
- var cu = UserStore.getCurrentUser();
- channel.team_id = cu.team_id;
-
- channel.description = React.findDOMNode(this.refs.channel_desc).value.trim();
- channel.type = this.state.channelType;
-
- client.createChannel(channel,
- function success(data) {
- $(React.findDOMNode(this.refs.modal)).modal('hide');
-
- asyncClient.getChannel(data.id);
- utils.switchChannel(data);
-
- React.findDOMNode(this.refs.display_name).value = '';
- React.findDOMNode(this.refs.channel_name).value = '';
- React.findDOMNode(this.refs.channel_desc).value = '';
- }.bind(this),
- function error(err) {
- state.serverError = err.message;
- state.inValid = true;
- this.setState(state);
- }.bind(this)
- );
- }
- displayNameKeyUp() {
- var displayName = React.findDOMNode(this.refs.display_name).value.trim();
- var channelName = utils.cleanUpUrlable(displayName);
- React.findDOMNode(this.refs.channel_name).value = channelName;
- }
- componentDidMount() {
- var self = this;
- $(React.findDOMNode(this.refs.modal)).on('show.bs.modal', function onModalShow(e) {
- var button = e.relatedTarget;
- self.setState({channelType: $(button).attr('data-channeltype')});
- });
- $(React.findDOMNode(this.refs.modal)).on('hidden.bs.modal', this.handleClose);
- }
- componentWillUnmount() {
- $(React.findDOMNode(this.refs.modal)).off('hidden.bs.modal', this.handleClose);
- }
- handleClose() {
- $(React.findDOMNode(this)).find('.form-control').each(function clearForms() {
- this.value = '';
- });
-
- this.setState({channelType: '', displayNameError: '', nameError: '', serverError: '', inValid: false});
- }
- render() {
- var displayNameError = null;
- var nameError = null;
- var serverError = null;
- var displayNameClass = 'form-group';
- var nameClass = 'form-group';
-
- if (this.state.displayNameError) {
- displayNameError = <label className='control-label'>{this.state.displayNameError}</label>;
- displayNameClass += ' has-error';
- }
- if (this.state.nameError) {
- nameError = <label className='control-label'>{this.state.nameError}</label>;
- nameClass += ' has-error';
- }
- if (this.state.serverError) {
- serverError = <div className='form-group has-error'><label className='control-label'>{this.state.serverError}</label></div>;
- }
-
- var channelTerm = 'Channel';
- if (this.state.channelType === 'P') {
- channelTerm = 'Group';
- }
-
- return (
- <div
- className='modal fade'
- id='new_channel'
- ref='modal'
- tabIndex='-1'
- role='dialog'
- aria-hidden='true'
- >
- <div className='modal-dialog'>
- <div className='modal-content'>
- <div className='modal-header'>
- <button
- type='button'
- className='close'
- data-dismiss='modal'
- >
- <span aria-hidden='true'>&times;</span>
- <span className='sr-only'>Cancel</span>
- </button>
- <h4 className='modal-title'>New {channelTerm}</h4>
- </div>
- <form role='form'>
- <div className='modal-body'>
- <div className={displayNameClass}>
- <label className='control-label'>Display Name</label>
- <input
- onKeyUp={this.displayNameKeyUp}
- type='text'
- ref='display_name'
- className='form-control'
- placeholder='Enter display name'
- maxLength='22'
- />
- {displayNameError}
- </div>
- <div className={nameClass}>
- <label className='control-label'>Handle</label>
- <input
- type='text'
- className='form-control'
- ref='channel_name'
- placeholder="lowercase alphanumeric's only"
- maxLength='22'
- />
- {nameError}
- </div>
- <div className='form-group'>
- <label className='control-label'>Description</label>
- <textarea
- className='form-control no-resize'
- ref='channel_desc'
- rows='3'
- placeholder='Description'
- maxLength='1024'
- />
- </div>
- {serverError}
- </div>
- <div className='modal-footer'>
- <button
- type='button'
- className='btn btn-default'
- data-dismiss='modal'
- >
- Cancel
- </button>
- <button
- onClick={this.handleSubmit}
- type='submit'
- className='btn btn-primary'
- >
- Create New {channelTerm}
- </button>
- </div>
- </form>
- </div>
- </div>
- </div>
- );
- }
-}
diff --git a/web/react/components/new_channel_flow.jsx b/web/react/components/new_channel_flow.jsx
new file mode 100644
index 000000000..df6a119d5
--- /dev/null
+++ b/web/react/components/new_channel_flow.jsx
@@ -0,0 +1,206 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var Utils = require('../utils/utils.jsx');
+var AsyncClient = require('../utils/async_client.jsx');
+var Client = require('../utils/client.jsx');
+var UserStore = require('../stores/user_store.jsx');
+
+var NewChannelModal = require('./new_channel_modal.jsx');
+var ChangeURLModal = require('./change_url_modal.jsx');
+
+const SHOW_NEW_CHANNEL = 1;
+const SHOW_EDIT_URL = 2;
+const SHOW_EDIT_URL_THEN_COMPLETE = 3;
+
+export default class NewChannelFlow extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.doSubmit = this.doSubmit.bind(this);
+ this.typeSwitched = this.typeSwitched.bind(this);
+ this.urlChangeRequested = this.urlChangeRequested.bind(this);
+ this.urlChangeSubmitted = this.urlChangeSubmitted.bind(this);
+ this.urlChangeDismissed = this.urlChangeDismissed.bind(this);
+ this.channelDataChanged = this.channelDataChanged.bind(this);
+
+ this.state = {
+ serverError: '',
+ channelType: 'O',
+ flowState: SHOW_NEW_CHANNEL,
+ channelDisplayName: '',
+ channelName: '',
+ channelDescription: '',
+ nameModified: false
+ };
+ }
+ componentWillReceiveProps(nextProps) {
+ // If we are being shown, grab channel type from props and clear
+ if (nextProps.show === true && this.props.show === false) {
+ this.setState({
+ serverError: '',
+ channelType: nextProps.channelType,
+ flowState: SHOW_NEW_CHANNEL,
+ channelDisplayName: '',
+ channelName: '',
+ channelDescription: '',
+ nameModified: false
+ });
+ }
+ }
+ doSubmit() {
+ var channel = {};
+
+ channel.display_name = this.state.channelDisplayName;
+ if (!channel.display_name) {
+ this.setState({serverError: 'Invalid Channel Name'});
+ return;
+ }
+
+ channel.name = this.state.channelName;
+ if (channel.name.length < 2) {
+ this.setState({flowState: SHOW_EDIT_URL_THEN_COMPLETE});
+ return;
+ }
+
+ const cu = UserStore.getCurrentUser();
+ channel.team_id = cu.team_id;
+ channel.description = this.state.channelDescription;
+ channel.type = this.state.channelType;
+
+ Client.createChannel(channel,
+ (data) => {
+ this.props.onModalDismissed();
+ AsyncClient.getChannel(data.id);
+ Utils.switchChannel(data);
+ },
+ (err) => {
+ if (err.message === 'Name must be 2 or more lowercase alphanumeric characters') {
+ this.setState({flowState: SHOW_EDIT_URL_THEN_COMPLETE});
+ }
+ if (err.message === 'A channel with that handle already exists') {
+ this.setState({serverError: 'A channel with that URL already exists'});
+ return;
+ }
+ this.setState({serverError: err.message});
+ }
+ );
+ }
+ typeSwitched() {
+ if (this.state.channelType === 'P') {
+ this.setState({channelType: 'O'});
+ } else {
+ this.setState({channelType: 'P'});
+ }
+ }
+ urlChangeRequested() {
+ this.setState({flowState: SHOW_EDIT_URL});
+ }
+ urlChangeSubmitted(newURL) {
+ if (this.state.flowState === SHOW_EDIT_URL_THEN_COMPLETE) {
+ this.setState({channelName: newURL, nameModified: true}, this.doSubmit);
+ } else {
+ this.setState({flowState: SHOW_NEW_CHANNEL, serverError: '', channelName: newURL, nameModified: true});
+ }
+ }
+ urlChangeDismissed() {
+ this.setState({flowState: SHOW_NEW_CHANNEL});
+ }
+ channelDataChanged(data) {
+ this.setState({
+ channelDisplayName: data.displayName,
+ channelDescription: data.description
+ });
+ if (!this.state.nameModified) {
+ this.setState({channelName: Utils.cleanUpUrlable(data.displayName.trim())});
+ }
+ }
+ render() {
+ const channelData = {
+ name: this.state.channelName,
+ displayName: this.state.channelDisplayName,
+ description: this.state.channelDescription
+ };
+
+ let showChannelModal = false;
+ let showGroupModal = false;
+ let showChangeURLModal = false;
+
+ let changeURLTitle = '';
+ let changeURLSubmitButtonText = '';
+ let channelTerm = '';
+
+ // Only listen to flow state if we are being shown
+ if (this.props.show) {
+ switch (this.state.flowState) {
+ case SHOW_NEW_CHANNEL:
+ if (this.state.channelType === 'O') {
+ showChannelModal = true;
+ channelTerm = 'Channel';
+ } else {
+ showGroupModal = true;
+ channelTerm = 'Group';
+ }
+ break;
+ case SHOW_EDIT_URL:
+ showChangeURLModal = true;
+ changeURLTitle = 'Change ' + channelTerm + ' URL';
+ changeURLSubmitButtonText = 'Change ' + channelTerm + ' URL';
+ break;
+ case SHOW_EDIT_URL_THEN_COMPLETE:
+ showChangeURLModal = true;
+ changeURLTitle = 'Set ' + channelTerm + ' URL';
+ changeURLSubmitButtonText = 'Create ' + channelTerm;
+ break;
+ }
+ }
+ return (
+ <span>
+ <NewChannelModal
+ show={showChannelModal}
+ channelType={'O'}
+ channelData={channelData}
+ serverError={this.state.serverError}
+ onSubmitChannel={this.doSubmit}
+ onModalDismissed={this.props.onModalDismissed}
+ onTypeSwitched={this.typeSwitched}
+ onChangeURLPressed={this.urlChangeRequested}
+ onDataChanged={this.channelDataChanged}
+ />
+ <NewChannelModal
+ show={showGroupModal}
+ channelType={'P'}
+ channelData={channelData}
+ serverError={this.state.serverError}
+ onSubmitChannel={this.doSubmit}
+ onModalDismissed={this.props.onModalDismissed}
+ onTypeSwitched={this.typeSwitched}
+ onChangeURLPressed={this.urlChangeRequested}
+ onDataChanged={this.channelDataChanged}
+ />
+ <ChangeURLModal
+ show={showChangeURLModal}
+ title={changeURLTitle}
+ description={'Some characters are not allowed in URLs and may be removed.'}
+ urlLabel={channelTerm + ' URL'}
+ submitButtonText={changeURLSubmitButtonText}
+ currentURL={this.state.channelName}
+ serverError={this.state.serverError}
+ onModalSubmit={this.urlChangeSubmitted}
+ onModalDismissed={this.urlChangeDismissed}
+ />
+ </span>
+ );
+ }
+}
+
+NewChannelFlow.defaultProps = {
+ show: false,
+ channelType: 'O'
+};
+
+NewChannelFlow.propTypes = {
+ show: React.PropTypes.bool.isRequired,
+ channelType: React.PropTypes.string.isRequired,
+ onModalDismissed: React.PropTypes.func.isRequired
+};
diff --git a/web/react/components/new_channel_modal.jsx b/web/react/components/new_channel_modal.jsx
new file mode 100644
index 000000000..fc7b8c183
--- /dev/null
+++ b/web/react/components/new_channel_modal.jsx
@@ -0,0 +1,198 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+const Utils = require('../utils/utils.jsx');
+var Modal = ReactBootstrap.Modal;
+
+export default class NewChannelModal extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleChange = this.handleChange.bind(this);
+
+ this.state = {
+ displayNameError: ''
+ };
+ }
+ componentWillReceiveProps(nextProps) {
+ if (nextProps.show === true && this.props.show === false) {
+ this.setState({
+ displayNameError: ''
+ });
+ }
+ }
+ handleSubmit(e) {
+ e.preventDefault();
+
+ const displayName = React.findDOMNode(this.refs.display_name).value.trim();
+ if (displayName.length < 1) {
+ this.setState({displayNameError: 'This field is required'});
+ return;
+ }
+
+ this.props.onSubmitChannel();
+ }
+ handleChange() {
+ const newData = {
+ displayName: React.findDOMNode(this.refs.display_name).value,
+ description: React.findDOMNode(this.refs.channel_desc).value
+ };
+ this.props.onDataChanged(newData);
+ }
+ render() {
+ var displayNameError = null;
+ var serverError = null;
+ var displayNameClass = 'form-group';
+
+ if (this.state.displayNameError) {
+ displayNameError = <p className='input__help error'>{this.state.displayNameError}</p>;
+ displayNameClass += ' has-error';
+ }
+
+ if (this.props.serverError) {
+ serverError = <div className='form-group has-error'><p className='input__help error'>{this.props.serverError}</p></div>;
+ }
+
+ var channelTerm = '';
+ var channelSwitchText = '';
+ switch (this.props.channelType) {
+ case 'P':
+ channelTerm = 'Group';
+ channelSwitchText = (
+ <div className='modal-intro'>
+ {'Create a new private group with restricted membership. '}
+ <a
+ href='#'
+ onClick={this.props.onTypeSwitched}
+ >
+ {'Create a public channel'}
+ </a>
+ </div>
+ );
+ break;
+ case 'O':
+ channelTerm = 'Channel';
+ channelSwitchText = (
+ <div className='modal-intro'>
+ {'Create a new public channel anyone can join. '}
+ <a
+ href='#'
+ onClick={this.props.onTypeSwitched}
+ >
+ {'Create a private group'}
+ </a>
+ </div>
+ );
+ break;
+ }
+
+ const prettyTeamURL = Utils.getShortenedTeamURL();
+
+ return (
+ <span>
+ <Modal
+ show={this.props.show}
+ onHide={this.props.onModalDismissed}
+ >
+ <Modal.Header closeButton={true}>
+ <Modal.Title>{'New ' + channelTerm}</Modal.Title>
+ </Modal.Header>
+ <form
+ role='form'
+ className='form-horizontal'
+ >
+ <Modal.Body>
+ <div>
+ {channelSwitchText}
+ </div>
+ <div className={displayNameClass}>
+ <label className='col-sm-2 form__label control-label'>{'Name'}</label>
+ <div className='col-sm-10'>
+ <input
+ onChange={this.handleChange}
+ type='text'
+ ref='display_name'
+ className='form-control'
+ placeholder='Ex: "Bugs", "Marketing", "办公室恋情"'
+ maxLength='22'
+ value={this.props.channelData.displayName}
+ autoFocus={true}
+ tabIndex='1'
+ />
+ {displayNameError}
+ <p className='input__help'>
+ {'Channel URL: ' + prettyTeamURL + this.props.channelData.name + ' ('}
+ <a
+ href='#'
+ onClick={this.props.onChangeURLPressed}
+ >
+ {'Edit'}
+ </a>
+ {')'}
+ </p>
+ </div>
+ </div>
+ <div className='form-group less'>
+ <div className='col-sm-2'>
+ <label className='form__label control-label'>{'Description'}</label>
+ <label className='form__label light'>{'(optional)'}</label>
+ </div>
+ <div className='col-sm-10'>
+ <textarea
+ className='form-control no-resize'
+ ref='channel_desc'
+ rows='4'
+ placeholder='Description'
+ maxLength='1024'
+ value={this.props.channelData.description}
+ onChange={this.handleChange}
+ tabIndex='2'
+ />
+ <p className='input__help'>
+ {'This is the purpose of your channel and helps others decide whether to join.'}
+ </p>
+ {serverError}
+ </div>
+ </div>
+ </Modal.Body>
+ <Modal.Footer>
+ <button
+ type='button'
+ className='btn btn-default'
+ onClick={this.props.onModalDismissed}
+ >
+ {'Cancel'}
+ </button>
+ <button
+ onClick={this.handleSubmit}
+ type='submit'
+ className='btn btn-primary'
+ tabIndex='3'
+ >
+ {'Create New ' + channelTerm}
+ </button>
+ </Modal.Footer>
+ </form>
+ </Modal>
+ </span>
+ );
+ }
+}
+
+NewChannelModal.defaultProps = {
+ show: false,
+ channelType: 'O',
+ serverError: ''
+};
+NewChannelModal.propTypes = {
+ show: React.PropTypes.bool.isRequired,
+ channelType: React.PropTypes.string.isRequired,
+ channelData: React.PropTypes.object.isRequired,
+ serverError: React.PropTypes.string,
+ onSubmitChannel: React.PropTypes.func.isRequired,
+ onModalDismissed: React.PropTypes.func.isRequired,
+ onTypeSwitched: React.PropTypes.func.isRequired,
+ onChangeURLPressed: React.PropTypes.func.isRequired,
+ onDataChanged: React.PropTypes.func.isRequired
+};
diff --git a/web/react/components/password_reset_form.jsx b/web/react/components/password_reset_form.jsx
index 1b579efbc..dae582627 100644
--- a/web/react/components/password_reset_form.jsx
+++ b/web/react/components/password_reset_form.jsx
@@ -2,7 +2,6 @@
// See License.txt for license information.
var client = require('../utils/client.jsx');
-import {config} from '../utils/config.js';
export default class PasswordResetForm extends React.Component {
constructor(props) {
@@ -62,7 +61,7 @@ export default class PasswordResetForm extends React.Component {
<div className='signup-team__container'>
<h3>Password Reset</h3>
<form onSubmit={this.handlePasswordReset}>
- <p>{'Enter a new password for your ' + this.props.teamDisplayName + ' ' + config.SiteName + ' account.'}</p>
+ <p>{'Enter a new password for your ' + this.props.teamDisplayName + ' ' + global.window.config.SiteName + ' account.'}</p>
<div className={formClass}>
<input
type='password'
diff --git a/web/react/components/popover_list_members.jsx b/web/react/components/popover_list_members.jsx
index fb9522afb..ec873dd00 100644
--- a/web/react/components/popover_list_members.jsx
+++ b/web/react/components/popover_list_members.jsx
@@ -25,7 +25,7 @@ export default class PopoverListMembers extends React.Component {
$('#member_popover').popover({placement: 'bottom', trigger: 'click', html: true});
$('body').on('click', function onClick(e) {
- if ($(e.target.parentNode.parentNode)[0] !== $('#member_popover')[0] && $(e.target).parents('.popover.in').length === 0) {
+ if (e.target.parentNode && $(e.target.parentNode.parentNode)[0] !== $('#member_popover')[0] && $(e.target).parents('.popover.in').length === 0) {
$('#member_popover').popover('hide');
}
});
diff --git a/web/react/components/post_body.jsx b/web/react/components/post_body.jsx
index d9b8f20ce..3be615bb9 100644
--- a/web/react/components/post_body.jsx
+++ b/web/react/components/post_body.jsx
@@ -5,6 +5,7 @@ const FileAttachmentList = require('./file_attachment_list.jsx');
const UserStore = require('../stores/user_store.jsx');
const Utils = require('../utils/utils.jsx');
const Constants = require('../utils/constants.jsx');
+const TextFormatting = require('../utils/text_formatting.jsx');
const twemoji = require('twemoji');
export default class PostBody extends React.Component {
@@ -16,24 +17,46 @@ export default class PostBody extends React.Component {
const linkData = Utils.extractLinks(this.props.post.message);
this.state = {links: linkData.links, message: linkData.text};
}
+
+ getAllChildNodes(nodeIn) {
+ var textNodes = [];
+
+ function getTextNodes(node) {
+ textNodes.push(node);
+
+ for (var i = 0, len = node.childNodes.length; i < len; ++i) {
+ getTextNodes(node.childNodes[i]);
+ }
+ }
+
+ getTextNodes(nodeIn);
+ return textNodes;
+ }
+
parseEmojis() {
twemoji.parse(React.findDOMNode(this), {size: Constants.EMOJI_SIZE});
+ this.getAllChildNodes(React.findDOMNode(this)).forEach((current) => {
+ global.window.emojify.run(current);
+ });
}
+
componentDidMount() {
this.parseEmojis();
}
+
componentDidUpdate() {
this.parseEmojis();
}
+
componentWillReceiveProps(nextProps) {
const linkData = Utils.extractLinks(nextProps.post.message);
this.setState({links: linkData.links, message: linkData.text});
}
+
render() {
const post = this.props.post;
const filenames = this.props.post.filenames;
const parentPost = this.props.parentPost;
- const inner = Utils.textToJsx(this.state.message);
let comment = '';
let postClass = '';
@@ -75,7 +98,7 @@ export default class PostBody extends React.Component {
comment = (
<p className='post-link'>
<span>
- Commented on {name}{apostrophe} message:
+ {'Commented on '}{name}{apostrophe}{' message:'}
<a
className='theme'
onClick={this.props.handleCommentClick}
@@ -98,7 +121,7 @@ export default class PostBody extends React.Component {
href='#'
onClick={this.props.retryPost}
>
- Retry
+ {'Retry'}
</a>
);
} else if (post.state === Constants.POST_LOADING) {
@@ -133,9 +156,14 @@ export default class PostBody extends React.Component {
{comment}
<p
key={`${post.id}_message`}
+ id={`${post.id}_message`}
className={postClass}
>
- {loading}<span>{inner}</span>
+ {loading}
+ <span
+ onClick={TextFormatting.handleClick}
+ dangerouslySetInnerHTML={{__html: TextFormatting.formatText(this.state.message)}}
+ />
</p>
{fileAttachmentHolder}
{embed}
diff --git a/web/react/components/post_list.jsx b/web/react/components/post_list.jsx
index e6aa3f8df..faa5e5f0b 100644
--- a/web/react/components/post_list.jsx
+++ b/web/react/components/post_list.jsx
@@ -15,8 +15,6 @@ var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
var Constants = require('../utils/constants.jsx');
var ActionTypes = Constants.ActionTypes;
-import {strings} from '../utils/config.js';
-
export default class PostList extends React.Component {
constructor(props) {
super(props);
@@ -347,7 +345,7 @@ export default class PostList extends React.Component {
return (
<div className='channel-intro'>
- <p className='channel-intro-text'>{'This is the start of your private message history with this ' + strings.Team + 'mate. Private messages and files shared here are not shown to people outside this area.'}</p>
+ <p className='channel-intro-text'>{'This is the start of your private message history with this teammate. Private messages and files shared here are not shown to people outside this area.'}</p>
</div>
);
}
@@ -369,7 +367,7 @@ export default class PostList extends React.Component {
<p className='channel-intro__content'>
Welcome to {channel.display_name}!
<br/><br/>
- This is the first channel {strings.Team}mates see when they
+ This is the first channel teammates see when they
<br/>
sign up - use it for posting updates everyone needs to know.
<br/><br/>
diff --git a/web/react/components/register_app_modal.jsx b/web/react/components/register_app_modal.jsx
new file mode 100644
index 000000000..3dd5c094e
--- /dev/null
+++ b/web/react/components/register_app_modal.jsx
@@ -0,0 +1,249 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var Client = require('../utils/client.jsx');
+
+export default class RegisterAppModal extends React.Component {
+ constructor() {
+ super();
+
+ this.register = this.register.bind(this);
+ this.onHide = this.onHide.bind(this);
+ this.save = this.save.bind(this);
+
+ this.state = {clientId: '', clientSecret: '', saved: false};
+ }
+ componentDidMount() {
+ $(React.findDOMNode(this)).on('hide.bs.modal', this.onHide);
+ }
+ register() {
+ var state = this.state;
+ state.serverError = null;
+
+ var app = {};
+
+ var name = this.refs.name.getDOMNode().value;
+ if (!name || name.length === 0) {
+ state.nameError = 'Application name must be filled in.';
+ this.setState(state);
+ return;
+ }
+ state.nameError = null;
+ app.name = name;
+
+ var homepage = this.refs.homepage.getDOMNode().value;
+ if (!homepage || homepage.length === 0) {
+ state.homepageError = 'Homepage must be filled in.';
+ this.setState(state);
+ return;
+ }
+ state.homepageError = null;
+ app.homepage = homepage;
+
+ var desc = this.refs.desc.getDOMNode().value;
+ app.description = desc;
+
+ var rawCallbacks = this.refs.callback.getDOMNode().value.trim();
+ if (!rawCallbacks || rawCallbacks.length === 0) {
+ state.callbackError = 'At least one callback URL must be filled in.';
+ this.setState(state);
+ return;
+ }
+ state.callbackError = null;
+ app.callback_urls = rawCallbacks.split('\n');
+
+ Client.registerOAuthApp(app,
+ (data) => {
+ state.clientId = data.id;
+ state.clientSecret = data.client_secret;
+ this.setState(state);
+ },
+ (err) => {
+ state.serverError = err.message;
+ this.setState(state);
+ }
+ );
+ }
+ onHide(e) {
+ if (!this.state.saved && this.state.clientId !== '') {
+ e.preventDefault();
+ return;
+ }
+
+ this.setState({clientId: '', clientSecret: '', saved: false});
+ }
+ save() {
+ this.setState({saved: this.refs.save.getDOMNode().checked});
+ }
+ render() {
+ var nameError;
+ if (this.state.nameError) {
+ nameError = <div className='form-group has-error'><label className='control-label'>{this.state.nameError}</label></div>;
+ }
+ var homepageError;
+ if (this.state.homepageError) {
+ homepageError = <div className='form-group has-error'><label className='control-label'>{this.state.homepageError}</label></div>;
+ }
+ var callbackError;
+ if (this.state.callbackError) {
+ callbackError = <div className='form-group has-error'><label className='control-label'>{this.state.callbackError}</label></div>;
+ }
+ var serverError;
+ if (this.state.serverError) {
+ serverError = <div className='form-group has-error'><label className='control-label'>{this.state.serverError}</label></div>;
+ }
+
+ var body = '';
+ if (this.state.clientId === '') {
+ body = (
+ <div className='form-group user-settings'>
+ <h3>{'Register a New Application'}</h3>
+ <br/>
+ <label className='col-sm-4 control-label'>{'Application Name'}</label>
+ <div className='col-sm-7'>
+ <input
+ ref='name'
+ className='form-control'
+ type='text'
+ placeholder='Required'
+ />
+ {nameError}
+ </div>
+ <br/>
+ <br/>
+ <label className='col-sm-4 control-label'>{'Homepage URL'}</label>
+ <div className='col-sm-7'>
+ <input
+ ref='homepage'
+ className='form-control'
+ type='text'
+ placeholder='Required'
+ />
+ {homepageError}
+ </div>
+ <br/>
+ <br/>
+ <label className='col-sm-4 control-label'>{'Description'}</label>
+ <div className='col-sm-7'>
+ <input
+ ref='desc'
+ className='form-control'
+ type='text'
+ placeholder='Optional'
+ />
+ </div>
+ <br/>
+ <br/>
+ <label className='col-sm-4 control-label'>{'Callback URL'}</label>
+ <div className='col-sm-7'>
+ <textarea
+ ref='callback'
+ className='form-control'
+ type='text'
+ placeholder='Required'
+ rows='5'
+ />
+ {callbackError}
+ </div>
+ <br/>
+ <br/>
+ <br/>
+ <br/>
+ <br/>
+ {serverError}
+ <a
+ className='btn btn-sm theme pull-right'
+ href='#'
+ data-dismiss='modal'
+ aria-label='Close'
+ >
+ {'Cancel'}
+ </a>
+ <a
+ className='btn btn-sm btn-primary pull-right'
+ onClick={this.register}
+ >
+ {'Register'}
+ </a>
+ </div>
+ );
+ } else {
+ var btnClass = ' disabled';
+ if (this.state.saved) {
+ btnClass = '';
+ }
+
+ body = (
+ <div className='form-group user-settings'>
+ <h3>{'Your Application Credentials'}</h3>
+ <br/>
+ <br/>
+ <label className='col-sm-12 control-label'>{'Client ID: '}{this.state.clientId}</label>
+ <label className='col-sm-12 control-label'>{'Client Secret: '}{this.state.clientSecret}</label>
+ <br/>
+ <br/>
+ <br/>
+ <br/>
+ <strong>{'Save these somewhere SAFE and SECURE. We can retrieve your Client Id if you lose it, but your Client Secret will be lost forever if you were to lose it.'}</strong>
+ <br/>
+ <br/>
+ <div className='checkbox'>
+ <label>
+ <input
+ ref='save'
+ type='checkbox'
+ checked={this.state.saved}
+ onClick={this.save}
+ >
+ {'I have saved both my Client Id and Client Secret somewhere safe'}
+ </input>
+ </label>
+ </div>
+ <a
+ className={'btn btn-sm btn-primary pull-right' + btnClass}
+ href='#'
+ data-dismiss='modal'
+ aria-label='Close'
+ >
+ {'Close'}
+ </a>
+ </div>
+ );
+ }
+
+ return (
+ <div
+ className='modal fade'
+ ref='modal'
+ id='register_app'
+ role='dialog'
+ aria-hidden='true'
+ >
+ <div className='modal-dialog'>
+ <div className='modal-content'>
+ <div className='modal-header'>
+ <button
+ type='button'
+ className='close'
+ data-dismiss='modal'
+ aria-label='Close'
+ >
+ <span aria-hidden='true'>{'x'}</span>
+ </button>
+ <h4
+ className='modal-title'
+ ref='title'
+ >
+ {'Developer Applications'}
+ </h4>
+ </div>
+ <div className='modal-body'>
+ {body}
+ </div>
+ </div>
+ </div>
+ </div>
+ );
+ }
+}
+
diff --git a/web/react/components/rhs_comment.jsx b/web/react/components/rhs_comment.jsx
index f1a90102c..ed136c01f 100644
--- a/web/react/components/rhs_comment.jsx
+++ b/web/react/components/rhs_comment.jsx
@@ -12,6 +12,7 @@ var FileAttachmentList = require('./file_attachment_list.jsx');
var Client = require('../utils/client.jsx');
var AsyncClient = require('../utils/async_client.jsx');
var ActionTypes = Constants.ActionTypes;
+var TextFormatting = require('../utils/text_formatting.jsx');
var twemoji = require('twemoji');
export default class RhsComment extends React.Component {
@@ -84,7 +85,6 @@ export default class RhsComment extends React.Component {
type = 'Comment';
}
- var message = Utils.textToJsx(post.message);
var timestamp = UserStore.getCurrentUser().update_at;
var loading;
@@ -202,7 +202,13 @@ export default class RhsComment extends React.Component {
</li>
</ul>
<div className='post-body'>
- <p className={postClass}>{loading}{message}</p>
+ <p className={postClass}>
+ {loading}
+ <span
+ onClick={TextFormatting.handleClick}
+ dangerouslySetInnerHTML={{__html: TextFormatting.formatText(post.message)}}
+ />
+ </p>
{fileAttachment}
</div>
</div>
diff --git a/web/react/components/rhs_root_post.jsx b/web/react/components/rhs_root_post.jsx
index 83b57b955..85755a85c 100644
--- a/web/react/components/rhs_root_post.jsx
+++ b/web/react/components/rhs_root_post.jsx
@@ -4,6 +4,7 @@
var ChannelStore = require('../stores/channel_store.jsx');
var UserProfile = require('./user_profile.jsx');
var UserStore = require('../stores/user_store.jsx');
+var TextFormatting = require('../utils/text_formatting.jsx');
var utils = require('../utils/utils.jsx');
var FileAttachmentList = require('./file_attachment_list.jsx');
var twemoji = require('twemoji');
@@ -35,7 +36,6 @@ export default class RhsRootPost extends React.Component {
}
render() {
var post = this.props.post;
- var message = utils.textToJsx(post.message);
var isOwner = UserStore.getCurrentId() === post.user_id;
var timestamp = UserStore.getProfile(post.user_id).update_at;
var channel = ChannelStore.get(post.channel_id);
@@ -140,7 +140,10 @@ export default class RhsRootPost extends React.Component {
</li>
</ul>
<div className='post-body'>
- <p>{message}</p>
+ <p
+ onClick={TextFormatting.handleClick}
+ dangerouslySetInnerHTML={{__html: TextFormatting.formatText(post.message)}}
+ />
{fileAttachment}
</div>
</div>
diff --git a/web/react/components/search_bar.jsx b/web/react/components/search_bar.jsx
index 006d15459..77166fef9 100644
--- a/web/react/components/search_bar.jsx
+++ b/web/react/components/search_bar.jsx
@@ -75,6 +75,9 @@ export default class SearchBar extends React.Component {
PostStore.emitSearchTermChange(false);
this.setState({searchTerm: term});
}
+ handleMouseInput(e) {
+ e.preventDefault();
+ }
handleUserFocus(e) {
e.target.select();
$('.search-bar__container').addClass('focused');
@@ -140,6 +143,7 @@ export default class SearchBar extends React.Component {
value={this.state.searchTerm}
onFocus={this.handleUserFocus}
onChange={this.handleUserInput}
+ onMouseUp={this.handleMouseInput}
/>
{isSearching}
</form>
diff --git a/web/react/components/search_results_item.jsx b/web/react/components/search_results_item.jsx
index aa56f1174..0e951f5c6 100644
--- a/web/react/components/search_results_item.jsx
+++ b/web/react/components/search_results_item.jsx
@@ -10,6 +10,7 @@ var client = require('../utils/client.jsx');
var AsyncClient = require('../utils/async_client.jsx');
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
var Constants = require('../utils/constants.jsx');
+var TextFormatting = require('../utils/text_formatting.jsx');
var ActionTypes = Constants.ActionTypes;
export default class SearchResultsItem extends React.Component {
@@ -56,7 +57,6 @@ export default class SearchResultsItem extends React.Component {
}
render() {
- var message = utils.textToJsx(this.props.post.message, {searchTerm: this.props.term, noMentionHighlight: !this.props.isMentionSearch});
var channelName = '';
var channel = ChannelStore.get(this.props.post.channel_id);
var timestamp = UserStore.getCurrentUser().update_at;
@@ -68,6 +68,11 @@ export default class SearchResultsItem extends React.Component {
}
}
+ const formattingOptions = {
+ searchTerm: this.props.term,
+ mentionHighlight: this.props.isMentionSearch
+ };
+
return (
<div
className='search-item-container post'
@@ -91,7 +96,12 @@ export default class SearchResultsItem extends React.Component {
</time>
</li>
</ul>
- <div className='search-item-snippet'><span>{message}</span></div>
+ <div className='search-item-snippet'>
+ <span
+ onClick={this.handleClick}
+ dangerouslySetInnerHTML={{__html: TextFormatting.formatText(this.props.post.message, formattingOptions)}}
+ />
+ </div>
</div>
</div>
);
@@ -102,4 +112,4 @@ SearchResultsItem.propTypes = {
post: React.PropTypes.object,
isMentionSearch: React.PropTypes.bool,
term: React.PropTypes.string
-}; \ No newline at end of file
+};
diff --git a/web/react/components/setting_item_max.jsx b/web/react/components/setting_item_max.jsx
index b1bab1d48..1bffa7c79 100644
--- a/web/react/components/setting_item_max.jsx
+++ b/web/react/components/setting_item_max.jsx
@@ -26,7 +26,7 @@ export default class SettingItemMax extends React.Component {
href='#'
onClick={this.props.submit}
>
- Submit
+ Save
</a>
);
}
diff --git a/web/react/components/setting_picture.jsx b/web/react/components/setting_picture.jsx
index a53112651..ddad4fd53 100644
--- a/web/react/components/setting_picture.jsx
+++ b/web/react/components/setting_picture.jsx
@@ -1,8 +1,6 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
-import {config} from '../utils/config.js';
-
export default class SettingPicture extends React.Component {
constructor(props) {
super(props);
@@ -81,7 +79,7 @@ export default class SettingPicture extends React.Component {
>Save</a>
);
}
- var helpText = 'Upload a profile picture in either JPG or PNG format, at least ' + config.ProfileWidth + 'px in width and ' + config.ProfileHeight + 'px height.';
+ var helpText = 'Upload a profile picture in either JPG or PNG format, at least ' + global.window.config.ProfileWidth + 'px in width and ' + global.window.config.ProfileHeight + 'px height.';
var self = this;
return (
diff --git a/web/react/components/sidebar.jsx b/web/react/components/sidebar.jsx
index ad934d271..87007edcc 100644
--- a/web/react/components/sidebar.jsx
+++ b/web/react/components/sidebar.jsx
@@ -12,6 +12,8 @@ var Utils = require('../utils/utils.jsx');
var SidebarHeader = require('./sidebar_header.jsx');
var SearchBox = require('./search_bar.jsx');
var Constants = require('../utils/constants.jsx');
+var NewChannelFlow = require('./new_channel_flow.jsx');
+var UnreadChannelIndicator = require('./unread_channel_indicator.jsx');
export default class Sidebar extends React.Component {
constructor(props) {
@@ -28,6 +30,7 @@ export default class Sidebar extends React.Component {
this.createChannelElement = this.createChannelElement.bind(this);
this.state = this.getStateFromStores();
+ this.state.modal = '';
this.state.loadingDMChannel = -1;
}
getStateFromStores() {
@@ -151,6 +154,16 @@ export default class Sidebar extends React.Component {
$(window).on('resize', this.onResize);
}
+ shouldComponentUpdate(nextProps, nextState) {
+ if (!Utils.areStatesEqual(nextProps, this.props)) {
+ return true;
+ }
+
+ if (!Utils.areStatesEqual(nextState, this.state)) {
+ return true;
+ }
+ return false;
+ }
componentDidUpdate() {
this.updateTitle();
this.updateUnreadIndicators();
@@ -272,15 +285,16 @@ export default class Sidebar extends React.Component {
this.updateUnreadIndicators();
}
updateUnreadIndicators() {
- var container = $(React.findDOMNode(this.refs.container));
+ const container = $(React.findDOMNode(this.refs.container));
+
+ var showTopUnread = false;
+ var showBottomUnread = false;
if (this.firstUnreadChannel) {
var firstUnreadElement = $(React.findDOMNode(this.refs[this.firstUnreadChannel]));
if (firstUnreadElement.position().top + firstUnreadElement.height() < 0) {
- $(React.findDOMNode(this.refs.topUnreadIndicator)).css('display', 'initial');
- } else {
- $(React.findDOMNode(this.refs.topUnreadIndicator)).css('display', 'none');
+ showTopUnread = true;
}
}
@@ -288,11 +302,14 @@ export default class Sidebar extends React.Component {
var lastUnreadElement = $(React.findDOMNode(this.refs[this.lastUnreadChannel]));
if (lastUnreadElement.position().top > container.height()) {
- $(React.findDOMNode(this.refs.bottomUnreadIndicator)).css('display', 'initial');
- } else {
- $(React.findDOMNode(this.refs.bottomUnreadIndicator)).css('display', 'none');
+ showBottomUnread = true;
}
}
+
+ this.setState({
+ showTopUnread,
+ showBottomUnread
+ });
}
createChannelElement(channel, index) {
var members = this.state.members;
@@ -346,6 +363,11 @@ export default class Sidebar extends React.Component {
);
}
+ var badgeClass;
+ if (msgCount > 0) {
+ badgeClass = 'has-badge';
+ }
+
// set up status icon for direct message channels
var status = null;
if (channel.type === 'D') {
@@ -406,7 +428,7 @@ export default class Sidebar extends React.Component {
className={linkClass}
>
<a
- className={'sidebar-channel ' + titleClass}
+ className={'sidebar-channel ' + titleClass + ' ' + badgeClass}
href={href}
onClick={handleClick}
>
@@ -425,19 +447,13 @@ export default class Sidebar extends React.Component {
this.lastUnreadChannel = null;
// create elements for all 3 types of channels
- var channelItems = this.state.channels.filter(
- function filterPublicChannels(channel) {
- return channel.type === 'O';
- }
- ).map(this.createChannelElement);
+ const publicChannels = this.state.channels.filter((channel) => channel.type === 'O');
+ const publicChannelItems = publicChannels.map(this.createChannelElement);
- var privateChannelItems = this.state.channels.filter(
- function filterPrivateChannels(channel) {
- return channel.type === 'P';
- }
- ).map(this.createChannelElement);
+ const privateChannels = this.state.channels.filter((channel) => channel.type === 'P');
+ const privateChannelItems = privateChannels.map(this.createChannelElement);
- var directMessageItems = this.state.showDirectChannels.map(this.createChannelElement);
+ const directMessageItems = this.state.showDirectChannels.map(this.createChannelElement);
// update the favicon to show if there are any notifications
var link = document.createElement('link');
@@ -473,28 +489,34 @@ export default class Sidebar extends React.Component {
);
}
+ let showChannelModal = false;
+ if (this.state.modal !== '') {
+ showChannelModal = true;
+ }
+
return (
<div>
+ <NewChannelFlow
+ show={showChannelModal}
+ channelType={this.state.modal}
+ onModalDismissed={() => this.setState({modal: ''})}
+ />
<SidebarHeader
teamDisplayName={this.props.teamDisplayName}
teamType={this.props.teamType}
/>
<SearchBox />
- <div
- ref='topUnreadIndicator'
- className='nav-pills__unread-indicator nav-pills__unread-indicator-top'
- style={{display: 'none'}}
- >
- Unread post(s) above
- </div>
- <div
- ref='bottomUnreadIndicator'
- className='nav-pills__unread-indicator nav-pills__unread-indicator-bottom'
- style={{display: 'none'}}
- >
- Unread post(s) below
- </div>
+ <UnreadChannelIndicator
+ show={this.state.showTopUnread}
+ extraClass='nav-pills__unread-indicator-top'
+ text={'Unread post(s) above'}
+ />
+ <UnreadChannelIndicator
+ show={this.state.showBottomUnread}
+ extraClass='nav-pills__unread-indicator-bottom'
+ text={'Unread post(s) below'}
+ />
<div
ref='container'
@@ -508,15 +530,13 @@ export default class Sidebar extends React.Component {
<a
className='add-channel-btn'
href='#'
- data-toggle='modal'
- data-target='#new_channel'
- data-channeltype='O'
+ onClick={() => this.setState({modal: 'O'})}
>
- +
+ {'+'}
</a>
</h4>
</li>
- {channelItems}
+ {publicChannelItems}
<li>
<a
href='#'
@@ -537,11 +557,9 @@ export default class Sidebar extends React.Component {
<a
className='add-channel-btn'
href='#'
- data-toggle='modal'
- data-target='#new_channel'
- data-channeltype='P'
+ onClick={() => this.setState({modal: 'P'})}
>
- +
+ {'+'}
</a>
</h4>
</li>
diff --git a/web/react/components/sidebar_header.jsx b/web/react/components/sidebar_header.jsx
index 0056d7a2f..959411f1e 100644
--- a/web/react/components/sidebar_header.jsx
+++ b/web/react/components/sidebar_header.jsx
@@ -3,7 +3,6 @@
var NavbarDropdown = require('./navbar_dropdown.jsx');
var UserStore = require('../stores/user_store.jsx');
-import {config} from '../utils/config.js';
export default class SidebarHeader extends React.Component {
constructor(props) {
@@ -59,7 +58,7 @@ export default class SidebarHeader extends React.Component {
}
SidebarHeader.defaultProps = {
- teamDisplayName: config.SiteName,
+ teamDisplayName: global.window.config.SiteName,
teamType: ''
};
SidebarHeader.propTypes = {
diff --git a/web/react/components/sidebar_right_menu.jsx b/web/react/components/sidebar_right_menu.jsx
index bd10a6ef1..5ecd502ba 100644
--- a/web/react/components/sidebar_right_menu.jsx
+++ b/web/react/components/sidebar_right_menu.jsx
@@ -4,7 +4,6 @@
var UserStore = require('../stores/user_store.jsx');
var client = require('../utils/client.jsx');
var utils = require('../utils/utils.jsx');
-import {config} from '../utils/config.js';
export default class SidebarRightMenu extends React.Component {
constructor(props) {
@@ -75,8 +74,8 @@ export default class SidebarRightMenu extends React.Component {
}
var siteName = '';
- if (config.SiteName != null) {
- siteName = config.SiteName;
+ if (global.window.config.SiteName != null) {
+ siteName = global.window.config.SiteName;
}
var teamDisplayName = siteName;
if (this.props.teamDisplayName) {
diff --git a/web/react/components/signup_team_complete.jsx b/web/react/components/signup_team_complete.jsx
index dc0d1d376..9c03c5c2f 100644
--- a/web/react/components/signup_team_complete.jsx
+++ b/web/react/components/signup_team_complete.jsx
@@ -4,7 +4,6 @@
var WelcomePage = require('./team_signup_welcome_page.jsx');
var TeamDisplayNamePage = require('./team_signup_display_name_page.jsx');
var TeamURLPage = require('./team_signup_url_page.jsx');
-var AllowedDomainsPage = require('./team_signup_allowed_domains_page.jsx');
var SendInivtesPage = require('./team_signup_send_invites_page.jsx');
var UsernamePage = require('./team_signup_username_page.jsx');
var PasswordPage = require('./team_signup_password_page.jsx');
@@ -70,15 +69,6 @@ export default class SignupTeamComplete extends React.Component {
);
}
- if (this.state.wizard === 'allowed_domains') {
- return (
- <AllowedDomainsPage
- state={this.state}
- updateParent={this.updateParent}
- />
- );
- }
-
if (this.state.wizard === 'send_invites') {
return (
<SendInivtesPage
diff --git a/web/react/components/signup_user_complete.jsx b/web/react/components/signup_user_complete.jsx
index f078f6169..19c3b2d22 100644
--- a/web/react/components/signup_user_complete.jsx
+++ b/web/react/components/signup_user_complete.jsx
@@ -6,7 +6,6 @@ var client = require('../utils/client.jsx');
var UserStore = require('../stores/user_store.jsx');
var BrowserStore = require('../stores/browser_store.jsx');
var Constants = require('../utils/constants.jsx');
-import {config} from '../utils/config.js';
export default class SignupUserComplete extends React.Component {
constructor(props) {
@@ -32,7 +31,7 @@ export default class SignupUserComplete extends React.Component {
handleSubmit(e) {
e.preventDefault();
- this.state.user.username = React.findDOMNode(this.refs.name).value.trim();
+ this.state.user.username = React.findDOMNode(this.refs.name).value.trim().toLowerCase();
if (!this.state.user.username) {
this.setState({nameError: 'This field is required', emailError: '', passwordError: '', serverError: ''});
return;
@@ -136,7 +135,7 @@ export default class SignupUserComplete extends React.Component {
// set up the email entry and hide it if an email was provided
var yourEmailIs = '';
if (this.state.user.email) {
- yourEmailIs = <span>Your email address is {this.state.user.email}. You'll use this address to sign in to {config.SiteName}.</span>;
+ yourEmailIs = <span>Your email address is {this.state.user.email}. You'll use this address to sign in to {global.window.config.SiteName}.</span>;
}
var emailContainerStyle = 'margin--extra';
@@ -237,11 +236,6 @@ export default class SignupUserComplete extends React.Component {
);
}
- var termsDisclaimer = null;
- if (config.ShowTermsDuringSignup) {
- termsDisclaimer = <p>By creating an account and using Mattermost you are agreeing to our <a href={config.TermsLink}>Terms of Service</a>. If you do not agree, you cannot use this service.</p>;
- }
-
return (
<div>
<form>
@@ -251,12 +245,11 @@ export default class SignupUserComplete extends React.Component {
/>
<h5 className='margin--less'>Welcome to:</h5>
<h2 className='signup-team__name'>{this.props.teamDisplayName}</h2>
- <h2 className='signup-team__subdomain'>on {config.SiteName}</h2>
+ <h2 className='signup-team__subdomain'>on {global.window.config.SiteName}</h2>
<h4 className='color--light'>Let's create your account</h4>
{signupMessage}
{emailSignup}
{serverError}
- {termsDisclaimer}
</form>
</div>
);
diff --git a/web/react/components/team_general_tab.jsx b/web/react/components/team_general_tab.jsx
index 25139bb95..ca438df78 100644
--- a/web/react/components/team_general_tab.jsx
+++ b/web/react/components/team_general_tab.jsx
@@ -6,7 +6,6 @@ const SettingItemMax = require('./setting_item_max.jsx');
const Client = require('../utils/client.jsx');
const Utils = require('../utils/utils.jsx');
-import {strings} from '../utils/config.js';
export default class GeneralTab extends React.Component {
constructor(props) {
@@ -30,7 +29,7 @@ export default class GeneralTab extends React.Component {
state.clientError = 'This field is required';
valid = false;
} else if (name === this.props.teamDisplayName) {
- state.clientError = 'Please choose a new name for your ' + strings.Team;
+ state.clientError = 'Please choose a new name for your team';
valid = false;
} else {
state.clientError = '';
@@ -99,7 +98,7 @@ export default class GeneralTab extends React.Component {
if (this.props.activeSection === 'name') {
let inputs = [];
- let teamNameLabel = Utils.toTitleCase(strings.Team) + ' Name';
+ let teamNameLabel = 'Team Name';
if (Utils.isMobile()) {
teamNameLabel = '';
}
@@ -123,7 +122,7 @@ export default class GeneralTab extends React.Component {
nameSection = (
<SettingItemMax
- title={`${Utils.toTitleCase(strings.Team)} Name`}
+ title={`Team Name`}
inputs={inputs}
submit={this.handleNameSubmit}
server_error={serverError}
@@ -136,7 +135,7 @@ export default class GeneralTab extends React.Component {
nameSection = (
<SettingItemMin
- title={`${Utils.toTitleCase(strings.Team)} Name`}
+ title={`Team Name`}
describe={describe}
updateSection={this.onUpdateSection}
/>
diff --git a/web/react/components/team_import_tab.jsx b/web/react/components/team_import_tab.jsx
index 031abc36a..8315430e4 100644
--- a/web/react/components/team_import_tab.jsx
+++ b/web/react/components/team_import_tab.jsx
@@ -35,7 +35,7 @@ export default class TeamImportTab extends React.Component {
var uploadHelpText = (
<div>
<p>{'Slack does not allow you to export files, images, private groups or direct messages stored in Slack. Therefore, Slack import to Mattermost only supports importing of text messages in your Slack team\'\s public channels.'}</p>
- <p>{'The Slack import to Mattermost is in "Preview". Slack bot posts and channels with underscores do not yet import.'}</p>
+ <p>{'The Slack import to Mattermost is in "Preview". Slack bot posts do not yet import.'}</p>
</div>
);
diff --git a/web/react/components/team_signup_allowed_domains_page.jsx b/web/react/components/team_signup_allowed_domains_page.jsx
deleted file mode 100644
index 721fa142a..000000000
--- a/web/react/components/team_signup_allowed_domains_page.jsx
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
-// See License.txt for license information.
-
-var Client = require('../utils/client.jsx');
-import {strings} from '../utils/config.js';
-
-export default class TeamSignupAllowedDomainsPage extends React.Component {
- constructor(props) {
- super(props);
-
- this.submitBack = this.submitBack.bind(this);
- this.submitNext = this.submitNext.bind(this);
-
- this.state = {};
- }
- submitBack(e) {
- e.preventDefault();
- this.props.state.wizard = 'team_url';
- this.props.updateParent(this.props.state);
- }
- submitNext(e) {
- e.preventDefault();
-
- if (React.findDOMNode(this.refs.open_network).checked) {
- this.props.state.wizard = 'send_invites';
- this.props.state.team.type = 'O';
- this.props.updateParent(this.props.state);
- return;
- }
-
- if (React.findDOMNode(this.refs.allow).checked) {
- var name = React.findDOMNode(this.refs.name).value.trim();
- var domainRegex = /^\w+\.\w+$/;
- if (!name) {
- this.setState({nameError: 'This field is required'});
- return;
- }
-
- if (!name.trim().match(domainRegex)) {
- this.setState({nameError: 'The domain doesn\'t appear valid'});
- return;
- }
-
- this.props.state.wizard = 'send_invites';
- this.props.state.team.allowed_domains = name;
- this.props.state.team.type = 'I';
- this.props.updateParent(this.props.state);
- } else {
- this.props.state.wizard = 'send_invites';
- this.props.state.team.type = 'I';
- this.props.updateParent(this.props.state);
- }
- }
- render() {
- Client.track('signup', 'signup_team_04_allow_domains');
-
- var nameError = null;
- var nameDivClass = 'form-group';
- if (this.state.nameError) {
- nameError = <label className='control-label'>{this.state.nameError}</label>;
- nameDivClass += ' has-error';
- }
-
- return (
- <div>
- <form>
- <img
- className='signup-team-logo'
- src='/static/images/logo.png'
- />
- <h2>Email Domain</h2>
- <p>
- <div className='checkbox'>
- <label>
- <input
- type='checkbox'
- ref='allow'
- defaultChecked={true}
- />
- {' Allow sign up and ' + strings.Team + ' discovery with a ' + strings.Company + ' email address.'}
- </label>
- </div>
- </p>
- <p>{'Check this box to allow your ' + strings.Team + ' members to sign up using their ' + strings.Company + ' email addresses if you share the same domain--otherwise, you need to invite everyone yourself.'}</p>
- <h4>{'Your ' + strings.Team + '\'s domain for emails'}</h4>
- <div className={nameDivClass}>
- <div className='row'>
- <div className='col-sm-9'>
- <div className='input-group'>
- <span className='input-group-addon'>@</span>
- <input
- type='text'
- ref='name'
- className='form-control'
- placeholder=''
- maxLength='128'
- defaultValue={this.props.state.team.allowed_domains}
- autoFocus={true}
- onFocus={this.handleFocus}
- />
- </div>
- </div>
- </div>
- {nameError}
- </div>
- <p>To allow signups from multiple domains, separate each with a comma.</p>
- <p>
- <div className='checkbox'>
- <label>
- <input
- type='checkbox'
- ref='open_network'
- defaultChecked={this.props.state.team.type === 'O'}
- /> Allow anyone to signup to this domain without an invitation.</label>
- </div>
- </p>
- <button
- type='button'
- className='btn btn-default'
- onClick={this.submitBack}
- >
- <i className='glyphicon glyphicon-chevron-left'></i> Back
- </button>&nbsp;
- <button
- type='submit'
- className='btn-primary btn'
- onClick={this.submitNext}
- >
- Next<i className='glyphicon glyphicon-chevron-right'></i>
- </button>
- </form>
- </div>
- );
- }
-}
-
-TeamSignupAllowedDomainsPage.defaultProps = {
- state: {}
-};
-TeamSignupAllowedDomainsPage.propTypes = {
- state: React.PropTypes.object,
- updateParent: React.PropTypes.func
-};
diff --git a/web/react/components/team_signup_choose_auth.jsx b/web/react/components/team_signup_choose_auth.jsx
index acce6ab49..d3107c5c7 100644
--- a/web/react/components/team_signup_choose_auth.jsx
+++ b/web/react/components/team_signup_choose_auth.jsx
@@ -2,7 +2,6 @@
// See License.txt for license information.
var Constants = require('../utils/constants.jsx');
-import {strings} from '../utils/config.js';
export default class ChooseAuthPage extends React.Component {
constructor(props) {
@@ -24,7 +23,7 @@ export default class ChooseAuthPage extends React.Component {
}
>
<span className='icon' />
- <span>Create new {strings.Team} with GitLab Account</span>
+ <span>Create new team with GitLab Account</span>
</a>
);
}
@@ -42,7 +41,7 @@ export default class ChooseAuthPage extends React.Component {
}
>
<span className='fa fa-envelope' />
- <span>Create new {strings.Team} with email address</span>
+ <span>Create new team with email address</span>
</a>
);
}
@@ -55,7 +54,7 @@ export default class ChooseAuthPage extends React.Component {
<div>
{buttons}
<div className='form-group margin--extra-2x'>
- <span><a href='/find_team'>{'Find my ' + strings.Team}</a></span>
+ <span><a href='/find_team'>{'Find my team'}</a></span>
</div>
</div>
);
diff --git a/web/react/components/team_signup_display_name_page.jsx b/web/react/components/team_signup_display_name_page.jsx
index 1849f8222..c0d0ed366 100644
--- a/web/react/components/team_signup_display_name_page.jsx
+++ b/web/react/components/team_signup_display_name_page.jsx
@@ -3,7 +3,6 @@
var utils = require('../utils/utils.jsx');
var client = require('../utils/client.jsx');
-import {strings} from '../utils/config.js';
export default class TeamSignupDisplayNamePage extends React.Component {
constructor(props) {
@@ -54,7 +53,7 @@ export default class TeamSignupDisplayNamePage extends React.Component {
className='signup-team-logo'
src='/static/images/logo.png'
/>
- <h2>{utils.toTitleCase(strings.Team) + ' Name'}</h2>
+ <h2>{'Team Name'}</h2>
<div className={nameDivClass}>
<div className='row'>
<div className='col-sm-9'>
@@ -73,7 +72,7 @@ export default class TeamSignupDisplayNamePage extends React.Component {
{nameError}
</div>
<div>
- {'Name your ' + strings.Team + ' in any language. Your ' + strings.Team + ' name shows in menus and headings.'}
+ {'Name your team in any language. Your team name shows in menus and headings.'}
</div>
<button
type='submit'
diff --git a/web/react/components/team_signup_password_page.jsx b/web/react/components/team_signup_password_page.jsx
index aa402846b..b26d9f6ce 100644
--- a/web/react/components/team_signup_password_page.jsx
+++ b/web/react/components/team_signup_password_page.jsx
@@ -4,7 +4,6 @@
var Client = require('../utils/client.jsx');
var BrowserStore = require('../stores/browser_store.jsx');
var UserStore = require('../stores/user_store.jsx');
-import {strings, config} from '../utils/config.js';
export default class TeamSignupPasswordPage extends React.Component {
constructor(props) {
@@ -123,13 +122,13 @@ export default class TeamSignupPasswordPage extends React.Component {
type='submit'
className='btn btn-primary margin--extra'
id='finish-button'
- data-loading-text={'<span class=\'glyphicon glyphicon-refresh glyphicon-refresh-animate\'></span> Creating ' + strings.Team + '...'}
+ data-loading-text={'<span class=\'glyphicon glyphicon-refresh glyphicon-refresh-animate\'></span> Creating team...'}
onClick={this.submitNext}
>
Finish
</button>
</div>
- <p>By proceeding to create your account and use {config.SiteName}, you agree to our <a href={config.TermsLink}>Terms of Service</a> and <a href={config.PrivacyLink}>Privacy Policy</a>. If you do not agree, you cannot use {config.SiteName}.</p>
+ <p>By proceeding to create your account and use {global.window.config.SiteName}, you agree to our <a href='/static/help/terms.html'>Terms of Service</a> and <a href='/static/help/privacy.html'>Privacy Policy</a>. If you do not agree, you cannot use {global.window.config.SiteName}.</p>
<div className='margin--extra'>
<a
href='#'
diff --git a/web/react/components/team_signup_send_invites_page.jsx b/web/react/components/team_signup_send_invites_page.jsx
index 11a9980d7..41ac98303 100644
--- a/web/react/components/team_signup_send_invites_page.jsx
+++ b/web/react/components/team_signup_send_invites_page.jsx
@@ -2,10 +2,7 @@
// See License.txt for license information.
var EmailItem = require('./team_signup_email_item.jsx');
-var Utils = require('../utils/utils.jsx');
-var ConfigStore = require('../stores/config_store.jsx');
var Client = require('../utils/client.jsx');
-import {strings, config} from '../utils/config.js';
export default class TeamSignupSendInvitesPage extends React.Component {
constructor(props) {
@@ -16,7 +13,7 @@ export default class TeamSignupSendInvitesPage extends React.Component {
this.submitSkip = this.submitSkip.bind(this);
this.keySubmit = this.keySubmit.bind(this);
this.state = {
- emailEnabled: !ConfigStore.getSettingAsBoolean('ByPassEmail', false)
+ emailEnabled: !global.window.config.ByPassEmail
};
if (!this.state.emailEnabled) {
@@ -26,12 +23,7 @@ export default class TeamSignupSendInvitesPage extends React.Component {
}
submitBack(e) {
e.preventDefault();
-
- if (config.AllowSignupDomainsWizard) {
- this.props.state.wizard = 'allowed_domains';
- } else {
- this.props.state.wizard = 'team_url';
- }
+ this.props.state.wizard = 'team_url';
this.props.updateParent(this.props.state);
}
@@ -138,7 +130,7 @@ export default class TeamSignupSendInvitesPage extends React.Component {
bottomContent = (
<p className='color--light'>
- {'if you prefer, you can invite ' + strings.Team + ' members later'}
+ {'if you prefer, you can invite team members later'}
<br />
{' and '}
<a
@@ -153,7 +145,7 @@ export default class TeamSignupSendInvitesPage extends React.Component {
} else {
content = (
<div className='form-group color--light'>
- {'Email is currently disabled for your ' + strings.Team + ', and emails cannot be sent. Contact your system administrator to enable email and email invitations.'}
+ {'Email is currently disabled for your team, and emails cannot be sent. Contact your system administrator to enable email and email invitations.'}
</div>
);
}
@@ -165,7 +157,7 @@ export default class TeamSignupSendInvitesPage extends React.Component {
className='signup-team-logo'
src='/static/images/logo.png'
/>
- <h2>{'Invite ' + Utils.toTitleCase(strings.Team) + ' Members'}</h2>
+ <h2>{'Invite Team Members'}</h2>
{content}
<div className='form-group'>
<button
diff --git a/web/react/components/team_signup_url_page.jsx b/web/react/components/team_signup_url_page.jsx
index ffe9d9fe8..1b722d611 100644
--- a/web/react/components/team_signup_url_page.jsx
+++ b/web/react/components/team_signup_url_page.jsx
@@ -4,7 +4,6 @@
const Utils = require('../utils/utils.jsx');
const Client = require('../utils/client.jsx');
const Constants = require('../utils/constants.jsx');
-import {strings, config} from '../utils/config.js';
export default class TeamSignupUrlPage extends React.Component {
constructor(props) {
@@ -51,12 +50,8 @@ export default class TeamSignupUrlPage extends React.Component {
Client.findTeamByName(name,
function success(data) {
if (!data) {
- if (config.AllowSignupDomainsWizard) {
- this.props.state.wizard = 'allowed_domains';
- } else {
- this.props.state.wizard = 'send_invites';
- this.props.state.team.type = 'O';
- }
+ this.props.state.wizard = 'send_invites';
+ this.props.state.team.type = 'O';
this.props.state.team.name = name;
this.props.updateParent(this.props.state);
@@ -97,7 +92,7 @@ export default class TeamSignupUrlPage extends React.Component {
className='signup-team-logo'
src='/static/images/logo.png'
/>
- <h2>{`${Utils.toTitleCase(strings.Team)} URL`}</h2>
+ <h2>{`Team URL`}</h2>
<div className={nameDivClass}>
<div className='row'>
<div className='col-sm-11'>
@@ -124,7 +119,7 @@ export default class TeamSignupUrlPage extends React.Component {
</div>
{nameError}
</div>
- <p>{`Choose the web address of your new ${strings.Team}:`}</p>
+ <p>{`Choose the web address of your new team:`}</p>
<ul className='color--light'>
<li>Short and memorable is best</li>
<li>Use lowercase letters, numbers and dashes</li>
diff --git a/web/react/components/team_signup_username_page.jsx b/web/react/components/team_signup_username_page.jsx
index b5c8b14df..0053b011d 100644
--- a/web/react/components/team_signup_username_page.jsx
+++ b/web/react/components/team_signup_username_page.jsx
@@ -3,7 +3,6 @@
var Utils = require('../utils/utils.jsx');
var Client = require('../utils/client.jsx');
-import {strings} from '../utils/config.js';
export default class TeamSignupUsernamePage extends React.Component {
constructor(props) {
@@ -22,7 +21,7 @@ export default class TeamSignupUsernamePage extends React.Component {
submitNext(e) {
e.preventDefault();
- var name = React.findDOMNode(this.refs.name).value.trim();
+ var name = React.findDOMNode(this.refs.name).value.trim().toLowerCase();
var usernameError = Utils.isValidUsername(name);
if (usernameError === 'Cannot use a reserved word as a username.') {
@@ -55,7 +54,7 @@ export default class TeamSignupUsernamePage extends React.Component {
src='/static/images/logo.png'
/>
<h2 className='margin--less'>Your username</h2>
- <h5 className='color--light'>{'Select a memorable username that makes it easy for ' + strings.Team + 'mates to identify you:'}</h5>
+ <h5 className='color--light'>{'Select a memorable username that makes it easy for teammates to identify you:'}</h5>
<div className='inner__content margin--extra'>
<div className={nameDivClass}>
<div className='row'>
diff --git a/web/react/components/team_signup_welcome_page.jsx b/web/react/components/team_signup_welcome_page.jsx
index 43b7aea0e..626c6a17b 100644
--- a/web/react/components/team_signup_welcome_page.jsx
+++ b/web/react/components/team_signup_welcome_page.jsx
@@ -4,7 +4,6 @@
var Utils = require('../utils/utils.jsx');
var Client = require('../utils/client.jsx');
var BrowserStore = require('../stores/browser_store.jsx');
-import {config} from '../utils/config.js';
export default class TeamSignupWelcomePage extends React.Component {
constructor(props) {
@@ -112,7 +111,7 @@ export default class TeamSignupWelcomePage extends React.Component {
src='/static/images/logo.png'
/>
<h3 className='sub-heading'>Welcome to:</h3>
- <h1 className='margin--top-none'>{config.SiteName}</h1>
+ <h1 className='margin--top-none'>{global.window.config.SiteName}</h1>
</p>
<p className='margin--less'>Let's set up your new team</p>
<p>
diff --git a/web/react/components/team_signup_with_email.jsx b/web/react/components/team_signup_with_email.jsx
index d75736bd3..4fb1c0d01 100644
--- a/web/react/components/team_signup_with_email.jsx
+++ b/web/react/components/team_signup_with_email.jsx
@@ -3,7 +3,6 @@
const Utils = require('../utils/utils.jsx');
const Client = require('../utils/client.jsx');
-import {strings} from '../utils/config.js';
export default class EmailSignUpPage extends React.Component {
constructor() {
@@ -70,7 +69,7 @@ export default class EmailSignUpPage extends React.Component {
</button>
</div>
<div className='form-group margin--extra-2x'>
- <span><a href='/find_team'>{`Find my ${strings.Team}`}</a></span>
+ <span><a href='/find_team'>{`Find my team`}</a></span>
</div>
</form>
);
diff --git a/web/react/components/team_signup_with_sso.jsx b/web/react/components/team_signup_with_sso.jsx
index 521c21733..2849b4cbb 100644
--- a/web/react/components/team_signup_with_sso.jsx
+++ b/web/react/components/team_signup_with_sso.jsx
@@ -4,7 +4,6 @@
var utils = require('../utils/utils.jsx');
var client = require('../utils/client.jsx');
var Constants = require('../utils/constants.jsx');
-import {strings} from '../utils/config.js';
export default class SSOSignUpPage extends React.Component {
constructor(props) {
@@ -84,7 +83,7 @@ export default class SSOSignUpPage extends React.Component {
disabled={disabled}
>
<span className='icon'/>
- <span>Create {strings.Team} with GitLab Account</span>
+ <span>Create team with GitLab Account</span>
</a>
);
}
@@ -111,7 +110,7 @@ export default class SSOSignUpPage extends React.Component {
{serverError}
</div>
<div className='form-group margin--extra-2x'>
- <span><a href='/find_team'>{'Find my ' + strings.Team}</a></span>
+ <span><a href='/find_team'>{'Find my team'}</a></span>
</div>
</form>
);
diff --git a/web/react/components/unread_channel_indicator.jsx b/web/react/components/unread_channel_indicator.jsx
new file mode 100644
index 000000000..12a67633e
--- /dev/null
+++ b/web/react/components/unread_channel_indicator.jsx
@@ -0,0 +1,35 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+// Indicator for the left sidebar which indicate if there's unread posts in a channel that is not shown
+// because it is either above or below the screen
+export default class UnreadChannelIndicator extends React.Component {
+ constructor(props) {
+ super(props);
+ }
+ render() {
+ let displayValue = 'none';
+ if (this.props.show) {
+ displayValue = 'initial';
+ }
+ return (
+ <div
+ className={'nav-pills__unread-indicator ' + this.props.extraClass}
+ style={{display: displayValue}}
+ >
+ {this.props.text}
+ </div>
+ );
+ }
+}
+
+UnreadChannelIndicator.defaultProps = {
+ show: false,
+ extraClass: '',
+ text: ''
+};
+UnreadChannelIndicator.propTypes = {
+ show: React.PropTypes.bool,
+ extraClass: React.PropTypes.string,
+ text: React.PropTypes.string
+};
diff --git a/web/react/components/user_profile.jsx b/web/react/components/user_profile.jsx
index 739084053..7cfac69e7 100644
--- a/web/react/components/user_profile.jsx
+++ b/web/react/components/user_profile.jsx
@@ -3,7 +3,6 @@
var Utils = require('../utils/utils.jsx');
var UserStore = require('../stores/user_store.jsx');
-import {config} from '../utils/config.js';
var id = 0;
@@ -58,7 +57,7 @@ export default class UserProfile extends React.Component {
}
var dataContent = '<img class="user-popover__image" src="/api/v1/users/' + this.state.profile.id + '/image?time=' + this.state.profile.update_at + '" height="128" width="128" />';
- if (!config.ShowEmail) {
+ if (!global.window.config.ShowEmailAddress) {
dataContent += '<div class="text-nowrap">Email not shared</div>';
} else {
dataContent += '<div data-toggle="tooltip" title="' + this.state.profile.email + '"><a href="mailto:' + this.state.profile.email + '" class="text-nowrap text-lowercase user-popover__email">' + this.state.profile.email + '</a></div>';
diff --git a/web/react/components/user_settings.jsx b/web/react/components/user_settings.jsx
index 2a607b3e0..48b499068 100644
--- a/web/react/components/user_settings.jsx
+++ b/web/react/components/user_settings.jsx
@@ -7,6 +7,7 @@ var NotificationsTab = require('./user_settings_notifications.jsx');
var SecurityTab = require('./user_settings_security.jsx');
var GeneralTab = require('./user_settings_general.jsx');
var AppearanceTab = require('./user_settings_appearance.jsx');
+var DeveloperTab = require('./user_settings_developer.jsx');
export default class UserSettings extends React.Component {
constructor(props) {
@@ -76,6 +77,15 @@ export default class UserSettings extends React.Component {
/>
</div>
);
+ } else if (this.props.activeTab === 'developer') {
+ return (
+ <div>
+ <DeveloperTab
+ activeSection={this.props.activeSection}
+ updateSection={this.props.updateSection}
+ />
+ </div>
+ );
}
return <div/>;
diff --git a/web/react/components/user_settings_appearance.jsx b/web/react/components/user_settings_appearance.jsx
index 3afdd7349..3df013d03 100644
--- a/web/react/components/user_settings_appearance.jsx
+++ b/web/react/components/user_settings_appearance.jsx
@@ -6,7 +6,8 @@ var SettingItemMin = require('./setting_item_min.jsx');
var SettingItemMax = require('./setting_item_max.jsx');
var Client = require('../utils/client.jsx');
var Utils = require('../utils/utils.jsx');
-import {config} from '../utils/config.js';
+
+var ThemeColors = ['#2389d7', '#008a17', '#dc4fad', '#ac193d', '#0072c6', '#d24726', '#ff8f32', '#82ba00', '#03b3b2', '#008299', '#4617b4', '#8c0095', '#004b8b', '#004b8b', '#570000', '#380000', '#585858', '#000000'];
export default class UserSettingsAppearance extends React.Component {
constructor(props) {
@@ -21,8 +22,8 @@ export default class UserSettingsAppearance extends React.Component {
getStateFromStores() {
var user = UserStore.getCurrentUser();
var theme = '#2389d7';
- if (config.ThemeColors != null) {
- theme = config.ThemeColors[0];
+ if (ThemeColors != null) {
+ theme = ThemeColors[0];
}
if (user.props && user.props.theme) {
theme = user.props.theme;
@@ -83,18 +84,18 @@ export default class UserSettingsAppearance extends React.Component {
var themeSection;
var self = this;
- if (config.ThemeColors != null) {
+ if (ThemeColors != null) {
if (this.props.activeSection === 'theme') {
var themeButtons = [];
- for (var i = 0; i < config.ThemeColors.length; i++) {
+ for (var i = 0; i < ThemeColors.length; i++) {
themeButtons.push(
<button
- key={config.ThemeColors[i] + 'key' + i}
- ref={config.ThemeColors[i]}
+ key={ThemeColors[i] + 'key' + i}
+ ref={ThemeColors[i]}
type='button'
className='btn btn-lg color-btn'
- style={{backgroundColor: config.ThemeColors[i]}}
+ style={{backgroundColor: ThemeColors[i]}}
onClick={this.updateTheme}
/>
);
diff --git a/web/react/components/user_settings_developer.jsx b/web/react/components/user_settings_developer.jsx
new file mode 100644
index 000000000..1b04149dc
--- /dev/null
+++ b/web/react/components/user_settings_developer.jsx
@@ -0,0 +1,93 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var SettingItemMin = require('./setting_item_min.jsx');
+var SettingItemMax = require('./setting_item_max.jsx');
+
+export default class DeveloperTab extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.state = {};
+ }
+ register() {
+ $('#user_settings1').modal('hide');
+ $('#register_app').modal('show');
+ }
+ render() {
+ var appSection;
+ var self = this;
+ if (this.props.activeSection === 'app') {
+ var inputs = [];
+
+ inputs.push(
+ <div className='form-group'>
+ <div className='col-sm-7'>
+ <a
+ className='btn btn-sm btn-primary'
+ onClick={this.register}
+ >
+ {'Register New Application'}
+ </a>
+ </div>
+ </div>
+ );
+
+ appSection = (
+ <SettingItemMax
+ title='Applications (Preview)'
+ inputs={inputs}
+ updateSection={function updateSection(e) {
+ self.props.updateSection('');
+ e.preventDefault();
+ }}
+ />
+ );
+ } else {
+ appSection = (
+ <SettingItemMin
+ title='Applications (Preview)'
+ describe='Open to register a new third-party application'
+ updateSection={function updateSection() {
+ self.props.updateSection('app');
+ }}
+ />
+ );
+ }
+
+ return (
+ <div>
+ <div className='modal-header'>
+ <button
+ type='button'
+ className='close'
+ data-dismiss='modal'
+ aria-label='Close'
+ >
+ <span aria-hidden='true'>{'x'}</span>
+ </button>
+ <h4
+ className='modal-title'
+ ref='title'
+ >
+ <i className='modal-back'></i>{'Developer Settings'}
+ </h4>
+ </div>
+ <div className='user-settings'>
+ <h3 className='tab-header'>{'Developer Settings'}</h3>
+ <div className='divider-dark first'/>
+ {appSection}
+ <div className='divider-dark'/>
+ </div>
+ </div>
+ );
+ }
+}
+
+DeveloperTab.defaultProps = {
+ activeSection: ''
+};
+DeveloperTab.propTypes = {
+ activeSection: React.PropTypes.string,
+ updateSection: React.PropTypes.func
+};
diff --git a/web/react/components/user_settings_general.jsx b/web/react/components/user_settings_general.jsx
index 184534a9a..66cde6ca2 100644
--- a/web/react/components/user_settings_general.jsx
+++ b/web/react/components/user_settings_general.jsx
@@ -2,7 +2,6 @@
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
-var ConfigStore = require('../stores/config_store.jsx');
var SettingItemMin = require('./setting_item_min.jsx');
var SettingItemMax = require('./setting_item_max.jsx');
var SettingPicture = require('./setting_picture.jsx');
@@ -40,7 +39,7 @@ export default class UserSettingsGeneralTab extends React.Component {
e.preventDefault();
var user = this.props.user;
- var username = this.state.username.trim();
+ var username = this.state.username.trim().toLowerCase();
var usernameError = utils.isValidUsername(username);
if (usernameError === 'Cannot use a reserved word as a username.') {
@@ -209,7 +208,7 @@ export default class UserSettingsGeneralTab extends React.Component {
}
setupInitialState(props) {
var user = props.user;
- var emailEnabled = !ConfigStore.getSettingAsBoolean('ByPassEmail', false);
+ var emailEnabled = !global.window.config.ByPassEmail;
return {username: user.username, firstName: user.first_name, lastName: user.last_name, nickname: user.nickname,
email: user.email, picture: null, loadingPicture: false, emailEnabled: emailEnabled};
}
diff --git a/web/react/components/user_settings_modal.jsx b/web/react/components/user_settings_modal.jsx
index 7ec75e000..67a4d0041 100644
--- a/web/react/components/user_settings_modal.jsx
+++ b/web/react/components/user_settings_modal.jsx
@@ -17,8 +17,8 @@ export default class UserSettingsModal extends React.Component {
$('body').on('click', '.modal-back', function changeDisplay() {
$(this).closest('.modal-dialog').removeClass('display--content');
});
- $('body').on('click', '.modal-header .close', function closeModal() {
- setTimeout(function finishClose() {
+ $('body').on('click', '.modal-header .close', () => {
+ setTimeout(() => {
$('.modal-dialog.display--content').removeClass('display--content');
}, 500);
});
@@ -35,6 +35,9 @@ export default class UserSettingsModal extends React.Component {
tabs.push({name: 'security', uiName: 'Security', icon: 'glyphicon glyphicon-lock'});
tabs.push({name: 'notifications', uiName: 'Notifications', icon: 'glyphicon glyphicon-exclamation-sign'});
tabs.push({name: 'appearance', uiName: 'Appearance', icon: 'glyphicon glyphicon-wrench'});
+ if (global.window.config.EnableOAuthServiceProvider === 'true') {
+ tabs.push({name: 'developer', uiName: 'Developer', icon: 'glyphicon glyphicon-th'});
+ }
return (
<div
@@ -54,13 +57,13 @@ export default class UserSettingsModal extends React.Component {
data-dismiss='modal'
aria-label='Close'
>
- <span aria-hidden='true'>&times;</span>
+ <span aria-hidden='true'>{'x'}</span>
</button>
<h4
className='modal-title'
ref='title'
>
- Account Settings
+ {'Account Settings'}
</h4>
</div>
<div className='modal-body'>
diff --git a/web/react/components/user_settings_notifications.jsx b/web/react/components/user_settings_notifications.jsx
index 33db1a332..dadbb669b 100644
--- a/web/react/components/user_settings_notifications.jsx
+++ b/web/react/components/user_settings_notifications.jsx
@@ -8,7 +8,6 @@ var client = require('../utils/client.jsx');
var AsyncClient = require('../utils/async_client.jsx');
var utils = require('../utils/utils.jsx');
var assign = require('object-assign');
-import {config} from '../utils/config.js';
function getNotificationsStateFromStores() {
var user = UserStore.getCurrentUser();
@@ -415,7 +414,7 @@ export default class NotificationsTab extends React.Component {
</label>
<br/>
</div>
- <div><br/>{'Email notifications are sent for mentions and private messages after you have been away from ' + config.SiteName + ' for 5 minutes.'}</div>
+ <div><br/>{'Email notifications are sent for mentions and private messages after you have been away from ' + global.window.config.SiteName + ' for 5 minutes.'}</div>
</div>
);
diff --git a/web/react/components/view_image.jsx b/web/react/components/view_image.jsx
index b0eaba5d6..f7c980396 100644
--- a/web/react/components/view_image.jsx
+++ b/web/react/components/view_image.jsx
@@ -3,7 +3,6 @@
var Client = require('../utils/client.jsx');
var Utils = require('../utils/utils.jsx');
-import {config} from '../utils/config.js';
export default class ViewImageModal extends React.Component {
constructor(props) {
@@ -105,6 +104,14 @@ export default class ViewImageModal extends React.Component {
this.loadImage(this.state.imgId);
}.bind(this));
+ $('#' + this.props.modalId).on('hidden.bs.modal', function onModalHide() {
+ if (this.refs.video) {
+ var video = React.findDOMNode(this.refs.video);
+ video.pause();
+ video.currentTime = 0;
+ }
+ }.bind(this));
+
$(React.findDOMNode(this.refs.modal)).click(function onModalClick(e) {
if (e.target === this || e.target === React.findDOMNode(this.refs.imageBody)) {
$('.image_modal').modal('hide');
@@ -211,6 +218,16 @@ export default class ViewImageModal extends React.Component {
/>
</a>
);
+ } else if (fileType === 'video' || fileType === 'audio') {
+ content = (
+ <video
+ ref='video'
+ data-setup='{}'
+ controls='controls'
+ >
+ <source src={Utils.getWindowLocationOrigin() + '/api/v1/files/get' + filename} />
+ </video>
+ );
} else {
// non-image files include a section providing details about the file
var infoString = 'File type ' + fileInfo.ext.toUpperCase();
@@ -283,7 +300,7 @@ export default class ViewImageModal extends React.Component {
}
var publicLink = '';
- if (config.AllowPublicLink) {
+ if (global.window.config.AllowPublicLink) {
publicLink = (
<div>
<a
diff --git a/web/react/package.json b/web/react/package.json
index e55722152..04e0f6bab 100644
--- a/web/react/package.json
+++ b/web/react/package.json
@@ -7,9 +7,9 @@
"flux": "2.1.1",
"keymirror": "0.1.1",
"object-assign": "3.0.0",
- "react": "0.13.3",
"react-zeroclipboard-mixin": "0.1.0",
- "twemoji": "1.4.1"
+ "twemoji": "1.4.1",
+ "babel-runtime": "5.8.24"
},
"devDependencies": {
"browserify": "11.0.1",
@@ -27,8 +27,8 @@
},
"browserify": {
"transform": [
- "babelify",
- "envify"
+ ["babelify", { "optional": ["runtime"] }],
+ "envify"
]
},
"jest": {
diff --git a/web/react/pages/admin_console.jsx b/web/react/pages/admin_console.jsx
new file mode 100644
index 000000000..689a6b3a2
--- /dev/null
+++ b/web/react/pages/admin_console.jsx
@@ -0,0 +1,25 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var ErrorBar = require('../components/error_bar.jsx');
+var SelectTeamModal = require('../components/admin_console/select_team_modal.jsx');
+var AdminController = require('../components/admin_console/admin_controller.jsx');
+
+export function setupAdminConsolePage() {
+ React.render(
+ <AdminController />,
+ document.getElementById('admin_controller')
+ );
+
+ React.render(
+ <SelectTeamModal />,
+ document.getElementById('select_team_modal')
+ );
+
+ React.render(
+ <ErrorBar/>,
+ document.getElementById('error_bar')
+ );
+}
+
+global.window.setup_admin_console_page = setupAdminConsolePage;
diff --git a/web/react/pages/authorize.jsx b/web/react/pages/authorize.jsx
new file mode 100644
index 000000000..db42c8266
--- /dev/null
+++ b/web/react/pages/authorize.jsx
@@ -0,0 +1,21 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var Authorize = require('../components/authorize.jsx');
+
+function setupAuthorizePage(teamName, appName, responseType, clientId, redirectUri, scope, state) {
+ React.render(
+ <Authorize
+ teamName={teamName}
+ appName={appName}
+ responseType={responseType}
+ clientId={clientId}
+ redirectUri={redirectUri}
+ scope={scope}
+ state={state}
+ />,
+ document.getElementById('authorize')
+ );
+}
+
+global.window.setup_authorize_page = setupAuthorizePage;
diff --git a/web/react/pages/channel.jsx b/web/react/pages/channel.jsx
index 182721bef..43493de45 100644
--- a/web/react/pages/channel.jsx
+++ b/web/react/pages/channel.jsx
@@ -17,7 +17,6 @@ var RenameChannelModal = require('../components/rename_channel_modal.jsx');
var EditPostModal = require('../components/edit_post_modal.jsx');
var DeletePostModal = require('../components/delete_post_modal.jsx');
var MoreChannelsModal = require('../components/more_channels.jsx');
-var NewChannelModal = require('../components/new_channel.jsx');
var PostDeletedModal = require('../components/post_deleted_modal.jsx');
var ChannelNotificationsModal = require('../components/channel_notifications.jsx');
var UserSettingsModal = require('../components/user_settings_modal.jsx');
@@ -34,24 +33,21 @@ var AccessHistoryModal = require('../components/access_history_modal.jsx');
var ActivityLogModal = require('../components/activity_log_modal.jsx');
var RemovedFromChannelModal = require('../components/removed_from_channel_modal.jsx');
var FileUploadOverlay = require('../components/file_upload_overlay.jsx');
-
-var AsyncClient = require('../utils/async_client.jsx');
+var RegisterAppModal = require('../components/register_app_modal.jsx');
var Constants = require('../utils/constants.jsx');
var ActionTypes = Constants.ActionTypes;
-function setupChannelPage(teamName, teamType, teamId, channelName, channelId) {
- AsyncClient.getConfig();
-
+function setupChannelPage(props) {
AppDispatcher.handleViewAction({
type: ActionTypes.CLICK_CHANNEL,
- name: channelName,
- id: channelId
+ name: props.ChannelName,
+ id: props.ChannelId
});
AppDispatcher.handleViewAction({
type: ActionTypes.CLICK_TEAM,
- id: teamId
+ id: props.TeamId
});
// ChannelLoader must be rendered first
@@ -66,14 +62,14 @@ function setupChannelPage(teamName, teamType, teamId, channelName, channelId) {
);
React.render(
- <Navbar teamDisplayName={teamName} />,
+ <Navbar teamDisplayName={props.TeamDisplayName} />,
document.getElementById('navbar')
);
React.render(
<Sidebar
- teamDisplayName={teamName}
- teamType={teamType}
+ teamDisplayName={props.TeamDisplayName}
+ teamType={props.TeamType}
/>,
document.getElementById('sidebar-left')
);
@@ -89,17 +85,17 @@ function setupChannelPage(teamName, teamType, teamId, channelName, channelId) {
);
React.render(
- <TeamSettingsModal teamDisplayName={teamName} />,
+ <TeamSettingsModal teamDisplayName={props.TeamDisplayName} />,
document.getElementById('team_settings_modal')
);
React.render(
- <TeamMembersModal teamDisplayName={teamName} />,
+ <TeamMembersModal teamDisplayName={props.TeamDisplayName} />,
document.getElementById('team_members_modal')
);
React.render(
- <MemberInviteModal teamType={teamType} />,
+ <MemberInviteModal teamType={props.TeamType} />,
document.getElementById('invite_member_modal')
);
@@ -154,11 +150,6 @@ function setupChannelPage(teamName, teamType, teamId, channelName, channelId) {
);
React.render(
- <NewChannelModal />,
- document.getElementById('new_channel_modal')
- );
-
- React.render(
<PostListContainer />,
document.getElementById('post-list')
);
@@ -190,8 +181,8 @@ function setupChannelPage(teamName, teamType, teamId, channelName, channelId) {
React.render(
<SidebarRightMenu
- teamDisplayName={teamName}
- teamType={teamType}
+ teamDisplayName={props.TeamDisplayName}
+ teamType={props.TeamType}
/>,
document.getElementById('sidebar-menu')
);
@@ -232,6 +223,11 @@ function setupChannelPage(teamName, teamType, teamId, channelName, channelId) {
/>,
document.getElementById('file_upload_overlay')
);
+
+ React.render(
+ <RegisterAppModal />,
+ document.getElementById('register_app_modal')
+ );
}
global.window.setup_channel_page = setupChannelPage;
diff --git a/web/react/pages/home.jsx b/web/react/pages/home.jsx
index 18553542c..2299c306e 100644
--- a/web/react/pages/home.jsx
+++ b/web/react/pages/home.jsx
@@ -4,12 +4,12 @@
var ChannelStore = require('../stores/channel_store.jsx');
var Constants = require('../utils/constants.jsx');
-function setupHomePage(teamURL) {
+function setupHomePage(props) {
var last = ChannelStore.getLastVisitedName();
if (last == null || last.length === 0) {
- window.location = teamURL + '/channels/' + Constants.DEFAULT_CHANNEL;
+ window.location = props.TeamURL + '/channels/' + Constants.DEFAULT_CHANNEL;
} else {
- window.location = teamURL + '/channels/' + last;
+ window.location = props.TeamURL + '/channels/' + last;
}
}
diff --git a/web/react/pages/login.jsx b/web/react/pages/login.jsx
index 424ae0e84..830f622fa 100644
--- a/web/react/pages/login.jsx
+++ b/web/react/pages/login.jsx
@@ -3,12 +3,12 @@
var Login = require('../components/login.jsx');
-function setupLoginPage(teamDisplayName, teamName, authServices) {
+function setupLoginPage(props) {
React.render(
<Login
- teamDisplayName={teamDisplayName}
- teamName={teamName}
- authServices={authServices}
+ teamDisplayName={props.TeamDisplayName}
+ teamName={props.TeamName}
+ authServices={props.AuthServices}
/>,
document.getElementById('login')
);
diff --git a/web/react/pages/password_reset.jsx b/web/react/pages/password_reset.jsx
index 2ca468bea..b7bfdcd5e 100644
--- a/web/react/pages/password_reset.jsx
+++ b/web/react/pages/password_reset.jsx
@@ -3,14 +3,14 @@
var PasswordReset = require('../components/password_reset.jsx');
-function setupPasswordResetPage(isReset, teamDisplayName, teamName, hash, data) {
+function setupPasswordResetPage(props) {
React.render(
<PasswordReset
- isReset={isReset}
- teamDisplayName={teamDisplayName}
- teamName={teamName}
- hash={hash}
- data={data}
+ isReset={props.IsReset}
+ teamDisplayName={props.TeamDisplayName}
+ teamName={props.TeamName}
+ hash={props.Hash}
+ data={props.Data}
/>,
document.getElementById('reset')
);
diff --git a/web/react/pages/signup_team.jsx b/web/react/pages/signup_team.jsx
index e9e803aa4..427daf577 100644
--- a/web/react/pages/signup_team.jsx
+++ b/web/react/pages/signup_team.jsx
@@ -3,12 +3,8 @@
var SignupTeam = require('../components/signup_team.jsx');
-var AsyncClient = require('../utils/async_client.jsx');
-
-function setupSignupTeamPage(authServices) {
- AsyncClient.getConfig();
-
- var services = JSON.parse(authServices);
+function setupSignupTeamPage(props) {
+ var services = JSON.parse(props.AuthServices);
React.render(
<SignupTeam services={services} />,
diff --git a/web/react/pages/signup_team_complete.jsx b/web/react/pages/signup_team_complete.jsx
index 72f9992a8..ec77e6602 100644
--- a/web/react/pages/signup_team_complete.jsx
+++ b/web/react/pages/signup_team_complete.jsx
@@ -3,12 +3,12 @@
var SignupTeamComplete = require('../components/signup_team_complete.jsx');
-function setupSignupTeamCompletePage(email, data, hash) {
+function setupSignupTeamCompletePage(props) {
React.render(
<SignupTeamComplete
- email={email}
- hash={hash}
- data={data}
+ email={props.Email}
+ hash={props.Hash}
+ data={props.Data}
/>,
document.getElementById('signup-team-complete')
);
diff --git a/web/react/pages/signup_user_complete.jsx b/web/react/pages/signup_user_complete.jsx
index eaf93a61c..112aaa3f2 100644
--- a/web/react/pages/signup_user_complete.jsx
+++ b/web/react/pages/signup_user_complete.jsx
@@ -3,16 +3,16 @@
var SignupUserComplete = require('../components/signup_user_complete.jsx');
-function setupSignupUserCompletePage(email, name, uiName, id, data, hash, authServices) {
+function setupSignupUserCompletePage(props) {
React.render(
<SignupUserComplete
- teamId={id}
- teamName={name}
- teamDisplayName={uiName}
- email={email}
- hash={hash}
- data={data}
- authServices={authServices}
+ teamId={props.TeamId}
+ teamName={props.TeamName}
+ teamDisplayName={props.TeamDisplayName}
+ email={props.Email}
+ hash={props.Hash}
+ data={props.Data}
+ authServices={props.AuthServices}
/>,
document.getElementById('signup-user-complete')
);
diff --git a/web/react/pages/verify.jsx b/web/react/pages/verify.jsx
index 7077b40b8..e48471bbd 100644
--- a/web/react/pages/verify.jsx
+++ b/web/react/pages/verify.jsx
@@ -3,12 +3,12 @@
var EmailVerify = require('../components/email_verify.jsx');
-global.window.setupVerifyPage = function setupVerifyPage(isVerified, teamURL, userEmail) {
+global.window.setupVerifyPage = function setupVerifyPage(props) {
React.render(
<EmailVerify
- isVerified={isVerified}
- teamURL={teamURL}
- userEmail={userEmail}
+ isVerified={props.IsVerified}
+ teamURL={props.TeamURL}
+ userEmail={props.UserEmail}
/>,
document.getElementById('verify')
);
diff --git a/web/react/stores/admin_store.jsx b/web/react/stores/admin_store.jsx
new file mode 100644
index 000000000..591b52d05
--- /dev/null
+++ b/web/react/stores/admin_store.jsx
@@ -0,0 +1,58 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
+var EventEmitter = require('events').EventEmitter;
+
+var Constants = require('../utils/constants.jsx');
+var ActionTypes = Constants.ActionTypes;
+
+var LOG_CHANGE_EVENT = 'log_change';
+
+class AdminStoreClass extends EventEmitter {
+ constructor() {
+ super();
+
+ this.logs = null;
+
+ this.emitLogChange = this.emitLogChange.bind(this);
+ this.addLogChangeListener = this.addLogChangeListener.bind(this);
+ this.removeLogChangeListener = this.removeLogChangeListener.bind(this);
+ }
+
+ emitLogChange() {
+ this.emit(LOG_CHANGE_EVENT);
+ }
+
+ addLogChangeListener(callback) {
+ this.on(LOG_CHANGE_EVENT, callback);
+ }
+
+ removeLogChangeListener(callback) {
+ this.removeListener(LOG_CHANGE_EVENT, callback);
+ }
+
+ getLogs() {
+ return this.logs;
+ }
+
+ saveLogs(logs) {
+ this.logs = logs;
+ }
+}
+
+var AdminStore = new AdminStoreClass();
+
+AdminStoreClass.dispatchToken = AppDispatcher.register((payload) => {
+ var action = payload.action;
+
+ switch (action.type) {
+ case ActionTypes.RECIEVED_LOGS:
+ AdminStore.saveLogs(action.logs);
+ AdminStore.emitLogChange();
+ break;
+ default:
+ }
+});
+
+export default AdminStore;
diff --git a/web/react/stores/config_store.jsx b/web/react/stores/config_store.jsx
deleted file mode 100644
index b397937be..000000000
--- a/web/react/stores/config_store.jsx
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
-// See License.txt for license information.
-
-var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
-var EventEmitter = require('events').EventEmitter;
-
-var BrowserStore = require('../stores/browser_store.jsx');
-
-var Constants = require('../utils/constants.jsx');
-var ActionTypes = Constants.ActionTypes;
-
-var CHANGE_EVENT = 'change';
-
-class ConfigStoreClass extends EventEmitter {
- constructor() {
- super();
-
- this.emitChange = this.emitChange.bind(this);
- this.addChangeListener = this.addChangeListener.bind(this);
- this.removeChangeListener = this.removeChangeListener.bind(this);
- this.getSetting = this.getSetting.bind(this);
- this.getSettingAsBoolean = this.getSettingAsBoolean.bind(this);
- this.updateStoredSettings = this.updateStoredSettings.bind(this);
- }
- emitChange() {
- this.emit(CHANGE_EVENT);
- }
- addChangeListener(callback) {
- this.on(CHANGE_EVENT, callback);
- }
- removeChangeListener(callback) {
- this.removeListener(CHANGE_EVENT, callback);
- }
- getSetting(key, defaultValue) {
- return BrowserStore.getItem('config_' + key, defaultValue);
- }
- getSettingAsBoolean(key, defaultValue) {
- var value = this.getSetting(key, defaultValue);
-
- if (typeof value !== 'string') {
- return Boolean(value);
- }
-
- return value === 'true';
- }
- updateStoredSettings(settings) {
- for (let key in settings) {
- if (settings.hasOwnProperty(key)) {
- BrowserStore.setItem('config_' + key, settings[key]);
- }
- }
- }
-}
-
-var ConfigStore = new ConfigStoreClass();
-
-ConfigStore.dispatchToken = AppDispatcher.register(function registry(payload) {
- var action = payload.action;
-
- switch (action.type) {
- case ActionTypes.RECIEVED_CONFIG:
- ConfigStore.updateStoredSettings(action.settings);
- ConfigStore.emitChange();
- break;
- default:
- }
-});
-
-export default ConfigStore;
diff --git a/web/react/stores/post_store.jsx b/web/react/stores/post_store.jsx
index 5ffe65021..29ce47300 100644
--- a/web/react/stores/post_store.jsx
+++ b/web/react/stores/post_store.jsx
@@ -297,6 +297,7 @@ class PostStoreClass extends EventEmitter {
post.message = '(message deleted)';
post.state = Constants.POST_DELETED;
+ post.filenames = [];
posts[post.id] = post;
this.storeUnseenDeletedPosts(post.channel_id, posts);
diff --git a/web/react/utils/async_client.jsx b/web/react/utils/async_client.jsx
index 6ccef0506..3e23e5c33 100644
--- a/web/react/utils/async_client.jsx
+++ b/web/react/utils/async_client.jsx
@@ -319,6 +319,32 @@ export function getAudits() {
);
}
+export function getLogs() {
+ if (isCallInProgress('getLogs')) {
+ return;
+ }
+
+ callTracker.getLogs = utils.getTimestamp();
+ client.getLogs(
+ (data, textStatus, xhr) => {
+ callTracker.getLogs = 0;
+
+ if (xhr.status === 304 || !data) {
+ return;
+ }
+
+ AppDispatcher.handleServerAction({
+ type: ActionTypes.RECIEVED_LOGS,
+ logs: data
+ });
+ },
+ (err) => {
+ callTracker.getLogs = 0;
+ dispatchError(err, 'getLogs');
+ }
+ );
+}
+
export function findTeams(email) {
if (isCallInProgress('findTeams_' + email)) {
return;
@@ -556,28 +582,4 @@ export function getMyTeam() {
dispatchError(err, 'getMyTeam');
}
);
-}
-
-export function getConfig() {
- if (isCallInProgress('getConfig')) {
- return;
- }
-
- callTracker.getConfig = utils.getTimestamp();
- client.getConfig(
- function getConfigSuccess(data, textStatus, xhr) {
- callTracker.getConfig = 0;
-
- if (data && xhr.status !== 304) {
- AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_CONFIG,
- settings: data
- });
- }
- },
- function getConfigFailure(err) {
- callTracker.getConfig = 0;
- dispatchError(err, 'getConfig');
- }
- );
-}
+} \ No newline at end of file
diff --git a/web/react/utils/client.jsx b/web/react/utils/client.jsx
index 51fd16474..ba3042d78 100644
--- a/web/react/utils/client.jsx
+++ b/web/react/utils/client.jsx
@@ -14,8 +14,6 @@ export function trackPage() {
}
function handleError(methodName, xhr, status, err) {
- var LTracker = global.window.LTracker || [];
-
var e = null;
try {
e = JSON.parse(xhr.responseText);
@@ -39,7 +37,6 @@ function handleError(methodName, xhr, status, err) {
console.error(msg); //eslint-disable-line no-console
console.error(e); //eslint-disable-line no-console
- LTracker.push(msg);
track('api', 'api_weberror', methodName, 'message', msg);
@@ -294,6 +291,20 @@ export function getAudits(userId, success, error) {
});
}
+export function getLogs(success, error) {
+ $.ajax({
+ url: '/api/v1/admin/logs',
+ dataType: 'json',
+ contentType: 'application/json',
+ type: 'GET',
+ success: success,
+ error: function onError(xhr, status, err) {
+ var e = handleError('getLogs', xhr, status, err);
+ error(e);
+ }
+ });
+}
+
export function getMeSynchronous(success, error) {
var currentUser = null;
$.ajax({
@@ -977,16 +988,35 @@ export function updateValetFeature(data, success, error) {
track('api', 'api_teams_update_valet_feature');
}
-export function getConfig(success, error) {
+export function registerOAuthApp(app, success, error) {
$.ajax({
- url: '/api/v1/config/get_all',
+ url: '/api/v1/oauth/register',
dataType: 'json',
+ contentType: 'application/json',
+ type: 'POST',
+ data: JSON.stringify(app),
+ success: success,
+ error: (xhr, status, err) => {
+ const e = handleError('registerApp', xhr, status, err);
+ error(e);
+ }
+ });
+
+ module.exports.track('api', 'api_apps_register');
+}
+
+export function allowOAuth2(responseType, clientId, redirectUri, state, scope, success, error) {
+ $.ajax({
+ url: '/api/v1/oauth/allow?response_type=' + responseType + '&client_id=' + clientId + '&redirect_uri=' + redirectUri + '&scope=' + scope + '&state=' + state,
+ dataType: 'json',
+ contentType: 'application/json',
type: 'GET',
- ifModified: true,
success: success,
- error: function onError(xhr, status, err) {
- var e = handleError('getConfig', xhr, status, err);
+ error: (xhr, status, err) => {
+ const e = handleError('allowOAuth2', xhr, status, err);
error(e);
}
});
+
+ module.exports.track('api', 'api_users_allow_oauth2');
}
diff --git a/web/react/utils/config.js b/web/react/utils/config.js
deleted file mode 100644
index c7d1aa2bc..000000000
--- a/web/react/utils/config.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
-// See License.txt for license information.
-
-export var config = {
-
- // Loggly configs
- LogglyWriteKey: '',
- LogglyConsoleErrors: true,
-
- // Segment configs
- SegmentWriteKey: '',
-
- // Feature switches
- AllowPublicLink: true,
- AllowInviteNames: true,
- RequireInviteNames: false,
- AllowSignupDomainsWizard: false,
-
- // Google Developer Key (for Youtube API links)
- // Leave blank to disable
- GoogleDeveloperKey: '',
-
- // Privacy switches
- ShowEmail: true,
-
- // Links
- TermsLink: '/static/help/configure_links.html',
- PrivacyLink: '/static/help/configure_links.html',
- AboutLink: '/static/help/configure_links.html',
- HelpLink: '/static/help/configure_links.html',
- ReportProblemLink: '/static/help/configure_links.html',
- HomeLink: '',
-
- // Toggle whether or not users are shown a message about agreeing to the Terms of Service during the signup process
- ShowTermsDuringSignup: false,
-
- ThemeColors: ['#2389d7', '#008a17', '#dc4fad', '#ac193d', '#0072c6', '#d24726', '#ff8f32', '#82ba00', '#03b3b2', '#008299', '#4617b4', '#8c0095', '#004b8b', '#004b8b', '#570000', '#380000', '#585858', '#000000']
-};
-
-// Flavor strings
-export var strings = {
- Team: 'team',
- TeamPlural: 'teams',
- Company: 'company',
- CompanyPlural: 'companies'
-};
-
-global.window.config = config;
diff --git a/web/react/utils/constants.jsx b/web/react/utils/constants.jsx
index 7ead079d7..03e4635b5 100644
--- a/web/react/utils/constants.jsx
+++ b/web/react/utils/constants.jsx
@@ -34,7 +34,9 @@ module.exports = {
CLICK_TEAM: null,
RECIEVED_TEAM: null,
- RECIEVED_CONFIG: null
+ RECIEVED_CONFIG: null,
+
+ RECIEVED_LOGS: null
}),
PayloadSources: keyMirror({
diff --git a/web/react/utils/text_formatting.jsx b/web/react/utils/text_formatting.jsx
new file mode 100644
index 000000000..2025e16da
--- /dev/null
+++ b/web/react/utils/text_formatting.jsx
@@ -0,0 +1,268 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+const Autolinker = require('autolinker');
+const Constants = require('./constants.jsx');
+const UserStore = require('../stores/user_store.jsx');
+const Utils = require('./utils.jsx');
+
+// Performs formatting of user posts including highlighting mentions and search terms and converting urls, hashtags, and
+// @mentions to links by taking a user's message and returning a string of formatted html. Also takes a number of options
+// as part of the second parameter:
+// - searchTerm - If specified, this word is highlighted in the resulting html. Defaults to nothing.
+// - mentionHighlight - Specifies whether or not to highlight mentions of the current user. Defaults to true.
+// - singleline - Specifies whether or not to remove newlines. Defaults to false.
+export function formatText(text, options = {}) {
+ let output = sanitizeHtml(text);
+ const tokens = new Map();
+
+ // replace important words and phrases with tokens
+ output = autolinkUrls(output, tokens);
+ output = autolinkAtMentions(output, tokens);
+ output = autolinkHashtags(output, tokens);
+
+ if (options.searchTerm) {
+ output = highlightSearchTerm(output, tokens, options.searchTerm);
+ }
+
+ if (!('mentionHighlight' in options) || options.mentionHighlight) {
+ output = highlightCurrentMentions(output, tokens);
+ }
+
+ // reinsert tokens with formatted versions of the important words and phrases
+ output = replaceTokens(output, tokens);
+
+ // replace newlines with html line breaks
+ output = replaceNewlines(output, options.singleline);
+
+ return output;
+}
+
+export function sanitizeHtml(text) {
+ let output = text;
+
+ // normal string.replace only does a single occurrance so use a regex instead
+ output = output.replace(/&/g, '&amp;');
+ output = output.replace(/</g, '&lt;');
+ output = output.replace(/>/g, '&gt;');
+ output = output.replace(/'/g, '&apos;');
+ output = output.replace(/"/g, '&quot;');
+
+ return output;
+}
+
+function autolinkUrls(text, tokens) {
+ function replaceUrlWithToken(autolinker, match) {
+ const linkText = match.getMatchedText();
+ let url = linkText;
+
+ if (!url.lastIndexOf('http', 0) === 0) {
+ url = `http://${linkText}`;
+ }
+
+ const index = tokens.size;
+ const alias = `__MM_LINK${index}__`;
+
+ tokens.set(alias, {
+ value: `<a class='theme' target='_blank' href='${url}'>${linkText}</a>`,
+ originalText: linkText
+ });
+
+ return alias;
+ }
+
+ // we can't just use a static autolinker because we need to set replaceFn
+ const autolinker = new Autolinker({
+ urls: true,
+ email: true,
+ phone: false,
+ twitter: false,
+ hashtag: false,
+ replaceFn: replaceUrlWithToken
+ });
+
+ return autolinker.link(text);
+}
+
+function autolinkAtMentions(text, tokens) {
+ let output = text;
+
+ function replaceAtMentionWithToken(fullMatch, prefix, mention, username) {
+ const usernameLower = username.toLowerCase();
+ if (Constants.SPECIAL_MENTIONS.indexOf(usernameLower) !== -1 || UserStore.getProfileByUsername(usernameLower)) {
+ const index = tokens.size;
+ const alias = `__MM_ATMENTION${index}__`;
+
+ tokens.set(alias, {
+ value: `<a class='mention-link' href='#' data-mention='${usernameLower}'>${mention}</a>`,
+ originalText: mention
+ });
+
+ return prefix + alias;
+ }
+
+ return fullMatch;
+ }
+
+ output = output.replace(/(^|\s)(@([a-z0-9.\-_]*[a-z0-9]))/gi, replaceAtMentionWithToken);
+
+ return output;
+}
+
+function highlightCurrentMentions(text, tokens) {
+ let output = text;
+
+ const mentionKeys = UserStore.getCurrentMentionKeys();
+
+ // look for any existing tokens which are self mentions and should be highlighted
+ var newTokens = new Map();
+ for (const [alias, token] of tokens) {
+ if (mentionKeys.indexOf(token.originalText) !== -1) {
+ const index = tokens.size + newTokens.size;
+ const newAlias = `__MM_SELFMENTION${index}__`;
+
+ newTokens.set(newAlias, {
+ value: `<span class='mention-highlight'>${alias}</span>`,
+ originalText: token.originalText
+ });
+
+ output = output.replace(alias, newAlias);
+ }
+ }
+
+ // the new tokens are stashed in a separate map since we can't add objects to a map during iteration
+ for (const newToken of newTokens) {
+ tokens.set(newToken[0], newToken[1]);
+ }
+
+ // look for self mentions in the text
+ function replaceCurrentMentionWithToken(fullMatch, prefix, mention) {
+ const index = tokens.size;
+ const alias = `__MM_SELFMENTION${index}__`;
+
+ tokens.set(alias, {
+ value: `<span class='mention-highlight'>${mention}</span>`,
+ originalText: mention
+ });
+
+ return prefix + alias;
+ }
+
+ for (const mention of UserStore.getCurrentMentionKeys()) {
+ output = output.replace(new RegExp(`(^|\\W)(${mention})\\b`, 'gi'), replaceCurrentMentionWithToken);
+ }
+
+ return output;
+}
+
+function autolinkHashtags(text, tokens) {
+ let output = text;
+
+ var newTokens = new Map();
+ for (const [alias, token] of tokens) {
+ if (token.originalText.lastIndexOf('#', 0) === 0) {
+ const index = tokens.size + newTokens.size;
+ const newAlias = `__MM_HASHTAG${index}__`;
+
+ newTokens.set(newAlias, {
+ value: `<a class='mention-link' href='#' data-hashtag='${token.originalText}'>${token.originalText}</a>`,
+ originalText: token.originalText
+ });
+
+ output = output.replace(alias, newAlias);
+ }
+ }
+
+ // the new tokens are stashed in a separate map since we can't add objects to a map during iteration
+ for (const newToken of newTokens) {
+ tokens.set(newToken[0], newToken[1]);
+ }
+
+ // look for hashtags in the text
+ function replaceHashtagWithToken(fullMatch, prefix, hashtag) {
+ const index = tokens.size;
+ const alias = `__MM_HASHTAG${index}__`;
+
+ tokens.set(alias, {
+ value: `<a class='mention-link' href='#' data-hashtag='${hashtag}'>${hashtag}</a>`,
+ originalText: hashtag
+ });
+
+ return prefix + alias;
+ }
+
+ return output.replace(/(^|\W)(#[a-zA-Z0-9.\-_]+)\b/g, replaceHashtagWithToken);
+}
+
+function highlightSearchTerm(text, tokens, searchTerm) {
+ let output = text;
+
+ var newTokens = new Map();
+ for (const [alias, token] of tokens) {
+ if (token.originalText === searchTerm) {
+ const index = tokens.size + newTokens.size;
+ const newAlias = `__MM_SEARCHTERM${index}__`;
+
+ newTokens.set(newAlias, {
+ value: `<span class='search-highlight'>${alias}</span>`,
+ originalText: token.originalText
+ });
+
+ output = output.replace(alias, newAlias);
+ }
+ }
+
+ // the new tokens are stashed in a separate map since we can't add objects to a map during iteration
+ for (const newToken of newTokens) {
+ tokens.set(newToken[0], newToken[1]);
+ }
+
+ function replaceSearchTermWithToken(fullMatch, prefix, word) {
+ const index = tokens.size;
+ const alias = `__MM_SEARCHTERM${index}__`;
+
+ tokens.set(alias, {
+ value: `<span class='search-highlight'>${word}</span>`,
+ originalText: word
+ });
+
+ return prefix + alias;
+ }
+
+ return output.replace(new RegExp(`(^|\\W)(${searchTerm})\\b`, 'gi'), replaceSearchTermWithToken);
+}
+
+function replaceTokens(text, tokens) {
+ let output = text;
+
+ // iterate backwards through the map so that we do replacement in the opposite order that we added tokens
+ const aliases = [...tokens.keys()];
+ for (let i = aliases.length - 1; i >= 0; i--) {
+ const alias = aliases[i];
+ const token = tokens.get(alias);
+ output = output.replace(alias, token.value);
+ }
+
+ return output;
+}
+
+function replaceNewlines(text, singleline) {
+ if (!singleline) {
+ return text.replace(/\n/g, '<br />');
+ }
+
+ return text.replace(/\n/g, ' ');
+}
+
+// A click handler that can be used with the results of TextFormatting.formatText to add default functionality
+// to clicked hashtags and @mentions.
+export function handleClick(e) {
+ const mentionAttribute = e.target.getAttributeNode('data-mention');
+ const hashtagAttribute = e.target.getAttributeNode('data-hashtag');
+
+ if (mentionAttribute) {
+ Utils.searchForTerm(mentionAttribute.value);
+ } else if (hashtagAttribute) {
+ Utils.searchForTerm(hashtagAttribute.value);
+ }
+}
diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index 71cd1d344..032cf4ff4 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -9,7 +9,6 @@ var ActionTypes = Constants.ActionTypes;
var AsyncClient = require('./async_client.jsx');
var client = require('./client.jsx');
var Autolinker = require('autolinker');
-import {config} from '../utils/config.js';
export function isEmail(email) {
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
@@ -295,12 +294,12 @@ function getYoutubeEmbed(link) {
$('.post-list-holder-by-time').scrollTop($('.post-list-holder-by-time')[0].scrollHeight);
}
- if (config.GoogleDeveloperKey) {
+ if (global.window.config.GoogleDeveloperKey) {
$.ajax({
async: true,
url: 'https://www.googleapis.com/youtube/v3/videos',
type: 'GET',
- data: {part: 'snippet', id: youtubeId, key: config.GoogleDeveloperKey},
+ data: {part: 'snippet', id: youtubeId, key: global.window.config.GoogleDeveloperKey},
success: success
});
}
@@ -434,205 +433,6 @@ export function searchForTerm(term) {
});
}
-var puncStartRegex = /^((?![@#])\W)+/g;
-var puncEndRegex = /(\W)+$/g;
-
-export function textToJsx(textin, options) {
- var text = textin;
- if (options && options.singleline) {
- var repRegex = new RegExp('\n', 'g'); //eslint-disable-line no-control-regex
- text = text.replace(repRegex, ' ');
- }
-
- var searchTerm = '';
- if (options && options.searchTerm) {
- searchTerm = options.searchTerm.toLowerCase();
- }
-
- var mentionClass = 'mention-highlight';
- if (options && options.noMentionHighlight) {
- mentionClass = '';
- }
-
- var inner = [];
-
- // Function specific regex
- var hashRegex = /^href="#[^']+"|(^#[A-Za-z]+[A-Za-z0-9_\-]*[A-Za-z0-9])$/g;
-
- var implicitKeywords = UserStore.getCurrentMentionKeys();
-
- var lines = text.split('\n');
- for (let i = 0; i < lines.length; i++) {
- var line = lines[i];
- var words = line.split(' ');
- var highlightSearchClass = '';
- for (let z = 0; z < words.length; z++) {
- var word = words[z];
- var trimWord = word.replace(puncStartRegex, '').replace(puncEndRegex, '').trim();
- var mentionRegex = /^(?:@)([a-z0-9_]+)$/gi; // looks loop invariant but a weird JS bug needs it to be redefined here
- var explicitMention = mentionRegex.exec(trimWord);
-
- if (searchTerm !== '') {
- let searchWords = searchTerm.split(' ');
- for (let idx in searchWords) {
- if ({}.hasOwnProperty.call(searchWords, idx)) {
- let searchWord = searchWords[idx];
- if (searchWord === word.toLowerCase() || searchWord === trimWord.toLowerCase()) {
- highlightSearchClass = ' search-highlight';
- break;
- } else if (searchWord.charAt(searchWord.length - 1) === '*') {
- let searchWordPrefix = searchWord.slice(0, -1);
- if (trimWord.toLowerCase().indexOf(searchWordPrefix) > -1 || word.toLowerCase().indexOf(searchWordPrefix) > -1) {
- highlightSearchClass = ' search-highlight';
- break;
- }
- }
- }
- }
- }
-
- if (explicitMention &&
- (UserStore.getProfileByUsername(explicitMention[1]) ||
- Constants.SPECIAL_MENTIONS.indexOf(explicitMention[1]) !== -1)) {
- let name = explicitMention[1];
-
- // do both a non-case sensitive and case senstive check
- let mClass = '';
- if (implicitKeywords.indexOf('@' + name.toLowerCase()) !== -1 || implicitKeywords.indexOf('@' + name) !== -1) {
- mClass = mentionClass;
- }
-
- let suffix = word.match(puncEndRegex);
- let prefix = word.match(puncStartRegex);
-
- if (searchTerm === name) {
- highlightSearchClass = ' search-highlight';
- }
-
- inner.push(
- <span key={name + i + z + '_span'}>
- {prefix}
- <a
- className={mClass + highlightSearchClass + ' mention-link'}
- key={name + i + z + '_link'}
- href='#'
- onClick={() => searchForTerm(name)} //eslint-disable-line no-loop-func
- >
- @{name}
- </a>
- {suffix}
- {' '}
- </span>
- );
- } else if (testUrlMatch(word).length) {
- let match = testUrlMatch(word)[0];
- let link = match.link;
-
- let prefix = word.substring(0, word.indexOf(match.text));
- let suffix = word.substring(word.indexOf(match.text) + match.text.length);
-
- inner.push(
- <span key={word + i + z + '_span'}>
- {prefix}
- <a
- key={word + i + z + '_link'}
- className={'theme' + highlightSearchClass}
- target='_blank'
- href={link}
- >
- {match.text}
- </a>
- {suffix}
- {' '}
- </span>
- );
- } else if (trimWord.match(hashRegex)) {
- let suffix = word.match(puncEndRegex);
- let prefix = word.match(puncStartRegex);
- let mClass = '';
- if (implicitKeywords.indexOf(trimWord) !== -1 || implicitKeywords.indexOf(trimWord.toLowerCase()) !== -1) {
- mClass = mentionClass;
- }
-
- if (searchTerm === trimWord.substring(1).toLowerCase() || searchTerm === trimWord.toLowerCase()) {
- highlightSearchClass = ' search-highlight';
- }
-
- inner.push(
- <span key={word + i + z + '_span'}>
- {prefix}
- <a
- key={word + i + z + '_hash'}
- className={'theme ' + mClass + highlightSearchClass}
- href='#'
- onClick={searchForTerm.bind(this, trimWord)} //eslint-disable-line no-loop-func
- >
- {trimWord}
- </a>
- {suffix}
- {' '}
- </span>
- );
- } else if (implicitKeywords.indexOf(trimWord) !== -1 || implicitKeywords.indexOf(trimWord.toLowerCase()) !== -1) {
- let suffix = word.match(puncEndRegex);
- let prefix = word.match(puncStartRegex);
-
- if (trimWord.charAt(0) === '@') {
- if (searchTerm === trimWord.substring(1).toLowerCase()) {
- highlightSearchClass = ' search-highlight';
- }
- inner.push(
- <span key={word + i + z + '_span'}>
- {prefix}
- <a
- className={mentionClass + highlightSearchClass}
- key={name + i + z + '_link'}
- href='#'
- >
- {trimWord}
- </a>
- {suffix}
- {' '}
- </span>
- );
- } else {
- inner.push(
- <span key={word + i + z + '_span'}>
- {prefix}
- <span className={mentionClass + highlightSearchClass}>
- {replaceHtmlEntities(trimWord)}
- </span>
- {suffix}
- {' '}
- </span>
- );
- }
- } else if (word === '') {
-
- // if word is empty dont include a span
-
- } else {
- inner.push(
- <span key={word + i + z + '_span'}>
- <span className={highlightSearchClass}>
- {replaceHtmlEntities(word)}
- </span>
- {' '}
- </span>
- );
- }
- highlightSearchClass = '';
- }
- if (i !== lines.length - 1) {
- inner.push(
- <br key={'br_' + i}/>
- );
- }
- }
-
- return inner;
-}
-
export function getFileType(extin) {
var ext = extin.toLowerCase();
if (Constants.IMAGE_TYPES.indexOf(ext) > -1) {
@@ -828,14 +628,12 @@ export function isValidUsername(name) {
} else if (name.length < 3 || name.length > 15) {
error = 'Must be between 3 and 15 characters';
} else if (!(/^[a-z0-9\.\-\_]+$/).test(name)) {
- error = "Must contain only lowercase letters, numbers, and the symbols '.', '-', and '_'.";
+ error = "Must contain only letters, numbers, and the symbols '.', '-', and '_'.";
} else if (!(/[a-z]/).test(name.charAt(0))) {
error = 'First character must be a letter.';
} else {
- var lowerName = name.toLowerCase().trim();
-
for (var i = 0; i < Constants.RESERVED_USERNAMES.length; i++) {
- if (lowerName === Constants.RESERVED_USERNAMES[i]) {
+ if (name === Constants.RESERVED_USERNAMES[i]) {
error = 'Cannot use a reserved word as a username.';
break;
}
@@ -1127,3 +925,14 @@ export function importSlack(file, success, error) {
client.importSlack(formData, success, error);
}
+
+export function getTeamURLFromAddressBar() {
+ return window.location.href.split('/channels')[0];
+}
+
+export function getShortenedTeamURL() {
+ const teamURL = getTeamURLFromAddressBar();
+ if (teamURL.length > 24) {
+ return teamURL.substring(0, 10) + '...' + teamURL.substring(teamURL.length - 12, teamURL.length) + '/';
+ }
+}
diff --git a/web/sass-files/sass/partials/_admin-console.scss b/web/sass-files/sass/partials/_admin-console.scss
new file mode 100644
index 000000000..9823d2611
--- /dev/null
+++ b/web/sass-files/sass/partials/_admin-console.scss
@@ -0,0 +1,185 @@
+.sidebar--left {
+ &.sidebar--collapsable {
+ background: #333;
+ .team__header {
+ background: transparent;
+ margin-bottom: 5px;
+ }
+ .nav {
+ li {
+ padding: 0;
+ .icon {
+ width: 15px;
+ }
+ > a {
+ color: #fff;
+ padding: 9px 15px;
+ display: block;
+ &:hover, &.active, &:focus {
+ background-color: $primary-color;
+ }
+ }
+ }
+ .menu-icon--right {
+ vertical-align: top;
+ padding: 5px 10px;
+ margin: -5px;
+ float: right;
+ .fa {
+ font-size: 13px;
+ right: -2px;
+ position: relative;
+ }
+ }
+ &.nav__sub-menu {
+ padding: 5px 0;
+ background: #111;
+ -webkit-font-smoothing: auto;
+ li {
+ > a {
+ font-size: 13px;
+ padding: 5px 15px;
+ background: transparent;
+ color: #bbb;
+ &:hover {
+ color: lighten($primary-color, 10);
+ }
+ &.active {
+ color: #fff;
+ font-weight: 600;
+ }
+ }
+ .nav-more {
+ font-size: 13px;
+ padding: 5px 15px;
+ background: transparent;
+ color: #bbb;
+ display: block;
+ cursor: pointer;
+ &:hover {
+ color: lighten($primary-color, 10);
+ }
+ }
+ }
+ }
+ &.nav__inner-menu {
+ li {
+ > a {
+ padding-left: 20px;
+ }
+ }
+ }
+ }
+ }
+}
+
+.log__panel {
+ overflow: scroll;
+ width: 100%;
+ height: 800px;
+ border: 1px solid #ddd;
+ margin-top: 10px;
+ padding: 5px;
+ background-color: white;
+}
+
+.app__content {
+ &.admin {
+ overflow: auto;
+ background-color: #f1f1f1;
+ padding: 0 20px 20px;
+ }
+ .wrapper--fixed {
+ max-width: 800px;
+ }
+ .form-horizontal {
+ margin-top: 40px;
+ .control-label {
+ text-align: left;
+ padding-right: 0;
+ font-weight: 600;
+ }
+ .form-group {
+ margin-bottom: 25px;
+ }
+ .help-text {
+ margin: 10px 0 0 15px;
+ color: #777;
+ .help-link {
+ margin-right: 5px;
+ }
+ .btn {
+ font-size: 13px;
+ }
+ }
+ .alert {
+ display: inline-block;
+ padding: 5px 7px;
+ margin: 0;
+ top: 1px;
+ position: relative;
+ }
+ }
+ .banner {
+ background: #fff;
+ border: 1px solid #ddd;
+ padding: 0.7em 1.5em;
+ font-size: 0.95em;
+ margin: 2em 0;
+ .banner__heading {
+ font-size: 1.5em;
+ }
+ .banner__content {
+ width: 80%;
+ }
+ }
+ .popover {
+ border-radius: 3px;
+ border: 1px solid #ccc;
+ width: 100%;
+ font-size: 0.95em;
+ }
+ .panel {
+ border: none;
+ background-color: transparent;
+ }
+ .panel-default {
+ > .panel-heading {
+ padding: 10px 0;
+ background-color: transparent;
+ }
+ .panel-body {
+ padding: 30px 0 10px;
+ }
+ }
+ .panel-group {
+ margin-bottom: 50px;
+ }
+ .panel-title {
+ font-size: 24px;
+ line-height: 1.5;
+ a {
+ text-decoration: none;
+ display: block;
+ @include clearfix;
+ &.collapsed {
+ .fa-minus {
+ display: none;
+ }
+ .fa-plus {
+ display: inline-block;
+ }
+ }
+ .fa {
+ font-size: 18px;
+ float: right;
+ margin-top: 8px;
+ color: #aaa;
+ }
+ .fa-plus {
+ display: none;
+ }
+ }
+ }
+
+} \ No newline at end of file
diff --git a/web/sass-files/sass/partials/_base.scss b/web/sass-files/sass/partials/_base.scss
index e817761ee..cdc2152e9 100644
--- a/web/sass-files/sass/partials/_base.scss
+++ b/web/sass-files/sass/partials/_base.scss
@@ -128,3 +128,11 @@ div.theme {
.white-bg {
background-color: white !important;
}
+
+.emoji {
+ width: 1.5em;
+ height: 1.5em;
+ display: inline-block;
+ margin-bottom: 0.25em;
+ background-size: contain;
+}
diff --git a/web/sass-files/sass/partials/_command-box.scss b/web/sass-files/sass/partials/_command-box.scss
index 565296fae..44eb9b8df 100644
--- a/web/sass-files/sass/partials/_command-box.scss
+++ b/web/sass-files/sass/partials/_command-box.scss
@@ -4,30 +4,20 @@
width: 100%;
border: $border-gray;
bottom: 38px;
- overflow: auto;
@extend %popover-box-shadow;
- .sidebar--right & {
- bottom: 100px;
- }
}
.command-name {
position: relative;
width: 100%;
background-color: #fff;
- line-height: 24px;
- padding: 5px 10px 8px;
+ height: 37px;
+ line-height: 37px;
+ padding: 2px 10px 2px 5px;
z-index: 101;
- font-size: 0.95em;
- border-bottom: 1px solid #ddd;
&:hover {
background-color: #e8eaed;
}
- .command__desc {
- margin-left: 5px;
- color: #999;
- line-height: normal;
- }
}
.command-desc {
diff --git a/web/sass-files/sass/partials/_forms.scss b/web/sass-files/sass/partials/_forms.scss
new file mode 100644
index 000000000..268576a98
--- /dev/null
+++ b/web/sass-files/sass/partials/_forms.scss
@@ -0,0 +1,33 @@
+.form-horizontal {
+ .modal-intro {
+ margin: -10px 0 30px;
+ }
+ .form__label {
+ text-align: left;
+ padding-right: 3px;
+ font-weight: bold;
+ font-size: 1.1em;
+ &.light {
+ color: #999;
+ font-size: 1.05em;
+ font-style: italic;
+ padding-top: 2px;
+ }
+ }
+ .input__help {
+ color: #777;
+ margin: 10px 0 0 10px;
+ &.error {
+ color: #a94442;
+ }
+ }
+ .form-control {
+ font-weight: normal;
+ }
+ .form-group {
+ margin-bottom: 25px;
+ &.less {
+ margin-bottom: 10px;
+ }
+ }
+}
diff --git a/web/sass-files/sass/partials/_headers.scss b/web/sass-files/sass/partials/_headers.scss
index c311941b6..702f0fd60 100644
--- a/web/sass-files/sass/partials/_headers.scss
+++ b/web/sass-files/sass/partials/_headers.scss
@@ -133,7 +133,7 @@
.navbar-right {
font-size: 0.85em;
position: absolute;
- top: 10px;
+ top: 11px;
right: 22px;
z-index: 5;
.dropdown-toggle {
@@ -145,6 +145,8 @@
li a {
padding: 3px 20px;
color: #555;
+ text-overflow: ellipsis;
+ overflow: hidden;
}
}
.dropdown__icon {
@@ -169,7 +171,6 @@
}
.team__name, .user__name {
display: block;
- line-height: 18px;
font-weight: 600;
font-size: 16px;
max-width: 80%;
@@ -178,9 +179,14 @@
text-overflow: ellipsis;
text-decoration: none;
}
+ .team__name {
+ line-height: 22px;
+ margin-top: -2px;
+ }
.user__name {
@include single-transition(all, 0.1s, linear);
font-size: 14px;
+ line-height: 18px;
font-weight: 400;
color: #eee;
color: rgba(#fff, 0.8);
diff --git a/web/sass-files/sass/partials/_responsive.scss b/web/sass-files/sass/partials/_responsive.scss
index 32d65b86b..d29c653ff 100644
--- a/web/sass-files/sass/partials/_responsive.scss
+++ b/web/sass-files/sass/partials/_responsive.scss
@@ -584,6 +584,9 @@
&.move--right {
@include translate3d(0, 0, 0);
}
+ .badge {
+ top: 13px;
+ }
> div {
padding-bottom: 105px;
}
@@ -687,10 +690,10 @@
}
}
.app__content {
- padding-top: 50px;
+ padding-top: 45px;
margin: 0;
.channel__wrap & {
- padding-top: 50px;
+ padding-top: 45px;
}
.channel-header {
display: none;
diff --git a/web/sass-files/sass/partials/_sidebar--left.scss b/web/sass-files/sass/partials/_sidebar--left.scss
index 63426dae9..f714a23f8 100644
--- a/web/sass-files/sass/partials/_sidebar--left.scss
+++ b/web/sass-files/sass/partials/_sidebar--left.scss
@@ -12,7 +12,10 @@
}
.dropdown-menu {
max-height: 300px;
- overflow: auto;
+ overflow-x: hidden;
+ overflow-y: auto;
+ max-width: 200px;
+ width: 200px;
}
.search__form {
margin: 0;
@@ -27,6 +30,9 @@
}
.badge {
background-color: $primary-color;
+ position: absolute;
+ right: 10px;
+ top: 5px;
}
.status {
position:relative;
@@ -63,7 +69,7 @@
top: 66px;
}
.nav-pills__unread-indicator-bottom {
- bottom: 10px;
+ bottom: 0px;
}
.nav {
@@ -87,6 +93,12 @@
line-height: 1.5;
border-radius: 0;
color: #999;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ &.has-badge {
+ padding-right: 30px;
+ }
&.nav-more {
text-decoration: underline;
}
@@ -101,6 +113,7 @@
&.active {
a, a:hover, a:focus {
color: #111;
+ padding-right: 10px;
background-color: #e1e1e1;
border-radius: 0;
font-weight: 400;
diff --git a/web/sass-files/sass/partials/_signup.scss b/web/sass-files/sass/partials/_signup.scss
index 2fb56e537..924f0718a 100644
--- a/web/sass-files/sass/partials/_signup.scss
+++ b/web/sass-files/sass/partials/_signup.scss
@@ -315,3 +315,18 @@
}
}
+
+.authorize-box {
+ margin: 100px auto;
+ width:500px;
+ height:280px;
+ border: 1px solid black;
+}
+
+.authorize-inner {
+ padding: 20px;
+}
+
+.authorize-btn {
+ margin-right: 6px;
+}
diff --git a/web/sass-files/sass/styles.scss b/web/sass-files/sass/styles.scss
index eb5152a2c..de1db57e8 100644
--- a/web/sass-files/sass/styles.scss
+++ b/web/sass-files/sass/styles.scss
@@ -23,11 +23,13 @@
@import "partials/sidebar--left";
@import "partials/sidebar--right";
@import "partials/sidebar--menu";
+@import "partials/admin-console";
@import "partials/signup";
@import "partials/files";
@import "partials/videos";
@import "partials/settings";
@import "partials/modal";
+@import "partials/forms";
@import "partials/mentions";
@import "partials/command-box";
@import "partials/error";
diff --git a/web/static/css/bootstrap-3.3.1.min.css b/web/static/css/bootstrap-3.3.1.min.css
deleted file mode 100644
index b6fe4e0fb..000000000
--- a/web/static/css/bootstrap-3.3.1.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Bootstrap v3.3.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:before,:after{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important;visibility:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file
diff --git a/web/static/css/bootstrap-3.3.1.css b/web/static/css/bootstrap-3.3.5.css
index c6f3d2106..680e76878 100644
--- a/web/static/css/bootstrap-3.3.1.css
+++ b/web/static/css/bootstrap-3.3.5.css
@@ -1,10 +1,9 @@
/*!
- * Bootstrap v3.3.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
-
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
font-family: sans-serif;
-webkit-text-size-adjust: 100%;
@@ -239,9 +238,6 @@ th {
h3 {
page-break-after: avoid;
}
- select {
- background: #fff !important;
- }
.navbar {
display: none;
}
@@ -268,7 +264,7 @@ th {
font-family: 'Glyphicons Halflings';
src: url('../fonts/glyphicons-halflings-regular.eot');
- src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
position: relative;
@@ -883,6 +879,192 @@ th {
.glyphicon-tree-deciduous:before {
content: "\e200";
}
+.glyphicon-cd:before {
+ content: "\e201";
+}
+.glyphicon-save-file:before {
+ content: "\e202";
+}
+.glyphicon-open-file:before {
+ content: "\e203";
+}
+.glyphicon-level-up:before {
+ content: "\e204";
+}
+.glyphicon-copy:before {
+ content: "\e205";
+}
+.glyphicon-paste:before {
+ content: "\e206";
+}
+.glyphicon-alert:before {
+ content: "\e209";
+}
+.glyphicon-equalizer:before {
+ content: "\e210";
+}
+.glyphicon-king:before {
+ content: "\e211";
+}
+.glyphicon-queen:before {
+ content: "\e212";
+}
+.glyphicon-pawn:before {
+ content: "\e213";
+}
+.glyphicon-bishop:before {
+ content: "\e214";
+}
+.glyphicon-knight:before {
+ content: "\e215";
+}
+.glyphicon-baby-formula:before {
+ content: "\e216";
+}
+.glyphicon-tent:before {
+ content: "\26fa";
+}
+.glyphicon-blackboard:before {
+ content: "\e218";
+}
+.glyphicon-bed:before {
+ content: "\e219";
+}
+.glyphicon-apple:before {
+ content: "\f8ff";
+}
+.glyphicon-erase:before {
+ content: "\e221";
+}
+.glyphicon-hourglass:before {
+ content: "\231b";
+}
+.glyphicon-lamp:before {
+ content: "\e223";
+}
+.glyphicon-duplicate:before {
+ content: "\e224";
+}
+.glyphicon-piggy-bank:before {
+ content: "\e225";
+}
+.glyphicon-scissors:before {
+ content: "\e226";
+}
+.glyphicon-bitcoin:before {
+ content: "\e227";
+}
+.glyphicon-btc:before {
+ content: "\e227";
+}
+.glyphicon-xbt:before {
+ content: "\e227";
+}
+.glyphicon-yen:before {
+ content: "\00a5";
+}
+.glyphicon-jpy:before {
+ content: "\00a5";
+}
+.glyphicon-ruble:before {
+ content: "\20bd";
+}
+.glyphicon-rub:before {
+ content: "\20bd";
+}
+.glyphicon-scale:before {
+ content: "\e230";
+}
+.glyphicon-ice-lolly:before {
+ content: "\e231";
+}
+.glyphicon-ice-lolly-tasted:before {
+ content: "\e232";
+}
+.glyphicon-education:before {
+ content: "\e233";
+}
+.glyphicon-option-horizontal:before {
+ content: "\e234";
+}
+.glyphicon-option-vertical:before {
+ content: "\e235";
+}
+.glyphicon-menu-hamburger:before {
+ content: "\e236";
+}
+.glyphicon-modal-window:before {
+ content: "\e237";
+}
+.glyphicon-oil:before {
+ content: "\e238";
+}
+.glyphicon-grain:before {
+ content: "\e239";
+}
+.glyphicon-sunglasses:before {
+ content: "\e240";
+}
+.glyphicon-text-size:before {
+ content: "\e241";
+}
+.glyphicon-text-color:before {
+ content: "\e242";
+}
+.glyphicon-text-background:before {
+ content: "\e243";
+}
+.glyphicon-object-align-top:before {
+ content: "\e244";
+}
+.glyphicon-object-align-bottom:before {
+ content: "\e245";
+}
+.glyphicon-object-align-horizontal:before {
+ content: "\e246";
+}
+.glyphicon-object-align-left:before {
+ content: "\e247";
+}
+.glyphicon-object-align-vertical:before {
+ content: "\e248";
+}
+.glyphicon-object-align-right:before {
+ content: "\e249";
+}
+.glyphicon-triangle-right:before {
+ content: "\e250";
+}
+.glyphicon-triangle-left:before {
+ content: "\e251";
+}
+.glyphicon-triangle-bottom:before {
+ content: "\e252";
+}
+.glyphicon-triangle-top:before {
+ content: "\e253";
+}
+.glyphicon-console:before {
+ content: "\e254";
+}
+.glyphicon-superscript:before {
+ content: "\e255";
+}
+.glyphicon-subscript:before {
+ content: "\e256";
+}
+.glyphicon-menu-left:before {
+ content: "\e257";
+}
+.glyphicon-menu-right:before {
+ content: "\e258";
+}
+.glyphicon-menu-down:before {
+ content: "\e259";
+}
+.glyphicon-menu-up:before {
+ content: "\e260";
+}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
@@ -987,6 +1169,9 @@ hr {
overflow: visible;
clip: auto;
}
+[role="button"] {
+ cursor: pointer;
+}
h1,
h2,
h3,
@@ -1155,62 +1340,72 @@ mark,
.text-primary {
color: #337ab7;
}
-a.text-primary:hover {
+a.text-primary:hover,
+a.text-primary:focus {
color: #286090;
}
.text-success {
color: #3c763d;
}
-a.text-success:hover {
+a.text-success:hover,
+a.text-success:focus {
color: #2b542c;
}
.text-info {
color: #31708f;
}
-a.text-info:hover {
+a.text-info:hover,
+a.text-info:focus {
color: #245269;
}
.text-warning {
color: #8a6d3b;
}
-a.text-warning:hover {
+a.text-warning:hover,
+a.text-warning:focus {
color: #66512c;
}
.text-danger {
color: #a94442;
}
-a.text-danger:hover {
+a.text-danger:hover,
+a.text-danger:focus {
color: #843534;
}
.bg-primary {
color: #fff;
background-color: #337ab7;
}
-a.bg-primary:hover {
+a.bg-primary:hover,
+a.bg-primary:focus {
background-color: #286090;
}
.bg-success {
background-color: #dff0d8;
}
-a.bg-success:hover {
+a.bg-success:hover,
+a.bg-success:focus {
background-color: #c1e2b3;
}
.bg-info {
background-color: #d9edf7;
}
-a.bg-info:hover {
+a.bg-info:hover,
+a.bg-info:focus {
background-color: #afd9ee;
}
.bg-warning {
background-color: #fcf8e3;
}
-a.bg-warning:hover {
+a.bg-warning:hover,
+a.bg-warning:focus {
background-color: #f7ecb5;
}
.bg-danger {
background-color: #f2dede;
}
-a.bg-danger:hover {
+a.bg-danger:hover,
+a.bg-danger:focus {
background-color: #e4b9b9;
}
.page-header {
@@ -2123,7 +2318,7 @@ th {
.table-bordered > thead > tr > td {
border-bottom-width: 2px;
}
-.table-striped > tbody > tr:nth-child(odd) {
+.table-striped > tbody > tr:nth-of-type(odd) {
background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
@@ -2390,10 +2585,13 @@ output {
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
- cursor: not-allowed;
background-color: #eee;
opacity: 1;
}
+.form-control[disabled],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+}
textarea.form-control {
height: auto;
}
@@ -2401,22 +2599,30 @@ input[type="search"] {
-webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
- input[type="date"],
- input[type="time"],
- input[type="datetime-local"],
- input[type="month"] {
+ input[type="date"].form-control,
+ input[type="time"].form-control,
+ input[type="datetime-local"].form-control,
+ input[type="month"].form-control {
line-height: 34px;
}
input[type="date"].input-sm,
input[type="time"].input-sm,
input[type="datetime-local"].input-sm,
- input[type="month"].input-sm {
+ input[type="month"].input-sm,
+ .input-group-sm input[type="date"],
+ .input-group-sm input[type="time"],
+ .input-group-sm input[type="datetime-local"],
+ .input-group-sm input[type="month"] {
line-height: 30px;
}
input[type="date"].input-lg,
input[type="time"].input-lg,
input[type="datetime-local"].input-lg,
- input[type="month"].input-lg {
+ input[type="month"].input-lg,
+ .input-group-lg input[type="date"],
+ .input-group-lg input[type="time"],
+ .input-group-lg input[type="datetime-local"],
+ .input-group-lg input[type="month"] {
line-height: 46px;
}
}
@@ -2452,6 +2658,7 @@ input[type="search"] {
}
.radio-inline,
.checkbox-inline {
+ position: relative;
display: inline-block;
padding-left: 20px;
margin-bottom: 0;
@@ -2485,6 +2692,7 @@ fieldset[disabled] .checkbox label {
cursor: not-allowed;
}
.form-control-static {
+ min-height: 34px;
padding-top: 7px;
padding-bottom: 7px;
margin-bottom: 0;
@@ -2494,44 +2702,80 @@ fieldset[disabled] .checkbox label {
padding-right: 0;
padding-left: 0;
}
-.input-sm,
-.form-group-sm .form-control {
+.input-sm {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 3px;
}
-select.input-sm,
-select.form-group-sm .form-control {
+select.input-sm {
height: 30px;
line-height: 30px;
}
textarea.input-sm,
-textarea.form-group-sm .form-control,
-select[multiple].input-sm,
-select[multiple].form-group-sm .form-control {
+select[multiple].input-sm {
height: auto;
}
-.input-lg,
-.form-group-lg .form-control {
+.form-group-sm .form-control {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.form-group-sm select.form-control {
+ height: 30px;
+ line-height: 30px;
+}
+.form-group-sm textarea.form-control,
+.form-group-sm select[multiple].form-control {
+ height: auto;
+}
+.form-group-sm .form-control-static {
+ height: 30px;
+ min-height: 32px;
+ padding: 6px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+.input-lg {
height: 46px;
padding: 10px 16px;
font-size: 18px;
- line-height: 1.33;
+ line-height: 1.3333333;
border-radius: 6px;
}
-select.input-lg,
-select.form-group-lg .form-control {
+select.input-lg {
height: 46px;
line-height: 46px;
}
textarea.input-lg,
-textarea.form-group-lg .form-control,
-select[multiple].input-lg,
-select[multiple].form-group-lg .form-control {
+select[multiple].input-lg {
height: auto;
}
+.form-group-lg .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+.form-group-lg select.form-control {
+ height: 46px;
+ line-height: 46px;
+}
+.form-group-lg textarea.form-control,
+.form-group-lg select[multiple].form-control {
+ height: auto;
+}
+.form-group-lg .form-control-static {
+ height: 46px;
+ min-height: 38px;
+ padding: 11px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+}
.has-feedback {
position: relative;
}
@@ -2550,12 +2794,16 @@ select[multiple].form-group-lg .form-control {
text-align: center;
pointer-events: none;
}
-.input-lg + .form-control-feedback {
+.input-lg + .form-control-feedback,
+.input-group-lg + .form-control-feedback,
+.form-group-lg .form-control + .form-control-feedback {
width: 46px;
height: 46px;
line-height: 46px;
}
-.input-sm + .form-control-feedback {
+.input-sm + .form-control-feedback,
+.input-group-sm + .form-control-feedback,
+.form-group-sm .form-control + .form-control-feedback {
width: 30px;
height: 30px;
line-height: 30px;
@@ -2740,12 +2988,14 @@ select[multiple].form-group-lg .form-control {
}
@media (min-width: 768px) {
.form-horizontal .form-group-lg .control-label {
- padding-top: 14.3px;
+ padding-top: 14.333333px;
+ font-size: 18px;
}
}
@media (min-width: 768px) {
.form-horizontal .form-group-sm .control-label {
padding-top: 6px;
+ font-size: 12px;
}
}
.btn {
@@ -2795,21 +3045,32 @@ select[multiple].form-group-lg .form-control {
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
- pointer-events: none;
cursor: not-allowed;
filter: alpha(opacity=65);
-webkit-box-shadow: none;
box-shadow: none;
opacity: .65;
}
+a.btn.disabled,
+fieldset[disabled] a.btn {
+ pointer-events: none;
+}
.btn-default {
color: #333;
background-color: #fff;
border-color: #ccc;
}
-.btn-default:hover,
.btn-default:focus,
-.btn-default.focus,
+.btn-default.focus {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #8c8c8c;
+}
+.btn-default:hover {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
@@ -2817,6 +3078,19 @@ fieldset[disabled] .btn {
background-color: #e6e6e6;
border-color: #adadad;
}
+.btn-default:active:hover,
+.btn-default.active:hover,
+.open > .dropdown-toggle.btn-default:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.open > .dropdown-toggle.btn-default:focus,
+.btn-default:active.focus,
+.btn-default.active.focus,
+.open > .dropdown-toggle.btn-default.focus {
+ color: #333;
+ background-color: #d4d4d4;
+ border-color: #8c8c8c;
+}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
@@ -2852,9 +3126,17 @@ fieldset[disabled] .btn-default.active {
background-color: #337ab7;
border-color: #2e6da4;
}
-.btn-primary:hover,
.btn-primary:focus,
-.btn-primary.focus,
+.btn-primary.focus {
+ color: #fff;
+ background-color: #286090;
+ border-color: #122b40;
+}
+.btn-primary:hover {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
@@ -2862,6 +3144,19 @@ fieldset[disabled] .btn-default.active {
background-color: #286090;
border-color: #204d74;
}
+.btn-primary:active:hover,
+.btn-primary.active:hover,
+.open > .dropdown-toggle.btn-primary:hover,
+.btn-primary:active:focus,
+.btn-primary.active:focus,
+.open > .dropdown-toggle.btn-primary:focus,
+.btn-primary:active.focus,
+.btn-primary.active.focus,
+.open > .dropdown-toggle.btn-primary.focus {
+ color: #fff;
+ background-color: #204d74;
+ border-color: #122b40;
+}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
@@ -2897,9 +3192,17 @@ fieldset[disabled] .btn-primary.active {
background-color: #5cb85c;
border-color: #4cae4c;
}
-.btn-success:hover,
.btn-success:focus,
-.btn-success.focus,
+.btn-success.focus {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #255625;
+}
+.btn-success:hover {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
@@ -2907,6 +3210,19 @@ fieldset[disabled] .btn-primary.active {
background-color: #449d44;
border-color: #398439;
}
+.btn-success:active:hover,
+.btn-success.active:hover,
+.open > .dropdown-toggle.btn-success:hover,
+.btn-success:active:focus,
+.btn-success.active:focus,
+.open > .dropdown-toggle.btn-success:focus,
+.btn-success:active.focus,
+.btn-success.active.focus,
+.open > .dropdown-toggle.btn-success.focus {
+ color: #fff;
+ background-color: #398439;
+ border-color: #255625;
+}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
@@ -2942,9 +3258,17 @@ fieldset[disabled] .btn-success.active {
background-color: #5bc0de;
border-color: #46b8da;
}
-.btn-info:hover,
.btn-info:focus,
-.btn-info.focus,
+.btn-info.focus {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #1b6d85;
+}
+.btn-info:hover {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
@@ -2952,6 +3276,19 @@ fieldset[disabled] .btn-success.active {
background-color: #31b0d5;
border-color: #269abc;
}
+.btn-info:active:hover,
+.btn-info.active:hover,
+.open > .dropdown-toggle.btn-info:hover,
+.btn-info:active:focus,
+.btn-info.active:focus,
+.open > .dropdown-toggle.btn-info:focus,
+.btn-info:active.focus,
+.btn-info.active.focus,
+.open > .dropdown-toggle.btn-info.focus {
+ color: #fff;
+ background-color: #269abc;
+ border-color: #1b6d85;
+}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
@@ -2987,9 +3324,17 @@ fieldset[disabled] .btn-info.active {
background-color: #f0ad4e;
border-color: #eea236;
}
-.btn-warning:hover,
.btn-warning:focus,
-.btn-warning.focus,
+.btn-warning.focus {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #985f0d;
+}
+.btn-warning:hover {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
@@ -2997,6 +3342,19 @@ fieldset[disabled] .btn-info.active {
background-color: #ec971f;
border-color: #d58512;
}
+.btn-warning:active:hover,
+.btn-warning.active:hover,
+.open > .dropdown-toggle.btn-warning:hover,
+.btn-warning:active:focus,
+.btn-warning.active:focus,
+.open > .dropdown-toggle.btn-warning:focus,
+.btn-warning:active.focus,
+.btn-warning.active.focus,
+.open > .dropdown-toggle.btn-warning.focus {
+ color: #fff;
+ background-color: #d58512;
+ border-color: #985f0d;
+}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
@@ -3032,9 +3390,17 @@ fieldset[disabled] .btn-warning.active {
background-color: #d9534f;
border-color: #d43f3a;
}
-.btn-danger:hover,
.btn-danger:focus,
-.btn-danger.focus,
+.btn-danger.focus {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #761c19;
+}
+.btn-danger:hover {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
@@ -3042,6 +3408,19 @@ fieldset[disabled] .btn-warning.active {
background-color: #c9302c;
border-color: #ac2925;
}
+.btn-danger:active:hover,
+.btn-danger.active:hover,
+.open > .dropdown-toggle.btn-danger:hover,
+.btn-danger:active:focus,
+.btn-danger.active:focus,
+.open > .dropdown-toggle.btn-danger:focus,
+.btn-danger:active.focus,
+.btn-danger.active.focus,
+.open > .dropdown-toggle.btn-danger.focus {
+ color: #fff;
+ background-color: #ac2925;
+ border-color: #761c19;
+}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
@@ -3109,7 +3488,7 @@ fieldset[disabled] .btn-link:focus {
.btn-group-lg > .btn {
padding: 10px 16px;
font-size: 18px;
- line-height: 1.33;
+ line-height: 1.3333333;
border-radius: 6px;
}
.btn-sm,
@@ -3149,11 +3528,9 @@ input[type="button"].btn-block {
}
.collapse {
display: none;
- visibility: hidden;
}
.collapse.in {
display: block;
- visibility: visible;
}
tr.collapse.in {
display: table-row;
@@ -3181,10 +3558,12 @@ tbody.collapse.in {
height: 0;
margin-left: 2px;
vertical-align: middle;
- border-top: 4px solid;
+ border-top: 4px dashed;
+ border-top: 4px solid \9;
border-right: 4px solid transparent;
border-left: 4px solid transparent;
}
+.dropup,
.dropdown {
position: relative;
}
@@ -3297,13 +3676,14 @@ tbody.collapse.in {
.navbar-fixed-bottom .dropdown .caret {
content: "";
border-top: 0;
- border-bottom: 4px solid;
+ border-bottom: 4px dashed;
+ border-bottom: 4px solid \9;
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
top: auto;
bottom: 100%;
- margin-bottom: 1px;
+ margin-bottom: 2px;
}
@media (min-width: 768px) {
.navbar-right .dropdown-menu {
@@ -3345,6 +3725,7 @@ tbody.collapse.in {
.btn-toolbar {
margin-left: -5px;
}
+.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
float: left;
@@ -3375,12 +3756,12 @@ tbody.collapse.in {
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
-.btn-group > .btn-group:first-child > .btn:last-child,
-.btn-group > .btn-group:first-child > .dropdown-toggle {
+.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
-.btn-group > .btn-group:last-child > .btn:first-child {
+.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
@@ -3506,7 +3887,7 @@ tbody.collapse.in {
height: 46px;
padding: 10px 16px;
font-size: 18px;
- line-height: 1.33;
+ line-height: 1.3333333;
border-radius: 6px;
}
select.input-group-lg > .form-control,
@@ -3635,6 +4016,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
+ z-index: 2;
margin-left: -1px;
}
.nav {
@@ -3820,11 +4202,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
}
.tab-content > .tab-pane {
display: none;
- visibility: hidden;
}
.tab-content > .active {
display: block;
- visibility: visible;
}
.nav-tabs .dropdown-menu {
margin-top: -1px;
@@ -3871,7 +4251,6 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
height: auto !important;
padding-bottom: 0;
overflow: visible !important;
- visibility: visible !important;
}
.navbar-collapse.in {
overflow-y: visible;
@@ -4120,6 +4499,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
border-top-right-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ margin-bottom: 0;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 0;
@@ -4412,6 +4792,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
+ z-index: 3;
color: #23527c;
background-color: #eee;
border-color: #ddd;
@@ -4443,6 +4824,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
.pagination-lg > li > span {
padding: 10px 16px;
font-size: 18px;
+ line-height: 1.3333333;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
@@ -4458,6 +4840,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
.pagination-sm > li > span {
padding: 5px 10px;
font-size: 12px;
+ line-height: 1.5;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
@@ -4584,7 +4967,7 @@ a.label:focus {
color: #fff;
text-align: center;
white-space: nowrap;
- vertical-align: baseline;
+ vertical-align: middle;
background-color: #777;
border-radius: 10px;
}
@@ -4595,7 +4978,8 @@ a.label:focus {
position: relative;
top: -1px;
}
-.btn-xs .badge {
+.btn-xs .badge,
+.btn-group-xs > .btn .badge {
top: 0;
padding: 1px 5px;
}
@@ -4620,7 +5004,8 @@ a.badge:focus {
margin-left: 3px;
}
.jumbotron {
- padding: 30px 15px;
+ padding-top: 30px;
+ padding-bottom: 30px;
margin-bottom: 30px;
color: inherit;
background-color: #eee;
@@ -4646,7 +5031,8 @@ a.badge:focus {
}
@media screen and (min-width: 768px) {
.jumbotron {
- padding: 48px 0;
+ padding-top: 48px;
+ padding-bottom: 48px;
}
.container .jumbotron,
.container-fluid .jumbotron {
@@ -4859,6 +5245,20 @@ a.thumbnail.active {
.media:first-child {
margin-top: 0;
}
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+.media-body {
+ width: 10000px;
+}
+.media-object {
+ display: block;
+}
+.media-object.img-thumbnail {
+ max-width: none;
+}
.media-right,
.media > .pull-right {
padding-left: 10px;
@@ -4908,18 +5308,26 @@ a.thumbnail.active {
border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
}
-a.list-group-item {
+a.list-group-item,
+button.list-group-item {
color: #555;
}
-a.list-group-item .list-group-item-heading {
+a.list-group-item .list-group-item-heading,
+button.list-group-item .list-group-item-heading {
color: #333;
}
a.list-group-item:hover,
-a.list-group-item:focus {
+button.list-group-item:hover,
+a.list-group-item:focus,
+button.list-group-item:focus {
color: #555;
text-decoration: none;
background-color: #f5f5f5;
}
+button.list-group-item {
+ width: 100%;
+ text-align: left;
+}
.list-group-item.disabled,
.list-group-item.disabled:hover,
.list-group-item.disabled:focus {
@@ -4965,20 +5373,27 @@ a.list-group-item:focus {
color: #3c763d;
background-color: #dff0d8;
}
-a.list-group-item-success {
+a.list-group-item-success,
+button.list-group-item-success {
color: #3c763d;
}
-a.list-group-item-success .list-group-item-heading {
+a.list-group-item-success .list-group-item-heading,
+button.list-group-item-success .list-group-item-heading {
color: inherit;
}
a.list-group-item-success:hover,
-a.list-group-item-success:focus {
+button.list-group-item-success:hover,
+a.list-group-item-success:focus,
+button.list-group-item-success:focus {
color: #3c763d;
background-color: #d0e9c6;
}
a.list-group-item-success.active,
+button.list-group-item-success.active,
a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus {
+button.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus,
+button.list-group-item-success.active:focus {
color: #fff;
background-color: #3c763d;
border-color: #3c763d;
@@ -4987,20 +5402,27 @@ a.list-group-item-success.active:focus {
color: #31708f;
background-color: #d9edf7;
}
-a.list-group-item-info {
+a.list-group-item-info,
+button.list-group-item-info {
color: #31708f;
}
-a.list-group-item-info .list-group-item-heading {
+a.list-group-item-info .list-group-item-heading,
+button.list-group-item-info .list-group-item-heading {
color: inherit;
}
a.list-group-item-info:hover,
-a.list-group-item-info:focus {
+button.list-group-item-info:hover,
+a.list-group-item-info:focus,
+button.list-group-item-info:focus {
color: #31708f;
background-color: #c4e3f3;
}
a.list-group-item-info.active,
+button.list-group-item-info.active,
a.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus {
+button.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus,
+button.list-group-item-info.active:focus {
color: #fff;
background-color: #31708f;
border-color: #31708f;
@@ -5009,20 +5431,27 @@ a.list-group-item-info.active:focus {
color: #8a6d3b;
background-color: #fcf8e3;
}
-a.list-group-item-warning {
+a.list-group-item-warning,
+button.list-group-item-warning {
color: #8a6d3b;
}
-a.list-group-item-warning .list-group-item-heading {
+a.list-group-item-warning .list-group-item-heading,
+button.list-group-item-warning .list-group-item-heading {
color: inherit;
}
a.list-group-item-warning:hover,
-a.list-group-item-warning:focus {
+button.list-group-item-warning:hover,
+a.list-group-item-warning:focus,
+button.list-group-item-warning:focus {
color: #8a6d3b;
background-color: #faf2cc;
}
a.list-group-item-warning.active,
+button.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus {
+button.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus,
+button.list-group-item-warning.active:focus {
color: #fff;
background-color: #8a6d3b;
border-color: #8a6d3b;
@@ -5031,20 +5460,27 @@ a.list-group-item-warning.active:focus {
color: #a94442;
background-color: #f2dede;
}
-a.list-group-item-danger {
+a.list-group-item-danger,
+button.list-group-item-danger {
color: #a94442;
}
-a.list-group-item-danger .list-group-item-heading {
+a.list-group-item-danger .list-group-item-heading,
+button.list-group-item-danger .list-group-item-heading {
color: inherit;
}
a.list-group-item-danger:hover,
-a.list-group-item-danger:focus {
+button.list-group-item-danger:hover,
+a.list-group-item-danger:focus,
+button.list-group-item-danger:focus {
color: #a94442;
background-color: #ebcccc;
}
a.list-group-item-danger.active,
+button.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus {
+button.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus,
+button.list-group-item-danger.active:focus {
color: #fff;
background-color: #a94442;
border-color: #a94442;
@@ -5083,7 +5519,11 @@ a.list-group-item-danger.active:focus {
font-size: 16px;
color: inherit;
}
-.panel-title > a {
+.panel-title > a,
+.panel-title > small,
+.panel-title > .small,
+.panel-title > small > a,
+.panel-title > .small > a {
color: inherit;
}
.panel-footer {
@@ -5114,6 +5554,10 @@ a.list-group-item-danger.active:focus {
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
}
+.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
.panel-heading + .list-group .list-group-item:first-child {
border-top-width: 0;
}
@@ -5412,10 +5856,10 @@ a.list-group-item-danger.active:focus {
height: 100%;
border: 0;
}
-.embed-responsive.embed-responsive-16by9 {
+.embed-responsive-16by9 {
padding-bottom: 56.25%;
}
-.embed-responsive.embed-responsive-4by3 {
+.embed-responsive-4by3 {
padding-bottom: 75%;
}
.well {
@@ -5474,7 +5918,7 @@ button.close {
right: 0;
bottom: 0;
left: 0;
- z-index: 1040;
+ z-index: 1050;
display: none;
overflow: hidden;
-webkit-overflow-scrolling: touch;
@@ -5517,10 +5961,12 @@ button.close {
box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
}
.modal-backdrop {
- position: absolute;
+ position: fixed;
top: 0;
right: 0;
+ bottom: 0;
left: 0;
+ z-index: 1040;
background-color: #000;
}
.modal-backdrop.fade {
@@ -5593,11 +6039,23 @@ button.close {
display: block;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 12px;
+ font-style: normal;
font-weight: normal;
- line-height: 1.4;
- visibility: visible;
+ line-height: 1.42857143;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ white-space: normal;
filter: alpha(opacity=0);
opacity: 0;
+
+ line-break: auto;
}
.tooltip.in {
filter: alpha(opacity=90);
@@ -5624,7 +6082,6 @@ button.close {
padding: 3px 8px;
color: #fff;
text-align: center;
- text-decoration: none;
background-color: #000;
border-radius: 4px;
}
@@ -5701,9 +6158,18 @@ button.close {
padding: 1px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
+ font-style: normal;
font-weight: normal;
line-height: 1.42857143;
text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
white-space: normal;
background-color: #fff;
-webkit-background-clip: padding-box;
@@ -5713,6 +6179,8 @@ button.close {
border-radius: 6px;
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+
+ line-break: auto;
}
.popover.top {
margin-top: -10px;
@@ -5840,8 +6308,8 @@ button.close {
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
- -webkit-perspective: 1000;
- perspective: 1000;
+ -webkit-perspective: 1000px;
+ perspective: 1000px;
}
.carousel-inner > .item.next,
.carousel-inner > .item.active.right {
@@ -5940,6 +6408,7 @@ button.close {
top: 50%;
z-index: 5;
display: inline-block;
+ margin-top: -10px;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
@@ -5955,8 +6424,8 @@ button.close {
.carousel-control .icon-next {
width: 20px;
height: 20px;
- margin-top: -10px;
font-family: serif;
+ line-height: 1;
}
.carousel-control .icon-prev:before {
content: '\2039';
@@ -6114,7 +6583,6 @@ button.close {
}
.hidden {
display: none !important;
- visibility: hidden !important;
}
.affix {
position: fixed;
@@ -6147,7 +6615,7 @@ button.close {
display: block !important;
}
table.visible-xs {
- display: table;
+ display: table !important;
}
tr.visible-xs {
display: table-row !important;
@@ -6177,7 +6645,7 @@ button.close {
display: block !important;
}
table.visible-sm {
- display: table;
+ display: table !important;
}
tr.visible-sm {
display: table-row !important;
@@ -6207,7 +6675,7 @@ button.close {
display: block !important;
}
table.visible-md {
- display: table;
+ display: table !important;
}
tr.visible-md {
display: table-row !important;
@@ -6237,7 +6705,7 @@ button.close {
display: block !important;
}
table.visible-lg {
- display: table;
+ display: table !important;
}
tr.visible-lg {
display: table-row !important;
@@ -6290,7 +6758,7 @@ button.close {
display: block !important;
}
table.visible-print {
- display: table;
+ display: table !important;
}
tr.visible-print {
display: table-row !important;
diff --git a/web/static/css/bootstrap-3.3.5.min.css b/web/static/css/bootstrap-3.3.5.min.css
new file mode 100644
index 000000000..d65c66b1b
--- /dev/null
+++ b/web/static/css/bootstrap-3.3.5.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file
diff --git a/web/static/help/configure_links.html b/web/static/help/about.html
index 1c564e0d6..4659aa9cc 100644
--- a/web/static/help/configure_links.html
+++ b/web/static/help/about.html
@@ -7,10 +7,6 @@
Learn more, or download the source code from <a href=http://mattermost.com>http://mattermost.com</a>.</p>
-<h1>How to update this link</h1>
-<p>In the source code, search for "config.js" and update the links pointing to this page to whatever policies and product description you prefer.
-</p>
-
<h1>Join the community</h1>
<p>To take part in the community building Mattermost, please consider sharing comments, feature requests, votes, and contributions. If you like the project, please Tweet about us at <a href=https://twitter.com/mattermosthq>@mattermosthq</a>.</p>
diff --git a/web/static/help/help.html b/web/static/help/help.html
new file mode 100644
index 000000000..52f5be994
--- /dev/null
+++ b/web/static/help/help.html
@@ -0,0 +1,24 @@
+<htmL>
+<body>
+<h1>Help with Mattermost</h1>
+<p>Mattermost is a team communication service. It brings team real-time messaging and file sharing into one place, with easy archiving and search, accessible across PCs and phones.
+</p>
+<p>We built Mattermost to help teams focus on what matters most to them. It works for us, we hope it works for you too.
+
+Learn more, or download the source code from <a href=http://mattermost.com>http://mattermost.com</a>.</p>
+
+<h1>Join the community</h1>
+<p>To take part in the community building Mattermost, please consider sharing comments, feature requests, votes, and contributions. If you like the project, please Tweet about us at <a href=https://twitter.com/mattermosthq>@mattermosthq</a>.</p>
+
+<p>Here's some links to get started:<br>
+<ul>
+ <li><a href="https://github.com/mattermost/platform">Follow Mattermost on Github</a></li>
+ <li><a href="http://forum.mattermost.org/">Ask us anything at http://forum.mattermost.org/</a></li>
+ <li><a href="http://www.mattermost.org/feature-requests/">Review the Mattermost feature list </a></li>
+ <li><a href="http://www.mattermost.org/download/">Download our source code and install instructions</a></li>
+ <li><a href="http://www.mattermost.org/feature-requests/">Share feature requests and upvotes</a></li>
+ <li><a href="http://www.mattermost.org/filing-issues/">File any bugs you find with our Issue tracking system</a></li>
+</ul>
+</p>
+</body>
+</html>
diff --git a/web/static/help/privacy.html b/web/static/help/privacy.html
new file mode 100644
index 000000000..fe6c1598f
--- /dev/null
+++ b/web/static/help/privacy.html
@@ -0,0 +1,24 @@
+<htmL>
+<body>
+<h1>Mattermost Privacy</h1>
+<p>Mattermost is a team communication service. It brings team real-time messaging and file sharing into one place, with easy archiving and search, accessible across PCs and phones.
+</p>
+<p>We built Mattermost to help teams focus on what matters most to them. It works for us, we hope it works for you too.
+
+Learn more, or download the source code from <a href=http://mattermost.com>http://mattermost.com</a>.</p>
+
+<h1>Join the community</h1>
+<p>To take part in the community building Mattermost, please consider sharing comments, feature requests, votes, and contributions. If you like the project, please Tweet about us at <a href=https://twitter.com/mattermosthq>@mattermosthq</a>.</p>
+
+<p>Here's some links to get started:<br>
+<ul>
+ <li><a href="https://github.com/mattermost/platform">Follow Mattermost on Github</a></li>
+ <li><a href="http://forum.mattermost.org/">Ask us anything at http://forum.mattermost.org/</a></li>
+ <li><a href="http://www.mattermost.org/feature-requests/">Review the Mattermost feature list </a></li>
+ <li><a href="http://www.mattermost.org/download/">Download our source code and install instructions</a></li>
+ <li><a href="http://www.mattermost.org/feature-requests/">Share feature requests and upvotes</a></li>
+ <li><a href="http://www.mattermost.org/filing-issues/">File any bugs you find with our Issue tracking system</a></li>
+</ul>
+</p>
+</body>
+</html>
diff --git a/web/static/help/report_problem.html b/web/static/help/report_problem.html
new file mode 100644
index 000000000..6b73619b4
--- /dev/null
+++ b/web/static/help/report_problem.html
@@ -0,0 +1,24 @@
+<htmL>
+<body>
+<h1>Report a Problem About Mattermost</h1>
+<p>Mattermost is a team communication service. It brings team real-time messaging and file sharing into one place, with easy archiving and search, accessible across PCs and phones.
+</p>
+<p>We built Mattermost to help teams focus on what matters most to them. It works for us, we hope it works for you too.
+
+Learn more, or download the source code from <a href=http://mattermost.com>http://mattermost.com</a>.</p>
+
+<h1>Join the community</h1>
+<p>To take part in the community building Mattermost, please consider sharing comments, feature requests, votes, and contributions. If you like the project, please Tweet about us at <a href=https://twitter.com/mattermosthq>@mattermosthq</a>.</p>
+
+<p>Here's some links to get started:<br>
+<ul>
+ <li><a href="https://github.com/mattermost/platform">Follow Mattermost on Github</a></li>
+ <li><a href="http://forum.mattermost.org/">Ask us anything at http://forum.mattermost.org/</a></li>
+ <li><a href="http://www.mattermost.org/feature-requests/">Review the Mattermost feature list </a></li>
+ <li><a href="http://www.mattermost.org/download/">Download our source code and install instructions</a></li>
+ <li><a href="http://www.mattermost.org/feature-requests/">Share feature requests and upvotes</a></li>
+ <li><a href="http://www.mattermost.org/filing-issues/">File any bugs you find with our Issue tracking system</a></li>
+</ul>
+</p>
+</body>
+</html>
diff --git a/web/static/help/terms.html b/web/static/help/terms.html
new file mode 100644
index 000000000..6e1f13897
--- /dev/null
+++ b/web/static/help/terms.html
@@ -0,0 +1,24 @@
+<htmL>
+<body>
+<h1>Mattermost Terms</h1>
+<p>Mattermost is a team communication service. It brings team real-time messaging and file sharing into one place, with easy archiving and search, accessible across PCs and phones.
+</p>
+<p>We built Mattermost to help teams focus on what matters most to them. It works for us, we hope it works for you too.
+
+Learn more, or download the source code from <a href=http://mattermost.com>http://mattermost.com</a>.</p>
+
+<h1>Join the community</h1>
+<p>To take part in the community building Mattermost, please consider sharing comments, feature requests, votes, and contributions. If you like the project, please Tweet about us at <a href=https://twitter.com/mattermosthq>@mattermosthq</a>.</p>
+
+<p>Here's some links to get started:<br>
+<ul>
+ <li><a href="https://github.com/mattermost/platform">Follow Mattermost on Github</a></li>
+ <li><a href="http://forum.mattermost.org/">Ask us anything at http://forum.mattermost.org/</a></li>
+ <li><a href="http://www.mattermost.org/feature-requests/">Review the Mattermost feature list </a></li>
+ <li><a href="http://www.mattermost.org/download/">Download our source code and install instructions</a></li>
+ <li><a href="http://www.mattermost.org/feature-requests/">Share feature requests and upvotes</a></li>
+ <li><a href="http://www.mattermost.org/filing-issues/">File any bugs you find with our Issue tracking system</a></li>
+</ul>
+</p>
+</body>
+</html>
diff --git a/web/static/images/emoji/+1.png b/web/static/images/emoji/+1.png
new file mode 100755
index 000000000..81786c1d8
--- /dev/null
+++ b/web/static/images/emoji/+1.png
Binary files differ
diff --git a/web/static/images/emoji/-1.png b/web/static/images/emoji/-1.png
new file mode 100755
index 000000000..41c6b825d
--- /dev/null
+++ b/web/static/images/emoji/-1.png
Binary files differ
diff --git a/web/static/images/emoji/100.png b/web/static/images/emoji/100.png
new file mode 100755
index 000000000..ca3bb9bcf
--- /dev/null
+++ b/web/static/images/emoji/100.png
Binary files differ
diff --git a/web/static/images/emoji/1234.png b/web/static/images/emoji/1234.png
new file mode 100755
index 000000000..c47c2e1f9
--- /dev/null
+++ b/web/static/images/emoji/1234.png
Binary files differ
diff --git a/web/static/images/emoji/8ball.png b/web/static/images/emoji/8ball.png
new file mode 100755
index 000000000..c2c710d45
--- /dev/null
+++ b/web/static/images/emoji/8ball.png
Binary files differ
diff --git a/web/static/images/emoji/a.png b/web/static/images/emoji/a.png
new file mode 100755
index 000000000..09ff6d6f1
--- /dev/null
+++ b/web/static/images/emoji/a.png
Binary files differ
diff --git a/web/static/images/emoji/ab.png b/web/static/images/emoji/ab.png
new file mode 100755
index 000000000..2a5222047
--- /dev/null
+++ b/web/static/images/emoji/ab.png
Binary files differ
diff --git a/web/static/images/emoji/abc.png b/web/static/images/emoji/abc.png
new file mode 100755
index 000000000..505d40a15
--- /dev/null
+++ b/web/static/images/emoji/abc.png
Binary files differ
diff --git a/web/static/images/emoji/abcd.png b/web/static/images/emoji/abcd.png
new file mode 100755
index 000000000..5218470b6
--- /dev/null
+++ b/web/static/images/emoji/abcd.png
Binary files differ
diff --git a/web/static/images/emoji/accept.png b/web/static/images/emoji/accept.png
new file mode 100755
index 000000000..2d2009031
--- /dev/null
+++ b/web/static/images/emoji/accept.png
Binary files differ
diff --git a/web/static/images/emoji/aerial_tramway.png b/web/static/images/emoji/aerial_tramway.png
new file mode 100755
index 000000000..38f6dfe23
--- /dev/null
+++ b/web/static/images/emoji/aerial_tramway.png
Binary files differ
diff --git a/web/static/images/emoji/airplane.png b/web/static/images/emoji/airplane.png
new file mode 100755
index 000000000..8407cb675
--- /dev/null
+++ b/web/static/images/emoji/airplane.png
Binary files differ
diff --git a/web/static/images/emoji/alarm_clock.png b/web/static/images/emoji/alarm_clock.png
new file mode 100755
index 000000000..86ca8c8ed
--- /dev/null
+++ b/web/static/images/emoji/alarm_clock.png
Binary files differ
diff --git a/web/static/images/emoji/alien.png b/web/static/images/emoji/alien.png
new file mode 100755
index 000000000..416de47be
--- /dev/null
+++ b/web/static/images/emoji/alien.png
Binary files differ
diff --git a/web/static/images/emoji/ambulance.png b/web/static/images/emoji/ambulance.png
new file mode 100755
index 000000000..b740f45db
--- /dev/null
+++ b/web/static/images/emoji/ambulance.png
Binary files differ
diff --git a/web/static/images/emoji/anchor.png b/web/static/images/emoji/anchor.png
new file mode 100755
index 000000000..0c5192e64
--- /dev/null
+++ b/web/static/images/emoji/anchor.png
Binary files differ
diff --git a/web/static/images/emoji/angel.png b/web/static/images/emoji/angel.png
new file mode 100755
index 000000000..da52c310c
--- /dev/null
+++ b/web/static/images/emoji/angel.png
Binary files differ
diff --git a/web/static/images/emoji/anger.png b/web/static/images/emoji/anger.png
new file mode 100755
index 000000000..6fb4dca18
--- /dev/null
+++ b/web/static/images/emoji/anger.png
Binary files differ
diff --git a/web/static/images/emoji/angry.png b/web/static/images/emoji/angry.png
new file mode 100755
index 000000000..f95bfa897
--- /dev/null
+++ b/web/static/images/emoji/angry.png
Binary files differ
diff --git a/web/static/images/emoji/anguished.png b/web/static/images/emoji/anguished.png
new file mode 100755
index 000000000..c62594726
--- /dev/null
+++ b/web/static/images/emoji/anguished.png
Binary files differ
diff --git a/web/static/images/emoji/ant.png b/web/static/images/emoji/ant.png
new file mode 100755
index 000000000..b92d1cc14
--- /dev/null
+++ b/web/static/images/emoji/ant.png
Binary files differ
diff --git a/web/static/images/emoji/apple.png b/web/static/images/emoji/apple.png
new file mode 100755
index 000000000..08aa17b95
--- /dev/null
+++ b/web/static/images/emoji/apple.png
Binary files differ
diff --git a/web/static/images/emoji/aquarius.png b/web/static/images/emoji/aquarius.png
new file mode 100755
index 000000000..cbff66edc
--- /dev/null
+++ b/web/static/images/emoji/aquarius.png
Binary files differ
diff --git a/web/static/images/emoji/aries.png b/web/static/images/emoji/aries.png
new file mode 100755
index 000000000..aab5e8809
--- /dev/null
+++ b/web/static/images/emoji/aries.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_backward.png b/web/static/images/emoji/arrow_backward.png
new file mode 100755
index 000000000..088621834
--- /dev/null
+++ b/web/static/images/emoji/arrow_backward.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_double_down.png b/web/static/images/emoji/arrow_double_down.png
new file mode 100755
index 000000000..2ecbebcda
--- /dev/null
+++ b/web/static/images/emoji/arrow_double_down.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_double_up.png b/web/static/images/emoji/arrow_double_up.png
new file mode 100755
index 000000000..2bd6659b1
--- /dev/null
+++ b/web/static/images/emoji/arrow_double_up.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_down.png b/web/static/images/emoji/arrow_down.png
new file mode 100755
index 000000000..e6702f02b
--- /dev/null
+++ b/web/static/images/emoji/arrow_down.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_down_small.png b/web/static/images/emoji/arrow_down_small.png
new file mode 100755
index 000000000..22d383a92
--- /dev/null
+++ b/web/static/images/emoji/arrow_down_small.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_forward.png b/web/static/images/emoji/arrow_forward.png
new file mode 100755
index 000000000..fbfe711b6
--- /dev/null
+++ b/web/static/images/emoji/arrow_forward.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_heading_down.png b/web/static/images/emoji/arrow_heading_down.png
new file mode 100755
index 000000000..56dd3b9d3
--- /dev/null
+++ b/web/static/images/emoji/arrow_heading_down.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_heading_up.png b/web/static/images/emoji/arrow_heading_up.png
new file mode 100755
index 000000000..c8f670a1e
--- /dev/null
+++ b/web/static/images/emoji/arrow_heading_up.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_left.png b/web/static/images/emoji/arrow_left.png
new file mode 100755
index 000000000..d64ac619c
--- /dev/null
+++ b/web/static/images/emoji/arrow_left.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_lower_left.png b/web/static/images/emoji/arrow_lower_left.png
new file mode 100755
index 000000000..55fb03c41
--- /dev/null
+++ b/web/static/images/emoji/arrow_lower_left.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_lower_right.png b/web/static/images/emoji/arrow_lower_right.png
new file mode 100755
index 000000000..da8fb8294
--- /dev/null
+++ b/web/static/images/emoji/arrow_lower_right.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_right.png b/web/static/images/emoji/arrow_right.png
new file mode 100755
index 000000000..6d483b514
--- /dev/null
+++ b/web/static/images/emoji/arrow_right.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_right_hook.png b/web/static/images/emoji/arrow_right_hook.png
new file mode 100755
index 000000000..8b4ea6e17
--- /dev/null
+++ b/web/static/images/emoji/arrow_right_hook.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_up.png b/web/static/images/emoji/arrow_up.png
new file mode 100755
index 000000000..b5b0688d3
--- /dev/null
+++ b/web/static/images/emoji/arrow_up.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_up_down.png b/web/static/images/emoji/arrow_up_down.png
new file mode 100755
index 000000000..be423de78
--- /dev/null
+++ b/web/static/images/emoji/arrow_up_down.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_up_small.png b/web/static/images/emoji/arrow_up_small.png
new file mode 100755
index 000000000..3f40bfb89
--- /dev/null
+++ b/web/static/images/emoji/arrow_up_small.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_upper_left.png b/web/static/images/emoji/arrow_upper_left.png
new file mode 100755
index 000000000..2950ae2f9
--- /dev/null
+++ b/web/static/images/emoji/arrow_upper_left.png
Binary files differ
diff --git a/web/static/images/emoji/arrow_upper_right.png b/web/static/images/emoji/arrow_upper_right.png
new file mode 100755
index 000000000..e23790ba1
--- /dev/null
+++ b/web/static/images/emoji/arrow_upper_right.png
Binary files differ
diff --git a/web/static/images/emoji/arrows_clockwise.png b/web/static/images/emoji/arrows_clockwise.png
new file mode 100755
index 000000000..5f84d7e72
--- /dev/null
+++ b/web/static/images/emoji/arrows_clockwise.png
Binary files differ
diff --git a/web/static/images/emoji/arrows_counterclockwise.png b/web/static/images/emoji/arrows_counterclockwise.png
new file mode 100755
index 000000000..3e06f5b3c
--- /dev/null
+++ b/web/static/images/emoji/arrows_counterclockwise.png
Binary files differ
diff --git a/web/static/images/emoji/art.png b/web/static/images/emoji/art.png
new file mode 100755
index 000000000..d45212b03
--- /dev/null
+++ b/web/static/images/emoji/art.png
Binary files differ
diff --git a/web/static/images/emoji/articulated_lorry.png b/web/static/images/emoji/articulated_lorry.png
new file mode 100755
index 000000000..81ec1f917
--- /dev/null
+++ b/web/static/images/emoji/articulated_lorry.png
Binary files differ
diff --git a/web/static/images/emoji/astonished.png b/web/static/images/emoji/astonished.png
new file mode 100755
index 000000000..858a83484
--- /dev/null
+++ b/web/static/images/emoji/astonished.png
Binary files differ
diff --git a/web/static/images/emoji/atm.png b/web/static/images/emoji/atm.png
new file mode 100755
index 000000000..c2846e792
--- /dev/null
+++ b/web/static/images/emoji/atm.png
Binary files differ
diff --git a/web/static/images/emoji/b.png b/web/static/images/emoji/b.png
new file mode 100755
index 000000000..8742b3d2e
--- /dev/null
+++ b/web/static/images/emoji/b.png
Binary files differ
diff --git a/web/static/images/emoji/baby.png b/web/static/images/emoji/baby.png
new file mode 100755
index 000000000..3b29da40b
--- /dev/null
+++ b/web/static/images/emoji/baby.png
Binary files differ
diff --git a/web/static/images/emoji/baby_bottle.png b/web/static/images/emoji/baby_bottle.png
new file mode 100755
index 000000000..1b2cfe5e3
--- /dev/null
+++ b/web/static/images/emoji/baby_bottle.png
Binary files differ
diff --git a/web/static/images/emoji/baby_chick.png b/web/static/images/emoji/baby_chick.png
new file mode 100755
index 000000000..9be8d2930
--- /dev/null
+++ b/web/static/images/emoji/baby_chick.png
Binary files differ
diff --git a/web/static/images/emoji/baby_symbol.png b/web/static/images/emoji/baby_symbol.png
new file mode 100755
index 000000000..2e58725cf
--- /dev/null
+++ b/web/static/images/emoji/baby_symbol.png
Binary files differ
diff --git a/web/static/images/emoji/back.png b/web/static/images/emoji/back.png
new file mode 100755
index 000000000..0cde62876
--- /dev/null
+++ b/web/static/images/emoji/back.png
Binary files differ
diff --git a/web/static/images/emoji/baggage_claim.png b/web/static/images/emoji/baggage_claim.png
new file mode 100755
index 000000000..59ae044a4
--- /dev/null
+++ b/web/static/images/emoji/baggage_claim.png
Binary files differ
diff --git a/web/static/images/emoji/balloon.png b/web/static/images/emoji/balloon.png
new file mode 100755
index 000000000..034489702
--- /dev/null
+++ b/web/static/images/emoji/balloon.png
Binary files differ
diff --git a/web/static/images/emoji/ballot_box_with_check.png b/web/static/images/emoji/ballot_box_with_check.png
new file mode 100755
index 000000000..f07a466c7
--- /dev/null
+++ b/web/static/images/emoji/ballot_box_with_check.png
Binary files differ
diff --git a/web/static/images/emoji/bamboo.png b/web/static/images/emoji/bamboo.png
new file mode 100755
index 000000000..fc858d0fc
--- /dev/null
+++ b/web/static/images/emoji/bamboo.png
Binary files differ
diff --git a/web/static/images/emoji/banana.png b/web/static/images/emoji/banana.png
new file mode 100755
index 000000000..a0563afb9
--- /dev/null
+++ b/web/static/images/emoji/banana.png
Binary files differ
diff --git a/web/static/images/emoji/bangbang.png b/web/static/images/emoji/bangbang.png
new file mode 100755
index 000000000..7270f0afe
--- /dev/null
+++ b/web/static/images/emoji/bangbang.png
Binary files differ
diff --git a/web/static/images/emoji/bank.png b/web/static/images/emoji/bank.png
new file mode 100755
index 000000000..1faa8777e
--- /dev/null
+++ b/web/static/images/emoji/bank.png
Binary files differ
diff --git a/web/static/images/emoji/bar_chart.png b/web/static/images/emoji/bar_chart.png
new file mode 100755
index 000000000..09d7301c4
--- /dev/null
+++ b/web/static/images/emoji/bar_chart.png
Binary files differ
diff --git a/web/static/images/emoji/barber.png b/web/static/images/emoji/barber.png
new file mode 100755
index 000000000..a10cb2322
--- /dev/null
+++ b/web/static/images/emoji/barber.png
Binary files differ
diff --git a/web/static/images/emoji/baseball.png b/web/static/images/emoji/baseball.png
new file mode 100755
index 000000000..da004e2ea
--- /dev/null
+++ b/web/static/images/emoji/baseball.png
Binary files differ
diff --git a/web/static/images/emoji/basketball.png b/web/static/images/emoji/basketball.png
new file mode 100755
index 000000000..ef694bec4
--- /dev/null
+++ b/web/static/images/emoji/basketball.png
Binary files differ
diff --git a/web/static/images/emoji/bath.png b/web/static/images/emoji/bath.png
new file mode 100755
index 000000000..8f75d1d24
--- /dev/null
+++ b/web/static/images/emoji/bath.png
Binary files differ
diff --git a/web/static/images/emoji/bathtub.png b/web/static/images/emoji/bathtub.png
new file mode 100755
index 000000000..1c3f844ab
--- /dev/null
+++ b/web/static/images/emoji/bathtub.png
Binary files differ
diff --git a/web/static/images/emoji/battery.png b/web/static/images/emoji/battery.png
new file mode 100755
index 000000000..aa7eedce4
--- /dev/null
+++ b/web/static/images/emoji/battery.png
Binary files differ
diff --git a/web/static/images/emoji/bear.png b/web/static/images/emoji/bear.png
new file mode 100755
index 000000000..f5afe920e
--- /dev/null
+++ b/web/static/images/emoji/bear.png
Binary files differ
diff --git a/web/static/images/emoji/bee.png b/web/static/images/emoji/bee.png
new file mode 100755
index 000000000..f53733953
--- /dev/null
+++ b/web/static/images/emoji/bee.png
Binary files differ
diff --git a/web/static/images/emoji/beer.png b/web/static/images/emoji/beer.png
new file mode 100755
index 000000000..cd78bed74
--- /dev/null
+++ b/web/static/images/emoji/beer.png
Binary files differ
diff --git a/web/static/images/emoji/beers.png b/web/static/images/emoji/beers.png
new file mode 100755
index 000000000..cc5e4ab5a
--- /dev/null
+++ b/web/static/images/emoji/beers.png
Binary files differ
diff --git a/web/static/images/emoji/beetle.png b/web/static/images/emoji/beetle.png
new file mode 100755
index 000000000..222577ca7
--- /dev/null
+++ b/web/static/images/emoji/beetle.png
Binary files differ
diff --git a/web/static/images/emoji/beginner.png b/web/static/images/emoji/beginner.png
new file mode 100755
index 000000000..1f022d175
--- /dev/null
+++ b/web/static/images/emoji/beginner.png
Binary files differ
diff --git a/web/static/images/emoji/bell.png b/web/static/images/emoji/bell.png
new file mode 100755
index 000000000..69acceb28
--- /dev/null
+++ b/web/static/images/emoji/bell.png
Binary files differ
diff --git a/web/static/images/emoji/bento.png b/web/static/images/emoji/bento.png
new file mode 100755
index 000000000..d6801124a
--- /dev/null
+++ b/web/static/images/emoji/bento.png
Binary files differ
diff --git a/web/static/images/emoji/bicyclist.png b/web/static/images/emoji/bicyclist.png
new file mode 100755
index 000000000..cbbd7c386
--- /dev/null
+++ b/web/static/images/emoji/bicyclist.png
Binary files differ
diff --git a/web/static/images/emoji/bike.png b/web/static/images/emoji/bike.png
new file mode 100755
index 000000000..657386027
--- /dev/null
+++ b/web/static/images/emoji/bike.png
Binary files differ
diff --git a/web/static/images/emoji/bikini.png b/web/static/images/emoji/bikini.png
new file mode 100755
index 000000000..4ff63b40f
--- /dev/null
+++ b/web/static/images/emoji/bikini.png
Binary files differ
diff --git a/web/static/images/emoji/bird.png b/web/static/images/emoji/bird.png
new file mode 100755
index 000000000..e6be8c027
--- /dev/null
+++ b/web/static/images/emoji/bird.png
Binary files differ
diff --git a/web/static/images/emoji/birthday.png b/web/static/images/emoji/birthday.png
new file mode 100755
index 000000000..36e8edcbe
--- /dev/null
+++ b/web/static/images/emoji/birthday.png
Binary files differ
diff --git a/web/static/images/emoji/black_circle.png b/web/static/images/emoji/black_circle.png
new file mode 100755
index 000000000..e46f9df61
--- /dev/null
+++ b/web/static/images/emoji/black_circle.png
Binary files differ
diff --git a/web/static/images/emoji/black_joker.png b/web/static/images/emoji/black_joker.png
new file mode 100755
index 000000000..4c78f3614
--- /dev/null
+++ b/web/static/images/emoji/black_joker.png
Binary files differ
diff --git a/web/static/images/emoji/black_medium_small_square.png b/web/static/images/emoji/black_medium_small_square.png
new file mode 100755
index 000000000..25bfe9c45
--- /dev/null
+++ b/web/static/images/emoji/black_medium_small_square.png
Binary files differ
diff --git a/web/static/images/emoji/black_medium_square.png b/web/static/images/emoji/black_medium_square.png
new file mode 100755
index 000000000..204cce12c
--- /dev/null
+++ b/web/static/images/emoji/black_medium_square.png
Binary files differ
diff --git a/web/static/images/emoji/black_nib.png b/web/static/images/emoji/black_nib.png
new file mode 100755
index 000000000..29f6994c1
--- /dev/null
+++ b/web/static/images/emoji/black_nib.png
Binary files differ
diff --git a/web/static/images/emoji/black_small_square.png b/web/static/images/emoji/black_small_square.png
new file mode 100755
index 000000000..a247751ec
--- /dev/null
+++ b/web/static/images/emoji/black_small_square.png
Binary files differ
diff --git a/web/static/images/emoji/black_square.png b/web/static/images/emoji/black_square.png
new file mode 100755
index 000000000..71da10de8
--- /dev/null
+++ b/web/static/images/emoji/black_square.png
Binary files differ
diff --git a/web/static/images/emoji/black_square_button.png b/web/static/images/emoji/black_square_button.png
new file mode 100755
index 000000000..f2597e956
--- /dev/null
+++ b/web/static/images/emoji/black_square_button.png
Binary files differ
diff --git a/web/static/images/emoji/blossom.png b/web/static/images/emoji/blossom.png
new file mode 100755
index 000000000..55a97353b
--- /dev/null
+++ b/web/static/images/emoji/blossom.png
Binary files differ
diff --git a/web/static/images/emoji/blowfish.png b/web/static/images/emoji/blowfish.png
new file mode 100755
index 000000000..d3ad46585
--- /dev/null
+++ b/web/static/images/emoji/blowfish.png
Binary files differ
diff --git a/web/static/images/emoji/blue_book.png b/web/static/images/emoji/blue_book.png
new file mode 100755
index 000000000..e2b9e8c79
--- /dev/null
+++ b/web/static/images/emoji/blue_book.png
Binary files differ
diff --git a/web/static/images/emoji/blue_car.png b/web/static/images/emoji/blue_car.png
new file mode 100755
index 000000000..978291e08
--- /dev/null
+++ b/web/static/images/emoji/blue_car.png
Binary files differ
diff --git a/web/static/images/emoji/blue_heart.png b/web/static/images/emoji/blue_heart.png
new file mode 100755
index 000000000..baa29b31b
--- /dev/null
+++ b/web/static/images/emoji/blue_heart.png
Binary files differ
diff --git a/web/static/images/emoji/blush.png b/web/static/images/emoji/blush.png
new file mode 100755
index 000000000..3a95eb61a
--- /dev/null
+++ b/web/static/images/emoji/blush.png
Binary files differ
diff --git a/web/static/images/emoji/boar.png b/web/static/images/emoji/boar.png
new file mode 100755
index 000000000..8196ad4a1
--- /dev/null
+++ b/web/static/images/emoji/boar.png
Binary files differ
diff --git a/web/static/images/emoji/boat.png b/web/static/images/emoji/boat.png
new file mode 100755
index 000000000..ff656dc62
--- /dev/null
+++ b/web/static/images/emoji/boat.png
Binary files differ
diff --git a/web/static/images/emoji/bomb.png b/web/static/images/emoji/bomb.png
new file mode 100755
index 000000000..3289787dc
--- /dev/null
+++ b/web/static/images/emoji/bomb.png
Binary files differ
diff --git a/web/static/images/emoji/book.png b/web/static/images/emoji/book.png
new file mode 100755
index 000000000..8b698415c
--- /dev/null
+++ b/web/static/images/emoji/book.png
Binary files differ
diff --git a/web/static/images/emoji/bookmark.png b/web/static/images/emoji/bookmark.png
new file mode 100755
index 000000000..6fc4ed902
--- /dev/null
+++ b/web/static/images/emoji/bookmark.png
Binary files differ
diff --git a/web/static/images/emoji/bookmark_tabs.png b/web/static/images/emoji/bookmark_tabs.png
new file mode 100755
index 000000000..83782ff0c
--- /dev/null
+++ b/web/static/images/emoji/bookmark_tabs.png
Binary files differ
diff --git a/web/static/images/emoji/books.png b/web/static/images/emoji/books.png
new file mode 100755
index 000000000..dca06a1ad
--- /dev/null
+++ b/web/static/images/emoji/books.png
Binary files differ
diff --git a/web/static/images/emoji/boom.png b/web/static/images/emoji/boom.png
new file mode 100755
index 000000000..9d5bd0401
--- /dev/null
+++ b/web/static/images/emoji/boom.png
Binary files differ
diff --git a/web/static/images/emoji/boot.png b/web/static/images/emoji/boot.png
new file mode 100755
index 000000000..58d0fdbcd
--- /dev/null
+++ b/web/static/images/emoji/boot.png
Binary files differ
diff --git a/web/static/images/emoji/bouquet.png b/web/static/images/emoji/bouquet.png
new file mode 100755
index 000000000..ce637832e
--- /dev/null
+++ b/web/static/images/emoji/bouquet.png
Binary files differ
diff --git a/web/static/images/emoji/bow.png b/web/static/images/emoji/bow.png
new file mode 100755
index 000000000..024cb6104
--- /dev/null
+++ b/web/static/images/emoji/bow.png
Binary files differ
diff --git a/web/static/images/emoji/bowling.png b/web/static/images/emoji/bowling.png
new file mode 100755
index 000000000..13d8ece2e
--- /dev/null
+++ b/web/static/images/emoji/bowling.png
Binary files differ
diff --git a/web/static/images/emoji/bowtie.png b/web/static/images/emoji/bowtie.png
new file mode 100755
index 000000000..28ff0c787
--- /dev/null
+++ b/web/static/images/emoji/bowtie.png
Binary files differ
diff --git a/web/static/images/emoji/boy.png b/web/static/images/emoji/boy.png
new file mode 100755
index 000000000..f79f1f298
--- /dev/null
+++ b/web/static/images/emoji/boy.png
Binary files differ
diff --git a/web/static/images/emoji/bread.png b/web/static/images/emoji/bread.png
new file mode 100755
index 000000000..7e7c63753
--- /dev/null
+++ b/web/static/images/emoji/bread.png
Binary files differ
diff --git a/web/static/images/emoji/bride_with_veil.png b/web/static/images/emoji/bride_with_veil.png
new file mode 100755
index 000000000..dd0b0cfda
--- /dev/null
+++ b/web/static/images/emoji/bride_with_veil.png
Binary files differ
diff --git a/web/static/images/emoji/bridge_at_night.png b/web/static/images/emoji/bridge_at_night.png
new file mode 100755
index 000000000..495b06c3d
--- /dev/null
+++ b/web/static/images/emoji/bridge_at_night.png
Binary files differ
diff --git a/web/static/images/emoji/briefcase.png b/web/static/images/emoji/briefcase.png
new file mode 100755
index 000000000..46e82b001
--- /dev/null
+++ b/web/static/images/emoji/briefcase.png
Binary files differ
diff --git a/web/static/images/emoji/broken_heart.png b/web/static/images/emoji/broken_heart.png
new file mode 100755
index 000000000..a1bc850ec
--- /dev/null
+++ b/web/static/images/emoji/broken_heart.png
Binary files differ
diff --git a/web/static/images/emoji/bug.png b/web/static/images/emoji/bug.png
new file mode 100755
index 000000000..c2eaf7a70
--- /dev/null
+++ b/web/static/images/emoji/bug.png
Binary files differ
diff --git a/web/static/images/emoji/bulb.png b/web/static/images/emoji/bulb.png
new file mode 100755
index 000000000..23afca1c7
--- /dev/null
+++ b/web/static/images/emoji/bulb.png
Binary files differ
diff --git a/web/static/images/emoji/bullettrain_front.png b/web/static/images/emoji/bullettrain_front.png
new file mode 100755
index 000000000..16651acff
--- /dev/null
+++ b/web/static/images/emoji/bullettrain_front.png
Binary files differ
diff --git a/web/static/images/emoji/bullettrain_side.png b/web/static/images/emoji/bullettrain_side.png
new file mode 100755
index 000000000..8eca36845
--- /dev/null
+++ b/web/static/images/emoji/bullettrain_side.png
Binary files differ
diff --git a/web/static/images/emoji/bus.png b/web/static/images/emoji/bus.png
new file mode 100755
index 000000000..823aa39e4
--- /dev/null
+++ b/web/static/images/emoji/bus.png
Binary files differ
diff --git a/web/static/images/emoji/busstop.png b/web/static/images/emoji/busstop.png
new file mode 100755
index 000000000..94894847b
--- /dev/null
+++ b/web/static/images/emoji/busstop.png
Binary files differ
diff --git a/web/static/images/emoji/bust_in_silhouette.png b/web/static/images/emoji/bust_in_silhouette.png
new file mode 100755
index 000000000..dd7defe28
--- /dev/null
+++ b/web/static/images/emoji/bust_in_silhouette.png
Binary files differ
diff --git a/web/static/images/emoji/busts_in_silhouette.png b/web/static/images/emoji/busts_in_silhouette.png
new file mode 100755
index 000000000..1f3aabcff
--- /dev/null
+++ b/web/static/images/emoji/busts_in_silhouette.png
Binary files differ
diff --git a/web/static/images/emoji/cactus.png b/web/static/images/emoji/cactus.png
new file mode 100755
index 000000000..5a2c3cc72
--- /dev/null
+++ b/web/static/images/emoji/cactus.png
Binary files differ
diff --git a/web/static/images/emoji/cake.png b/web/static/images/emoji/cake.png
new file mode 100755
index 000000000..efeb9b4b2
--- /dev/null
+++ b/web/static/images/emoji/cake.png
Binary files differ
diff --git a/web/static/images/emoji/calendar.png b/web/static/images/emoji/calendar.png
new file mode 100755
index 000000000..900b868bb
--- /dev/null
+++ b/web/static/images/emoji/calendar.png
Binary files differ
diff --git a/web/static/images/emoji/calling.png b/web/static/images/emoji/calling.png
new file mode 100755
index 000000000..837897f26
--- /dev/null
+++ b/web/static/images/emoji/calling.png
Binary files differ
diff --git a/web/static/images/emoji/camel.png b/web/static/images/emoji/camel.png
new file mode 100755
index 000000000..496c186ae
--- /dev/null
+++ b/web/static/images/emoji/camel.png
Binary files differ
diff --git a/web/static/images/emoji/camera.png b/web/static/images/emoji/camera.png
new file mode 100755
index 000000000..397d03b39
--- /dev/null
+++ b/web/static/images/emoji/camera.png
Binary files differ
diff --git a/web/static/images/emoji/cancer.png b/web/static/images/emoji/cancer.png
new file mode 100755
index 000000000..ea43a4a2a
--- /dev/null
+++ b/web/static/images/emoji/cancer.png
Binary files differ
diff --git a/web/static/images/emoji/candy.png b/web/static/images/emoji/candy.png
new file mode 100755
index 000000000..33722f236
--- /dev/null
+++ b/web/static/images/emoji/candy.png
Binary files differ
diff --git a/web/static/images/emoji/capital_abcd.png b/web/static/images/emoji/capital_abcd.png
new file mode 100755
index 000000000..ffc0cba4b
--- /dev/null
+++ b/web/static/images/emoji/capital_abcd.png
Binary files differ
diff --git a/web/static/images/emoji/capricorn.png b/web/static/images/emoji/capricorn.png
new file mode 100755
index 000000000..f2044e789
--- /dev/null
+++ b/web/static/images/emoji/capricorn.png
Binary files differ
diff --git a/web/static/images/emoji/car.png b/web/static/images/emoji/car.png
new file mode 100755
index 000000000..d70a2f062
--- /dev/null
+++ b/web/static/images/emoji/car.png
Binary files differ
diff --git a/web/static/images/emoji/card_index.png b/web/static/images/emoji/card_index.png
new file mode 100755
index 000000000..374e94e9e
--- /dev/null
+++ b/web/static/images/emoji/card_index.png
Binary files differ
diff --git a/web/static/images/emoji/carousel_horse.png b/web/static/images/emoji/carousel_horse.png
new file mode 100755
index 000000000..765d2c0a8
--- /dev/null
+++ b/web/static/images/emoji/carousel_horse.png
Binary files differ
diff --git a/web/static/images/emoji/cat.png b/web/static/images/emoji/cat.png
new file mode 100755
index 000000000..09b9ef79a
--- /dev/null
+++ b/web/static/images/emoji/cat.png
Binary files differ
diff --git a/web/static/images/emoji/cat2.png b/web/static/images/emoji/cat2.png
new file mode 100755
index 000000000..6dbc4c71e
--- /dev/null
+++ b/web/static/images/emoji/cat2.png
Binary files differ
diff --git a/web/static/images/emoji/cd.png b/web/static/images/emoji/cd.png
new file mode 100755
index 000000000..baff835c4
--- /dev/null
+++ b/web/static/images/emoji/cd.png
Binary files differ
diff --git a/web/static/images/emoji/chart.png b/web/static/images/emoji/chart.png
new file mode 100755
index 000000000..ac2c4bb09
--- /dev/null
+++ b/web/static/images/emoji/chart.png
Binary files differ
diff --git a/web/static/images/emoji/chart_with_downwards_trend.png b/web/static/images/emoji/chart_with_downwards_trend.png
new file mode 100755
index 000000000..cb0d2a113
--- /dev/null
+++ b/web/static/images/emoji/chart_with_downwards_trend.png
Binary files differ
diff --git a/web/static/images/emoji/chart_with_upwards_trend.png b/web/static/images/emoji/chart_with_upwards_trend.png
new file mode 100755
index 000000000..7c66745c9
--- /dev/null
+++ b/web/static/images/emoji/chart_with_upwards_trend.png
Binary files differ
diff --git a/web/static/images/emoji/checkered_flag.png b/web/static/images/emoji/checkered_flag.png
new file mode 100755
index 000000000..ead4a68dd
--- /dev/null
+++ b/web/static/images/emoji/checkered_flag.png
Binary files differ
diff --git a/web/static/images/emoji/cherries.png b/web/static/images/emoji/cherries.png
new file mode 100755
index 000000000..8d3e044f2
--- /dev/null
+++ b/web/static/images/emoji/cherries.png
Binary files differ
diff --git a/web/static/images/emoji/cherry_blossom.png b/web/static/images/emoji/cherry_blossom.png
new file mode 100755
index 000000000..e03155499
--- /dev/null
+++ b/web/static/images/emoji/cherry_blossom.png
Binary files differ
diff --git a/web/static/images/emoji/chestnut.png b/web/static/images/emoji/chestnut.png
new file mode 100755
index 000000000..066fb6bf6
--- /dev/null
+++ b/web/static/images/emoji/chestnut.png
Binary files differ
diff --git a/web/static/images/emoji/chicken.png b/web/static/images/emoji/chicken.png
new file mode 100755
index 000000000..6d25c0ef4
--- /dev/null
+++ b/web/static/images/emoji/chicken.png
Binary files differ
diff --git a/web/static/images/emoji/children_crossing.png b/web/static/images/emoji/children_crossing.png
new file mode 100755
index 000000000..b0302ae62
--- /dev/null
+++ b/web/static/images/emoji/children_crossing.png
Binary files differ
diff --git a/web/static/images/emoji/chocolate_bar.png b/web/static/images/emoji/chocolate_bar.png
new file mode 100755
index 000000000..c7ec19d07
--- /dev/null
+++ b/web/static/images/emoji/chocolate_bar.png
Binary files differ
diff --git a/web/static/images/emoji/christmas_tree.png b/web/static/images/emoji/christmas_tree.png
new file mode 100755
index 000000000..d813b9593
--- /dev/null
+++ b/web/static/images/emoji/christmas_tree.png
Binary files differ
diff --git a/web/static/images/emoji/church.png b/web/static/images/emoji/church.png
new file mode 100755
index 000000000..4c07c6b9e
--- /dev/null
+++ b/web/static/images/emoji/church.png
Binary files differ
diff --git a/web/static/images/emoji/cinema.png b/web/static/images/emoji/cinema.png
new file mode 100755
index 000000000..a990ccf99
--- /dev/null
+++ b/web/static/images/emoji/cinema.png
Binary files differ
diff --git a/web/static/images/emoji/circus_tent.png b/web/static/images/emoji/circus_tent.png
new file mode 100755
index 000000000..4af8719aa
--- /dev/null
+++ b/web/static/images/emoji/circus_tent.png
Binary files differ
diff --git a/web/static/images/emoji/city_sunrise.png b/web/static/images/emoji/city_sunrise.png
new file mode 100755
index 000000000..91ca2a40b
--- /dev/null
+++ b/web/static/images/emoji/city_sunrise.png
Binary files differ
diff --git a/web/static/images/emoji/city_sunset.png b/web/static/images/emoji/city_sunset.png
new file mode 100755
index 000000000..7cb178a2c
--- /dev/null
+++ b/web/static/images/emoji/city_sunset.png
Binary files differ
diff --git a/web/static/images/emoji/cl.png b/web/static/images/emoji/cl.png
new file mode 100755
index 000000000..15ac67525
--- /dev/null
+++ b/web/static/images/emoji/cl.png
Binary files differ
diff --git a/web/static/images/emoji/clap.png b/web/static/images/emoji/clap.png
new file mode 100755
index 000000000..d01c982a7
--- /dev/null
+++ b/web/static/images/emoji/clap.png
Binary files differ
diff --git a/web/static/images/emoji/clapper.png b/web/static/images/emoji/clapper.png
new file mode 100755
index 000000000..4e1dc111d
--- /dev/null
+++ b/web/static/images/emoji/clapper.png
Binary files differ
diff --git a/web/static/images/emoji/clipboard.png b/web/static/images/emoji/clipboard.png
new file mode 100755
index 000000000..e2c74e6df
--- /dev/null
+++ b/web/static/images/emoji/clipboard.png
Binary files differ
diff --git a/web/static/images/emoji/clock1.png b/web/static/images/emoji/clock1.png
new file mode 100755
index 000000000..9174d4e0b
--- /dev/null
+++ b/web/static/images/emoji/clock1.png
Binary files differ
diff --git a/web/static/images/emoji/clock10.png b/web/static/images/emoji/clock10.png
new file mode 100755
index 000000000..39f590d69
--- /dev/null
+++ b/web/static/images/emoji/clock10.png
Binary files differ
diff --git a/web/static/images/emoji/clock1030.png b/web/static/images/emoji/clock1030.png
new file mode 100755
index 000000000..0483b3059
--- /dev/null
+++ b/web/static/images/emoji/clock1030.png
Binary files differ
diff --git a/web/static/images/emoji/clock11.png b/web/static/images/emoji/clock11.png
new file mode 100755
index 000000000..ddb53fada
--- /dev/null
+++ b/web/static/images/emoji/clock11.png
Binary files differ
diff --git a/web/static/images/emoji/clock1130.png b/web/static/images/emoji/clock1130.png
new file mode 100755
index 000000000..415999ec8
--- /dev/null
+++ b/web/static/images/emoji/clock1130.png
Binary files differ
diff --git a/web/static/images/emoji/clock12.png b/web/static/images/emoji/clock12.png
new file mode 100755
index 000000000..87b132878
--- /dev/null
+++ b/web/static/images/emoji/clock12.png
Binary files differ
diff --git a/web/static/images/emoji/clock1230.png b/web/static/images/emoji/clock1230.png
new file mode 100755
index 000000000..a6527154d
--- /dev/null
+++ b/web/static/images/emoji/clock1230.png
Binary files differ
diff --git a/web/static/images/emoji/clock130.png b/web/static/images/emoji/clock130.png
new file mode 100755
index 000000000..90ea5b914
--- /dev/null
+++ b/web/static/images/emoji/clock130.png
Binary files differ
diff --git a/web/static/images/emoji/clock2.png b/web/static/images/emoji/clock2.png
new file mode 100755
index 000000000..65b3b3af0
--- /dev/null
+++ b/web/static/images/emoji/clock2.png
Binary files differ
diff --git a/web/static/images/emoji/clock230.png b/web/static/images/emoji/clock230.png
new file mode 100755
index 000000000..f12c6912a
--- /dev/null
+++ b/web/static/images/emoji/clock230.png
Binary files differ
diff --git a/web/static/images/emoji/clock3.png b/web/static/images/emoji/clock3.png
new file mode 100755
index 000000000..3e44d64e2
--- /dev/null
+++ b/web/static/images/emoji/clock3.png
Binary files differ
diff --git a/web/static/images/emoji/clock330.png b/web/static/images/emoji/clock330.png
new file mode 100755
index 000000000..1dc9628ea
--- /dev/null
+++ b/web/static/images/emoji/clock330.png
Binary files differ
diff --git a/web/static/images/emoji/clock4.png b/web/static/images/emoji/clock4.png
new file mode 100755
index 000000000..948ed1a38
--- /dev/null
+++ b/web/static/images/emoji/clock4.png
Binary files differ
diff --git a/web/static/images/emoji/clock430.png b/web/static/images/emoji/clock430.png
new file mode 100755
index 000000000..5d6b16a2d
--- /dev/null
+++ b/web/static/images/emoji/clock430.png
Binary files differ
diff --git a/web/static/images/emoji/clock5.png b/web/static/images/emoji/clock5.png
new file mode 100755
index 000000000..b010b4f8a
--- /dev/null
+++ b/web/static/images/emoji/clock5.png
Binary files differ
diff --git a/web/static/images/emoji/clock530.png b/web/static/images/emoji/clock530.png
new file mode 100755
index 000000000..e08d4ad2b
--- /dev/null
+++ b/web/static/images/emoji/clock530.png
Binary files differ
diff --git a/web/static/images/emoji/clock6.png b/web/static/images/emoji/clock6.png
new file mode 100755
index 000000000..76bf8cf18
--- /dev/null
+++ b/web/static/images/emoji/clock6.png
Binary files differ
diff --git a/web/static/images/emoji/clock630.png b/web/static/images/emoji/clock630.png
new file mode 100755
index 000000000..46f0681f1
--- /dev/null
+++ b/web/static/images/emoji/clock630.png
Binary files differ
diff --git a/web/static/images/emoji/clock7.png b/web/static/images/emoji/clock7.png
new file mode 100755
index 000000000..d48f645d8
--- /dev/null
+++ b/web/static/images/emoji/clock7.png
Binary files differ
diff --git a/web/static/images/emoji/clock730.png b/web/static/images/emoji/clock730.png
new file mode 100755
index 000000000..f2807de2f
--- /dev/null
+++ b/web/static/images/emoji/clock730.png
Binary files differ
diff --git a/web/static/images/emoji/clock8.png b/web/static/images/emoji/clock8.png
new file mode 100755
index 000000000..74c770d89
--- /dev/null
+++ b/web/static/images/emoji/clock8.png
Binary files differ
diff --git a/web/static/images/emoji/clock830.png b/web/static/images/emoji/clock830.png
new file mode 100755
index 000000000..f58f3dadd
--- /dev/null
+++ b/web/static/images/emoji/clock830.png
Binary files differ
diff --git a/web/static/images/emoji/clock9.png b/web/static/images/emoji/clock9.png
new file mode 100755
index 000000000..f009d14ac
--- /dev/null
+++ b/web/static/images/emoji/clock9.png
Binary files differ
diff --git a/web/static/images/emoji/clock930.png b/web/static/images/emoji/clock930.png
new file mode 100755
index 000000000..fd3522142
--- /dev/null
+++ b/web/static/images/emoji/clock930.png
Binary files differ
diff --git a/web/static/images/emoji/closed_book.png b/web/static/images/emoji/closed_book.png
new file mode 100755
index 000000000..484029c5e
--- /dev/null
+++ b/web/static/images/emoji/closed_book.png
Binary files differ
diff --git a/web/static/images/emoji/closed_lock_with_key.png b/web/static/images/emoji/closed_lock_with_key.png
new file mode 100755
index 000000000..e6fdf6cb2
--- /dev/null
+++ b/web/static/images/emoji/closed_lock_with_key.png
Binary files differ
diff --git a/web/static/images/emoji/closed_umbrella.png b/web/static/images/emoji/closed_umbrella.png
new file mode 100755
index 000000000..0b719f086
--- /dev/null
+++ b/web/static/images/emoji/closed_umbrella.png
Binary files differ
diff --git a/web/static/images/emoji/cloud.png b/web/static/images/emoji/cloud.png
new file mode 100755
index 000000000..b31c08c0b
--- /dev/null
+++ b/web/static/images/emoji/cloud.png
Binary files differ
diff --git a/web/static/images/emoji/clubs.png b/web/static/images/emoji/clubs.png
new file mode 100755
index 000000000..bfab53656
--- /dev/null
+++ b/web/static/images/emoji/clubs.png
Binary files differ
diff --git a/web/static/images/emoji/cn.png b/web/static/images/emoji/cn.png
new file mode 100755
index 000000000..b30dcc53d
--- /dev/null
+++ b/web/static/images/emoji/cn.png
Binary files differ
diff --git a/web/static/images/emoji/cocktail.png b/web/static/images/emoji/cocktail.png
new file mode 100755
index 000000000..28b45ea51
--- /dev/null
+++ b/web/static/images/emoji/cocktail.png
Binary files differ
diff --git a/web/static/images/emoji/coffee.png b/web/static/images/emoji/coffee.png
new file mode 100755
index 000000000..57e1adcb0
--- /dev/null
+++ b/web/static/images/emoji/coffee.png
Binary files differ
diff --git a/web/static/images/emoji/cold_sweat.png b/web/static/images/emoji/cold_sweat.png
new file mode 100755
index 000000000..b9e39bc60
--- /dev/null
+++ b/web/static/images/emoji/cold_sweat.png
Binary files differ
diff --git a/web/static/images/emoji/collision.png b/web/static/images/emoji/collision.png
new file mode 100755
index 000000000..9d5bd0401
--- /dev/null
+++ b/web/static/images/emoji/collision.png
Binary files differ
diff --git a/web/static/images/emoji/computer.png b/web/static/images/emoji/computer.png
new file mode 100755
index 000000000..d4d268762
--- /dev/null
+++ b/web/static/images/emoji/computer.png
Binary files differ
diff --git a/web/static/images/emoji/confetti_ball.png b/web/static/images/emoji/confetti_ball.png
new file mode 100755
index 000000000..bd293e3d8
--- /dev/null
+++ b/web/static/images/emoji/confetti_ball.png
Binary files differ
diff --git a/web/static/images/emoji/confounded.png b/web/static/images/emoji/confounded.png
new file mode 100755
index 000000000..762c3766a
--- /dev/null
+++ b/web/static/images/emoji/confounded.png
Binary files differ
diff --git a/web/static/images/emoji/confused.png b/web/static/images/emoji/confused.png
new file mode 100755
index 000000000..8dc494db0
--- /dev/null
+++ b/web/static/images/emoji/confused.png
Binary files differ
diff --git a/web/static/images/emoji/congratulations.png b/web/static/images/emoji/congratulations.png
new file mode 100755
index 000000000..85814e33c
--- /dev/null
+++ b/web/static/images/emoji/congratulations.png
Binary files differ
diff --git a/web/static/images/emoji/construction.png b/web/static/images/emoji/construction.png
new file mode 100755
index 000000000..523e9f10b
--- /dev/null
+++ b/web/static/images/emoji/construction.png
Binary files differ
diff --git a/web/static/images/emoji/construction_worker.png b/web/static/images/emoji/construction_worker.png
new file mode 100755
index 000000000..4d6486047
--- /dev/null
+++ b/web/static/images/emoji/construction_worker.png
Binary files differ
diff --git a/web/static/images/emoji/convenience_store.png b/web/static/images/emoji/convenience_store.png
new file mode 100755
index 000000000..671696c2d
--- /dev/null
+++ b/web/static/images/emoji/convenience_store.png
Binary files differ
diff --git a/web/static/images/emoji/cookie.png b/web/static/images/emoji/cookie.png
new file mode 100755
index 000000000..653edb258
--- /dev/null
+++ b/web/static/images/emoji/cookie.png
Binary files differ
diff --git a/web/static/images/emoji/cool.png b/web/static/images/emoji/cool.png
new file mode 100755
index 000000000..937dcd792
--- /dev/null
+++ b/web/static/images/emoji/cool.png
Binary files differ
diff --git a/web/static/images/emoji/cop.png b/web/static/images/emoji/cop.png
new file mode 100755
index 000000000..43a5a84f8
--- /dev/null
+++ b/web/static/images/emoji/cop.png
Binary files differ
diff --git a/web/static/images/emoji/copyright.png b/web/static/images/emoji/copyright.png
new file mode 100755
index 000000000..38493c33f
--- /dev/null
+++ b/web/static/images/emoji/copyright.png
Binary files differ
diff --git a/web/static/images/emoji/corn.png b/web/static/images/emoji/corn.png
new file mode 100755
index 000000000..fe5d8b128
--- /dev/null
+++ b/web/static/images/emoji/corn.png
Binary files differ
diff --git a/web/static/images/emoji/couple.png b/web/static/images/emoji/couple.png
new file mode 100755
index 000000000..9e51f40e1
--- /dev/null
+++ b/web/static/images/emoji/couple.png
Binary files differ
diff --git a/web/static/images/emoji/couple_with_heart.png b/web/static/images/emoji/couple_with_heart.png
new file mode 100755
index 000000000..c503f40a9
--- /dev/null
+++ b/web/static/images/emoji/couple_with_heart.png
Binary files differ
diff --git a/web/static/images/emoji/couplekiss.png b/web/static/images/emoji/couplekiss.png
new file mode 100755
index 000000000..d02790822
--- /dev/null
+++ b/web/static/images/emoji/couplekiss.png
Binary files differ
diff --git a/web/static/images/emoji/cow.png b/web/static/images/emoji/cow.png
new file mode 100755
index 000000000..12e1ab6c0
--- /dev/null
+++ b/web/static/images/emoji/cow.png
Binary files differ
diff --git a/web/static/images/emoji/cow2.png b/web/static/images/emoji/cow2.png
new file mode 100755
index 000000000..594c92155
--- /dev/null
+++ b/web/static/images/emoji/cow2.png
Binary files differ
diff --git a/web/static/images/emoji/credit_card.png b/web/static/images/emoji/credit_card.png
new file mode 100755
index 000000000..be1c1dd30
--- /dev/null
+++ b/web/static/images/emoji/credit_card.png
Binary files differ
diff --git a/web/static/images/emoji/crescent_moon.png b/web/static/images/emoji/crescent_moon.png
new file mode 100755
index 000000000..afdb450d1
--- /dev/null
+++ b/web/static/images/emoji/crescent_moon.png
Binary files differ
diff --git a/web/static/images/emoji/crocodile.png b/web/static/images/emoji/crocodile.png
new file mode 100755
index 000000000..7435d5ab3
--- /dev/null
+++ b/web/static/images/emoji/crocodile.png
Binary files differ
diff --git a/web/static/images/emoji/crossed_flags.png b/web/static/images/emoji/crossed_flags.png
new file mode 100755
index 000000000..2397bcd0f
--- /dev/null
+++ b/web/static/images/emoji/crossed_flags.png
Binary files differ
diff --git a/web/static/images/emoji/crown.png b/web/static/images/emoji/crown.png
new file mode 100755
index 000000000..39da1d528
--- /dev/null
+++ b/web/static/images/emoji/crown.png
Binary files differ
diff --git a/web/static/images/emoji/cry.png b/web/static/images/emoji/cry.png
new file mode 100755
index 000000000..6d0d9afd2
--- /dev/null
+++ b/web/static/images/emoji/cry.png
Binary files differ
diff --git a/web/static/images/emoji/crying_cat_face.png b/web/static/images/emoji/crying_cat_face.png
new file mode 100755
index 000000000..42d4c27ca
--- /dev/null
+++ b/web/static/images/emoji/crying_cat_face.png
Binary files differ
diff --git a/web/static/images/emoji/crystal_ball.png b/web/static/images/emoji/crystal_ball.png
new file mode 100755
index 000000000..6d2c6c42d
--- /dev/null
+++ b/web/static/images/emoji/crystal_ball.png
Binary files differ
diff --git a/web/static/images/emoji/cupid.png b/web/static/images/emoji/cupid.png
new file mode 100755
index 000000000..498728476
--- /dev/null
+++ b/web/static/images/emoji/cupid.png
Binary files differ
diff --git a/web/static/images/emoji/curly_loop.png b/web/static/images/emoji/curly_loop.png
new file mode 100755
index 000000000..7dd841d00
--- /dev/null
+++ b/web/static/images/emoji/curly_loop.png
Binary files differ
diff --git a/web/static/images/emoji/currency_exchange.png b/web/static/images/emoji/currency_exchange.png
new file mode 100755
index 000000000..6ebebe70a
--- /dev/null
+++ b/web/static/images/emoji/currency_exchange.png
Binary files differ
diff --git a/web/static/images/emoji/curry.png b/web/static/images/emoji/curry.png
new file mode 100755
index 000000000..7983c706a
--- /dev/null
+++ b/web/static/images/emoji/curry.png
Binary files differ
diff --git a/web/static/images/emoji/custard.png b/web/static/images/emoji/custard.png
new file mode 100755
index 000000000..9f843b4c1
--- /dev/null
+++ b/web/static/images/emoji/custard.png
Binary files differ
diff --git a/web/static/images/emoji/customs.png b/web/static/images/emoji/customs.png
new file mode 100755
index 000000000..92691e311
--- /dev/null
+++ b/web/static/images/emoji/customs.png
Binary files differ
diff --git a/web/static/images/emoji/cyclone.png b/web/static/images/emoji/cyclone.png
new file mode 100755
index 000000000..5fd2e4512
--- /dev/null
+++ b/web/static/images/emoji/cyclone.png
Binary files differ
diff --git a/web/static/images/emoji/dancer.png b/web/static/images/emoji/dancer.png
new file mode 100755
index 000000000..7a7bf59f1
--- /dev/null
+++ b/web/static/images/emoji/dancer.png
Binary files differ
diff --git a/web/static/images/emoji/dancers.png b/web/static/images/emoji/dancers.png
new file mode 100755
index 000000000..2dfb451a7
--- /dev/null
+++ b/web/static/images/emoji/dancers.png
Binary files differ
diff --git a/web/static/images/emoji/dango.png b/web/static/images/emoji/dango.png
new file mode 100755
index 000000000..2d042aebe
--- /dev/null
+++ b/web/static/images/emoji/dango.png
Binary files differ
diff --git a/web/static/images/emoji/dart.png b/web/static/images/emoji/dart.png
new file mode 100755
index 000000000..5f16864cb
--- /dev/null
+++ b/web/static/images/emoji/dart.png
Binary files differ
diff --git a/web/static/images/emoji/dash.png b/web/static/images/emoji/dash.png
new file mode 100755
index 000000000..dc2c0a8f4
--- /dev/null
+++ b/web/static/images/emoji/dash.png
Binary files differ
diff --git a/web/static/images/emoji/date.png b/web/static/images/emoji/date.png
new file mode 100755
index 000000000..6ad2efa5f
--- /dev/null
+++ b/web/static/images/emoji/date.png
Binary files differ
diff --git a/web/static/images/emoji/de.png b/web/static/images/emoji/de.png
new file mode 100755
index 000000000..16a28548c
--- /dev/null
+++ b/web/static/images/emoji/de.png
Binary files differ
diff --git a/web/static/images/emoji/deciduous_tree.png b/web/static/images/emoji/deciduous_tree.png
new file mode 100755
index 000000000..3fdf8c007
--- /dev/null
+++ b/web/static/images/emoji/deciduous_tree.png
Binary files differ
diff --git a/web/static/images/emoji/department_store.png b/web/static/images/emoji/department_store.png
new file mode 100755
index 000000000..68d959c50
--- /dev/null
+++ b/web/static/images/emoji/department_store.png
Binary files differ
diff --git a/web/static/images/emoji/diamond_shape_with_a_dot_inside.png b/web/static/images/emoji/diamond_shape_with_a_dot_inside.png
new file mode 100755
index 000000000..dfd1098b3
--- /dev/null
+++ b/web/static/images/emoji/diamond_shape_with_a_dot_inside.png
Binary files differ
diff --git a/web/static/images/emoji/diamonds.png b/web/static/images/emoji/diamonds.png
new file mode 100755
index 000000000..fe0827758
--- /dev/null
+++ b/web/static/images/emoji/diamonds.png
Binary files differ
diff --git a/web/static/images/emoji/disappointed.png b/web/static/images/emoji/disappointed.png
new file mode 100755
index 000000000..825520087
--- /dev/null
+++ b/web/static/images/emoji/disappointed.png
Binary files differ
diff --git a/web/static/images/emoji/disappointed_relieved.png b/web/static/images/emoji/disappointed_relieved.png
new file mode 100755
index 000000000..fa5f9e7f9
--- /dev/null
+++ b/web/static/images/emoji/disappointed_relieved.png
Binary files differ
diff --git a/web/static/images/emoji/dizzy.png b/web/static/images/emoji/dizzy.png
new file mode 100755
index 000000000..3702b6131
--- /dev/null
+++ b/web/static/images/emoji/dizzy.png
Binary files differ
diff --git a/web/static/images/emoji/dizzy_face.png b/web/static/images/emoji/dizzy_face.png
new file mode 100755
index 000000000..8001d6ff8
--- /dev/null
+++ b/web/static/images/emoji/dizzy_face.png
Binary files differ
diff --git a/web/static/images/emoji/do_not_litter.png b/web/static/images/emoji/do_not_litter.png
new file mode 100755
index 000000000..38c7ae7af
--- /dev/null
+++ b/web/static/images/emoji/do_not_litter.png
Binary files differ
diff --git a/web/static/images/emoji/dog.png b/web/static/images/emoji/dog.png
new file mode 100755
index 000000000..389a02bf2
--- /dev/null
+++ b/web/static/images/emoji/dog.png
Binary files differ
diff --git a/web/static/images/emoji/dog2.png b/web/static/images/emoji/dog2.png
new file mode 100755
index 000000000..c7f6a24ac
--- /dev/null
+++ b/web/static/images/emoji/dog2.png
Binary files differ
diff --git a/web/static/images/emoji/dollar.png b/web/static/images/emoji/dollar.png
new file mode 100755
index 000000000..63de88495
--- /dev/null
+++ b/web/static/images/emoji/dollar.png
Binary files differ
diff --git a/web/static/images/emoji/dolls.png b/web/static/images/emoji/dolls.png
new file mode 100755
index 000000000..47ce33900
--- /dev/null
+++ b/web/static/images/emoji/dolls.png
Binary files differ
diff --git a/web/static/images/emoji/dolphin.png b/web/static/images/emoji/dolphin.png
new file mode 100755
index 000000000..9326077a9
--- /dev/null
+++ b/web/static/images/emoji/dolphin.png
Binary files differ
diff --git a/web/static/images/emoji/donut.png b/web/static/images/emoji/donut.png
new file mode 100755
index 000000000..ccf869129
--- /dev/null
+++ b/web/static/images/emoji/donut.png
Binary files differ
diff --git a/web/static/images/emoji/door.png b/web/static/images/emoji/door.png
new file mode 100755
index 000000000..83c819ae4
--- /dev/null
+++ b/web/static/images/emoji/door.png
Binary files differ
diff --git a/web/static/images/emoji/doughnut.png b/web/static/images/emoji/doughnut.png
new file mode 100755
index 000000000..ccf869129
--- /dev/null
+++ b/web/static/images/emoji/doughnut.png
Binary files differ
diff --git a/web/static/images/emoji/dragon.png b/web/static/images/emoji/dragon.png
new file mode 100755
index 000000000..88d4784b8
--- /dev/null
+++ b/web/static/images/emoji/dragon.png
Binary files differ
diff --git a/web/static/images/emoji/dragon_face.png b/web/static/images/emoji/dragon_face.png
new file mode 100755
index 000000000..e5e556bd1
--- /dev/null
+++ b/web/static/images/emoji/dragon_face.png
Binary files differ
diff --git a/web/static/images/emoji/dress.png b/web/static/images/emoji/dress.png
new file mode 100755
index 000000000..6434e2e2f
--- /dev/null
+++ b/web/static/images/emoji/dress.png
Binary files differ
diff --git a/web/static/images/emoji/dromedary_camel.png b/web/static/images/emoji/dromedary_camel.png
new file mode 100755
index 000000000..c8c7b9ffa
--- /dev/null
+++ b/web/static/images/emoji/dromedary_camel.png
Binary files differ
diff --git a/web/static/images/emoji/droplet.png b/web/static/images/emoji/droplet.png
new file mode 100755
index 000000000..cae7f4951
--- /dev/null
+++ b/web/static/images/emoji/droplet.png
Binary files differ
diff --git a/web/static/images/emoji/dvd.png b/web/static/images/emoji/dvd.png
new file mode 100755
index 000000000..363c83d01
--- /dev/null
+++ b/web/static/images/emoji/dvd.png
Binary files differ
diff --git a/web/static/images/emoji/e-mail.png b/web/static/images/emoji/e-mail.png
new file mode 100755
index 000000000..176a8e1e8
--- /dev/null
+++ b/web/static/images/emoji/e-mail.png
Binary files differ
diff --git a/web/static/images/emoji/ear.png b/web/static/images/emoji/ear.png
new file mode 100755
index 000000000..2bbbf10c9
--- /dev/null
+++ b/web/static/images/emoji/ear.png
Binary files differ
diff --git a/web/static/images/emoji/ear_of_rice.png b/web/static/images/emoji/ear_of_rice.png
new file mode 100755
index 000000000..a9bba5c2c
--- /dev/null
+++ b/web/static/images/emoji/ear_of_rice.png
Binary files differ
diff --git a/web/static/images/emoji/earth_africa.png b/web/static/images/emoji/earth_africa.png
new file mode 100755
index 000000000..44ce5ecb6
--- /dev/null
+++ b/web/static/images/emoji/earth_africa.png
Binary files differ
diff --git a/web/static/images/emoji/earth_americas.png b/web/static/images/emoji/earth_americas.png
new file mode 100755
index 000000000..97d717671
--- /dev/null
+++ b/web/static/images/emoji/earth_americas.png
Binary files differ
diff --git a/web/static/images/emoji/earth_asia.png b/web/static/images/emoji/earth_asia.png
new file mode 100755
index 000000000..95ec357ca
--- /dev/null
+++ b/web/static/images/emoji/earth_asia.png
Binary files differ
diff --git a/web/static/images/emoji/egg.png b/web/static/images/emoji/egg.png
new file mode 100755
index 000000000..c3de6ae4e
--- /dev/null
+++ b/web/static/images/emoji/egg.png
Binary files differ
diff --git a/web/static/images/emoji/eggplant.png b/web/static/images/emoji/eggplant.png
new file mode 100755
index 000000000..66f25fce4
--- /dev/null
+++ b/web/static/images/emoji/eggplant.png
Binary files differ
diff --git a/web/static/images/emoji/eight.png b/web/static/images/emoji/eight.png
new file mode 100755
index 000000000..7bdb42232
--- /dev/null
+++ b/web/static/images/emoji/eight.png
Binary files differ
diff --git a/web/static/images/emoji/eight_pointed_black_star.png b/web/static/images/emoji/eight_pointed_black_star.png
new file mode 100755
index 000000000..2420a7768
--- /dev/null
+++ b/web/static/images/emoji/eight_pointed_black_star.png
Binary files differ
diff --git a/web/static/images/emoji/eight_spoked_asterisk.png b/web/static/images/emoji/eight_spoked_asterisk.png
new file mode 100755
index 000000000..946a20333
--- /dev/null
+++ b/web/static/images/emoji/eight_spoked_asterisk.png
Binary files differ
diff --git a/web/static/images/emoji/electric_plug.png b/web/static/images/emoji/electric_plug.png
new file mode 100755
index 000000000..2837bab4f
--- /dev/null
+++ b/web/static/images/emoji/electric_plug.png
Binary files differ
diff --git a/web/static/images/emoji/elephant.png b/web/static/images/emoji/elephant.png
new file mode 100755
index 000000000..5ca04570e
--- /dev/null
+++ b/web/static/images/emoji/elephant.png
Binary files differ
diff --git a/web/static/images/emoji/email.png b/web/static/images/emoji/email.png
new file mode 100755
index 000000000..0e01fd5f0
--- /dev/null
+++ b/web/static/images/emoji/email.png
Binary files differ
diff --git a/web/static/images/emoji/end.png b/web/static/images/emoji/end.png
new file mode 100755
index 000000000..61a4399ad
--- /dev/null
+++ b/web/static/images/emoji/end.png
Binary files differ
diff --git a/web/static/images/emoji/envelope.png b/web/static/images/emoji/envelope.png
new file mode 100755
index 000000000..3631861bb
--- /dev/null
+++ b/web/static/images/emoji/envelope.png
Binary files differ
diff --git a/web/static/images/emoji/es.png b/web/static/images/emoji/es.png
new file mode 100755
index 000000000..71b30bff3
--- /dev/null
+++ b/web/static/images/emoji/es.png
Binary files differ
diff --git a/web/static/images/emoji/euro.png b/web/static/images/emoji/euro.png
new file mode 100755
index 000000000..1c5904b71
--- /dev/null
+++ b/web/static/images/emoji/euro.png
Binary files differ
diff --git a/web/static/images/emoji/european_castle.png b/web/static/images/emoji/european_castle.png
new file mode 100755
index 000000000..8229b8a8a
--- /dev/null
+++ b/web/static/images/emoji/european_castle.png
Binary files differ
diff --git a/web/static/images/emoji/european_post_office.png b/web/static/images/emoji/european_post_office.png
new file mode 100755
index 000000000..0f65b1453
--- /dev/null
+++ b/web/static/images/emoji/european_post_office.png
Binary files differ
diff --git a/web/static/images/emoji/evergreen_tree.png b/web/static/images/emoji/evergreen_tree.png
new file mode 100755
index 000000000..ae8ad1037
--- /dev/null
+++ b/web/static/images/emoji/evergreen_tree.png
Binary files differ
diff --git a/web/static/images/emoji/exclamation.png b/web/static/images/emoji/exclamation.png
new file mode 100755
index 000000000..77bbdeabc
--- /dev/null
+++ b/web/static/images/emoji/exclamation.png
Binary files differ
diff --git a/web/static/images/emoji/expressionless.png b/web/static/images/emoji/expressionless.png
new file mode 100755
index 000000000..913ff4e2f
--- /dev/null
+++ b/web/static/images/emoji/expressionless.png
Binary files differ
diff --git a/web/static/images/emoji/eyeglasses.png b/web/static/images/emoji/eyeglasses.png
new file mode 100755
index 000000000..a3cf75a27
--- /dev/null
+++ b/web/static/images/emoji/eyeglasses.png
Binary files differ
diff --git a/web/static/images/emoji/eyes.png b/web/static/images/emoji/eyes.png
new file mode 100755
index 000000000..1ac24a615
--- /dev/null
+++ b/web/static/images/emoji/eyes.png
Binary files differ
diff --git a/web/static/images/emoji/facepunch.png b/web/static/images/emoji/facepunch.png
new file mode 100755
index 000000000..277047b7c
--- /dev/null
+++ b/web/static/images/emoji/facepunch.png
Binary files differ
diff --git a/web/static/images/emoji/factory.png b/web/static/images/emoji/factory.png
new file mode 100755
index 000000000..640463479
--- /dev/null
+++ b/web/static/images/emoji/factory.png
Binary files differ
diff --git a/web/static/images/emoji/fallen_leaf.png b/web/static/images/emoji/fallen_leaf.png
new file mode 100755
index 000000000..d49f9c175
--- /dev/null
+++ b/web/static/images/emoji/fallen_leaf.png
Binary files differ
diff --git a/web/static/images/emoji/family.png b/web/static/images/emoji/family.png
new file mode 100755
index 000000000..b4b365f3a
--- /dev/null
+++ b/web/static/images/emoji/family.png
Binary files differ
diff --git a/web/static/images/emoji/fast_forward.png b/web/static/images/emoji/fast_forward.png
new file mode 100755
index 000000000..8830e146e
--- /dev/null
+++ b/web/static/images/emoji/fast_forward.png
Binary files differ
diff --git a/web/static/images/emoji/fax.png b/web/static/images/emoji/fax.png
new file mode 100755
index 000000000..62be2c958
--- /dev/null
+++ b/web/static/images/emoji/fax.png
Binary files differ
diff --git a/web/static/images/emoji/fearful.png b/web/static/images/emoji/fearful.png
new file mode 100755
index 000000000..513fce47b
--- /dev/null
+++ b/web/static/images/emoji/fearful.png
Binary files differ
diff --git a/web/static/images/emoji/feelsgood.png b/web/static/images/emoji/feelsgood.png
new file mode 100755
index 000000000..361f969bc
--- /dev/null
+++ b/web/static/images/emoji/feelsgood.png
Binary files differ
diff --git a/web/static/images/emoji/feet.png b/web/static/images/emoji/feet.png
new file mode 100755
index 000000000..1b0147b1d
--- /dev/null
+++ b/web/static/images/emoji/feet.png
Binary files differ
diff --git a/web/static/images/emoji/ferris_wheel.png b/web/static/images/emoji/ferris_wheel.png
new file mode 100755
index 000000000..54a1dcfa1
--- /dev/null
+++ b/web/static/images/emoji/ferris_wheel.png
Binary files differ
diff --git a/web/static/images/emoji/file_folder.png b/web/static/images/emoji/file_folder.png
new file mode 100755
index 000000000..4d8bebf8a
--- /dev/null
+++ b/web/static/images/emoji/file_folder.png
Binary files differ
diff --git a/web/static/images/emoji/finnadie.png b/web/static/images/emoji/finnadie.png
new file mode 100755
index 000000000..bfc5a0d93
--- /dev/null
+++ b/web/static/images/emoji/finnadie.png
Binary files differ
diff --git a/web/static/images/emoji/fire.png b/web/static/images/emoji/fire.png
new file mode 100755
index 000000000..f2a3149bb
--- /dev/null
+++ b/web/static/images/emoji/fire.png
Binary files differ
diff --git a/web/static/images/emoji/fire_engine.png b/web/static/images/emoji/fire_engine.png
new file mode 100755
index 000000000..9e6c59c99
--- /dev/null
+++ b/web/static/images/emoji/fire_engine.png
Binary files differ
diff --git a/web/static/images/emoji/fireworks.png b/web/static/images/emoji/fireworks.png
new file mode 100755
index 000000000..b4eccd577
--- /dev/null
+++ b/web/static/images/emoji/fireworks.png
Binary files differ
diff --git a/web/static/images/emoji/first_quarter_moon.png b/web/static/images/emoji/first_quarter_moon.png
new file mode 100755
index 000000000..f38c23693
--- /dev/null
+++ b/web/static/images/emoji/first_quarter_moon.png
Binary files differ
diff --git a/web/static/images/emoji/first_quarter_moon_with_face.png b/web/static/images/emoji/first_quarter_moon_with_face.png
new file mode 100755
index 000000000..85ae2ce72
--- /dev/null
+++ b/web/static/images/emoji/first_quarter_moon_with_face.png
Binary files differ
diff --git a/web/static/images/emoji/fish.png b/web/static/images/emoji/fish.png
new file mode 100755
index 000000000..90bdda2c9
--- /dev/null
+++ b/web/static/images/emoji/fish.png
Binary files differ
diff --git a/web/static/images/emoji/fish_cake.png b/web/static/images/emoji/fish_cake.png
new file mode 100755
index 000000000..a8f22614d
--- /dev/null
+++ b/web/static/images/emoji/fish_cake.png
Binary files differ
diff --git a/web/static/images/emoji/fishing_pole_and_fish.png b/web/static/images/emoji/fishing_pole_and_fish.png
new file mode 100755
index 000000000..d84609c3b
--- /dev/null
+++ b/web/static/images/emoji/fishing_pole_and_fish.png
Binary files differ
diff --git a/web/static/images/emoji/fist.png b/web/static/images/emoji/fist.png
new file mode 100755
index 000000000..ecc8874c2
--- /dev/null
+++ b/web/static/images/emoji/fist.png
Binary files differ
diff --git a/web/static/images/emoji/five.png b/web/static/images/emoji/five.png
new file mode 100755
index 000000000..794321aa2
--- /dev/null
+++ b/web/static/images/emoji/five.png
Binary files differ
diff --git a/web/static/images/emoji/flags.png b/web/static/images/emoji/flags.png
new file mode 100755
index 000000000..540164e84
--- /dev/null
+++ b/web/static/images/emoji/flags.png
Binary files differ
diff --git a/web/static/images/emoji/flashlight.png b/web/static/images/emoji/flashlight.png
new file mode 100755
index 000000000..215940aa8
--- /dev/null
+++ b/web/static/images/emoji/flashlight.png
Binary files differ
diff --git a/web/static/images/emoji/floppy_disk.png b/web/static/images/emoji/floppy_disk.png
new file mode 100755
index 000000000..4ad56315a
--- /dev/null
+++ b/web/static/images/emoji/floppy_disk.png
Binary files differ
diff --git a/web/static/images/emoji/flower_playing_cards.png b/web/static/images/emoji/flower_playing_cards.png
new file mode 100755
index 000000000..cc46a6a1f
--- /dev/null
+++ b/web/static/images/emoji/flower_playing_cards.png
Binary files differ
diff --git a/web/static/images/emoji/flushed.png b/web/static/images/emoji/flushed.png
new file mode 100755
index 000000000..74b78c9c0
--- /dev/null
+++ b/web/static/images/emoji/flushed.png
Binary files differ
diff --git a/web/static/images/emoji/foggy.png b/web/static/images/emoji/foggy.png
new file mode 100755
index 000000000..3c7b8b04b
--- /dev/null
+++ b/web/static/images/emoji/foggy.png
Binary files differ
diff --git a/web/static/images/emoji/football.png b/web/static/images/emoji/football.png
new file mode 100755
index 000000000..0e4e168fa
--- /dev/null
+++ b/web/static/images/emoji/football.png
Binary files differ
diff --git a/web/static/images/emoji/fork_and_knife.png b/web/static/images/emoji/fork_and_knife.png
new file mode 100755
index 000000000..8ba4bc653
--- /dev/null
+++ b/web/static/images/emoji/fork_and_knife.png
Binary files differ
diff --git a/web/static/images/emoji/fountain.png b/web/static/images/emoji/fountain.png
new file mode 100755
index 000000000..da126e648
--- /dev/null
+++ b/web/static/images/emoji/fountain.png
Binary files differ
diff --git a/web/static/images/emoji/four.png b/web/static/images/emoji/four.png
new file mode 100755
index 000000000..14782ba23
--- /dev/null
+++ b/web/static/images/emoji/four.png
Binary files differ
diff --git a/web/static/images/emoji/four_leaf_clover.png b/web/static/images/emoji/four_leaf_clover.png
new file mode 100755
index 000000000..f2014bea4
--- /dev/null
+++ b/web/static/images/emoji/four_leaf_clover.png
Binary files differ
diff --git a/web/static/images/emoji/fr.png b/web/static/images/emoji/fr.png
new file mode 100755
index 000000000..6311c9115
--- /dev/null
+++ b/web/static/images/emoji/fr.png
Binary files differ
diff --git a/web/static/images/emoji/free.png b/web/static/images/emoji/free.png
new file mode 100755
index 000000000..c886cf249
--- /dev/null
+++ b/web/static/images/emoji/free.png
Binary files differ
diff --git a/web/static/images/emoji/fried_shrimp.png b/web/static/images/emoji/fried_shrimp.png
new file mode 100755
index 000000000..c8c284bf1
--- /dev/null
+++ b/web/static/images/emoji/fried_shrimp.png
Binary files differ
diff --git a/web/static/images/emoji/fries.png b/web/static/images/emoji/fries.png
new file mode 100755
index 000000000..cfef66966
--- /dev/null
+++ b/web/static/images/emoji/fries.png
Binary files differ
diff --git a/web/static/images/emoji/frog.png b/web/static/images/emoji/frog.png
new file mode 100755
index 000000000..cfe11b18f
--- /dev/null
+++ b/web/static/images/emoji/frog.png
Binary files differ
diff --git a/web/static/images/emoji/frowning.png b/web/static/images/emoji/frowning.png
new file mode 100755
index 000000000..487b77016
--- /dev/null
+++ b/web/static/images/emoji/frowning.png
Binary files differ
diff --git a/web/static/images/emoji/fu.png b/web/static/images/emoji/fu.png
new file mode 100755
index 000000000..61a3fee8d
--- /dev/null
+++ b/web/static/images/emoji/fu.png
Binary files differ
diff --git a/web/static/images/emoji/fuelpump.png b/web/static/images/emoji/fuelpump.png
new file mode 100755
index 000000000..54c29aeb1
--- /dev/null
+++ b/web/static/images/emoji/fuelpump.png
Binary files differ
diff --git a/web/static/images/emoji/full_moon.png b/web/static/images/emoji/full_moon.png
new file mode 100755
index 000000000..8ff657a25
--- /dev/null
+++ b/web/static/images/emoji/full_moon.png
Binary files differ
diff --git a/web/static/images/emoji/full_moon_with_face.png b/web/static/images/emoji/full_moon_with_face.png
new file mode 100755
index 000000000..d42b3f0fb
--- /dev/null
+++ b/web/static/images/emoji/full_moon_with_face.png
Binary files differ
diff --git a/web/static/images/emoji/game_die.png b/web/static/images/emoji/game_die.png
new file mode 100755
index 000000000..cff2bd8b7
--- /dev/null
+++ b/web/static/images/emoji/game_die.png
Binary files differ
diff --git a/web/static/images/emoji/gb.png b/web/static/images/emoji/gb.png
new file mode 100755
index 000000000..2a62c7a08
--- /dev/null
+++ b/web/static/images/emoji/gb.png
Binary files differ
diff --git a/web/static/images/emoji/gem.png b/web/static/images/emoji/gem.png
new file mode 100755
index 000000000..8a5d8dad5
--- /dev/null
+++ b/web/static/images/emoji/gem.png
Binary files differ
diff --git a/web/static/images/emoji/gemini.png b/web/static/images/emoji/gemini.png
new file mode 100755
index 000000000..d926f6e88
--- /dev/null
+++ b/web/static/images/emoji/gemini.png
Binary files differ
diff --git a/web/static/images/emoji/ghost.png b/web/static/images/emoji/ghost.png
new file mode 100755
index 000000000..671dd0c9e
--- /dev/null
+++ b/web/static/images/emoji/ghost.png
Binary files differ
diff --git a/web/static/images/emoji/gift.png b/web/static/images/emoji/gift.png
new file mode 100755
index 000000000..552cfdc2b
--- /dev/null
+++ b/web/static/images/emoji/gift.png
Binary files differ
diff --git a/web/static/images/emoji/gift_heart.png b/web/static/images/emoji/gift_heart.png
new file mode 100755
index 000000000..f31c26a3f
--- /dev/null
+++ b/web/static/images/emoji/gift_heart.png
Binary files differ
diff --git a/web/static/images/emoji/girl.png b/web/static/images/emoji/girl.png
new file mode 100755
index 000000000..ea4126941
--- /dev/null
+++ b/web/static/images/emoji/girl.png
Binary files differ
diff --git a/web/static/images/emoji/globe_with_meridians.png b/web/static/images/emoji/globe_with_meridians.png
new file mode 100755
index 000000000..b19864667
--- /dev/null
+++ b/web/static/images/emoji/globe_with_meridians.png
Binary files differ
diff --git a/web/static/images/emoji/goat.png b/web/static/images/emoji/goat.png
new file mode 100755
index 000000000..4be9cf304
--- /dev/null
+++ b/web/static/images/emoji/goat.png
Binary files differ
diff --git a/web/static/images/emoji/goberserk.png b/web/static/images/emoji/goberserk.png
new file mode 100755
index 000000000..59a742aaa
--- /dev/null
+++ b/web/static/images/emoji/goberserk.png
Binary files differ
diff --git a/web/static/images/emoji/godmode.png b/web/static/images/emoji/godmode.png
new file mode 100755
index 000000000..7e75ab208
--- /dev/null
+++ b/web/static/images/emoji/godmode.png
Binary files differ
diff --git a/web/static/images/emoji/golf.png b/web/static/images/emoji/golf.png
new file mode 100755
index 000000000..cba2116a7
--- /dev/null
+++ b/web/static/images/emoji/golf.png
Binary files differ
diff --git a/web/static/images/emoji/grapes.png b/web/static/images/emoji/grapes.png
new file mode 100755
index 000000000..0f9f007a1
--- /dev/null
+++ b/web/static/images/emoji/grapes.png
Binary files differ
diff --git a/web/static/images/emoji/green_apple.png b/web/static/images/emoji/green_apple.png
new file mode 100755
index 000000000..337205cd1
--- /dev/null
+++ b/web/static/images/emoji/green_apple.png
Binary files differ
diff --git a/web/static/images/emoji/green_book.png b/web/static/images/emoji/green_book.png
new file mode 100755
index 000000000..e86651e5c
--- /dev/null
+++ b/web/static/images/emoji/green_book.png
Binary files differ
diff --git a/web/static/images/emoji/green_heart.png b/web/static/images/emoji/green_heart.png
new file mode 100755
index 000000000..7289cb814
--- /dev/null
+++ b/web/static/images/emoji/green_heart.png
Binary files differ
diff --git a/web/static/images/emoji/grey_exclamation.png b/web/static/images/emoji/grey_exclamation.png
new file mode 100755
index 000000000..cf027dda5
--- /dev/null
+++ b/web/static/images/emoji/grey_exclamation.png
Binary files differ
diff --git a/web/static/images/emoji/grey_question.png b/web/static/images/emoji/grey_question.png
new file mode 100755
index 000000000..fb97ba752
--- /dev/null
+++ b/web/static/images/emoji/grey_question.png
Binary files differ
diff --git a/web/static/images/emoji/grimacing.png b/web/static/images/emoji/grimacing.png
new file mode 100755
index 000000000..1219ba7d3
--- /dev/null
+++ b/web/static/images/emoji/grimacing.png
Binary files differ
diff --git a/web/static/images/emoji/grin.png b/web/static/images/emoji/grin.png
new file mode 100755
index 000000000..591cfcef8
--- /dev/null
+++ b/web/static/images/emoji/grin.png
Binary files differ
diff --git a/web/static/images/emoji/grinning.png b/web/static/images/emoji/grinning.png
new file mode 100755
index 000000000..7e812b7ed
--- /dev/null
+++ b/web/static/images/emoji/grinning.png
Binary files differ
diff --git a/web/static/images/emoji/guardsman.png b/web/static/images/emoji/guardsman.png
new file mode 100755
index 000000000..b67b335d6
--- /dev/null
+++ b/web/static/images/emoji/guardsman.png
Binary files differ
diff --git a/web/static/images/emoji/guitar.png b/web/static/images/emoji/guitar.png
new file mode 100755
index 000000000..2b7fa43c9
--- /dev/null
+++ b/web/static/images/emoji/guitar.png
Binary files differ
diff --git a/web/static/images/emoji/gun.png b/web/static/images/emoji/gun.png
new file mode 100755
index 000000000..c49dc52c6
--- /dev/null
+++ b/web/static/images/emoji/gun.png
Binary files differ
diff --git a/web/static/images/emoji/haircut.png b/web/static/images/emoji/haircut.png
new file mode 100755
index 000000000..902d273f6
--- /dev/null
+++ b/web/static/images/emoji/haircut.png
Binary files differ
diff --git a/web/static/images/emoji/hamburger.png b/web/static/images/emoji/hamburger.png
new file mode 100755
index 000000000..9f1a3fdff
--- /dev/null
+++ b/web/static/images/emoji/hamburger.png
Binary files differ
diff --git a/web/static/images/emoji/hammer.png b/web/static/images/emoji/hammer.png
new file mode 100755
index 000000000..482b1c747
--- /dev/null
+++ b/web/static/images/emoji/hammer.png
Binary files differ
diff --git a/web/static/images/emoji/hamster.png b/web/static/images/emoji/hamster.png
new file mode 100755
index 000000000..addfd2e6b
--- /dev/null
+++ b/web/static/images/emoji/hamster.png
Binary files differ
diff --git a/web/static/images/emoji/hand.png b/web/static/images/emoji/hand.png
new file mode 100755
index 000000000..5e45c25a5
--- /dev/null
+++ b/web/static/images/emoji/hand.png
Binary files differ
diff --git a/web/static/images/emoji/handbag.png b/web/static/images/emoji/handbag.png
new file mode 100755
index 000000000..d7adf04dd
--- /dev/null
+++ b/web/static/images/emoji/handbag.png
Binary files differ
diff --git a/web/static/images/emoji/hankey.png b/web/static/images/emoji/hankey.png
new file mode 100755
index 000000000..73a4dc840
--- /dev/null
+++ b/web/static/images/emoji/hankey.png
Binary files differ
diff --git a/web/static/images/emoji/hash.png b/web/static/images/emoji/hash.png
new file mode 100755
index 000000000..6765d7d3c
--- /dev/null
+++ b/web/static/images/emoji/hash.png
Binary files differ
diff --git a/web/static/images/emoji/hatched_chick.png b/web/static/images/emoji/hatched_chick.png
new file mode 100755
index 000000000..39c25bc7c
--- /dev/null
+++ b/web/static/images/emoji/hatched_chick.png
Binary files differ
diff --git a/web/static/images/emoji/hatching_chick.png b/web/static/images/emoji/hatching_chick.png
new file mode 100755
index 000000000..005a55519
--- /dev/null
+++ b/web/static/images/emoji/hatching_chick.png
Binary files differ
diff --git a/web/static/images/emoji/headphones.png b/web/static/images/emoji/headphones.png
new file mode 100755
index 000000000..ad83000e6
--- /dev/null
+++ b/web/static/images/emoji/headphones.png
Binary files differ
diff --git a/web/static/images/emoji/hear_no_evil.png b/web/static/images/emoji/hear_no_evil.png
new file mode 100755
index 000000000..f97a1f9a0
--- /dev/null
+++ b/web/static/images/emoji/hear_no_evil.png
Binary files differ
diff --git a/web/static/images/emoji/heart.png b/web/static/images/emoji/heart.png
new file mode 100755
index 000000000..7d7790ce4
--- /dev/null
+++ b/web/static/images/emoji/heart.png
Binary files differ
diff --git a/web/static/images/emoji/heart_decoration.png b/web/static/images/emoji/heart_decoration.png
new file mode 100755
index 000000000..b8be44db3
--- /dev/null
+++ b/web/static/images/emoji/heart_decoration.png
Binary files differ
diff --git a/web/static/images/emoji/heart_eyes.png b/web/static/images/emoji/heart_eyes.png
new file mode 100755
index 000000000..0e5794270
--- /dev/null
+++ b/web/static/images/emoji/heart_eyes.png
Binary files differ
diff --git a/web/static/images/emoji/heart_eyes_cat.png b/web/static/images/emoji/heart_eyes_cat.png
new file mode 100755
index 000000000..eeba240e5
--- /dev/null
+++ b/web/static/images/emoji/heart_eyes_cat.png
Binary files differ
diff --git a/web/static/images/emoji/heartbeat.png b/web/static/images/emoji/heartbeat.png
new file mode 100755
index 000000000..b6628f6fa
--- /dev/null
+++ b/web/static/images/emoji/heartbeat.png
Binary files differ
diff --git a/web/static/images/emoji/heartpulse.png b/web/static/images/emoji/heartpulse.png
new file mode 100755
index 000000000..a7491cbea
--- /dev/null
+++ b/web/static/images/emoji/heartpulse.png
Binary files differ
diff --git a/web/static/images/emoji/hearts.png b/web/static/images/emoji/hearts.png
new file mode 100755
index 000000000..e89471538
--- /dev/null
+++ b/web/static/images/emoji/hearts.png
Binary files differ
diff --git a/web/static/images/emoji/heavy_check_mark.png b/web/static/images/emoji/heavy_check_mark.png
new file mode 100755
index 000000000..d0f010b4a
--- /dev/null
+++ b/web/static/images/emoji/heavy_check_mark.png
Binary files differ
diff --git a/web/static/images/emoji/heavy_division_sign.png b/web/static/images/emoji/heavy_division_sign.png
new file mode 100755
index 000000000..e193fd252
--- /dev/null
+++ b/web/static/images/emoji/heavy_division_sign.png
Binary files differ
diff --git a/web/static/images/emoji/heavy_dollar_sign.png b/web/static/images/emoji/heavy_dollar_sign.png
new file mode 100755
index 000000000..5eddfc52b
--- /dev/null
+++ b/web/static/images/emoji/heavy_dollar_sign.png
Binary files differ
diff --git a/web/static/images/emoji/heavy_exclamation_mark.png b/web/static/images/emoji/heavy_exclamation_mark.png
new file mode 100755
index 000000000..4c560f5e3
--- /dev/null
+++ b/web/static/images/emoji/heavy_exclamation_mark.png
Binary files differ
diff --git a/web/static/images/emoji/heavy_minus_sign.png b/web/static/images/emoji/heavy_minus_sign.png
new file mode 100755
index 000000000..4a33f905a
--- /dev/null
+++ b/web/static/images/emoji/heavy_minus_sign.png
Binary files differ
diff --git a/web/static/images/emoji/heavy_multiplication_x.png b/web/static/images/emoji/heavy_multiplication_x.png
new file mode 100755
index 000000000..13d666078
--- /dev/null
+++ b/web/static/images/emoji/heavy_multiplication_x.png
Binary files differ
diff --git a/web/static/images/emoji/heavy_plus_sign.png b/web/static/images/emoji/heavy_plus_sign.png
new file mode 100755
index 000000000..ade3c3a85
--- /dev/null
+++ b/web/static/images/emoji/heavy_plus_sign.png
Binary files differ
diff --git a/web/static/images/emoji/helicopter.png b/web/static/images/emoji/helicopter.png
new file mode 100755
index 000000000..8e82a0d58
--- /dev/null
+++ b/web/static/images/emoji/helicopter.png
Binary files differ
diff --git a/web/static/images/emoji/herb.png b/web/static/images/emoji/herb.png
new file mode 100755
index 000000000..de1ff1b73
--- /dev/null
+++ b/web/static/images/emoji/herb.png
Binary files differ
diff --git a/web/static/images/emoji/hibiscus.png b/web/static/images/emoji/hibiscus.png
new file mode 100755
index 000000000..9365ae216
--- /dev/null
+++ b/web/static/images/emoji/hibiscus.png
Binary files differ
diff --git a/web/static/images/emoji/high_brightness.png b/web/static/images/emoji/high_brightness.png
new file mode 100755
index 000000000..ba9de7d40
--- /dev/null
+++ b/web/static/images/emoji/high_brightness.png
Binary files differ
diff --git a/web/static/images/emoji/high_heel.png b/web/static/images/emoji/high_heel.png
new file mode 100755
index 000000000..525b6a0dd
--- /dev/null
+++ b/web/static/images/emoji/high_heel.png
Binary files differ
diff --git a/web/static/images/emoji/hocho.png b/web/static/images/emoji/hocho.png
new file mode 100755
index 000000000..3f05193c7
--- /dev/null
+++ b/web/static/images/emoji/hocho.png
Binary files differ
diff --git a/web/static/images/emoji/honey_pot.png b/web/static/images/emoji/honey_pot.png
new file mode 100755
index 000000000..73278898a
--- /dev/null
+++ b/web/static/images/emoji/honey_pot.png
Binary files differ
diff --git a/web/static/images/emoji/honeybee.png b/web/static/images/emoji/honeybee.png
new file mode 100755
index 000000000..f53733953
--- /dev/null
+++ b/web/static/images/emoji/honeybee.png
Binary files differ
diff --git a/web/static/images/emoji/horse.png b/web/static/images/emoji/horse.png
new file mode 100755
index 000000000..78d580ad3
--- /dev/null
+++ b/web/static/images/emoji/horse.png
Binary files differ
diff --git a/web/static/images/emoji/horse_racing.png b/web/static/images/emoji/horse_racing.png
new file mode 100755
index 000000000..e3bbaec1d
--- /dev/null
+++ b/web/static/images/emoji/horse_racing.png
Binary files differ
diff --git a/web/static/images/emoji/hospital.png b/web/static/images/emoji/hospital.png
new file mode 100755
index 000000000..c05c49377
--- /dev/null
+++ b/web/static/images/emoji/hospital.png
Binary files differ
diff --git a/web/static/images/emoji/hotel.png b/web/static/images/emoji/hotel.png
new file mode 100755
index 000000000..d29f276a1
--- /dev/null
+++ b/web/static/images/emoji/hotel.png
Binary files differ
diff --git a/web/static/images/emoji/hotsprings.png b/web/static/images/emoji/hotsprings.png
new file mode 100755
index 000000000..a0bc9d75f
--- /dev/null
+++ b/web/static/images/emoji/hotsprings.png
Binary files differ
diff --git a/web/static/images/emoji/hourglass.png b/web/static/images/emoji/hourglass.png
new file mode 100755
index 000000000..405aab41b
--- /dev/null
+++ b/web/static/images/emoji/hourglass.png
Binary files differ
diff --git a/web/static/images/emoji/hourglass_flowing_sand.png b/web/static/images/emoji/hourglass_flowing_sand.png
new file mode 100755
index 000000000..b68eb6957
--- /dev/null
+++ b/web/static/images/emoji/hourglass_flowing_sand.png
Binary files differ
diff --git a/web/static/images/emoji/house.png b/web/static/images/emoji/house.png
new file mode 100755
index 000000000..95b9ee094
--- /dev/null
+++ b/web/static/images/emoji/house.png
Binary files differ
diff --git a/web/static/images/emoji/house_with_garden.png b/web/static/images/emoji/house_with_garden.png
new file mode 100755
index 000000000..3338fb717
--- /dev/null
+++ b/web/static/images/emoji/house_with_garden.png
Binary files differ
diff --git a/web/static/images/emoji/hurtrealbad.png b/web/static/images/emoji/hurtrealbad.png
new file mode 100755
index 000000000..146ef1a6a
--- /dev/null
+++ b/web/static/images/emoji/hurtrealbad.png
Binary files differ
diff --git a/web/static/images/emoji/hushed.png b/web/static/images/emoji/hushed.png
new file mode 100755
index 000000000..bbd2cd4bc
--- /dev/null
+++ b/web/static/images/emoji/hushed.png
Binary files differ
diff --git a/web/static/images/emoji/ice_cream.png b/web/static/images/emoji/ice_cream.png
new file mode 100755
index 000000000..190be0165
--- /dev/null
+++ b/web/static/images/emoji/ice_cream.png
Binary files differ
diff --git a/web/static/images/emoji/icecream.png b/web/static/images/emoji/icecream.png
new file mode 100755
index 000000000..871ce0976
--- /dev/null
+++ b/web/static/images/emoji/icecream.png
Binary files differ
diff --git a/web/static/images/emoji/id.png b/web/static/images/emoji/id.png
new file mode 100755
index 000000000..47437a76d
--- /dev/null
+++ b/web/static/images/emoji/id.png
Binary files differ
diff --git a/web/static/images/emoji/ideograph_advantage.png b/web/static/images/emoji/ideograph_advantage.png
new file mode 100755
index 000000000..3c1334d16
--- /dev/null
+++ b/web/static/images/emoji/ideograph_advantage.png
Binary files differ
diff --git a/web/static/images/emoji/imp.png b/web/static/images/emoji/imp.png
new file mode 100755
index 000000000..fa7d9dc10
--- /dev/null
+++ b/web/static/images/emoji/imp.png
Binary files differ
diff --git a/web/static/images/emoji/inbox_tray.png b/web/static/images/emoji/inbox_tray.png
new file mode 100755
index 000000000..e2df0f897
--- /dev/null
+++ b/web/static/images/emoji/inbox_tray.png
Binary files differ
diff --git a/web/static/images/emoji/incoming_envelope.png b/web/static/images/emoji/incoming_envelope.png
new file mode 100755
index 000000000..afc827125
--- /dev/null
+++ b/web/static/images/emoji/incoming_envelope.png
Binary files differ
diff --git a/web/static/images/emoji/information_desk_person.png b/web/static/images/emoji/information_desk_person.png
new file mode 100755
index 000000000..52c0a50a3
--- /dev/null
+++ b/web/static/images/emoji/information_desk_person.png
Binary files differ
diff --git a/web/static/images/emoji/information_source.png b/web/static/images/emoji/information_source.png
new file mode 100755
index 000000000..9cb8b09b2
--- /dev/null
+++ b/web/static/images/emoji/information_source.png
Binary files differ
diff --git a/web/static/images/emoji/innocent.png b/web/static/images/emoji/innocent.png
new file mode 100755
index 000000000..503b614f8
--- /dev/null
+++ b/web/static/images/emoji/innocent.png
Binary files differ
diff --git a/web/static/images/emoji/interrobang.png b/web/static/images/emoji/interrobang.png
new file mode 100755
index 000000000..64304b9f5
--- /dev/null
+++ b/web/static/images/emoji/interrobang.png
Binary files differ
diff --git a/web/static/images/emoji/iphone.png b/web/static/images/emoji/iphone.png
new file mode 100755
index 000000000..df007103b
--- /dev/null
+++ b/web/static/images/emoji/iphone.png
Binary files differ
diff --git a/web/static/images/emoji/it.png b/web/static/images/emoji/it.png
new file mode 100755
index 000000000..70bc9f324
--- /dev/null
+++ b/web/static/images/emoji/it.png
Binary files differ
diff --git a/web/static/images/emoji/izakaya_lantern.png b/web/static/images/emoji/izakaya_lantern.png
new file mode 100755
index 000000000..18730ad55
--- /dev/null
+++ b/web/static/images/emoji/izakaya_lantern.png
Binary files differ
diff --git a/web/static/images/emoji/jack_o_lantern.png b/web/static/images/emoji/jack_o_lantern.png
new file mode 100755
index 000000000..1f7667ea4
--- /dev/null
+++ b/web/static/images/emoji/jack_o_lantern.png
Binary files differ
diff --git a/web/static/images/emoji/japan.png b/web/static/images/emoji/japan.png
new file mode 100755
index 000000000..459328035
--- /dev/null
+++ b/web/static/images/emoji/japan.png
Binary files differ
diff --git a/web/static/images/emoji/japanese_castle.png b/web/static/images/emoji/japanese_castle.png
new file mode 100755
index 000000000..f225ab217
--- /dev/null
+++ b/web/static/images/emoji/japanese_castle.png
Binary files differ
diff --git a/web/static/images/emoji/japanese_goblin.png b/web/static/images/emoji/japanese_goblin.png
new file mode 100755
index 000000000..bd21b1875
--- /dev/null
+++ b/web/static/images/emoji/japanese_goblin.png
Binary files differ
diff --git a/web/static/images/emoji/japanese_ogre.png b/web/static/images/emoji/japanese_ogre.png
new file mode 100755
index 000000000..e9f5471c9
--- /dev/null
+++ b/web/static/images/emoji/japanese_ogre.png
Binary files differ
diff --git a/web/static/images/emoji/jeans.png b/web/static/images/emoji/jeans.png
new file mode 100755
index 000000000..d721cea54
--- /dev/null
+++ b/web/static/images/emoji/jeans.png
Binary files differ
diff --git a/web/static/images/emoji/joy.png b/web/static/images/emoji/joy.png
new file mode 100755
index 000000000..47df693d4
--- /dev/null
+++ b/web/static/images/emoji/joy.png
Binary files differ
diff --git a/web/static/images/emoji/joy_cat.png b/web/static/images/emoji/joy_cat.png
new file mode 100755
index 000000000..6c60cb0ef
--- /dev/null
+++ b/web/static/images/emoji/joy_cat.png
Binary files differ
diff --git a/web/static/images/emoji/jp.png b/web/static/images/emoji/jp.png
new file mode 100755
index 000000000..b786efbbd
--- /dev/null
+++ b/web/static/images/emoji/jp.png
Binary files differ
diff --git a/web/static/images/emoji/key.png b/web/static/images/emoji/key.png
new file mode 100755
index 000000000..34673213f
--- /dev/null
+++ b/web/static/images/emoji/key.png
Binary files differ
diff --git a/web/static/images/emoji/keycap_ten.png b/web/static/images/emoji/keycap_ten.png
new file mode 100755
index 000000000..71dac1c1c
--- /dev/null
+++ b/web/static/images/emoji/keycap_ten.png
Binary files differ
diff --git a/web/static/images/emoji/kimono.png b/web/static/images/emoji/kimono.png
new file mode 100755
index 000000000..34ffe137d
--- /dev/null
+++ b/web/static/images/emoji/kimono.png
Binary files differ
diff --git a/web/static/images/emoji/kiss.png b/web/static/images/emoji/kiss.png
new file mode 100755
index 000000000..14fd9918d
--- /dev/null
+++ b/web/static/images/emoji/kiss.png
Binary files differ
diff --git a/web/static/images/emoji/kissing.png b/web/static/images/emoji/kissing.png
new file mode 100755
index 000000000..f3c8dcd78
--- /dev/null
+++ b/web/static/images/emoji/kissing.png
Binary files differ
diff --git a/web/static/images/emoji/kissing_cat.png b/web/static/images/emoji/kissing_cat.png
new file mode 100755
index 000000000..adc62fbe3
--- /dev/null
+++ b/web/static/images/emoji/kissing_cat.png
Binary files differ
diff --git a/web/static/images/emoji/kissing_closed_eyes.png b/web/static/images/emoji/kissing_closed_eyes.png
new file mode 100755
index 000000000..449de1970
--- /dev/null
+++ b/web/static/images/emoji/kissing_closed_eyes.png
Binary files differ
diff --git a/web/static/images/emoji/kissing_face.png b/web/static/images/emoji/kissing_face.png
new file mode 100755
index 000000000..449de1970
--- /dev/null
+++ b/web/static/images/emoji/kissing_face.png
Binary files differ
diff --git a/web/static/images/emoji/kissing_heart.png b/web/static/images/emoji/kissing_heart.png
new file mode 100755
index 000000000..af9a80b7f
--- /dev/null
+++ b/web/static/images/emoji/kissing_heart.png
Binary files differ
diff --git a/web/static/images/emoji/kissing_smiling_eyes.png b/web/static/images/emoji/kissing_smiling_eyes.png
new file mode 100755
index 000000000..57f7b4935
--- /dev/null
+++ b/web/static/images/emoji/kissing_smiling_eyes.png
Binary files differ
diff --git a/web/static/images/emoji/koala.png b/web/static/images/emoji/koala.png
new file mode 100755
index 000000000..e17bd3cf5
--- /dev/null
+++ b/web/static/images/emoji/koala.png
Binary files differ
diff --git a/web/static/images/emoji/koko.png b/web/static/images/emoji/koko.png
new file mode 100755
index 000000000..3bef28c9f
--- /dev/null
+++ b/web/static/images/emoji/koko.png
Binary files differ
diff --git a/web/static/images/emoji/kr.png b/web/static/images/emoji/kr.png
new file mode 100755
index 000000000..b4c0c1b67
--- /dev/null
+++ b/web/static/images/emoji/kr.png
Binary files differ
diff --git a/web/static/images/emoji/large_blue_circle.png b/web/static/images/emoji/large_blue_circle.png
new file mode 100755
index 000000000..a5b4ad4aa
--- /dev/null
+++ b/web/static/images/emoji/large_blue_circle.png
Binary files differ
diff --git a/web/static/images/emoji/large_blue_diamond.png b/web/static/images/emoji/large_blue_diamond.png
new file mode 100755
index 000000000..f4598ec0f
--- /dev/null
+++ b/web/static/images/emoji/large_blue_diamond.png
Binary files differ
diff --git a/web/static/images/emoji/large_orange_diamond.png b/web/static/images/emoji/large_orange_diamond.png
new file mode 100755
index 000000000..803725aad
--- /dev/null
+++ b/web/static/images/emoji/large_orange_diamond.png
Binary files differ
diff --git a/web/static/images/emoji/last_quarter_moon.png b/web/static/images/emoji/last_quarter_moon.png
new file mode 100755
index 000000000..6ae30d6c2
--- /dev/null
+++ b/web/static/images/emoji/last_quarter_moon.png
Binary files differ
diff --git a/web/static/images/emoji/last_quarter_moon_with_face.png b/web/static/images/emoji/last_quarter_moon_with_face.png
new file mode 100755
index 000000000..9ece82dfe
--- /dev/null
+++ b/web/static/images/emoji/last_quarter_moon_with_face.png
Binary files differ
diff --git a/web/static/images/emoji/laughing.png b/web/static/images/emoji/laughing.png
new file mode 100755
index 000000000..11c91eb22
--- /dev/null
+++ b/web/static/images/emoji/laughing.png
Binary files differ
diff --git a/web/static/images/emoji/leaves.png b/web/static/images/emoji/leaves.png
new file mode 100755
index 000000000..5229e06bd
--- /dev/null
+++ b/web/static/images/emoji/leaves.png
Binary files differ
diff --git a/web/static/images/emoji/ledger.png b/web/static/images/emoji/ledger.png
new file mode 100755
index 000000000..e4f72acea
--- /dev/null
+++ b/web/static/images/emoji/ledger.png
Binary files differ
diff --git a/web/static/images/emoji/left_luggage.png b/web/static/images/emoji/left_luggage.png
new file mode 100755
index 000000000..1c08b464d
--- /dev/null
+++ b/web/static/images/emoji/left_luggage.png
Binary files differ
diff --git a/web/static/images/emoji/left_right_arrow.png b/web/static/images/emoji/left_right_arrow.png
new file mode 100755
index 000000000..b9fd11c51
--- /dev/null
+++ b/web/static/images/emoji/left_right_arrow.png
Binary files differ
diff --git a/web/static/images/emoji/leftwards_arrow_with_hook.png b/web/static/images/emoji/leftwards_arrow_with_hook.png
new file mode 100755
index 000000000..bc45dfefd
--- /dev/null
+++ b/web/static/images/emoji/leftwards_arrow_with_hook.png
Binary files differ
diff --git a/web/static/images/emoji/lemon.png b/web/static/images/emoji/lemon.png
new file mode 100755
index 000000000..9814dc959
--- /dev/null
+++ b/web/static/images/emoji/lemon.png
Binary files differ
diff --git a/web/static/images/emoji/leo.png b/web/static/images/emoji/leo.png
new file mode 100755
index 000000000..e025933b2
--- /dev/null
+++ b/web/static/images/emoji/leo.png
Binary files differ
diff --git a/web/static/images/emoji/leopard.png b/web/static/images/emoji/leopard.png
new file mode 100755
index 000000000..3e738d2d3
--- /dev/null
+++ b/web/static/images/emoji/leopard.png
Binary files differ
diff --git a/web/static/images/emoji/libra.png b/web/static/images/emoji/libra.png
new file mode 100755
index 000000000..6f4a927cd
--- /dev/null
+++ b/web/static/images/emoji/libra.png
Binary files differ
diff --git a/web/static/images/emoji/light_rail.png b/web/static/images/emoji/light_rail.png
new file mode 100755
index 000000000..bcfe801ee
--- /dev/null
+++ b/web/static/images/emoji/light_rail.png
Binary files differ
diff --git a/web/static/images/emoji/link.png b/web/static/images/emoji/link.png
new file mode 100755
index 000000000..0239e48e4
--- /dev/null
+++ b/web/static/images/emoji/link.png
Binary files differ
diff --git a/web/static/images/emoji/lips.png b/web/static/images/emoji/lips.png
new file mode 100755
index 000000000..826ed1102
--- /dev/null
+++ b/web/static/images/emoji/lips.png
Binary files differ
diff --git a/web/static/images/emoji/lipstick.png b/web/static/images/emoji/lipstick.png
new file mode 100755
index 000000000..82f990c56
--- /dev/null
+++ b/web/static/images/emoji/lipstick.png
Binary files differ
diff --git a/web/static/images/emoji/lock.png b/web/static/images/emoji/lock.png
new file mode 100755
index 000000000..4892b0235
--- /dev/null
+++ b/web/static/images/emoji/lock.png
Binary files differ
diff --git a/web/static/images/emoji/lock_with_ink_pen.png b/web/static/images/emoji/lock_with_ink_pen.png
new file mode 100755
index 000000000..375e67e82
--- /dev/null
+++ b/web/static/images/emoji/lock_with_ink_pen.png
Binary files differ
diff --git a/web/static/images/emoji/lollipop.png b/web/static/images/emoji/lollipop.png
new file mode 100755
index 000000000..ba55e7093
--- /dev/null
+++ b/web/static/images/emoji/lollipop.png
Binary files differ
diff --git a/web/static/images/emoji/loop.png b/web/static/images/emoji/loop.png
new file mode 100755
index 000000000..ef34df3a4
--- /dev/null
+++ b/web/static/images/emoji/loop.png
Binary files differ
diff --git a/web/static/images/emoji/loudspeaker.png b/web/static/images/emoji/loudspeaker.png
new file mode 100755
index 000000000..752385e52
--- /dev/null
+++ b/web/static/images/emoji/loudspeaker.png
Binary files differ
diff --git a/web/static/images/emoji/love_hotel.png b/web/static/images/emoji/love_hotel.png
new file mode 100755
index 000000000..44d7db828
--- /dev/null
+++ b/web/static/images/emoji/love_hotel.png
Binary files differ
diff --git a/web/static/images/emoji/love_letter.png b/web/static/images/emoji/love_letter.png
new file mode 100755
index 000000000..e29981f44
--- /dev/null
+++ b/web/static/images/emoji/love_letter.png
Binary files differ
diff --git a/web/static/images/emoji/low_brightness.png b/web/static/images/emoji/low_brightness.png
new file mode 100755
index 000000000..ea15bde4f
--- /dev/null
+++ b/web/static/images/emoji/low_brightness.png
Binary files differ
diff --git a/web/static/images/emoji/m.png b/web/static/images/emoji/m.png
new file mode 100755
index 000000000..7e3a3bffb
--- /dev/null
+++ b/web/static/images/emoji/m.png
Binary files differ
diff --git a/web/static/images/emoji/mag.png b/web/static/images/emoji/mag.png
new file mode 100755
index 000000000..aa5b1d7c4
--- /dev/null
+++ b/web/static/images/emoji/mag.png
Binary files differ
diff --git a/web/static/images/emoji/mag_right.png b/web/static/images/emoji/mag_right.png
new file mode 100755
index 000000000..6e6cf11e6
--- /dev/null
+++ b/web/static/images/emoji/mag_right.png
Binary files differ
diff --git a/web/static/images/emoji/mahjong.png b/web/static/images/emoji/mahjong.png
new file mode 100755
index 000000000..f51ce65fd
--- /dev/null
+++ b/web/static/images/emoji/mahjong.png
Binary files differ
diff --git a/web/static/images/emoji/mailbox.png b/web/static/images/emoji/mailbox.png
new file mode 100755
index 000000000..8351e7076
--- /dev/null
+++ b/web/static/images/emoji/mailbox.png
Binary files differ
diff --git a/web/static/images/emoji/mailbox_closed.png b/web/static/images/emoji/mailbox_closed.png
new file mode 100755
index 000000000..a5982b69b
--- /dev/null
+++ b/web/static/images/emoji/mailbox_closed.png
Binary files differ
diff --git a/web/static/images/emoji/mailbox_with_mail.png b/web/static/images/emoji/mailbox_with_mail.png
new file mode 100755
index 000000000..dae345943
--- /dev/null
+++ b/web/static/images/emoji/mailbox_with_mail.png
Binary files differ
diff --git a/web/static/images/emoji/mailbox_with_no_mail.png b/web/static/images/emoji/mailbox_with_no_mail.png
new file mode 100755
index 000000000..59f15c5d7
--- /dev/null
+++ b/web/static/images/emoji/mailbox_with_no_mail.png
Binary files differ
diff --git a/web/static/images/emoji/man.png b/web/static/images/emoji/man.png
new file mode 100755
index 000000000..d9bfa26a6
--- /dev/null
+++ b/web/static/images/emoji/man.png
Binary files differ
diff --git a/web/static/images/emoji/man_with_gua_pi_mao.png b/web/static/images/emoji/man_with_gua_pi_mao.png
new file mode 100755
index 000000000..7aad74b55
--- /dev/null
+++ b/web/static/images/emoji/man_with_gua_pi_mao.png
Binary files differ
diff --git a/web/static/images/emoji/man_with_turban.png b/web/static/images/emoji/man_with_turban.png
new file mode 100755
index 000000000..036604caf
--- /dev/null
+++ b/web/static/images/emoji/man_with_turban.png
Binary files differ
diff --git a/web/static/images/emoji/mans_shoe.png b/web/static/images/emoji/mans_shoe.png
new file mode 100755
index 000000000..ecba9ba7d
--- /dev/null
+++ b/web/static/images/emoji/mans_shoe.png
Binary files differ
diff --git a/web/static/images/emoji/maple_leaf.png b/web/static/images/emoji/maple_leaf.png
new file mode 100755
index 000000000..4e9b47207
--- /dev/null
+++ b/web/static/images/emoji/maple_leaf.png
Binary files differ
diff --git a/web/static/images/emoji/mask.png b/web/static/images/emoji/mask.png
new file mode 100755
index 000000000..05887e99c
--- /dev/null
+++ b/web/static/images/emoji/mask.png
Binary files differ
diff --git a/web/static/images/emoji/massage.png b/web/static/images/emoji/massage.png
new file mode 100755
index 000000000..dd30d1597
--- /dev/null
+++ b/web/static/images/emoji/massage.png
Binary files differ
diff --git a/web/static/images/emoji/meat_on_bone.png b/web/static/images/emoji/meat_on_bone.png
new file mode 100755
index 000000000..5b79a660c
--- /dev/null
+++ b/web/static/images/emoji/meat_on_bone.png
Binary files differ
diff --git a/web/static/images/emoji/mega.png b/web/static/images/emoji/mega.png
new file mode 100755
index 000000000..022df2f8d
--- /dev/null
+++ b/web/static/images/emoji/mega.png
Binary files differ
diff --git a/web/static/images/emoji/melon.png b/web/static/images/emoji/melon.png
new file mode 100755
index 000000000..11c13cbbd
--- /dev/null
+++ b/web/static/images/emoji/melon.png
Binary files differ
diff --git a/web/static/images/emoji/memo.png b/web/static/images/emoji/memo.png
new file mode 100755
index 000000000..fc97ddbc9
--- /dev/null
+++ b/web/static/images/emoji/memo.png
Binary files differ
diff --git a/web/static/images/emoji/mens.png b/web/static/images/emoji/mens.png
new file mode 100755
index 000000000..abccfc9f2
--- /dev/null
+++ b/web/static/images/emoji/mens.png
Binary files differ
diff --git a/web/static/images/emoji/metal.png b/web/static/images/emoji/metal.png
new file mode 100755
index 000000000..94f1fda22
--- /dev/null
+++ b/web/static/images/emoji/metal.png
Binary files differ
diff --git a/web/static/images/emoji/metro.png b/web/static/images/emoji/metro.png
new file mode 100755
index 000000000..4acf5ab3e
--- /dev/null
+++ b/web/static/images/emoji/metro.png
Binary files differ
diff --git a/web/static/images/emoji/microphone.png b/web/static/images/emoji/microphone.png
new file mode 100755
index 000000000..68c74adad
--- /dev/null
+++ b/web/static/images/emoji/microphone.png
Binary files differ
diff --git a/web/static/images/emoji/microscope.png b/web/static/images/emoji/microscope.png
new file mode 100755
index 000000000..8b7a5e4e6
--- /dev/null
+++ b/web/static/images/emoji/microscope.png
Binary files differ
diff --git a/web/static/images/emoji/milky_way.png b/web/static/images/emoji/milky_way.png
new file mode 100755
index 000000000..901090a12
--- /dev/null
+++ b/web/static/images/emoji/milky_way.png
Binary files differ
diff --git a/web/static/images/emoji/minibus.png b/web/static/images/emoji/minibus.png
new file mode 100755
index 000000000..c52cef234
--- /dev/null
+++ b/web/static/images/emoji/minibus.png
Binary files differ
diff --git a/web/static/images/emoji/minidisc.png b/web/static/images/emoji/minidisc.png
new file mode 100755
index 000000000..e19cc5d01
--- /dev/null
+++ b/web/static/images/emoji/minidisc.png
Binary files differ
diff --git a/web/static/images/emoji/mobile_phone_off.png b/web/static/images/emoji/mobile_phone_off.png
new file mode 100755
index 000000000..fa16c763c
--- /dev/null
+++ b/web/static/images/emoji/mobile_phone_off.png
Binary files differ
diff --git a/web/static/images/emoji/money_with_wings.png b/web/static/images/emoji/money_with_wings.png
new file mode 100755
index 000000000..581a82449
--- /dev/null
+++ b/web/static/images/emoji/money_with_wings.png
Binary files differ
diff --git a/web/static/images/emoji/moneybag.png b/web/static/images/emoji/moneybag.png
new file mode 100755
index 000000000..5546c04ba
--- /dev/null
+++ b/web/static/images/emoji/moneybag.png
Binary files differ
diff --git a/web/static/images/emoji/monkey.png b/web/static/images/emoji/monkey.png
new file mode 100755
index 000000000..640703597
--- /dev/null
+++ b/web/static/images/emoji/monkey.png
Binary files differ
diff --git a/web/static/images/emoji/monkey_face.png b/web/static/images/emoji/monkey_face.png
new file mode 100755
index 000000000..6964cf4d5
--- /dev/null
+++ b/web/static/images/emoji/monkey_face.png
Binary files differ
diff --git a/web/static/images/emoji/monorail.png b/web/static/images/emoji/monorail.png
new file mode 100755
index 000000000..913d30024
--- /dev/null
+++ b/web/static/images/emoji/monorail.png
Binary files differ
diff --git a/web/static/images/emoji/mortar_board.png b/web/static/images/emoji/mortar_board.png
new file mode 100755
index 000000000..84513f6ba
--- /dev/null
+++ b/web/static/images/emoji/mortar_board.png
Binary files differ
diff --git a/web/static/images/emoji/mount_fuji.png b/web/static/images/emoji/mount_fuji.png
new file mode 100755
index 000000000..4c313e583
--- /dev/null
+++ b/web/static/images/emoji/mount_fuji.png
Binary files differ
diff --git a/web/static/images/emoji/mountain_bicyclist.png b/web/static/images/emoji/mountain_bicyclist.png
new file mode 100755
index 000000000..b69889756
--- /dev/null
+++ b/web/static/images/emoji/mountain_bicyclist.png
Binary files differ
diff --git a/web/static/images/emoji/mountain_cableway.png b/web/static/images/emoji/mountain_cableway.png
new file mode 100755
index 000000000..5688bb239
--- /dev/null
+++ b/web/static/images/emoji/mountain_cableway.png
Binary files differ
diff --git a/web/static/images/emoji/mountain_railway.png b/web/static/images/emoji/mountain_railway.png
new file mode 100755
index 000000000..1f3d1aab5
--- /dev/null
+++ b/web/static/images/emoji/mountain_railway.png
Binary files differ
diff --git a/web/static/images/emoji/mouse.png b/web/static/images/emoji/mouse.png
new file mode 100755
index 000000000..8ff162e2d
--- /dev/null
+++ b/web/static/images/emoji/mouse.png
Binary files differ
diff --git a/web/static/images/emoji/mouse2.png b/web/static/images/emoji/mouse2.png
new file mode 100755
index 000000000..2d777e5e1
--- /dev/null
+++ b/web/static/images/emoji/mouse2.png
Binary files differ
diff --git a/web/static/images/emoji/movie_camera.png b/web/static/images/emoji/movie_camera.png
new file mode 100755
index 000000000..9c1438409
--- /dev/null
+++ b/web/static/images/emoji/movie_camera.png
Binary files differ
diff --git a/web/static/images/emoji/moyai.png b/web/static/images/emoji/moyai.png
new file mode 100755
index 000000000..61a1a9c21
--- /dev/null
+++ b/web/static/images/emoji/moyai.png
Binary files differ
diff --git a/web/static/images/emoji/muscle.png b/web/static/images/emoji/muscle.png
new file mode 100755
index 000000000..19f92efb6
--- /dev/null
+++ b/web/static/images/emoji/muscle.png
Binary files differ
diff --git a/web/static/images/emoji/mushroom.png b/web/static/images/emoji/mushroom.png
new file mode 100755
index 000000000..5eeed8e79
--- /dev/null
+++ b/web/static/images/emoji/mushroom.png
Binary files differ
diff --git a/web/static/images/emoji/musical_keyboard.png b/web/static/images/emoji/musical_keyboard.png
new file mode 100755
index 000000000..93647a4a3
--- /dev/null
+++ b/web/static/images/emoji/musical_keyboard.png
Binary files differ
diff --git a/web/static/images/emoji/musical_note.png b/web/static/images/emoji/musical_note.png
new file mode 100755
index 000000000..68b261bcb
--- /dev/null
+++ b/web/static/images/emoji/musical_note.png
Binary files differ
diff --git a/web/static/images/emoji/musical_score.png b/web/static/images/emoji/musical_score.png
new file mode 100755
index 000000000..c99e3381f
--- /dev/null
+++ b/web/static/images/emoji/musical_score.png
Binary files differ
diff --git a/web/static/images/emoji/mute.png b/web/static/images/emoji/mute.png
new file mode 100755
index 000000000..4cf67c367
--- /dev/null
+++ b/web/static/images/emoji/mute.png
Binary files differ
diff --git a/web/static/images/emoji/nail_care.png b/web/static/images/emoji/nail_care.png
new file mode 100755
index 000000000..6a66e63d2
--- /dev/null
+++ b/web/static/images/emoji/nail_care.png
Binary files differ
diff --git a/web/static/images/emoji/name_badge.png b/web/static/images/emoji/name_badge.png
new file mode 100755
index 000000000..2b712dcd5
--- /dev/null
+++ b/web/static/images/emoji/name_badge.png
Binary files differ
diff --git a/web/static/images/emoji/neckbeard.png b/web/static/images/emoji/neckbeard.png
new file mode 100755
index 000000000..6e31d1652
--- /dev/null
+++ b/web/static/images/emoji/neckbeard.png
Binary files differ
diff --git a/web/static/images/emoji/necktie.png b/web/static/images/emoji/necktie.png
new file mode 100755
index 000000000..80461c66f
--- /dev/null
+++ b/web/static/images/emoji/necktie.png
Binary files differ
diff --git a/web/static/images/emoji/negative_squared_cross_mark.png b/web/static/images/emoji/negative_squared_cross_mark.png
new file mode 100755
index 000000000..b47a0cece
--- /dev/null
+++ b/web/static/images/emoji/negative_squared_cross_mark.png
Binary files differ
diff --git a/web/static/images/emoji/neutral_face.png b/web/static/images/emoji/neutral_face.png
new file mode 100755
index 000000000..682a1ba06
--- /dev/null
+++ b/web/static/images/emoji/neutral_face.png
Binary files differ
diff --git a/web/static/images/emoji/new.png b/web/static/images/emoji/new.png
new file mode 100755
index 000000000..28d1570e0
--- /dev/null
+++ b/web/static/images/emoji/new.png
Binary files differ
diff --git a/web/static/images/emoji/new_moon.png b/web/static/images/emoji/new_moon.png
new file mode 100755
index 000000000..72492cb90
--- /dev/null
+++ b/web/static/images/emoji/new_moon.png
Binary files differ
diff --git a/web/static/images/emoji/new_moon_with_face.png b/web/static/images/emoji/new_moon_with_face.png
new file mode 100755
index 000000000..21a696eb9
--- /dev/null
+++ b/web/static/images/emoji/new_moon_with_face.png
Binary files differ
diff --git a/web/static/images/emoji/newspaper.png b/web/static/images/emoji/newspaper.png
new file mode 100755
index 000000000..60c3394dc
--- /dev/null
+++ b/web/static/images/emoji/newspaper.png
Binary files differ
diff --git a/web/static/images/emoji/ng.png b/web/static/images/emoji/ng.png
new file mode 100755
index 000000000..2ca180ae3
--- /dev/null
+++ b/web/static/images/emoji/ng.png
Binary files differ
diff --git a/web/static/images/emoji/nine.png b/web/static/images/emoji/nine.png
new file mode 100755
index 000000000..8006cc909
--- /dev/null
+++ b/web/static/images/emoji/nine.png
Binary files differ
diff --git a/web/static/images/emoji/no_bell.png b/web/static/images/emoji/no_bell.png
new file mode 100755
index 000000000..613b81cd2
--- /dev/null
+++ b/web/static/images/emoji/no_bell.png
Binary files differ
diff --git a/web/static/images/emoji/no_bicycles.png b/web/static/images/emoji/no_bicycles.png
new file mode 100755
index 000000000..4b2621664
--- /dev/null
+++ b/web/static/images/emoji/no_bicycles.png
Binary files differ
diff --git a/web/static/images/emoji/no_entry.png b/web/static/images/emoji/no_entry.png
new file mode 100755
index 000000000..cf2086a8e
--- /dev/null
+++ b/web/static/images/emoji/no_entry.png
Binary files differ
diff --git a/web/static/images/emoji/no_entry_sign.png b/web/static/images/emoji/no_entry_sign.png
new file mode 100755
index 000000000..b3231f66d
--- /dev/null
+++ b/web/static/images/emoji/no_entry_sign.png
Binary files differ
diff --git a/web/static/images/emoji/no_good.png b/web/static/images/emoji/no_good.png
new file mode 100755
index 000000000..d459a35bc
--- /dev/null
+++ b/web/static/images/emoji/no_good.png
Binary files differ
diff --git a/web/static/images/emoji/no_mobile_phones.png b/web/static/images/emoji/no_mobile_phones.png
new file mode 100755
index 000000000..41df57cf8
--- /dev/null
+++ b/web/static/images/emoji/no_mobile_phones.png
Binary files differ
diff --git a/web/static/images/emoji/no_mouth.png b/web/static/images/emoji/no_mouth.png
new file mode 100755
index 000000000..e67802046
--- /dev/null
+++ b/web/static/images/emoji/no_mouth.png
Binary files differ
diff --git a/web/static/images/emoji/no_pedestrians.png b/web/static/images/emoji/no_pedestrians.png
new file mode 100755
index 000000000..53ee0f927
--- /dev/null
+++ b/web/static/images/emoji/no_pedestrians.png
Binary files differ
diff --git a/web/static/images/emoji/no_smoking.png b/web/static/images/emoji/no_smoking.png
new file mode 100755
index 000000000..5880ddfd1
--- /dev/null
+++ b/web/static/images/emoji/no_smoking.png
Binary files differ
diff --git a/web/static/images/emoji/non-potable_water.png b/web/static/images/emoji/non-potable_water.png
new file mode 100755
index 000000000..1b29d35b9
--- /dev/null
+++ b/web/static/images/emoji/non-potable_water.png
Binary files differ
diff --git a/web/static/images/emoji/nose.png b/web/static/images/emoji/nose.png
new file mode 100755
index 000000000..ad17c16c2
--- /dev/null
+++ b/web/static/images/emoji/nose.png
Binary files differ
diff --git a/web/static/images/emoji/notebook.png b/web/static/images/emoji/notebook.png
new file mode 100755
index 000000000..5f0a5f6a2
--- /dev/null
+++ b/web/static/images/emoji/notebook.png
Binary files differ
diff --git a/web/static/images/emoji/notebook_with_decorative_cover.png b/web/static/images/emoji/notebook_with_decorative_cover.png
new file mode 100755
index 000000000..4f3b14c85
--- /dev/null
+++ b/web/static/images/emoji/notebook_with_decorative_cover.png
Binary files differ
diff --git a/web/static/images/emoji/notes.png b/web/static/images/emoji/notes.png
new file mode 100755
index 000000000..0956d6ab2
--- /dev/null
+++ b/web/static/images/emoji/notes.png
Binary files differ
diff --git a/web/static/images/emoji/nut_and_bolt.png b/web/static/images/emoji/nut_and_bolt.png
new file mode 100755
index 000000000..bddfa72a7
--- /dev/null
+++ b/web/static/images/emoji/nut_and_bolt.png
Binary files differ
diff --git a/web/static/images/emoji/o.png b/web/static/images/emoji/o.png
new file mode 100755
index 000000000..1ff846c19
--- /dev/null
+++ b/web/static/images/emoji/o.png
Binary files differ
diff --git a/web/static/images/emoji/o2.png b/web/static/images/emoji/o2.png
new file mode 100755
index 000000000..d85f9fb98
--- /dev/null
+++ b/web/static/images/emoji/o2.png
Binary files differ
diff --git a/web/static/images/emoji/ocean.png b/web/static/images/emoji/ocean.png
new file mode 100755
index 000000000..f8d520cd4
--- /dev/null
+++ b/web/static/images/emoji/ocean.png
Binary files differ
diff --git a/web/static/images/emoji/octocat.png b/web/static/images/emoji/octocat.png
new file mode 100755
index 000000000..d296f25fe
--- /dev/null
+++ b/web/static/images/emoji/octocat.png
Binary files differ
diff --git a/web/static/images/emoji/octopus.png b/web/static/images/emoji/octopus.png
new file mode 100755
index 000000000..52ce64b46
--- /dev/null
+++ b/web/static/images/emoji/octopus.png
Binary files differ
diff --git a/web/static/images/emoji/oden.png b/web/static/images/emoji/oden.png
new file mode 100755
index 000000000..73add1c73
--- /dev/null
+++ b/web/static/images/emoji/oden.png
Binary files differ
diff --git a/web/static/images/emoji/office.png b/web/static/images/emoji/office.png
new file mode 100755
index 000000000..53c3ef8d1
--- /dev/null
+++ b/web/static/images/emoji/office.png
Binary files differ
diff --git a/web/static/images/emoji/ok.png b/web/static/images/emoji/ok.png
new file mode 100755
index 000000000..6433d1a90
--- /dev/null
+++ b/web/static/images/emoji/ok.png
Binary files differ
diff --git a/web/static/images/emoji/ok_hand.png b/web/static/images/emoji/ok_hand.png
new file mode 100755
index 000000000..80c5aebb6
--- /dev/null
+++ b/web/static/images/emoji/ok_hand.png
Binary files differ
diff --git a/web/static/images/emoji/ok_woman.png b/web/static/images/emoji/ok_woman.png
new file mode 100755
index 000000000..e8b98194e
--- /dev/null
+++ b/web/static/images/emoji/ok_woman.png
Binary files differ
diff --git a/web/static/images/emoji/older_man.png b/web/static/images/emoji/older_man.png
new file mode 100755
index 000000000..149f0cfb8
--- /dev/null
+++ b/web/static/images/emoji/older_man.png
Binary files differ
diff --git a/web/static/images/emoji/older_woman.png b/web/static/images/emoji/older_woman.png
new file mode 100755
index 000000000..f839565f4
--- /dev/null
+++ b/web/static/images/emoji/older_woman.png
Binary files differ
diff --git a/web/static/images/emoji/on.png b/web/static/images/emoji/on.png
new file mode 100755
index 000000000..4cd69a15d
--- /dev/null
+++ b/web/static/images/emoji/on.png
Binary files differ
diff --git a/web/static/images/emoji/oncoming_automobile.png b/web/static/images/emoji/oncoming_automobile.png
new file mode 100755
index 000000000..cb46de22c
--- /dev/null
+++ b/web/static/images/emoji/oncoming_automobile.png
Binary files differ
diff --git a/web/static/images/emoji/oncoming_bus.png b/web/static/images/emoji/oncoming_bus.png
new file mode 100755
index 000000000..3695f7623
--- /dev/null
+++ b/web/static/images/emoji/oncoming_bus.png
Binary files differ
diff --git a/web/static/images/emoji/oncoming_police_car.png b/web/static/images/emoji/oncoming_police_car.png
new file mode 100755
index 000000000..af20e7eff
--- /dev/null
+++ b/web/static/images/emoji/oncoming_police_car.png
Binary files differ
diff --git a/web/static/images/emoji/oncoming_taxi.png b/web/static/images/emoji/oncoming_taxi.png
new file mode 100755
index 000000000..f78cf3103
--- /dev/null
+++ b/web/static/images/emoji/oncoming_taxi.png
Binary files differ
diff --git a/web/static/images/emoji/one.png b/web/static/images/emoji/one.png
new file mode 100755
index 000000000..2d1f9f8c4
--- /dev/null
+++ b/web/static/images/emoji/one.png
Binary files differ
diff --git a/web/static/images/emoji/open_file_folder.png b/web/static/images/emoji/open_file_folder.png
new file mode 100755
index 000000000..2bbbbf5e7
--- /dev/null
+++ b/web/static/images/emoji/open_file_folder.png
Binary files differ
diff --git a/web/static/images/emoji/open_hands.png b/web/static/images/emoji/open_hands.png
new file mode 100755
index 000000000..cef9f428b
--- /dev/null
+++ b/web/static/images/emoji/open_hands.png
Binary files differ
diff --git a/web/static/images/emoji/open_mouth.png b/web/static/images/emoji/open_mouth.png
new file mode 100755
index 000000000..daf914274
--- /dev/null
+++ b/web/static/images/emoji/open_mouth.png
Binary files differ
diff --git a/web/static/images/emoji/ophiuchus.png b/web/static/images/emoji/ophiuchus.png
new file mode 100755
index 000000000..4eef715bc
--- /dev/null
+++ b/web/static/images/emoji/ophiuchus.png
Binary files differ
diff --git a/web/static/images/emoji/orange_book.png b/web/static/images/emoji/orange_book.png
new file mode 100755
index 000000000..49650d59e
--- /dev/null
+++ b/web/static/images/emoji/orange_book.png
Binary files differ
diff --git a/web/static/images/emoji/outbox_tray.png b/web/static/images/emoji/outbox_tray.png
new file mode 100755
index 000000000..7ad15e649
--- /dev/null
+++ b/web/static/images/emoji/outbox_tray.png
Binary files differ
diff --git a/web/static/images/emoji/ox.png b/web/static/images/emoji/ox.png
new file mode 100755
index 000000000..8d9819462
--- /dev/null
+++ b/web/static/images/emoji/ox.png
Binary files differ
diff --git a/web/static/images/emoji/package.png b/web/static/images/emoji/package.png
new file mode 100755
index 000000000..26602af9d
--- /dev/null
+++ b/web/static/images/emoji/package.png
Binary files differ
diff --git a/web/static/images/emoji/page_facing_up.png b/web/static/images/emoji/page_facing_up.png
new file mode 100755
index 000000000..804c0d739
--- /dev/null
+++ b/web/static/images/emoji/page_facing_up.png
Binary files differ
diff --git a/web/static/images/emoji/page_with_curl.png b/web/static/images/emoji/page_with_curl.png
new file mode 100755
index 000000000..37cb4de50
--- /dev/null
+++ b/web/static/images/emoji/page_with_curl.png
Binary files differ
diff --git a/web/static/images/emoji/pager.png b/web/static/images/emoji/pager.png
new file mode 100755
index 000000000..e3e1fc44e
--- /dev/null
+++ b/web/static/images/emoji/pager.png
Binary files differ
diff --git a/web/static/images/emoji/palm_tree.png b/web/static/images/emoji/palm_tree.png
new file mode 100755
index 000000000..d13b7c620
--- /dev/null
+++ b/web/static/images/emoji/palm_tree.png
Binary files differ
diff --git a/web/static/images/emoji/panda_face.png b/web/static/images/emoji/panda_face.png
new file mode 100755
index 000000000..a794fb17f
--- /dev/null
+++ b/web/static/images/emoji/panda_face.png
Binary files differ
diff --git a/web/static/images/emoji/paperclip.png b/web/static/images/emoji/paperclip.png
new file mode 100755
index 000000000..677669a83
--- /dev/null
+++ b/web/static/images/emoji/paperclip.png
Binary files differ
diff --git a/web/static/images/emoji/parking.png b/web/static/images/emoji/parking.png
new file mode 100755
index 000000000..c24af81cc
--- /dev/null
+++ b/web/static/images/emoji/parking.png
Binary files differ
diff --git a/web/static/images/emoji/part_alternation_mark.png b/web/static/images/emoji/part_alternation_mark.png
new file mode 100755
index 000000000..1e5855f8d
--- /dev/null
+++ b/web/static/images/emoji/part_alternation_mark.png
Binary files differ
diff --git a/web/static/images/emoji/partly_sunny.png b/web/static/images/emoji/partly_sunny.png
new file mode 100755
index 000000000..b3f5bcfdd
--- /dev/null
+++ b/web/static/images/emoji/partly_sunny.png
Binary files differ
diff --git a/web/static/images/emoji/passport_control.png b/web/static/images/emoji/passport_control.png
new file mode 100755
index 000000000..675b76d37
--- /dev/null
+++ b/web/static/images/emoji/passport_control.png
Binary files differ
diff --git a/web/static/images/emoji/paw_prints.png b/web/static/images/emoji/paw_prints.png
new file mode 100755
index 000000000..89b9fec9e
--- /dev/null
+++ b/web/static/images/emoji/paw_prints.png
Binary files differ
diff --git a/web/static/images/emoji/peach.png b/web/static/images/emoji/peach.png
new file mode 100755
index 000000000..ee2139ecb
--- /dev/null
+++ b/web/static/images/emoji/peach.png
Binary files differ
diff --git a/web/static/images/emoji/pear.png b/web/static/images/emoji/pear.png
new file mode 100755
index 000000000..f24aca8c0
--- /dev/null
+++ b/web/static/images/emoji/pear.png
Binary files differ
diff --git a/web/static/images/emoji/pencil.png b/web/static/images/emoji/pencil.png
new file mode 100755
index 000000000..fc97ddbc9
--- /dev/null
+++ b/web/static/images/emoji/pencil.png
Binary files differ
diff --git a/web/static/images/emoji/pencil2.png b/web/static/images/emoji/pencil2.png
new file mode 100755
index 000000000..64c2d9b79
--- /dev/null
+++ b/web/static/images/emoji/pencil2.png
Binary files differ
diff --git a/web/static/images/emoji/penguin.png b/web/static/images/emoji/penguin.png
new file mode 100755
index 000000000..d8edbcb8f
--- /dev/null
+++ b/web/static/images/emoji/penguin.png
Binary files differ
diff --git a/web/static/images/emoji/pensive.png b/web/static/images/emoji/pensive.png
new file mode 100755
index 000000000..4159f3c42
--- /dev/null
+++ b/web/static/images/emoji/pensive.png
Binary files differ
diff --git a/web/static/images/emoji/performing_arts.png b/web/static/images/emoji/performing_arts.png
new file mode 100755
index 000000000..899fbe5a7
--- /dev/null
+++ b/web/static/images/emoji/performing_arts.png
Binary files differ
diff --git a/web/static/images/emoji/persevere.png b/web/static/images/emoji/persevere.png
new file mode 100755
index 000000000..f99f6da47
--- /dev/null
+++ b/web/static/images/emoji/persevere.png
Binary files differ
diff --git a/web/static/images/emoji/person_frowning.png b/web/static/images/emoji/person_frowning.png
new file mode 100755
index 000000000..6f34d5e15
--- /dev/null
+++ b/web/static/images/emoji/person_frowning.png
Binary files differ
diff --git a/web/static/images/emoji/person_with_blond_hair.png b/web/static/images/emoji/person_with_blond_hair.png
new file mode 100755
index 000000000..c144301cb
--- /dev/null
+++ b/web/static/images/emoji/person_with_blond_hair.png
Binary files differ
diff --git a/web/static/images/emoji/person_with_pouting_face.png b/web/static/images/emoji/person_with_pouting_face.png
new file mode 100755
index 000000000..c4a95c3b2
--- /dev/null
+++ b/web/static/images/emoji/person_with_pouting_face.png
Binary files differ
diff --git a/web/static/images/emoji/phone.png b/web/static/images/emoji/phone.png
new file mode 100755
index 000000000..87d2559b5
--- /dev/null
+++ b/web/static/images/emoji/phone.png
Binary files differ
diff --git a/web/static/images/emoji/pig.png b/web/static/images/emoji/pig.png
new file mode 100755
index 000000000..f7f273c73
--- /dev/null
+++ b/web/static/images/emoji/pig.png
Binary files differ
diff --git a/web/static/images/emoji/pig2.png b/web/static/images/emoji/pig2.png
new file mode 100755
index 000000000..fec3374d7
--- /dev/null
+++ b/web/static/images/emoji/pig2.png
Binary files differ
diff --git a/web/static/images/emoji/pig_nose.png b/web/static/images/emoji/pig_nose.png
new file mode 100755
index 000000000..38d612446
--- /dev/null
+++ b/web/static/images/emoji/pig_nose.png
Binary files differ
diff --git a/web/static/images/emoji/pill.png b/web/static/images/emoji/pill.png
new file mode 100755
index 000000000..cd84a78ff
--- /dev/null
+++ b/web/static/images/emoji/pill.png
Binary files differ
diff --git a/web/static/images/emoji/pineapple.png b/web/static/images/emoji/pineapple.png
new file mode 100755
index 000000000..d6f8e2876
--- /dev/null
+++ b/web/static/images/emoji/pineapple.png
Binary files differ
diff --git a/web/static/images/emoji/pisces.png b/web/static/images/emoji/pisces.png
new file mode 100755
index 000000000..6db2c3d50
--- /dev/null
+++ b/web/static/images/emoji/pisces.png
Binary files differ
diff --git a/web/static/images/emoji/pizza.png b/web/static/images/emoji/pizza.png
new file mode 100755
index 000000000..460367d02
--- /dev/null
+++ b/web/static/images/emoji/pizza.png
Binary files differ
diff --git a/web/static/images/emoji/plus1.png b/web/static/images/emoji/plus1.png
new file mode 100755
index 000000000..81786c1d8
--- /dev/null
+++ b/web/static/images/emoji/plus1.png
Binary files differ
diff --git a/web/static/images/emoji/point_down.png b/web/static/images/emoji/point_down.png
new file mode 100755
index 000000000..658c6d918
--- /dev/null
+++ b/web/static/images/emoji/point_down.png
Binary files differ
diff --git a/web/static/images/emoji/point_left.png b/web/static/images/emoji/point_left.png
new file mode 100755
index 000000000..38a99b43f
--- /dev/null
+++ b/web/static/images/emoji/point_left.png
Binary files differ
diff --git a/web/static/images/emoji/point_right.png b/web/static/images/emoji/point_right.png
new file mode 100755
index 000000000..6f9f029a4
--- /dev/null
+++ b/web/static/images/emoji/point_right.png
Binary files differ
diff --git a/web/static/images/emoji/point_up.png b/web/static/images/emoji/point_up.png
new file mode 100755
index 000000000..01896e214
--- /dev/null
+++ b/web/static/images/emoji/point_up.png
Binary files differ
diff --git a/web/static/images/emoji/point_up_2.png b/web/static/images/emoji/point_up_2.png
new file mode 100755
index 000000000..1cfe73672
--- /dev/null
+++ b/web/static/images/emoji/point_up_2.png
Binary files differ
diff --git a/web/static/images/emoji/police_car.png b/web/static/images/emoji/police_car.png
new file mode 100755
index 000000000..b8f17275e
--- /dev/null
+++ b/web/static/images/emoji/police_car.png
Binary files differ
diff --git a/web/static/images/emoji/poodle.png b/web/static/images/emoji/poodle.png
new file mode 100755
index 000000000..adac80bd9
--- /dev/null
+++ b/web/static/images/emoji/poodle.png
Binary files differ
diff --git a/web/static/images/emoji/poop.png b/web/static/images/emoji/poop.png
new file mode 100755
index 000000000..73a4dc840
--- /dev/null
+++ b/web/static/images/emoji/poop.png
Binary files differ
diff --git a/web/static/images/emoji/post_office.png b/web/static/images/emoji/post_office.png
new file mode 100755
index 000000000..43b59e30e
--- /dev/null
+++ b/web/static/images/emoji/post_office.png
Binary files differ
diff --git a/web/static/images/emoji/postal_horn.png b/web/static/images/emoji/postal_horn.png
new file mode 100755
index 000000000..13a151418
--- /dev/null
+++ b/web/static/images/emoji/postal_horn.png
Binary files differ
diff --git a/web/static/images/emoji/postbox.png b/web/static/images/emoji/postbox.png
new file mode 100755
index 000000000..ce04b7008
--- /dev/null
+++ b/web/static/images/emoji/postbox.png
Binary files differ
diff --git a/web/static/images/emoji/potable_water.png b/web/static/images/emoji/potable_water.png
new file mode 100755
index 000000000..e9fd56079
--- /dev/null
+++ b/web/static/images/emoji/potable_water.png
Binary files differ
diff --git a/web/static/images/emoji/pouch.png b/web/static/images/emoji/pouch.png
new file mode 100755
index 000000000..dc35ae8e5
--- /dev/null
+++ b/web/static/images/emoji/pouch.png
Binary files differ
diff --git a/web/static/images/emoji/poultry_leg.png b/web/static/images/emoji/poultry_leg.png
new file mode 100755
index 000000000..43ad85965
--- /dev/null
+++ b/web/static/images/emoji/poultry_leg.png
Binary files differ
diff --git a/web/static/images/emoji/pound.png b/web/static/images/emoji/pound.png
new file mode 100755
index 000000000..f8be91d7a
--- /dev/null
+++ b/web/static/images/emoji/pound.png
Binary files differ
diff --git a/web/static/images/emoji/pouting_cat.png b/web/static/images/emoji/pouting_cat.png
new file mode 100755
index 000000000..4325fd48d
--- /dev/null
+++ b/web/static/images/emoji/pouting_cat.png
Binary files differ
diff --git a/web/static/images/emoji/pray.png b/web/static/images/emoji/pray.png
new file mode 100755
index 000000000..f86c992d5
--- /dev/null
+++ b/web/static/images/emoji/pray.png
Binary files differ
diff --git a/web/static/images/emoji/princess.png b/web/static/images/emoji/princess.png
new file mode 100755
index 000000000..1ebb2ce9b
--- /dev/null
+++ b/web/static/images/emoji/princess.png
Binary files differ
diff --git a/web/static/images/emoji/punch.png b/web/static/images/emoji/punch.png
new file mode 100755
index 000000000..277047b7c
--- /dev/null
+++ b/web/static/images/emoji/punch.png
Binary files differ
diff --git a/web/static/images/emoji/purple_heart.png b/web/static/images/emoji/purple_heart.png
new file mode 100755
index 000000000..d5f875043
--- /dev/null
+++ b/web/static/images/emoji/purple_heart.png
Binary files differ
diff --git a/web/static/images/emoji/purse.png b/web/static/images/emoji/purse.png
new file mode 100755
index 000000000..8f06a2b93
--- /dev/null
+++ b/web/static/images/emoji/purse.png
Binary files differ
diff --git a/web/static/images/emoji/pushpin.png b/web/static/images/emoji/pushpin.png
new file mode 100755
index 000000000..540c4ecb8
--- /dev/null
+++ b/web/static/images/emoji/pushpin.png
Binary files differ
diff --git a/web/static/images/emoji/put_litter_in_its_place.png b/web/static/images/emoji/put_litter_in_its_place.png
new file mode 100755
index 000000000..c2e350c2d
--- /dev/null
+++ b/web/static/images/emoji/put_litter_in_its_place.png
Binary files differ
diff --git a/web/static/images/emoji/question.png b/web/static/images/emoji/question.png
new file mode 100755
index 000000000..38cedf560
--- /dev/null
+++ b/web/static/images/emoji/question.png
Binary files differ
diff --git a/web/static/images/emoji/rabbit.png b/web/static/images/emoji/rabbit.png
new file mode 100755
index 000000000..5cb3ef6f0
--- /dev/null
+++ b/web/static/images/emoji/rabbit.png
Binary files differ
diff --git a/web/static/images/emoji/rabbit2.png b/web/static/images/emoji/rabbit2.png
new file mode 100755
index 000000000..a9fd24dc1
--- /dev/null
+++ b/web/static/images/emoji/rabbit2.png
Binary files differ
diff --git a/web/static/images/emoji/racehorse.png b/web/static/images/emoji/racehorse.png
new file mode 100755
index 000000000..4d09c64de
--- /dev/null
+++ b/web/static/images/emoji/racehorse.png
Binary files differ
diff --git a/web/static/images/emoji/radio.png b/web/static/images/emoji/radio.png
new file mode 100755
index 000000000..ea589efe3
--- /dev/null
+++ b/web/static/images/emoji/radio.png
Binary files differ
diff --git a/web/static/images/emoji/radio_button.png b/web/static/images/emoji/radio_button.png
new file mode 100755
index 000000000..63755eec2
--- /dev/null
+++ b/web/static/images/emoji/radio_button.png
Binary files differ
diff --git a/web/static/images/emoji/rage.png b/web/static/images/emoji/rage.png
new file mode 100755
index 000000000..c65ddff55
--- /dev/null
+++ b/web/static/images/emoji/rage.png
Binary files differ
diff --git a/web/static/images/emoji/rage1.png b/web/static/images/emoji/rage1.png
new file mode 100755
index 000000000..1506ba403
--- /dev/null
+++ b/web/static/images/emoji/rage1.png
Binary files differ
diff --git a/web/static/images/emoji/rage2.png b/web/static/images/emoji/rage2.png
new file mode 100755
index 000000000..f792e063b
--- /dev/null
+++ b/web/static/images/emoji/rage2.png
Binary files differ
diff --git a/web/static/images/emoji/rage3.png b/web/static/images/emoji/rage3.png
new file mode 100755
index 000000000..58764cbcb
--- /dev/null
+++ b/web/static/images/emoji/rage3.png
Binary files differ
diff --git a/web/static/images/emoji/rage4.png b/web/static/images/emoji/rage4.png
new file mode 100755
index 000000000..c726c94a2
--- /dev/null
+++ b/web/static/images/emoji/rage4.png
Binary files differ
diff --git a/web/static/images/emoji/railway_car.png b/web/static/images/emoji/railway_car.png
new file mode 100755
index 000000000..22361158f
--- /dev/null
+++ b/web/static/images/emoji/railway_car.png
Binary files differ
diff --git a/web/static/images/emoji/rainbow.png b/web/static/images/emoji/rainbow.png
new file mode 100755
index 000000000..6b1faa037
--- /dev/null
+++ b/web/static/images/emoji/rainbow.png
Binary files differ
diff --git a/web/static/images/emoji/raised_hand.png b/web/static/images/emoji/raised_hand.png
new file mode 100755
index 000000000..5e45c25a5
--- /dev/null
+++ b/web/static/images/emoji/raised_hand.png
Binary files differ
diff --git a/web/static/images/emoji/raised_hands.png b/web/static/images/emoji/raised_hands.png
new file mode 100755
index 000000000..e03142bdc
--- /dev/null
+++ b/web/static/images/emoji/raised_hands.png
Binary files differ
diff --git a/web/static/images/emoji/raising_hand.png b/web/static/images/emoji/raising_hand.png
new file mode 100755
index 000000000..e1741a40e
--- /dev/null
+++ b/web/static/images/emoji/raising_hand.png
Binary files differ
diff --git a/web/static/images/emoji/ram.png b/web/static/images/emoji/ram.png
new file mode 100755
index 000000000..5ea7bfbc0
--- /dev/null
+++ b/web/static/images/emoji/ram.png
Binary files differ
diff --git a/web/static/images/emoji/ramen.png b/web/static/images/emoji/ramen.png
new file mode 100755
index 000000000..78dc7d537
--- /dev/null
+++ b/web/static/images/emoji/ramen.png
Binary files differ
diff --git a/web/static/images/emoji/rat.png b/web/static/images/emoji/rat.png
new file mode 100755
index 000000000..fa7dd401c
--- /dev/null
+++ b/web/static/images/emoji/rat.png
Binary files differ
diff --git a/web/static/images/emoji/recycle.png b/web/static/images/emoji/recycle.png
new file mode 100755
index 000000000..99104c0e9
--- /dev/null
+++ b/web/static/images/emoji/recycle.png
Binary files differ
diff --git a/web/static/images/emoji/red_car.png b/web/static/images/emoji/red_car.png
new file mode 100755
index 000000000..d70a2f062
--- /dev/null
+++ b/web/static/images/emoji/red_car.png
Binary files differ
diff --git a/web/static/images/emoji/red_circle.png b/web/static/images/emoji/red_circle.png
new file mode 100755
index 000000000..b391289b2
--- /dev/null
+++ b/web/static/images/emoji/red_circle.png
Binary files differ
diff --git a/web/static/images/emoji/registered.png b/web/static/images/emoji/registered.png
new file mode 100755
index 000000000..31c68a80b
--- /dev/null
+++ b/web/static/images/emoji/registered.png
Binary files differ
diff --git a/web/static/images/emoji/relaxed.png b/web/static/images/emoji/relaxed.png
new file mode 100755
index 000000000..bbab82d3b
--- /dev/null
+++ b/web/static/images/emoji/relaxed.png
Binary files differ
diff --git a/web/static/images/emoji/relieved.png b/web/static/images/emoji/relieved.png
new file mode 100755
index 000000000..fe5629f43
--- /dev/null
+++ b/web/static/images/emoji/relieved.png
Binary files differ
diff --git a/web/static/images/emoji/repeat.png b/web/static/images/emoji/repeat.png
new file mode 100755
index 000000000..80113b692
--- /dev/null
+++ b/web/static/images/emoji/repeat.png
Binary files differ
diff --git a/web/static/images/emoji/repeat_one.png b/web/static/images/emoji/repeat_one.png
new file mode 100755
index 000000000..3c47bcc1f
--- /dev/null
+++ b/web/static/images/emoji/repeat_one.png
Binary files differ
diff --git a/web/static/images/emoji/restroom.png b/web/static/images/emoji/restroom.png
new file mode 100755
index 000000000..d6c111b29
--- /dev/null
+++ b/web/static/images/emoji/restroom.png
Binary files differ
diff --git a/web/static/images/emoji/revolving_hearts.png b/web/static/images/emoji/revolving_hearts.png
new file mode 100755
index 000000000..ea3317c47
--- /dev/null
+++ b/web/static/images/emoji/revolving_hearts.png
Binary files differ
diff --git a/web/static/images/emoji/rewind.png b/web/static/images/emoji/rewind.png
new file mode 100755
index 000000000..26289dc3d
--- /dev/null
+++ b/web/static/images/emoji/rewind.png
Binary files differ
diff --git a/web/static/images/emoji/ribbon.png b/web/static/images/emoji/ribbon.png
new file mode 100755
index 000000000..63ee5ba5a
--- /dev/null
+++ b/web/static/images/emoji/ribbon.png
Binary files differ
diff --git a/web/static/images/emoji/rice.png b/web/static/images/emoji/rice.png
new file mode 100755
index 000000000..1fd22027b
--- /dev/null
+++ b/web/static/images/emoji/rice.png
Binary files differ
diff --git a/web/static/images/emoji/rice_ball.png b/web/static/images/emoji/rice_ball.png
new file mode 100755
index 000000000..ade7c45d3
--- /dev/null
+++ b/web/static/images/emoji/rice_ball.png
Binary files differ
diff --git a/web/static/images/emoji/rice_cracker.png b/web/static/images/emoji/rice_cracker.png
new file mode 100755
index 000000000..954c901e9
--- /dev/null
+++ b/web/static/images/emoji/rice_cracker.png
Binary files differ
diff --git a/web/static/images/emoji/rice_scene.png b/web/static/images/emoji/rice_scene.png
new file mode 100755
index 000000000..14361988d
--- /dev/null
+++ b/web/static/images/emoji/rice_scene.png
Binary files differ
diff --git a/web/static/images/emoji/ring.png b/web/static/images/emoji/ring.png
new file mode 100755
index 000000000..8a57fd68b
--- /dev/null
+++ b/web/static/images/emoji/ring.png
Binary files differ
diff --git a/web/static/images/emoji/rocket.png b/web/static/images/emoji/rocket.png
new file mode 100755
index 000000000..783078d37
--- /dev/null
+++ b/web/static/images/emoji/rocket.png
Binary files differ
diff --git a/web/static/images/emoji/roller_coaster.png b/web/static/images/emoji/roller_coaster.png
new file mode 100755
index 000000000..9180b9861
--- /dev/null
+++ b/web/static/images/emoji/roller_coaster.png
Binary files differ
diff --git a/web/static/images/emoji/rooster.png b/web/static/images/emoji/rooster.png
new file mode 100755
index 000000000..fab23ad36
--- /dev/null
+++ b/web/static/images/emoji/rooster.png
Binary files differ
diff --git a/web/static/images/emoji/rose.png b/web/static/images/emoji/rose.png
new file mode 100755
index 000000000..3479fbcbb
--- /dev/null
+++ b/web/static/images/emoji/rose.png
Binary files differ
diff --git a/web/static/images/emoji/rotating_light.png b/web/static/images/emoji/rotating_light.png
new file mode 100755
index 000000000..6cf4a775e
--- /dev/null
+++ b/web/static/images/emoji/rotating_light.png
Binary files differ
diff --git a/web/static/images/emoji/round_pushpin.png b/web/static/images/emoji/round_pushpin.png
new file mode 100755
index 000000000..e498e92cf
--- /dev/null
+++ b/web/static/images/emoji/round_pushpin.png
Binary files differ
diff --git a/web/static/images/emoji/rowboat.png b/web/static/images/emoji/rowboat.png
new file mode 100755
index 000000000..e370d0fb1
--- /dev/null
+++ b/web/static/images/emoji/rowboat.png
Binary files differ
diff --git a/web/static/images/emoji/ru.png b/web/static/images/emoji/ru.png
new file mode 100755
index 000000000..55fcf3549
--- /dev/null
+++ b/web/static/images/emoji/ru.png
Binary files differ
diff --git a/web/static/images/emoji/rugby_football.png b/web/static/images/emoji/rugby_football.png
new file mode 100755
index 000000000..f8db67d70
--- /dev/null
+++ b/web/static/images/emoji/rugby_football.png
Binary files differ
diff --git a/web/static/images/emoji/runner.png b/web/static/images/emoji/runner.png
new file mode 100755
index 000000000..cb0042962
--- /dev/null
+++ b/web/static/images/emoji/runner.png
Binary files differ
diff --git a/web/static/images/emoji/running.png b/web/static/images/emoji/running.png
new file mode 100755
index 000000000..cb0042962
--- /dev/null
+++ b/web/static/images/emoji/running.png
Binary files differ
diff --git a/web/static/images/emoji/running_shirt_with_sash.png b/web/static/images/emoji/running_shirt_with_sash.png
new file mode 100755
index 000000000..0d68bba09
--- /dev/null
+++ b/web/static/images/emoji/running_shirt_with_sash.png
Binary files differ
diff --git a/web/static/images/emoji/sa.png b/web/static/images/emoji/sa.png
new file mode 100755
index 000000000..387f098b9
--- /dev/null
+++ b/web/static/images/emoji/sa.png
Binary files differ
diff --git a/web/static/images/emoji/sagittarius.png b/web/static/images/emoji/sagittarius.png
new file mode 100755
index 000000000..8b5435baa
--- /dev/null
+++ b/web/static/images/emoji/sagittarius.png
Binary files differ
diff --git a/web/static/images/emoji/sailboat.png b/web/static/images/emoji/sailboat.png
new file mode 100755
index 000000000..ff656dc62
--- /dev/null
+++ b/web/static/images/emoji/sailboat.png
Binary files differ
diff --git a/web/static/images/emoji/sake.png b/web/static/images/emoji/sake.png
new file mode 100755
index 000000000..1f69907e5
--- /dev/null
+++ b/web/static/images/emoji/sake.png
Binary files differ
diff --git a/web/static/images/emoji/sandal.png b/web/static/images/emoji/sandal.png
new file mode 100755
index 000000000..0bb3f663f
--- /dev/null
+++ b/web/static/images/emoji/sandal.png
Binary files differ
diff --git a/web/static/images/emoji/santa.png b/web/static/images/emoji/santa.png
new file mode 100755
index 000000000..a2240c07e
--- /dev/null
+++ b/web/static/images/emoji/santa.png
Binary files differ
diff --git a/web/static/images/emoji/satellite.png b/web/static/images/emoji/satellite.png
new file mode 100755
index 000000000..3481cc2ef
--- /dev/null
+++ b/web/static/images/emoji/satellite.png
Binary files differ
diff --git a/web/static/images/emoji/satisfied.png b/web/static/images/emoji/satisfied.png
new file mode 100755
index 000000000..11c91eb22
--- /dev/null
+++ b/web/static/images/emoji/satisfied.png
Binary files differ
diff --git a/web/static/images/emoji/saxophone.png b/web/static/images/emoji/saxophone.png
new file mode 100755
index 000000000..011559a76
--- /dev/null
+++ b/web/static/images/emoji/saxophone.png
Binary files differ
diff --git a/web/static/images/emoji/school.png b/web/static/images/emoji/school.png
new file mode 100755
index 000000000..afd922bf1
--- /dev/null
+++ b/web/static/images/emoji/school.png
Binary files differ
diff --git a/web/static/images/emoji/school_satchel.png b/web/static/images/emoji/school_satchel.png
new file mode 100755
index 000000000..edfb19aec
--- /dev/null
+++ b/web/static/images/emoji/school_satchel.png
Binary files differ
diff --git a/web/static/images/emoji/scissors.png b/web/static/images/emoji/scissors.png
new file mode 100755
index 000000000..d99b8aea0
--- /dev/null
+++ b/web/static/images/emoji/scissors.png
Binary files differ
diff --git a/web/static/images/emoji/scorpius.png b/web/static/images/emoji/scorpius.png
new file mode 100755
index 000000000..67fcea165
--- /dev/null
+++ b/web/static/images/emoji/scorpius.png
Binary files differ
diff --git a/web/static/images/emoji/scream.png b/web/static/images/emoji/scream.png
new file mode 100755
index 000000000..9e93c885d
--- /dev/null
+++ b/web/static/images/emoji/scream.png
Binary files differ
diff --git a/web/static/images/emoji/scream_cat.png b/web/static/images/emoji/scream_cat.png
new file mode 100755
index 000000000..d94cd34ff
--- /dev/null
+++ b/web/static/images/emoji/scream_cat.png
Binary files differ
diff --git a/web/static/images/emoji/scroll.png b/web/static/images/emoji/scroll.png
new file mode 100755
index 000000000..c5a10e6b8
--- /dev/null
+++ b/web/static/images/emoji/scroll.png
Binary files differ
diff --git a/web/static/images/emoji/seat.png b/web/static/images/emoji/seat.png
new file mode 100755
index 000000000..d1cb864b4
--- /dev/null
+++ b/web/static/images/emoji/seat.png
Binary files differ
diff --git a/web/static/images/emoji/secret.png b/web/static/images/emoji/secret.png
new file mode 100755
index 000000000..82e383a60
--- /dev/null
+++ b/web/static/images/emoji/secret.png
Binary files differ
diff --git a/web/static/images/emoji/see_no_evil.png b/web/static/images/emoji/see_no_evil.png
new file mode 100755
index 000000000..0890a6222
--- /dev/null
+++ b/web/static/images/emoji/see_no_evil.png
Binary files differ
diff --git a/web/static/images/emoji/seedling.png b/web/static/images/emoji/seedling.png
new file mode 100755
index 000000000..2ab079310
--- /dev/null
+++ b/web/static/images/emoji/seedling.png
Binary files differ
diff --git a/web/static/images/emoji/seven.png b/web/static/images/emoji/seven.png
new file mode 100755
index 000000000..354e89ae7
--- /dev/null
+++ b/web/static/images/emoji/seven.png
Binary files differ
diff --git a/web/static/images/emoji/shaved_ice.png b/web/static/images/emoji/shaved_ice.png
new file mode 100755
index 000000000..0d0b382c2
--- /dev/null
+++ b/web/static/images/emoji/shaved_ice.png
Binary files differ
diff --git a/web/static/images/emoji/sheep.png b/web/static/images/emoji/sheep.png
new file mode 100755
index 000000000..c7277d289
--- /dev/null
+++ b/web/static/images/emoji/sheep.png
Binary files differ
diff --git a/web/static/images/emoji/shell.png b/web/static/images/emoji/shell.png
new file mode 100755
index 000000000..3145b5649
--- /dev/null
+++ b/web/static/images/emoji/shell.png
Binary files differ
diff --git a/web/static/images/emoji/ship.png b/web/static/images/emoji/ship.png
new file mode 100755
index 000000000..5d2d8b602
--- /dev/null
+++ b/web/static/images/emoji/ship.png
Binary files differ
diff --git a/web/static/images/emoji/shipit.png b/web/static/images/emoji/shipit.png
new file mode 100755
index 000000000..a58a47f62
--- /dev/null
+++ b/web/static/images/emoji/shipit.png
Binary files differ
diff --git a/web/static/images/emoji/shirt.png b/web/static/images/emoji/shirt.png
new file mode 100755
index 000000000..297a6d63e
--- /dev/null
+++ b/web/static/images/emoji/shirt.png
Binary files differ
diff --git a/web/static/images/emoji/shit.png b/web/static/images/emoji/shit.png
new file mode 100755
index 000000000..73a4dc840
--- /dev/null
+++ b/web/static/images/emoji/shit.png
Binary files differ
diff --git a/web/static/images/emoji/shoe.png b/web/static/images/emoji/shoe.png
new file mode 100755
index 000000000..45b82e61c
--- /dev/null
+++ b/web/static/images/emoji/shoe.png
Binary files differ
diff --git a/web/static/images/emoji/shower.png b/web/static/images/emoji/shower.png
new file mode 100755
index 000000000..0d72ab86b
--- /dev/null
+++ b/web/static/images/emoji/shower.png
Binary files differ
diff --git a/web/static/images/emoji/signal_strength.png b/web/static/images/emoji/signal_strength.png
new file mode 100755
index 000000000..a4bd23ebf
--- /dev/null
+++ b/web/static/images/emoji/signal_strength.png
Binary files differ
diff --git a/web/static/images/emoji/six.png b/web/static/images/emoji/six.png
new file mode 100755
index 000000000..568805565
--- /dev/null
+++ b/web/static/images/emoji/six.png
Binary files differ
diff --git a/web/static/images/emoji/six_pointed_star.png b/web/static/images/emoji/six_pointed_star.png
new file mode 100755
index 000000000..c11af14c8
--- /dev/null
+++ b/web/static/images/emoji/six_pointed_star.png
Binary files differ
diff --git a/web/static/images/emoji/ski.png b/web/static/images/emoji/ski.png
new file mode 100755
index 000000000..98f5cb0f4
--- /dev/null
+++ b/web/static/images/emoji/ski.png
Binary files differ
diff --git a/web/static/images/emoji/skull.png b/web/static/images/emoji/skull.png
new file mode 100755
index 000000000..bd4ee3829
--- /dev/null
+++ b/web/static/images/emoji/skull.png
Binary files differ
diff --git a/web/static/images/emoji/sleeping.png b/web/static/images/emoji/sleeping.png
new file mode 100755
index 000000000..093b85236
--- /dev/null
+++ b/web/static/images/emoji/sleeping.png
Binary files differ
diff --git a/web/static/images/emoji/sleepy.png b/web/static/images/emoji/sleepy.png
new file mode 100755
index 000000000..df4f55efd
--- /dev/null
+++ b/web/static/images/emoji/sleepy.png
Binary files differ
diff --git a/web/static/images/emoji/slot_machine.png b/web/static/images/emoji/slot_machine.png
new file mode 100755
index 000000000..26f114830
--- /dev/null
+++ b/web/static/images/emoji/slot_machine.png
Binary files differ
diff --git a/web/static/images/emoji/small_blue_diamond.png b/web/static/images/emoji/small_blue_diamond.png
new file mode 100755
index 000000000..8cd49205f
--- /dev/null
+++ b/web/static/images/emoji/small_blue_diamond.png
Binary files differ
diff --git a/web/static/images/emoji/small_orange_diamond.png b/web/static/images/emoji/small_orange_diamond.png
new file mode 100755
index 000000000..04941d37b
--- /dev/null
+++ b/web/static/images/emoji/small_orange_diamond.png
Binary files differ
diff --git a/web/static/images/emoji/small_red_triangle.png b/web/static/images/emoji/small_red_triangle.png
new file mode 100755
index 000000000..8c4428da8
--- /dev/null
+++ b/web/static/images/emoji/small_red_triangle.png
Binary files differ
diff --git a/web/static/images/emoji/small_red_triangle_down.png b/web/static/images/emoji/small_red_triangle_down.png
new file mode 100755
index 000000000..94832f060
--- /dev/null
+++ b/web/static/images/emoji/small_red_triangle_down.png
Binary files differ
diff --git a/web/static/images/emoji/smile.png b/web/static/images/emoji/smile.png
new file mode 100755
index 000000000..81a839689
--- /dev/null
+++ b/web/static/images/emoji/smile.png
Binary files differ
diff --git a/web/static/images/emoji/smile_cat.png b/web/static/images/emoji/smile_cat.png
new file mode 100755
index 000000000..ad333ba3b
--- /dev/null
+++ b/web/static/images/emoji/smile_cat.png
Binary files differ
diff --git a/web/static/images/emoji/smiley.png b/web/static/images/emoji/smiley.png
new file mode 100755
index 000000000..77b581d68
--- /dev/null
+++ b/web/static/images/emoji/smiley.png
Binary files differ
diff --git a/web/static/images/emoji/smiley_cat.png b/web/static/images/emoji/smiley_cat.png
new file mode 100755
index 000000000..dbf1b0276
--- /dev/null
+++ b/web/static/images/emoji/smiley_cat.png
Binary files differ
diff --git a/web/static/images/emoji/smiling_imp.png b/web/static/images/emoji/smiling_imp.png
new file mode 100755
index 000000000..d90404930
--- /dev/null
+++ b/web/static/images/emoji/smiling_imp.png
Binary files differ
diff --git a/web/static/images/emoji/smirk.png b/web/static/images/emoji/smirk.png
new file mode 100755
index 000000000..bc6e5082c
--- /dev/null
+++ b/web/static/images/emoji/smirk.png
Binary files differ
diff --git a/web/static/images/emoji/smirk_cat.png b/web/static/images/emoji/smirk_cat.png
new file mode 100755
index 000000000..351565e24
--- /dev/null
+++ b/web/static/images/emoji/smirk_cat.png
Binary files differ
diff --git a/web/static/images/emoji/smoking.png b/web/static/images/emoji/smoking.png
new file mode 100755
index 000000000..4aad6cbd7
--- /dev/null
+++ b/web/static/images/emoji/smoking.png
Binary files differ
diff --git a/web/static/images/emoji/snail.png b/web/static/images/emoji/snail.png
new file mode 100755
index 000000000..e75e69a84
--- /dev/null
+++ b/web/static/images/emoji/snail.png
Binary files differ
diff --git a/web/static/images/emoji/snake.png b/web/static/images/emoji/snake.png
new file mode 100755
index 000000000..ef58933e2
--- /dev/null
+++ b/web/static/images/emoji/snake.png
Binary files differ
diff --git a/web/static/images/emoji/snowboarder.png b/web/static/images/emoji/snowboarder.png
new file mode 100755
index 000000000..aeda5c8d8
--- /dev/null
+++ b/web/static/images/emoji/snowboarder.png
Binary files differ
diff --git a/web/static/images/emoji/snowflake.png b/web/static/images/emoji/snowflake.png
new file mode 100755
index 000000000..54b68ff4f
--- /dev/null
+++ b/web/static/images/emoji/snowflake.png
Binary files differ
diff --git a/web/static/images/emoji/snowman.png b/web/static/images/emoji/snowman.png
new file mode 100755
index 000000000..a97902e53
--- /dev/null
+++ b/web/static/images/emoji/snowman.png
Binary files differ
diff --git a/web/static/images/emoji/sob.png b/web/static/images/emoji/sob.png
new file mode 100755
index 000000000..1561df92e
--- /dev/null
+++ b/web/static/images/emoji/sob.png
Binary files differ
diff --git a/web/static/images/emoji/soccer.png b/web/static/images/emoji/soccer.png
new file mode 100755
index 000000000..1e118b5b1
--- /dev/null
+++ b/web/static/images/emoji/soccer.png
Binary files differ
diff --git a/web/static/images/emoji/soon.png b/web/static/images/emoji/soon.png
new file mode 100755
index 000000000..2cf46df25
--- /dev/null
+++ b/web/static/images/emoji/soon.png
Binary files differ
diff --git a/web/static/images/emoji/sos.png b/web/static/images/emoji/sos.png
new file mode 100755
index 000000000..e3e16ef73
--- /dev/null
+++ b/web/static/images/emoji/sos.png
Binary files differ
diff --git a/web/static/images/emoji/sound.png b/web/static/images/emoji/sound.png
new file mode 100755
index 000000000..6aa4dbff4
--- /dev/null
+++ b/web/static/images/emoji/sound.png
Binary files differ
diff --git a/web/static/images/emoji/space_invader.png b/web/static/images/emoji/space_invader.png
new file mode 100755
index 000000000..384049167
--- /dev/null
+++ b/web/static/images/emoji/space_invader.png
Binary files differ
diff --git a/web/static/images/emoji/spades.png b/web/static/images/emoji/spades.png
new file mode 100755
index 000000000..133a1aba8
--- /dev/null
+++ b/web/static/images/emoji/spades.png
Binary files differ
diff --git a/web/static/images/emoji/spaghetti.png b/web/static/images/emoji/spaghetti.png
new file mode 100755
index 000000000..08de243f5
--- /dev/null
+++ b/web/static/images/emoji/spaghetti.png
Binary files differ
diff --git a/web/static/images/emoji/sparkle.png b/web/static/images/emoji/sparkle.png
new file mode 100755
index 000000000..23a68ceb2
--- /dev/null
+++ b/web/static/images/emoji/sparkle.png
Binary files differ
diff --git a/web/static/images/emoji/sparkler.png b/web/static/images/emoji/sparkler.png
new file mode 100755
index 000000000..4aabd7e0e
--- /dev/null
+++ b/web/static/images/emoji/sparkler.png
Binary files differ
diff --git a/web/static/images/emoji/sparkles.png b/web/static/images/emoji/sparkles.png
new file mode 100755
index 000000000..51307bcfc
--- /dev/null
+++ b/web/static/images/emoji/sparkles.png
Binary files differ
diff --git a/web/static/images/emoji/sparkling_heart.png b/web/static/images/emoji/sparkling_heart.png
new file mode 100755
index 000000000..64ac06663
--- /dev/null
+++ b/web/static/images/emoji/sparkling_heart.png
Binary files differ
diff --git a/web/static/images/emoji/speak_no_evil.png b/web/static/images/emoji/speak_no_evil.png
new file mode 100755
index 000000000..87944c4de
--- /dev/null
+++ b/web/static/images/emoji/speak_no_evil.png
Binary files differ
diff --git a/web/static/images/emoji/speaker.png b/web/static/images/emoji/speaker.png
new file mode 100755
index 000000000..470476e18
--- /dev/null
+++ b/web/static/images/emoji/speaker.png
Binary files differ
diff --git a/web/static/images/emoji/speech_balloon.png b/web/static/images/emoji/speech_balloon.png
new file mode 100755
index 000000000..2896c2788
--- /dev/null
+++ b/web/static/images/emoji/speech_balloon.png
Binary files differ
diff --git a/web/static/images/emoji/speedboat.png b/web/static/images/emoji/speedboat.png
new file mode 100755
index 000000000..da6689b3b
--- /dev/null
+++ b/web/static/images/emoji/speedboat.png
Binary files differ
diff --git a/web/static/images/emoji/squirrel.png b/web/static/images/emoji/squirrel.png
new file mode 100755
index 000000000..a58a47f62
--- /dev/null
+++ b/web/static/images/emoji/squirrel.png
Binary files differ
diff --git a/web/static/images/emoji/star.png b/web/static/images/emoji/star.png
new file mode 100755
index 000000000..1bfddc862
--- /dev/null
+++ b/web/static/images/emoji/star.png
Binary files differ
diff --git a/web/static/images/emoji/star2.png b/web/static/images/emoji/star2.png
new file mode 100755
index 000000000..8b40ff4c8
--- /dev/null
+++ b/web/static/images/emoji/star2.png
Binary files differ
diff --git a/web/static/images/emoji/stars.png b/web/static/images/emoji/stars.png
new file mode 100755
index 000000000..097a84241
--- /dev/null
+++ b/web/static/images/emoji/stars.png
Binary files differ
diff --git a/web/static/images/emoji/station.png b/web/static/images/emoji/station.png
new file mode 100755
index 000000000..e77daa8a7
--- /dev/null
+++ b/web/static/images/emoji/station.png
Binary files differ
diff --git a/web/static/images/emoji/statue_of_liberty.png b/web/static/images/emoji/statue_of_liberty.png
new file mode 100755
index 000000000..9ad902806
--- /dev/null
+++ b/web/static/images/emoji/statue_of_liberty.png
Binary files differ
diff --git a/web/static/images/emoji/steam_locomotive.png b/web/static/images/emoji/steam_locomotive.png
new file mode 100755
index 000000000..549507766
--- /dev/null
+++ b/web/static/images/emoji/steam_locomotive.png
Binary files differ
diff --git a/web/static/images/emoji/stew.png b/web/static/images/emoji/stew.png
new file mode 100755
index 000000000..e9687f9ec
--- /dev/null
+++ b/web/static/images/emoji/stew.png
Binary files differ
diff --git a/web/static/images/emoji/straight_ruler.png b/web/static/images/emoji/straight_ruler.png
new file mode 100755
index 000000000..d96658ea1
--- /dev/null
+++ b/web/static/images/emoji/straight_ruler.png
Binary files differ
diff --git a/web/static/images/emoji/strawberry.png b/web/static/images/emoji/strawberry.png
new file mode 100755
index 000000000..13eb827ab
--- /dev/null
+++ b/web/static/images/emoji/strawberry.png
Binary files differ
diff --git a/web/static/images/emoji/stuck_out_tongue.png b/web/static/images/emoji/stuck_out_tongue.png
new file mode 100755
index 000000000..fa7b58e23
--- /dev/null
+++ b/web/static/images/emoji/stuck_out_tongue.png
Binary files differ
diff --git a/web/static/images/emoji/stuck_out_tongue_closed_eyes.png b/web/static/images/emoji/stuck_out_tongue_closed_eyes.png
new file mode 100755
index 000000000..333716ee1
--- /dev/null
+++ b/web/static/images/emoji/stuck_out_tongue_closed_eyes.png
Binary files differ
diff --git a/web/static/images/emoji/stuck_out_tongue_winking_eye.png b/web/static/images/emoji/stuck_out_tongue_winking_eye.png
new file mode 100755
index 000000000..6ae9d497d
--- /dev/null
+++ b/web/static/images/emoji/stuck_out_tongue_winking_eye.png
Binary files differ
diff --git a/web/static/images/emoji/sun_with_face.png b/web/static/images/emoji/sun_with_face.png
new file mode 100755
index 000000000..ee276636f
--- /dev/null
+++ b/web/static/images/emoji/sun_with_face.png
Binary files differ
diff --git a/web/static/images/emoji/sunflower.png b/web/static/images/emoji/sunflower.png
new file mode 100755
index 000000000..d9bad194a
--- /dev/null
+++ b/web/static/images/emoji/sunflower.png
Binary files differ
diff --git a/web/static/images/emoji/sunglasses.png b/web/static/images/emoji/sunglasses.png
new file mode 100755
index 000000000..f2e524787
--- /dev/null
+++ b/web/static/images/emoji/sunglasses.png
Binary files differ
diff --git a/web/static/images/emoji/sunny.png b/web/static/images/emoji/sunny.png
new file mode 100755
index 000000000..d23c095e0
--- /dev/null
+++ b/web/static/images/emoji/sunny.png
Binary files differ
diff --git a/web/static/images/emoji/sunrise.png b/web/static/images/emoji/sunrise.png
new file mode 100755
index 000000000..ec58dcc94
--- /dev/null
+++ b/web/static/images/emoji/sunrise.png
Binary files differ
diff --git a/web/static/images/emoji/sunrise_over_mountains.png b/web/static/images/emoji/sunrise_over_mountains.png
new file mode 100755
index 000000000..ebc3db146
--- /dev/null
+++ b/web/static/images/emoji/sunrise_over_mountains.png
Binary files differ
diff --git a/web/static/images/emoji/surfer.png b/web/static/images/emoji/surfer.png
new file mode 100755
index 000000000..b067e8cb3
--- /dev/null
+++ b/web/static/images/emoji/surfer.png
Binary files differ
diff --git a/web/static/images/emoji/sushi.png b/web/static/images/emoji/sushi.png
new file mode 100755
index 000000000..0d179bd97
--- /dev/null
+++ b/web/static/images/emoji/sushi.png
Binary files differ
diff --git a/web/static/images/emoji/suspect.png b/web/static/images/emoji/suspect.png
new file mode 100755
index 000000000..58e8921c0
--- /dev/null
+++ b/web/static/images/emoji/suspect.png
Binary files differ
diff --git a/web/static/images/emoji/suspension_railway.png b/web/static/images/emoji/suspension_railway.png
new file mode 100755
index 000000000..aaa45f61f
--- /dev/null
+++ b/web/static/images/emoji/suspension_railway.png
Binary files differ
diff --git a/web/static/images/emoji/sweat.png b/web/static/images/emoji/sweat.png
new file mode 100755
index 000000000..e894b7699
--- /dev/null
+++ b/web/static/images/emoji/sweat.png
Binary files differ
diff --git a/web/static/images/emoji/sweat_drops.png b/web/static/images/emoji/sweat_drops.png
new file mode 100755
index 000000000..a83b3e960
--- /dev/null
+++ b/web/static/images/emoji/sweat_drops.png
Binary files differ
diff --git a/web/static/images/emoji/sweat_smile.png b/web/static/images/emoji/sweat_smile.png
new file mode 100755
index 000000000..3903f717f
--- /dev/null
+++ b/web/static/images/emoji/sweat_smile.png
Binary files differ
diff --git a/web/static/images/emoji/sweet_potato.png b/web/static/images/emoji/sweet_potato.png
new file mode 100755
index 000000000..cde7880a1
--- /dev/null
+++ b/web/static/images/emoji/sweet_potato.png
Binary files differ
diff --git a/web/static/images/emoji/swimmer.png b/web/static/images/emoji/swimmer.png
new file mode 100755
index 000000000..d3878a065
--- /dev/null
+++ b/web/static/images/emoji/swimmer.png
Binary files differ
diff --git a/web/static/images/emoji/symbols.png b/web/static/images/emoji/symbols.png
new file mode 100755
index 000000000..16bc1da92
--- /dev/null
+++ b/web/static/images/emoji/symbols.png
Binary files differ
diff --git a/web/static/images/emoji/syringe.png b/web/static/images/emoji/syringe.png
new file mode 100755
index 000000000..36aa8fed5
--- /dev/null
+++ b/web/static/images/emoji/syringe.png
Binary files differ
diff --git a/web/static/images/emoji/tada.png b/web/static/images/emoji/tada.png
new file mode 100755
index 000000000..7411b5266
--- /dev/null
+++ b/web/static/images/emoji/tada.png
Binary files differ
diff --git a/web/static/images/emoji/tanabata_tree.png b/web/static/images/emoji/tanabata_tree.png
new file mode 100755
index 000000000..6dea4b2d4
--- /dev/null
+++ b/web/static/images/emoji/tanabata_tree.png
Binary files differ
diff --git a/web/static/images/emoji/tangerine.png b/web/static/images/emoji/tangerine.png
new file mode 100755
index 000000000..fc9d4f82a
--- /dev/null
+++ b/web/static/images/emoji/tangerine.png
Binary files differ
diff --git a/web/static/images/emoji/taurus.png b/web/static/images/emoji/taurus.png
new file mode 100755
index 000000000..6af582f69
--- /dev/null
+++ b/web/static/images/emoji/taurus.png
Binary files differ
diff --git a/web/static/images/emoji/taxi.png b/web/static/images/emoji/taxi.png
new file mode 100755
index 000000000..60a50d365
--- /dev/null
+++ b/web/static/images/emoji/taxi.png
Binary files differ
diff --git a/web/static/images/emoji/tea.png b/web/static/images/emoji/tea.png
new file mode 100755
index 000000000..3ece0b708
--- /dev/null
+++ b/web/static/images/emoji/tea.png
Binary files differ
diff --git a/web/static/images/emoji/telephone.png b/web/static/images/emoji/telephone.png
new file mode 100755
index 000000000..87d2559b5
--- /dev/null
+++ b/web/static/images/emoji/telephone.png
Binary files differ
diff --git a/web/static/images/emoji/telephone_receiver.png b/web/static/images/emoji/telephone_receiver.png
new file mode 100755
index 000000000..36e21e012
--- /dev/null
+++ b/web/static/images/emoji/telephone_receiver.png
Binary files differ
diff --git a/web/static/images/emoji/telescope.png b/web/static/images/emoji/telescope.png
new file mode 100755
index 000000000..98e57558a
--- /dev/null
+++ b/web/static/images/emoji/telescope.png
Binary files differ
diff --git a/web/static/images/emoji/tennis.png b/web/static/images/emoji/tennis.png
new file mode 100755
index 000000000..278d904ee
--- /dev/null
+++ b/web/static/images/emoji/tennis.png
Binary files differ
diff --git a/web/static/images/emoji/tent.png b/web/static/images/emoji/tent.png
new file mode 100755
index 000000000..5c0d20e48
--- /dev/null
+++ b/web/static/images/emoji/tent.png
Binary files differ
diff --git a/web/static/images/emoji/thought_balloon.png b/web/static/images/emoji/thought_balloon.png
new file mode 100755
index 000000000..febe30d05
--- /dev/null
+++ b/web/static/images/emoji/thought_balloon.png
Binary files differ
diff --git a/web/static/images/emoji/three.png b/web/static/images/emoji/three.png
new file mode 100755
index 000000000..55644c990
--- /dev/null
+++ b/web/static/images/emoji/three.png
Binary files differ
diff --git a/web/static/images/emoji/thumbsdown.png b/web/static/images/emoji/thumbsdown.png
new file mode 100755
index 000000000..41c6b825d
--- /dev/null
+++ b/web/static/images/emoji/thumbsdown.png
Binary files differ
diff --git a/web/static/images/emoji/thumbsup.png b/web/static/images/emoji/thumbsup.png
new file mode 100755
index 000000000..81786c1d8
--- /dev/null
+++ b/web/static/images/emoji/thumbsup.png
Binary files differ
diff --git a/web/static/images/emoji/ticket.png b/web/static/images/emoji/ticket.png
new file mode 100755
index 000000000..cdacf1a70
--- /dev/null
+++ b/web/static/images/emoji/ticket.png
Binary files differ
diff --git a/web/static/images/emoji/tiger.png b/web/static/images/emoji/tiger.png
new file mode 100755
index 000000000..d6cc84a3b
--- /dev/null
+++ b/web/static/images/emoji/tiger.png
Binary files differ
diff --git a/web/static/images/emoji/tiger2.png b/web/static/images/emoji/tiger2.png
new file mode 100755
index 000000000..b0c7d8dc3
--- /dev/null
+++ b/web/static/images/emoji/tiger2.png
Binary files differ
diff --git a/web/static/images/emoji/tired_face.png b/web/static/images/emoji/tired_face.png
new file mode 100755
index 000000000..77b783453
--- /dev/null
+++ b/web/static/images/emoji/tired_face.png
Binary files differ
diff --git a/web/static/images/emoji/tm.png b/web/static/images/emoji/tm.png
new file mode 100755
index 000000000..c7dec75a3
--- /dev/null
+++ b/web/static/images/emoji/tm.png
Binary files differ
diff --git a/web/static/images/emoji/toilet.png b/web/static/images/emoji/toilet.png
new file mode 100755
index 000000000..e5cc4119a
--- /dev/null
+++ b/web/static/images/emoji/toilet.png
Binary files differ
diff --git a/web/static/images/emoji/tokyo_tower.png b/web/static/images/emoji/tokyo_tower.png
new file mode 100755
index 000000000..e1cbd7a3c
--- /dev/null
+++ b/web/static/images/emoji/tokyo_tower.png
Binary files differ
diff --git a/web/static/images/emoji/tomato.png b/web/static/images/emoji/tomato.png
new file mode 100755
index 000000000..a129700bb
--- /dev/null
+++ b/web/static/images/emoji/tomato.png
Binary files differ
diff --git a/web/static/images/emoji/tongue.png b/web/static/images/emoji/tongue.png
new file mode 100755
index 000000000..b0bab1207
--- /dev/null
+++ b/web/static/images/emoji/tongue.png
Binary files differ
diff --git a/web/static/images/emoji/top.png b/web/static/images/emoji/top.png
new file mode 100755
index 000000000..5aa4dd442
--- /dev/null
+++ b/web/static/images/emoji/top.png
Binary files differ
diff --git a/web/static/images/emoji/tophat.png b/web/static/images/emoji/tophat.png
new file mode 100755
index 000000000..7d27134d6
--- /dev/null
+++ b/web/static/images/emoji/tophat.png
Binary files differ
diff --git a/web/static/images/emoji/tractor.png b/web/static/images/emoji/tractor.png
new file mode 100755
index 000000000..058fd3eda
--- /dev/null
+++ b/web/static/images/emoji/tractor.png
Binary files differ
diff --git a/web/static/images/emoji/traffic_light.png b/web/static/images/emoji/traffic_light.png
new file mode 100755
index 000000000..1facb276c
--- /dev/null
+++ b/web/static/images/emoji/traffic_light.png
Binary files differ
diff --git a/web/static/images/emoji/train.png b/web/static/images/emoji/train.png
new file mode 100755
index 000000000..3202d80ea
--- /dev/null
+++ b/web/static/images/emoji/train.png
Binary files differ
diff --git a/web/static/images/emoji/train2.png b/web/static/images/emoji/train2.png
new file mode 100755
index 000000000..9c0d3ab64
--- /dev/null
+++ b/web/static/images/emoji/train2.png
Binary files differ
diff --git a/web/static/images/emoji/tram.png b/web/static/images/emoji/tram.png
new file mode 100755
index 000000000..5eb29fb71
--- /dev/null
+++ b/web/static/images/emoji/tram.png
Binary files differ
diff --git a/web/static/images/emoji/triangular_flag_on_post.png b/web/static/images/emoji/triangular_flag_on_post.png
new file mode 100755
index 000000000..f9a3f32d7
--- /dev/null
+++ b/web/static/images/emoji/triangular_flag_on_post.png
Binary files differ
diff --git a/web/static/images/emoji/triangular_ruler.png b/web/static/images/emoji/triangular_ruler.png
new file mode 100755
index 000000000..383677cb7
--- /dev/null
+++ b/web/static/images/emoji/triangular_ruler.png
Binary files differ
diff --git a/web/static/images/emoji/trident.png b/web/static/images/emoji/trident.png
new file mode 100755
index 000000000..d79a7b4cc
--- /dev/null
+++ b/web/static/images/emoji/trident.png
Binary files differ
diff --git a/web/static/images/emoji/triumph.png b/web/static/images/emoji/triumph.png
new file mode 100755
index 000000000..92f93bd10
--- /dev/null
+++ b/web/static/images/emoji/triumph.png
Binary files differ
diff --git a/web/static/images/emoji/trolleybus.png b/web/static/images/emoji/trolleybus.png
new file mode 100755
index 000000000..b9740a53f
--- /dev/null
+++ b/web/static/images/emoji/trolleybus.png
Binary files differ
diff --git a/web/static/images/emoji/trollface.png b/web/static/images/emoji/trollface.png
new file mode 100755
index 000000000..119d77e73
--- /dev/null
+++ b/web/static/images/emoji/trollface.png
Binary files differ
diff --git a/web/static/images/emoji/trophy.png b/web/static/images/emoji/trophy.png
new file mode 100755
index 000000000..95d3b63f5
--- /dev/null
+++ b/web/static/images/emoji/trophy.png
Binary files differ
diff --git a/web/static/images/emoji/tropical_drink.png b/web/static/images/emoji/tropical_drink.png
new file mode 100755
index 000000000..55ca9eeda
--- /dev/null
+++ b/web/static/images/emoji/tropical_drink.png
Binary files differ
diff --git a/web/static/images/emoji/tropical_fish.png b/web/static/images/emoji/tropical_fish.png
new file mode 100755
index 000000000..a6d734987
--- /dev/null
+++ b/web/static/images/emoji/tropical_fish.png
Binary files differ
diff --git a/web/static/images/emoji/truck.png b/web/static/images/emoji/truck.png
new file mode 100755
index 000000000..3f25ba1f9
--- /dev/null
+++ b/web/static/images/emoji/truck.png
Binary files differ
diff --git a/web/static/images/emoji/trumpet.png b/web/static/images/emoji/trumpet.png
new file mode 100755
index 000000000..c84cfb13e
--- /dev/null
+++ b/web/static/images/emoji/trumpet.png
Binary files differ
diff --git a/web/static/images/emoji/tshirt.png b/web/static/images/emoji/tshirt.png
new file mode 100755
index 000000000..297a6d63e
--- /dev/null
+++ b/web/static/images/emoji/tshirt.png
Binary files differ
diff --git a/web/static/images/emoji/tulip.png b/web/static/images/emoji/tulip.png
new file mode 100755
index 000000000..b3ee1102a
--- /dev/null
+++ b/web/static/images/emoji/tulip.png
Binary files differ
diff --git a/web/static/images/emoji/turtle.png b/web/static/images/emoji/turtle.png
new file mode 100755
index 000000000..04d1d9684
--- /dev/null
+++ b/web/static/images/emoji/turtle.png
Binary files differ
diff --git a/web/static/images/emoji/tv.png b/web/static/images/emoji/tv.png
new file mode 100755
index 000000000..803dc3d41
--- /dev/null
+++ b/web/static/images/emoji/tv.png
Binary files differ
diff --git a/web/static/images/emoji/twisted_rightwards_arrows.png b/web/static/images/emoji/twisted_rightwards_arrows.png
new file mode 100755
index 000000000..25cde18b2
--- /dev/null
+++ b/web/static/images/emoji/twisted_rightwards_arrows.png
Binary files differ
diff --git a/web/static/images/emoji/two.png b/web/static/images/emoji/two.png
new file mode 100755
index 000000000..c191f8a32
--- /dev/null
+++ b/web/static/images/emoji/two.png
Binary files differ
diff --git a/web/static/images/emoji/two_hearts.png b/web/static/images/emoji/two_hearts.png
new file mode 100755
index 000000000..b189e9aea
--- /dev/null
+++ b/web/static/images/emoji/two_hearts.png
Binary files differ
diff --git a/web/static/images/emoji/two_men_holding_hands.png b/web/static/images/emoji/two_men_holding_hands.png
new file mode 100755
index 000000000..d1099f21f
--- /dev/null
+++ b/web/static/images/emoji/two_men_holding_hands.png
Binary files differ
diff --git a/web/static/images/emoji/two_women_holding_hands.png b/web/static/images/emoji/two_women_holding_hands.png
new file mode 100755
index 000000000..619646c4e
--- /dev/null
+++ b/web/static/images/emoji/two_women_holding_hands.png
Binary files differ
diff --git a/web/static/images/emoji/u5272.png b/web/static/images/emoji/u5272.png
new file mode 100755
index 000000000..2148253fc
--- /dev/null
+++ b/web/static/images/emoji/u5272.png
Binary files differ
diff --git a/web/static/images/emoji/u5408.png b/web/static/images/emoji/u5408.png
new file mode 100755
index 000000000..03ab0d874
--- /dev/null
+++ b/web/static/images/emoji/u5408.png
Binary files differ
diff --git a/web/static/images/emoji/u55b6.png b/web/static/images/emoji/u55b6.png
new file mode 100755
index 000000000..ba946d3f3
--- /dev/null
+++ b/web/static/images/emoji/u55b6.png
Binary files differ
diff --git a/web/static/images/emoji/u6307.png b/web/static/images/emoji/u6307.png
new file mode 100755
index 000000000..6557f5672
--- /dev/null
+++ b/web/static/images/emoji/u6307.png
Binary files differ
diff --git a/web/static/images/emoji/u6708.png b/web/static/images/emoji/u6708.png
new file mode 100755
index 000000000..e4dfe5aa7
--- /dev/null
+++ b/web/static/images/emoji/u6708.png
Binary files differ
diff --git a/web/static/images/emoji/u6709.png b/web/static/images/emoji/u6709.png
new file mode 100755
index 000000000..cd8fb3f62
--- /dev/null
+++ b/web/static/images/emoji/u6709.png
Binary files differ
diff --git a/web/static/images/emoji/u6e80.png b/web/static/images/emoji/u6e80.png
new file mode 100755
index 000000000..5df1cb878
--- /dev/null
+++ b/web/static/images/emoji/u6e80.png
Binary files differ
diff --git a/web/static/images/emoji/u7121.png b/web/static/images/emoji/u7121.png
new file mode 100755
index 000000000..25f694ed3
--- /dev/null
+++ b/web/static/images/emoji/u7121.png
Binary files differ
diff --git a/web/static/images/emoji/u7533.png b/web/static/images/emoji/u7533.png
new file mode 100755
index 000000000..fc4a9901b
--- /dev/null
+++ b/web/static/images/emoji/u7533.png
Binary files differ
diff --git a/web/static/images/emoji/u7981.png b/web/static/images/emoji/u7981.png
new file mode 100755
index 000000000..f550a573d
--- /dev/null
+++ b/web/static/images/emoji/u7981.png
Binary files differ
diff --git a/web/static/images/emoji/u7a7a.png b/web/static/images/emoji/u7a7a.png
new file mode 100755
index 000000000..c05f5cff7
--- /dev/null
+++ b/web/static/images/emoji/u7a7a.png
Binary files differ
diff --git a/web/static/images/emoji/uk.png b/web/static/images/emoji/uk.png
new file mode 100755
index 000000000..2a62c7a08
--- /dev/null
+++ b/web/static/images/emoji/uk.png
Binary files differ
diff --git a/web/static/images/emoji/umbrella.png b/web/static/images/emoji/umbrella.png
new file mode 100755
index 000000000..1db722fa6
--- /dev/null
+++ b/web/static/images/emoji/umbrella.png
Binary files differ
diff --git a/web/static/images/emoji/unamused.png b/web/static/images/emoji/unamused.png
new file mode 100755
index 000000000..3722e6f57
--- /dev/null
+++ b/web/static/images/emoji/unamused.png
Binary files differ
diff --git a/web/static/images/emoji/underage.png b/web/static/images/emoji/underage.png
new file mode 100755
index 000000000..a789b3c62
--- /dev/null
+++ b/web/static/images/emoji/underage.png
Binary files differ
diff --git a/web/static/images/emoji/unlock.png b/web/static/images/emoji/unlock.png
new file mode 100755
index 000000000..22b429cd0
--- /dev/null
+++ b/web/static/images/emoji/unlock.png
Binary files differ
diff --git a/web/static/images/emoji/up.png b/web/static/images/emoji/up.png
new file mode 100755
index 000000000..829219a86
--- /dev/null
+++ b/web/static/images/emoji/up.png
Binary files differ
diff --git a/web/static/images/emoji/us.png b/web/static/images/emoji/us.png
new file mode 100755
index 000000000..38137669a
--- /dev/null
+++ b/web/static/images/emoji/us.png
Binary files differ
diff --git a/web/static/images/emoji/v.png b/web/static/images/emoji/v.png
new file mode 100755
index 000000000..f61267c28
--- /dev/null
+++ b/web/static/images/emoji/v.png
Binary files differ
diff --git a/web/static/images/emoji/vertical_traffic_light.png b/web/static/images/emoji/vertical_traffic_light.png
new file mode 100755
index 000000000..7a5ba35f0
--- /dev/null
+++ b/web/static/images/emoji/vertical_traffic_light.png
Binary files differ
diff --git a/web/static/images/emoji/vhs.png b/web/static/images/emoji/vhs.png
new file mode 100755
index 000000000..881081c17
--- /dev/null
+++ b/web/static/images/emoji/vhs.png
Binary files differ
diff --git a/web/static/images/emoji/vibration_mode.png b/web/static/images/emoji/vibration_mode.png
new file mode 100755
index 000000000..a716e96c6
--- /dev/null
+++ b/web/static/images/emoji/vibration_mode.png
Binary files differ
diff --git a/web/static/images/emoji/video_camera.png b/web/static/images/emoji/video_camera.png
new file mode 100755
index 000000000..274cecdd6
--- /dev/null
+++ b/web/static/images/emoji/video_camera.png
Binary files differ
diff --git a/web/static/images/emoji/video_game.png b/web/static/images/emoji/video_game.png
new file mode 100755
index 000000000..e265a3bd8
--- /dev/null
+++ b/web/static/images/emoji/video_game.png
Binary files differ
diff --git a/web/static/images/emoji/violin.png b/web/static/images/emoji/violin.png
new file mode 100755
index 000000000..69347b545
--- /dev/null
+++ b/web/static/images/emoji/violin.png
Binary files differ
diff --git a/web/static/images/emoji/virgo.png b/web/static/images/emoji/virgo.png
new file mode 100755
index 000000000..72e1763f5
--- /dev/null
+++ b/web/static/images/emoji/virgo.png
Binary files differ
diff --git a/web/static/images/emoji/volcano.png b/web/static/images/emoji/volcano.png
new file mode 100755
index 000000000..9b434539b
--- /dev/null
+++ b/web/static/images/emoji/volcano.png
Binary files differ
diff --git a/web/static/images/emoji/vs.png b/web/static/images/emoji/vs.png
new file mode 100755
index 000000000..863638850
--- /dev/null
+++ b/web/static/images/emoji/vs.png
Binary files differ
diff --git a/web/static/images/emoji/walking.png b/web/static/images/emoji/walking.png
new file mode 100755
index 000000000..52bc0381c
--- /dev/null
+++ b/web/static/images/emoji/walking.png
Binary files differ
diff --git a/web/static/images/emoji/waning_crescent_moon.png b/web/static/images/emoji/waning_crescent_moon.png
new file mode 100755
index 000000000..30387780f
--- /dev/null
+++ b/web/static/images/emoji/waning_crescent_moon.png
Binary files differ
diff --git a/web/static/images/emoji/waning_gibbous_moon.png b/web/static/images/emoji/waning_gibbous_moon.png
new file mode 100755
index 000000000..510099070
--- /dev/null
+++ b/web/static/images/emoji/waning_gibbous_moon.png
Binary files differ
diff --git a/web/static/images/emoji/warning.png b/web/static/images/emoji/warning.png
new file mode 100755
index 000000000..db6f96f02
--- /dev/null
+++ b/web/static/images/emoji/warning.png
Binary files differ
diff --git a/web/static/images/emoji/watch.png b/web/static/images/emoji/watch.png
new file mode 100755
index 000000000..d503bb87c
--- /dev/null
+++ b/web/static/images/emoji/watch.png
Binary files differ
diff --git a/web/static/images/emoji/water_buffalo.png b/web/static/images/emoji/water_buffalo.png
new file mode 100755
index 000000000..3bcde3edd
--- /dev/null
+++ b/web/static/images/emoji/water_buffalo.png
Binary files differ
diff --git a/web/static/images/emoji/watermelon.png b/web/static/images/emoji/watermelon.png
new file mode 100755
index 000000000..fc212be78
--- /dev/null
+++ b/web/static/images/emoji/watermelon.png
Binary files differ
diff --git a/web/static/images/emoji/wave.png b/web/static/images/emoji/wave.png
new file mode 100755
index 000000000..56e6e822b
--- /dev/null
+++ b/web/static/images/emoji/wave.png
Binary files differ
diff --git a/web/static/images/emoji/wavy_dash.png b/web/static/images/emoji/wavy_dash.png
new file mode 100755
index 000000000..5a74e5c7a
--- /dev/null
+++ b/web/static/images/emoji/wavy_dash.png
Binary files differ
diff --git a/web/static/images/emoji/waxing_crescent_moon.png b/web/static/images/emoji/waxing_crescent_moon.png
new file mode 100755
index 000000000..c8f13dd31
--- /dev/null
+++ b/web/static/images/emoji/waxing_crescent_moon.png
Binary files differ
diff --git a/web/static/images/emoji/waxing_gibbous_moon.png b/web/static/images/emoji/waxing_gibbous_moon.png
new file mode 100755
index 000000000..54e7ec671
--- /dev/null
+++ b/web/static/images/emoji/waxing_gibbous_moon.png
Binary files differ
diff --git a/web/static/images/emoji/wc.png b/web/static/images/emoji/wc.png
new file mode 100755
index 000000000..dfe84d2a7
--- /dev/null
+++ b/web/static/images/emoji/wc.png
Binary files differ
diff --git a/web/static/images/emoji/weary.png b/web/static/images/emoji/weary.png
new file mode 100755
index 000000000..0c5475411
--- /dev/null
+++ b/web/static/images/emoji/weary.png
Binary files differ
diff --git a/web/static/images/emoji/wedding.png b/web/static/images/emoji/wedding.png
new file mode 100755
index 000000000..ead19d52c
--- /dev/null
+++ b/web/static/images/emoji/wedding.png
Binary files differ
diff --git a/web/static/images/emoji/whale.png b/web/static/images/emoji/whale.png
new file mode 100755
index 000000000..5bb113e42
--- /dev/null
+++ b/web/static/images/emoji/whale.png
Binary files differ
diff --git a/web/static/images/emoji/whale2.png b/web/static/images/emoji/whale2.png
new file mode 100755
index 000000000..0ef4ea94f
--- /dev/null
+++ b/web/static/images/emoji/whale2.png
Binary files differ
diff --git a/web/static/images/emoji/wheelchair.png b/web/static/images/emoji/wheelchair.png
new file mode 100755
index 000000000..eddcdd797
--- /dev/null
+++ b/web/static/images/emoji/wheelchair.png
Binary files differ
diff --git a/web/static/images/emoji/white_check_mark.png b/web/static/images/emoji/white_check_mark.png
new file mode 100755
index 000000000..61dc0583c
--- /dev/null
+++ b/web/static/images/emoji/white_check_mark.png
Binary files differ
diff --git a/web/static/images/emoji/white_circle.png b/web/static/images/emoji/white_circle.png
new file mode 100755
index 000000000..3f648d1bd
--- /dev/null
+++ b/web/static/images/emoji/white_circle.png
Binary files differ
diff --git a/web/static/images/emoji/white_flower.png b/web/static/images/emoji/white_flower.png
new file mode 100755
index 000000000..c0929d0dd
--- /dev/null
+++ b/web/static/images/emoji/white_flower.png
Binary files differ
diff --git a/web/static/images/emoji/white_large_square.png b/web/static/images/emoji/white_large_square.png
new file mode 100755
index 000000000..60cb19a13
--- /dev/null
+++ b/web/static/images/emoji/white_large_square.png
Binary files differ
diff --git a/web/static/images/emoji/white_medium_small_square.png b/web/static/images/emoji/white_medium_small_square.png
new file mode 100755
index 000000000..a115cdc49
--- /dev/null
+++ b/web/static/images/emoji/white_medium_small_square.png
Binary files differ
diff --git a/web/static/images/emoji/white_medium_square.png b/web/static/images/emoji/white_medium_square.png
new file mode 100755
index 000000000..199808bcf
--- /dev/null
+++ b/web/static/images/emoji/white_medium_square.png
Binary files differ
diff --git a/web/static/images/emoji/white_small_square.png b/web/static/images/emoji/white_small_square.png
new file mode 100755
index 000000000..24ba879f4
--- /dev/null
+++ b/web/static/images/emoji/white_small_square.png
Binary files differ
diff --git a/web/static/images/emoji/white_square_button.png b/web/static/images/emoji/white_square_button.png
new file mode 100755
index 000000000..ad54d55c0
--- /dev/null
+++ b/web/static/images/emoji/white_square_button.png
Binary files differ
diff --git a/web/static/images/emoji/wind_chime.png b/web/static/images/emoji/wind_chime.png
new file mode 100755
index 000000000..efacf5dd4
--- /dev/null
+++ b/web/static/images/emoji/wind_chime.png
Binary files differ
diff --git a/web/static/images/emoji/wine_glass.png b/web/static/images/emoji/wine_glass.png
new file mode 100755
index 000000000..82b0f0005
--- /dev/null
+++ b/web/static/images/emoji/wine_glass.png
Binary files differ
diff --git a/web/static/images/emoji/wink.png b/web/static/images/emoji/wink.png
new file mode 100755
index 000000000..756766dd3
--- /dev/null
+++ b/web/static/images/emoji/wink.png
Binary files differ
diff --git a/web/static/images/emoji/wolf.png b/web/static/images/emoji/wolf.png
new file mode 100755
index 000000000..c60c96895
--- /dev/null
+++ b/web/static/images/emoji/wolf.png
Binary files differ
diff --git a/web/static/images/emoji/woman.png b/web/static/images/emoji/woman.png
new file mode 100755
index 000000000..6bf0d2b12
--- /dev/null
+++ b/web/static/images/emoji/woman.png
Binary files differ
diff --git a/web/static/images/emoji/womans_clothes.png b/web/static/images/emoji/womans_clothes.png
new file mode 100755
index 000000000..aa297c7b6
--- /dev/null
+++ b/web/static/images/emoji/womans_clothes.png
Binary files differ
diff --git a/web/static/images/emoji/womans_hat.png b/web/static/images/emoji/womans_hat.png
new file mode 100755
index 000000000..4cb2e6a69
--- /dev/null
+++ b/web/static/images/emoji/womans_hat.png
Binary files differ
diff --git a/web/static/images/emoji/womens.png b/web/static/images/emoji/womens.png
new file mode 100755
index 000000000..2fab29660
--- /dev/null
+++ b/web/static/images/emoji/womens.png
Binary files differ
diff --git a/web/static/images/emoji/worried.png b/web/static/images/emoji/worried.png
new file mode 100755
index 000000000..bfa1856c0
--- /dev/null
+++ b/web/static/images/emoji/worried.png
Binary files differ
diff --git a/web/static/images/emoji/wrench.png b/web/static/images/emoji/wrench.png
new file mode 100755
index 000000000..a87072ad1
--- /dev/null
+++ b/web/static/images/emoji/wrench.png
Binary files differ
diff --git a/web/static/images/emoji/x.png b/web/static/images/emoji/x.png
new file mode 100755
index 000000000..dff9efa8b
--- /dev/null
+++ b/web/static/images/emoji/x.png
Binary files differ
diff --git a/web/static/images/emoji/yellow_heart.png b/web/static/images/emoji/yellow_heart.png
new file mode 100755
index 000000000..fa41ce78a
--- /dev/null
+++ b/web/static/images/emoji/yellow_heart.png
Binary files differ
diff --git a/web/static/images/emoji/yen.png b/web/static/images/emoji/yen.png
new file mode 100755
index 000000000..139bc936e
--- /dev/null
+++ b/web/static/images/emoji/yen.png
Binary files differ
diff --git a/web/static/images/emoji/yum.png b/web/static/images/emoji/yum.png
new file mode 100755
index 000000000..fc39637ec
--- /dev/null
+++ b/web/static/images/emoji/yum.png
Binary files differ
diff --git a/web/static/images/emoji/zap.png b/web/static/images/emoji/zap.png
new file mode 100755
index 000000000..260c531b9
--- /dev/null
+++ b/web/static/images/emoji/zap.png
Binary files differ
diff --git a/web/static/images/emoji/zero.png b/web/static/images/emoji/zero.png
new file mode 100755
index 000000000..6e57b3343
--- /dev/null
+++ b/web/static/images/emoji/zero.png
Binary files differ
diff --git a/web/static/images/emoji/zzz.png b/web/static/images/emoji/zzz.png
new file mode 100755
index 000000000..30be04655
--- /dev/null
+++ b/web/static/images/emoji/zzz.png
Binary files differ
diff --git a/web/static/js/bootstrap-3.3.1.min.js b/web/static/js/bootstrap-3.3.1.min.js
deleted file mode 100644
index d83986590..000000000
--- a/web/static/js/bootstrap-3.3.1.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap v3.3.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.1",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.1",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.1",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.1",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.options.backdrop&&d.adjustBackdrop(),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},c.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.1",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.1",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})
-})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.1",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
diff --git a/web/static/js/bootstrap-3.3.1.js b/web/static/js/bootstrap-3.3.5.js
index b6ac8d990..5debfd7de 100644
--- a/web/static/js/bootstrap-3.3.1.js
+++ b/web/static/js/bootstrap-3.3.5.js
@@ -1,7 +1,7 @@
/*!
- * Bootstrap v3.3.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under the MIT license
*/
if (typeof jQuery === 'undefined') {
@@ -9,6 +9,7 @@ if (typeof jQuery === 'undefined') {
}
+function ($) {
+ 'use strict';
var version = $.fn.jquery.split(' ')[0].split('.')
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
@@ -16,10 +17,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: transition.js v3.3.1
+ * Bootstrap: transition.js v3.3.5
* http://getbootstrap.com/javascript/#transitions
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -76,10 +77,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: alert.js v3.3.1
+ * Bootstrap: alert.js v3.3.5
* http://getbootstrap.com/javascript/#alerts
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -95,7 +96,7 @@ if (typeof jQuery === 'undefined') {
$(el).on('click', dismiss, this.close)
}
- Alert.VERSION = '3.3.1'
+ Alert.VERSION = '3.3.5'
Alert.TRANSITION_DURATION = 150
@@ -171,10 +172,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: button.js v3.3.1
+ * Bootstrap: button.js v3.3.5
* http://getbootstrap.com/javascript/#buttons
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -191,7 +192,7 @@ if (typeof jQuery === 'undefined') {
this.isLoading = false
}
- Button.VERSION = '3.3.1'
+ Button.VERSION = '3.3.5'
Button.DEFAULTS = {
loadingText: 'loading...'
@@ -203,7 +204,7 @@ if (typeof jQuery === 'undefined') {
var val = $el.is('input') ? 'val' : 'html'
var data = $el.data()
- state = state + 'Text'
+ state += 'Text'
if (data.resetText == null) $el.data('resetText', $el[val]())
@@ -228,15 +229,19 @@ if (typeof jQuery === 'undefined') {
if ($parent.length) {
var $input = this.$element.find('input')
if ($input.prop('type') == 'radio') {
- if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
- else $parent.find('.active').removeClass('active')
+ if ($input.prop('checked')) changed = false
+ $parent.find('.active').removeClass('active')
+ this.$element.addClass('active')
+ } else if ($input.prop('type') == 'checkbox') {
+ if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+ this.$element.toggleClass('active')
}
- if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
+ $input.prop('checked', this.$element.hasClass('active'))
+ if (changed) $input.trigger('change')
} else {
this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+ this.$element.toggleClass('active')
}
-
- if (changed) this.$element.toggleClass('active')
}
@@ -279,7 +284,7 @@ if (typeof jQuery === 'undefined') {
var $btn = $(e.target)
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
Plugin.call($btn, 'toggle')
- e.preventDefault()
+ if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
})
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
@@ -288,10 +293,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: carousel.js v3.3.1
+ * Bootstrap: carousel.js v3.3.5
* http://getbootstrap.com/javascript/#carousel
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -306,10 +311,10 @@ if (typeof jQuery === 'undefined') {
this.$element = $(element)
this.$indicators = this.$element.find('.carousel-indicators')
this.options = options
- this.paused =
- this.sliding =
- this.interval =
- this.$active =
+ this.paused = null
+ this.sliding = null
+ this.interval = null
+ this.$active = null
this.$items = null
this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
@@ -319,7 +324,7 @@ if (typeof jQuery === 'undefined') {
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
}
- Carousel.VERSION = '3.3.1'
+ Carousel.VERSION = '3.3.5'
Carousel.TRANSITION_DURATION = 600
@@ -359,8 +364,11 @@ if (typeof jQuery === 'undefined') {
}
Carousel.prototype.getItemForDirection = function (direction, active) {
- var delta = direction == 'prev' ? -1 : 1
var activeIndex = this.getItemIndex(active)
+ var willWrap = (direction == 'prev' && activeIndex === 0)
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
+ if (willWrap && !this.options.wrap) return active
+ var delta = direction == 'prev' ? -1 : 1
var itemIndex = (activeIndex + delta) % this.$items.length
return this.$items.eq(itemIndex)
}
@@ -405,14 +413,8 @@ if (typeof jQuery === 'undefined') {
var $next = next || this.getItemForDirection(type, $active)
var isCycling = this.interval
var direction = type == 'next' ? 'left' : 'right'
- var fallback = type == 'next' ? 'first' : 'last'
var that = this
- if (!$next.length) {
- if (!this.options.wrap) return
- $next = this.$element.find('.item')[fallback]()
- }
-
if ($next.hasClass('active')) return (this.sliding = false)
var relatedTarget = $next[0]
@@ -529,10 +531,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: collapse.js v3.3.1
+ * Bootstrap: collapse.js v3.3.5
* http://getbootstrap.com/javascript/#collapse
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -546,7 +548,8 @@ if (typeof jQuery === 'undefined') {
var Collapse = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Collapse.DEFAULTS, options)
- this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]')
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
this.transitioning = null
if (this.options.parent) {
@@ -558,13 +561,12 @@ if (typeof jQuery === 'undefined') {
if (this.options.toggle) this.toggle()
}
- Collapse.VERSION = '3.3.1'
+ Collapse.VERSION = '3.3.5'
Collapse.TRANSITION_DURATION = 350
Collapse.DEFAULTS = {
- toggle: true,
- trigger: '[data-toggle="collapse"]'
+ toggle: true
}
Collapse.prototype.dimension = function () {
@@ -576,7 +578,7 @@ if (typeof jQuery === 'undefined') {
if (this.transitioning || this.$element.hasClass('in')) return
var activesData
- var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
if (actives && actives.length) {
activesData = actives.data('bs.collapse')
@@ -702,7 +704,7 @@ if (typeof jQuery === 'undefined') {
var data = $this.data('bs.collapse')
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
- if (!data && options.toggle && option == 'show') options.toggle = false
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
if (typeof option == 'string') data[option]()
})
@@ -733,7 +735,7 @@ if (typeof jQuery === 'undefined') {
var $target = getTargetFromTrigger($this)
var data = $target.data('bs.collapse')
- var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })
+ var option = data ? 'toggle' : $this.data()
Plugin.call($target, option)
})
@@ -741,10 +743,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: dropdown.js v3.3.1
+ * Bootstrap: dropdown.js v3.3.5
* http://getbootstrap.com/javascript/#dropdowns
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -761,7 +763,41 @@ if (typeof jQuery === 'undefined') {
$(element).on('click.bs.dropdown', this.toggle)
}
- Dropdown.VERSION = '3.3.1'
+ Dropdown.VERSION = '3.3.5'
+
+ function getParent($this) {
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = selector && $(selector)
+
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
+
+ function clearMenus(e) {
+ if (e && e.which === 3) return
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $this = $(this)
+ var $parent = getParent($this)
+ var relatedTarget = { relatedTarget: this }
+
+ if (!$parent.hasClass('open')) return
+
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
+
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this.attr('aria-expanded', 'false')
+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
+ })
+ }
Dropdown.prototype.toggle = function (e) {
var $this = $(this)
@@ -776,7 +812,10 @@ if (typeof jQuery === 'undefined') {
if (!isActive) {
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
// if mobile we use a backdrop because click events don't delegate
- $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
+ $(document.createElement('div'))
+ .addClass('dropdown-backdrop')
+ .insertAfter($(this))
+ .on('click', clearMenus)
}
var relatedTarget = { relatedTarget: this }
@@ -809,57 +848,25 @@ if (typeof jQuery === 'undefined') {
var $parent = getParent($this)
var isActive = $parent.hasClass('open')
- if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
if (e.which == 27) $parent.find(toggle).trigger('focus')
return $this.trigger('click')
}
- var desc = ' li:not(.divider):visible a'
- var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
+ var desc = ' li:not(.disabled):visible a'
+ var $items = $parent.find('.dropdown-menu' + desc)
if (!$items.length) return
var index = $items.index(e.target)
- if (e.which == 38 && index > 0) index-- // up
- if (e.which == 40 && index < $items.length - 1) index++ // down
- if (!~index) index = 0
+ if (e.which == 38 && index > 0) index-- // up
+ if (e.which == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
$items.eq(index).trigger('focus')
}
- function clearMenus(e) {
- if (e && e.which === 3) return
- $(backdrop).remove()
- $(toggle).each(function () {
- var $this = $(this)
- var $parent = getParent($this)
- var relatedTarget = { relatedTarget: this }
-
- if (!$parent.hasClass('open')) return
-
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this.attr('aria-expanded', 'false')
- $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
- })
- }
-
- function getParent($this) {
- var selector = $this.attr('data-target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- var $parent = selector && $(selector)
-
- return $parent && $parent.length ? $parent : $this.parent()
- }
-
// DROPDOWN PLUGIN DEFINITION
// ==========================
@@ -897,16 +904,15 @@ if (typeof jQuery === 'undefined') {
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
.on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
}(jQuery);
/* ========================================================================
- * Bootstrap: modal.js v3.3.1
+ * Bootstrap: modal.js v3.3.5
* http://getbootstrap.com/javascript/#modals
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -918,12 +924,15 @@ if (typeof jQuery === 'undefined') {
// ======================
var Modal = function (element, options) {
- this.options = options
- this.$body = $(document.body)
- this.$element = $(element)
- this.$backdrop =
- this.isShown = null
- this.scrollbarWidth = 0
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
+ this.ignoreBackdropClick = false
if (this.options.remote) {
this.$element
@@ -934,7 +943,7 @@ if (typeof jQuery === 'undefined') {
}
}
- Modal.VERSION = '3.3.1'
+ Modal.VERSION = '3.3.5'
Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150
@@ -968,6 +977,12 @@ if (typeof jQuery === 'undefined') {
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+ })
+ })
+
this.backdrop(function () {
var transition = $.support.transition && that.$element.hasClass('fade')
@@ -979,23 +994,20 @@ if (typeof jQuery === 'undefined') {
.show()
.scrollTop(0)
- if (that.options.backdrop) that.adjustBackdrop()
that.adjustDialog()
if (transition) {
that.$element[0].offsetWidth // force reflow
}
- that.$element
- .addClass('in')
- .attr('aria-hidden', false)
+ that.$element.addClass('in')
that.enforceFocus()
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
transition ?
- that.$element.find('.modal-dialog') // wait for modal to slide in
+ that.$dialog // wait for modal to slide in
.one('bsTransitionEnd', function () {
that.$element.trigger('focus').trigger(e)
})
@@ -1022,8 +1034,10 @@ if (typeof jQuery === 'undefined') {
this.$element
.removeClass('in')
- .attr('aria-hidden', true)
.off('click.dismiss.bs.modal')
+ .off('mouseup.dismiss.bs.modal')
+
+ this.$dialog.off('mousedown.dismiss.bs.modal')
$.support.transition && this.$element.hasClass('fade') ?
this.$element
@@ -1083,14 +1097,20 @@ if (typeof jQuery === 'undefined') {
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
- .prependTo(this.$element)
- .on('click.dismiss.bs.modal', $.proxy(function (e) {
- if (e.target !== e.currentTarget) return
- this.options.backdrop == 'static'
- ? this.$element[0].focus.call(this.$element[0])
- : this.hide.call(this)
- }, this))
+ this.$backdrop = $(document.createElement('div'))
+ .addClass('modal-backdrop ' + animate)
+ .appendTo(this.$body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (this.ignoreBackdropClick) {
+ this.ignoreBackdropClick = false
+ return
+ }
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus()
+ : this.hide()
+ }, this))
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
@@ -1125,16 +1145,9 @@ if (typeof jQuery === 'undefined') {
// these following methods are used to handle overflowing modals
Modal.prototype.handleUpdate = function () {
- if (this.options.backdrop) this.adjustBackdrop()
this.adjustDialog()
}
- Modal.prototype.adjustBackdrop = function () {
- this.$backdrop
- .css('height', 0)
- .css('height', this.$element[0].scrollHeight)
- }
-
Modal.prototype.adjustDialog = function () {
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
@@ -1152,17 +1165,23 @@ if (typeof jQuery === 'undefined') {
}
Modal.prototype.checkScrollbar = function () {
- this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight
+ var fullWindowWidth = window.innerWidth
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+ var documentElementRect = document.documentElement.getBoundingClientRect()
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+ }
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
this.scrollbarWidth = this.measureScrollbar()
}
Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ this.originalBodyPad = document.body.style.paddingRight || ''
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
}
Modal.prototype.resetScrollbar = function () {
- this.$body.css('padding-right', '')
+ this.$body.css('padding-right', this.originalBodyPad)
}
Modal.prototype.measureScrollbar = function () { // thx walsh
@@ -1228,11 +1247,11 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: tooltip.js v3.3.1
+ * Bootstrap: tooltip.js v3.3.5
* http://getbootstrap.com/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -1244,17 +1263,18 @@ if (typeof jQuery === 'undefined') {
// ===============================
var Tooltip = function (element, options) {
- this.type =
- this.options =
- this.enabled =
- this.timeout =
- this.hoverState =
+ this.type = null
+ this.options = null
+ this.enabled = null
+ this.timeout = null
+ this.hoverState = null
this.$element = null
+ this.inState = null
this.init('tooltip', element, options)
}
- Tooltip.VERSION = '3.3.1'
+ Tooltip.VERSION = '3.3.5'
Tooltip.TRANSITION_DURATION = 150
@@ -1279,7 +1299,12 @@ if (typeof jQuery === 'undefined') {
this.type = type
this.$element = $(element)
this.options = this.getOptions(options)
- this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+ this.inState = { click: false, hover: false, focus: false }
+
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
+ }
var triggers = this.options.trigger.split(' ')
@@ -1334,16 +1359,20 @@ if (typeof jQuery === 'undefined') {
var self = obj instanceof this.constructor ?
obj : $(obj.currentTarget).data('bs.' + this.type)
- if (self && self.$tip && self.$tip.is(':visible')) {
- self.hoverState = 'in'
- return
- }
-
if (!self) {
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
$(obj.currentTarget).data('bs.' + this.type, self)
}
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+ }
+
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
+ self.hoverState = 'in'
+ return
+ }
+
clearTimeout(self.timeout)
self.hoverState = 'in'
@@ -1355,6 +1384,14 @@ if (typeof jQuery === 'undefined') {
}, self.options.delay.show)
}
+ Tooltip.prototype.isInStateTrue = function () {
+ for (var key in this.inState) {
+ if (this.inState[key]) return true
+ }
+
+ return false
+ }
+
Tooltip.prototype.leave = function (obj) {
var self = obj instanceof this.constructor ?
obj : $(obj.currentTarget).data('bs.' + this.type)
@@ -1364,6 +1401,12 @@ if (typeof jQuery === 'undefined') {
$(obj.currentTarget).data('bs.' + this.type, self)
}
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+ }
+
+ if (self.isInStateTrue()) return
+
clearTimeout(self.timeout)
self.hoverState = 'out'
@@ -1410,6 +1453,7 @@ if (typeof jQuery === 'undefined') {
.data('bs.' + this.type, this)
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+ this.$element.trigger('inserted.bs.' + this.type)
var pos = this.getPosition()
var actualWidth = $tip[0].offsetWidth
@@ -1417,13 +1461,12 @@ if (typeof jQuery === 'undefined') {
if (autoPlace) {
var orgPlacement = placement
- var $container = this.options.container ? $(this.options.container) : this.$element.parent()
- var containerDim = this.getPosition($container)
+ var viewportDim = this.getPosition(this.$viewport)
- placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
- placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
- placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
- placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
placement
$tip
@@ -1464,8 +1507,8 @@ if (typeof jQuery === 'undefined') {
if (isNaN(marginTop)) marginTop = 0
if (isNaN(marginLeft)) marginLeft = 0
- offset.top = offset.top + marginTop
- offset.left = offset.left + marginLeft
+ offset.top += marginTop
+ offset.left += marginLeft
// $.fn.offset doesn't round pixel values
// so we use setOffset directly with our own function B-0
@@ -1501,10 +1544,10 @@ if (typeof jQuery === 'undefined') {
this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
}
- Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
this.arrow()
- .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
- .css(isHorizontal ? 'top' : 'left', '')
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isVertical ? 'top' : 'left', '')
}
Tooltip.prototype.setContent = function () {
@@ -1517,7 +1560,7 @@ if (typeof jQuery === 'undefined') {
Tooltip.prototype.hide = function (callback) {
var that = this
- var $tip = this.tip()
+ var $tip = $(this.$tip)
var e = $.Event('hide.bs.' + this.type)
function complete() {
@@ -1534,7 +1577,7 @@ if (typeof jQuery === 'undefined') {
$tip.removeClass('in')
- $.support.transition && this.$tip.hasClass('fade') ?
+ $.support.transition && $tip.hasClass('fade') ?
$tip
.one('bsTransitionEnd', complete)
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
@@ -1547,7 +1590,7 @@ if (typeof jQuery === 'undefined') {
Tooltip.prototype.fixTitle = function () {
var $e = this.$element
- if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
}
}
@@ -1575,10 +1618,10 @@ if (typeof jQuery === 'undefined') {
}
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
}
@@ -1602,7 +1645,7 @@ if (typeof jQuery === 'undefined') {
var rightEdgeOffset = pos.left + viewportPadding + actualWidth
if (leftEdgeOffset < viewportDimensions.left) { // left overflow
delta.left = viewportDimensions.left - leftEdgeOffset
- } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
}
}
@@ -1628,7 +1671,13 @@ if (typeof jQuery === 'undefined') {
}
Tooltip.prototype.tip = function () {
- return (this.$tip = this.$tip || $(this.options.template))
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ if (this.$tip.length != 1) {
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+ }
+ }
+ return this.$tip
}
Tooltip.prototype.arrow = function () {
@@ -1657,7 +1706,13 @@ if (typeof jQuery === 'undefined') {
}
}
- self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ if (e) {
+ self.inState.click = !self.inState.click
+ if (self.isInStateTrue()) self.enter(self)
+ else self.leave(self)
+ } else {
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
}
Tooltip.prototype.destroy = function () {
@@ -1665,6 +1720,12 @@ if (typeof jQuery === 'undefined') {
clearTimeout(this.timeout)
this.hide(function () {
that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ if (that.$tip) {
+ that.$tip.detach()
+ }
+ that.$tip = null
+ that.$arrow = null
+ that.$viewport = null
})
}
@@ -1674,18 +1735,12 @@ if (typeof jQuery === 'undefined') {
function Plugin(option) {
return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tooltip')
- var options = typeof option == 'object' && option
- var selector = options && options.selector
-
- if (!data && option == 'destroy') return
- if (selector) {
- if (!data) $this.data('bs.tooltip', (data = {}))
- if (!data[selector]) data[selector] = new Tooltip(this, options)
- } else {
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
- }
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
if (typeof option == 'string') data[option]()
})
}
@@ -1707,10 +1762,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: popover.js v3.3.1
+ * Bootstrap: popover.js v3.3.5
* http://getbootstrap.com/javascript/#popovers
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -1727,7 +1782,7 @@ if (typeof jQuery === 'undefined') {
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
- Popover.VERSION = '3.3.1'
+ Popover.VERSION = '3.3.5'
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right',
@@ -1783,29 +1838,18 @@ if (typeof jQuery === 'undefined') {
return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
}
- Popover.prototype.tip = function () {
- if (!this.$tip) this.$tip = $(this.options.template)
- return this.$tip
- }
-
// POPOVER PLUGIN DEFINITION
// =========================
function Plugin(option) {
return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.popover')
- var options = typeof option == 'object' && option
- var selector = options && options.selector
-
- if (!data && option == 'destroy') return
- if (selector) {
- if (!data) $this.data('bs.popover', (data = {}))
- if (!data[selector]) data[selector] = new Popover(this, options)
- } else {
- if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
- }
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
if (typeof option == 'string') data[option]()
})
}
@@ -1827,10 +1871,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: scrollspy.js v3.3.1
+ * Bootstrap: scrollspy.js v3.3.5
* http://getbootstrap.com/javascript/#scrollspy
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -1842,10 +1886,8 @@ if (typeof jQuery === 'undefined') {
// ==========================
function ScrollSpy(element, options) {
- var process = $.proxy(this.process, this)
-
- this.$body = $('body')
- this.$scrollElement = $(element).is('body') ? $(window) : $(element)
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
this.selector = (this.options.target || '') + ' .nav li > a'
this.offsets = []
@@ -1853,12 +1895,12 @@ if (typeof jQuery === 'undefined') {
this.activeTarget = null
this.scrollHeight = 0
- this.$scrollElement.on('scroll.bs.scrollspy', process)
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
this.refresh()
this.process()
}
- ScrollSpy.VERSION = '3.3.1'
+ ScrollSpy.VERSION = '3.3.5'
ScrollSpy.DEFAULTS = {
offset: 10
@@ -1869,20 +1911,19 @@ if (typeof jQuery === 'undefined') {
}
ScrollSpy.prototype.refresh = function () {
- var offsetMethod = 'offset'
- var offsetBase = 0
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
if (!$.isWindow(this.$scrollElement[0])) {
offsetMethod = 'position'
offsetBase = this.$scrollElement.scrollTop()
}
- this.offsets = []
- this.targets = []
- this.scrollHeight = this.getScrollHeight()
-
- var self = this
-
this.$body
.find(this.selector)
.map(function () {
@@ -1897,8 +1938,8 @@ if (typeof jQuery === 'undefined') {
})
.sort(function (a, b) { return a[0] - b[0] })
.each(function () {
- self.offsets.push(this[0])
- self.targets.push(this[1])
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
})
}
@@ -1927,7 +1968,7 @@ if (typeof jQuery === 'undefined') {
for (i = offsets.length; i--;) {
activeTarget != targets[i]
&& scrollTop >= offsets[i]
- && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
&& this.activate(targets[i])
}
}
@@ -1938,8 +1979,8 @@ if (typeof jQuery === 'undefined') {
this.clear()
var selector = this.selector +
- '[data-target="' + target + '"],' +
- this.selector + '[href="' + target + '"]'
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
var active = $(selector)
.parents('li')
@@ -2003,10 +2044,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: tab.js v3.3.1
+ * Bootstrap: tab.js v3.3.5
* http://getbootstrap.com/javascript/#tabs
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -2018,10 +2059,12 @@ if (typeof jQuery === 'undefined') {
// ====================
var Tab = function (element) {
+ // jscs:disable requireDollarBeforejQueryAssignment
this.element = $(element)
+ // jscs:enable requireDollarBeforejQueryAssignment
}
- Tab.VERSION = '3.3.1'
+ Tab.VERSION = '3.3.5'
Tab.TRANSITION_DURATION = 150
@@ -2069,7 +2112,7 @@ if (typeof jQuery === 'undefined') {
var $active = container.find('> .active')
var transition = callback
&& $.support.transition
- && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
function next() {
$active
@@ -2092,7 +2135,7 @@ if (typeof jQuery === 'undefined') {
element.removeClass('fade')
}
- if (element.parent('.dropdown-menu')) {
+ if (element.parent('.dropdown-menu').length) {
element
.closest('li.dropdown')
.addClass('active')
@@ -2157,10 +2200,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: affix.js v3.3.1
+ * Bootstrap: affix.js v3.3.5
* http://getbootstrap.com/javascript/#affix
* ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
+ * Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -2179,14 +2222,14 @@ if (typeof jQuery === 'undefined') {
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
this.$element = $(element)
- this.affixed =
- this.unpin =
+ this.affixed = null
+ this.unpin = null
this.pinnedOffset = null
this.checkPosition()
}
- Affix.VERSION = '3.3.1'
+ Affix.VERSION = '3.3.5'
Affix.RESET = 'affix affix-top affix-bottom'
@@ -2211,7 +2254,7 @@ if (typeof jQuery === 'undefined') {
var colliderTop = initializing ? scrollTop : position.top
var colliderHeight = initializing ? targetHeight : height
- if (offsetTop != null && colliderTop <= offsetTop) return 'top'
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
return false
@@ -2236,7 +2279,7 @@ if (typeof jQuery === 'undefined') {
var offset = this.options.offset
var offsetTop = offset.top
var offsetBottom = offset.bottom
- var scrollHeight = $('body').height()
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
if (typeof offset != 'object') offsetBottom = offsetTop = offset
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
diff --git a/web/static/js/bootstrap-3.3.5.min.js b/web/static/js/bootstrap-3.3.5.min.js
new file mode 100644
index 000000000..133aeecb9
--- /dev/null
+++ b/web/static/js/bootstrap-3.3.5.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),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"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(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 c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),
+d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
diff --git a/web/static/js/emojify.min.js b/web/static/js/emojify.min.js
new file mode 100755
index 000000000..4fedf3205
--- /dev/null
+++ b/web/static/js/emojify.min.js
@@ -0,0 +1,4 @@
+/*! emojify.js - v1.0.5 -
+ * Copyright (c) Hassan Khan 2015
+ */
+!function(e,a){"use strict";"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?module.exports=a():e.emojify=a()}(this,function(){"use strict";var e=function(){function e(){var e={named:/:([a-z0-9A-Z_-]+):/,smile:/:-?\)/g,open_mouth:/:o/gi,scream:/:-o/gi,smirk:/[:;]-?]/g,grinning:/[:;]-?d/gi,stuck_out_tongue_closed_eyes:/x-d/gi,stuck_out_tongue_winking_eye:/[:;]-?p/gi,rage:/:-?[\[@]/g,frowning:/:-?\(/g,sob:/:['’]-?\(|:&#x27;\(/g,kissing_heart:/:-?\*/g,wink:/;-?\)/g,pensive:/:-?\//g,confounded:/:-?s/gi,flushed:/:-?\|/g,relaxed:/:-?\$/g,mask:/:-x/gi,heart:/<3|&lt;3/g,broken_heart:/<\/3|&lt;&#x2F;3/g,thumbsup:/:\+1:/g,thumbsdown:/:\-1:/g};return d.ignore_emoticons&&(e={named:/:([a-z0-9A-Z_-]+):/,thumbsup:/:\+1:/g,thumbsdown:/:\-1:/g}),Object.keys(e).map(function(a){return[e[a],a]})}function a(){var e=_.map(function(e){var a=e[0],o=a.source||a;return o=o.replace(/(^|[^\[])\^/g,"$1"),"("+o+")"}).join("|");return new RegExp(e,"gi")}function o(e){return" "===e||" "===e||"\r"===e||"\n"===e||""===e||e===String.fromCharCode(160)}function r(e){var a=null;if(e.replacer)a=e.replacer.apply({config:d},[":"+e.emojiName+":",e.emojiName]);else{var o=d.tag_type||h[d.mode];a=e.win.document.createElement(o),"img"!==o?a.setAttribute("class","emoji emoji-"+e.emojiName):(a.setAttribute("align","absmiddle"),a.setAttribute("alt",":"+e.emojiName+":"),a.setAttribute("class","emoji"),a.setAttribute("src",d.img_dir+"/"+e.emojiName+".png")),a.setAttribute("title",":"+e.emojiName+":")}e.node.splitText(e.match.index),e.node.nextSibling.nodeValue=e.node.nextSibling.nodeValue.substr(e.match[0].length,e.node.nextSibling.nodeValue.length),a.appendChild(e.node.splitText(e.match.index)),e.node.parentNode.insertBefore(a,e.node.nextSibling)}function t(e){if(e[1]&&e[2]){var a=e[2];if(m[a])return a}else for(var o=3;o<e.length-1;o++)if(e[o])return _[o-2][1]}function i(e,a){var o=this.config.tag_type||h[this.config.mode];return"img"!==o?"<"+o+" class='emoji emoji-"+a+"' title=':"+a+":'></"+o+">":"<img align='absmiddle' alt=':"+a+":' class='emoji' src='"+this.config.img_dir+"/"+a+".png' title=':"+a+":' />"}function n(){this.lastEmojiTerminatedAt=-1}function s(o,r){if(!o)return o;r||(r=i),_=e(),c=a();var t=new n;return o.replace(c,function(){var e=Array.prototype.slice.call(arguments,0,-2),a=arguments[arguments.length-2],o=arguments[arguments.length-1],i=t.validate(e,a,o);return i?r.apply({config:d},[arguments[0],i]):arguments[0]})}function l(o,i){"undefined"==typeof o&&(o=d.only_crawl_id?document.getElementById(d.only_crawl_id):document.body);var s=o.ownerDocument,l=s.defaultView||s.parentWindow,u=function(e,a){var o;if(e.hasChildNodes())for(o=e.firstChild;o;)a(o)&&u(o,a),o=o.nextSibling},g=function(e){for(var a,o=[],s=new n;null!==(a=c.exec(e.data));)s.validate(a,a.index,a.input)&&o.push(a);for(var _=o.length;_-->0;){var u=t(o[_]);r({node:e,match:o[_],emojiName:u,replacer:i,win:l})}};_=e(),c=a();var m=[],h=new RegExp(d.blacklist.elements.join("|"),"i"),p=new RegExp(d.blacklist.classes.join("|"),"i");if("undefined"!=typeof l.document.createTreeWalker)for(var b,f=l.document.createTreeWalker(o,l.NodeFilter.SHOW_TEXT|l.NodeFilter.SHOW_ELEMENT,function(e){return 1!==e.nodeType?l.NodeFilter.FILTER_ACCEPT:e.tagName.match(h)||"svg"===e.tagName||e.className.match(p)?l.NodeFilter.FILTER_REJECT:l.NodeFilter.FILTER_SKIP},!1);null!==(b=f.nextNode());)m.push(b);else u(o,function(e){return"undefined"!=typeof e.tagName&&e.tagName.match(h)||"undefined"!=typeof e.className&&e.className.match(p)?!1:1===e.nodeType?!0:(m.push(e),!0)});m.forEach(g)}var _,c,u="+1,-1,100,1234,8ball,a,ab,abc,abcd,accept,aerial_tramway,airplane,alarm_clock,alien,ambulance,anchor,angel,anger,angry,anguished,ant,apple,aquarius,aries,arrow_backward,arrow_double_down,arrow_double_up,arrow_down,arrow_down_small,arrow_forward,arrow_heading_down,arrow_heading_up,arrow_left,arrow_lower_left,arrow_lower_right,arrow_right,arrow_right_hook,arrow_up,arrow_up_down,arrow_up_small,arrow_upper_left,arrow_upper_right,arrows_clockwise,arrows_counterclockwise,art,articulated_lorry,astonished,atm,b,baby,baby_bottle,baby_chick,baby_symbol,back,baggage_claim,balloon,ballot_box_with_check,bamboo,banana,bangbang,bank,bar_chart,barber,baseball,basketball,bath,bathtub,battery,bear,bee,beer,beers,beetle,beginner,bell,bento,bicyclist,bike,bikini,bird,birthday,black_circle,black_joker,black_medium_small_square,black_medium_square,black_nib,black_small_square,black_square,black_square_button,blossom,blowfish,blue_book,blue_car,blue_heart,blush,boar,boat,bomb,book,bookmark,bookmark_tabs,books,boom,boot,bouquet,bow,bowling,bowtie,boy,bread,bride_with_veil,bridge_at_night,briefcase,broken_heart,bug,bulb,bullettrain_front,bullettrain_side,bus,busstop,bust_in_silhouette,busts_in_silhouette,cactus,cake,calendar,calling,camel,camera,cancer,candy,capital_abcd,capricorn,car,card_index,carousel_horse,cat,cat2,cd,chart,chart_with_downwards_trend,chart_with_upwards_trend,checkered_flag,cherries,cherry_blossom,chestnut,chicken,children_crossing,chocolate_bar,christmas_tree,church,cinema,circus_tent,city_sunrise,city_sunset,cl,clap,clapper,clipboard,clock1,clock10,clock1030,clock11,clock1130,clock12,clock1230,clock130,clock2,clock230,clock3,clock330,clock4,clock430,clock5,clock530,clock6,clock630,clock7,clock730,clock8,clock830,clock9,clock930,closed_book,closed_lock_with_key,closed_umbrella,cloud,clubs,cn,cocktail,coffee,cold_sweat,collision,computer,confetti_ball,confounded,confused,congratulations,construction,construction_worker,convenience_store,cookie,cool,cop,copyright,corn,couple,couple_with_heart,couplekiss,cow,cow2,credit_card,crescent_moon,crocodile,crossed_flags,crown,cry,crying_cat_face,crystal_ball,cupid,curly_loop,currency_exchange,curry,custard,customs,cyclone,dancer,dancers,dango,dart,dash,date,de,deciduous_tree,department_store,diamond_shape_with_a_dot_inside,diamonds,disappointed,disappointed_relieved,dizzy,dizzy_face,do_not_litter,dog,dog2,dollar,dolls,dolphin,donut,door,doughnut,dragon,dragon_face,dress,dromedary_camel,droplet,dvd,e-mail,ear,ear_of_rice,earth_africa,earth_americas,earth_asia,egg,eggplant,eight,eight_pointed_black_star,eight_spoked_asterisk,electric_plug,elephant,email,end,envelope,es,euro,european_castle,european_post_office,evergreen_tree,exclamation,expressionless,eyeglasses,eyes,facepunch,factory,fallen_leaf,family,fast_forward,fax,fearful,feelsgood,feet,ferris_wheel,file_folder,finnadie,fire,fire_engine,fireworks,first_quarter_moon,first_quarter_moon_with_face,fish,fish_cake,fishing_pole_and_fish,fist,five,flags,flashlight,floppy_disk,flower_playing_cards,flushed,foggy,football,fork_and_knife,fountain,four,four_leaf_clover,fr,free,fried_shrimp,fries,frog,frowning,fu,fuelpump,full_moon,full_moon_with_face,game_die,gb,gem,gemini,ghost,gift,gift_heart,girl,globe_with_meridians,goat,goberserk,godmode,golf,grapes,green_apple,green_book,green_heart,grey_exclamation,grey_question,grimacing,grin,grinning,guardsman,guitar,gun,haircut,hamburger,hammer,hamster,hand,handbag,hankey,hash,hatched_chick,hatching_chick,headphones,hear_no_evil,heart,heart_decoration,heart_eyes,heart_eyes_cat,heartbeat,heartpulse,hearts,heavy_check_mark,heavy_division_sign,heavy_dollar_sign,heavy_exclamation_mark,heavy_minus_sign,heavy_multiplication_x,heavy_plus_sign,helicopter,herb,hibiscus,high_brightness,high_heel,hocho,honey_pot,honeybee,horse,horse_racing,hospital,hotel,hotsprings,hourglass,hourglass_flowing_sand,house,house_with_garden,hurtrealbad,hushed,ice_cream,icecream,id,ideograph_advantage,imp,inbox_tray,incoming_envelope,information_desk_person,information_source,innocent,interrobang,iphone,it,izakaya_lantern,jack_o_lantern,japan,japanese_castle,japanese_goblin,japanese_ogre,jeans,joy,joy_cat,jp,key,keycap_ten,kimono,kiss,kissing,kissing_cat,kissing_closed_eyes,kissing_face,kissing_heart,kissing_smiling_eyes,koala,koko,kr,large_blue_circle,large_blue_diamond,large_orange_diamond,last_quarter_moon,last_quarter_moon_with_face,laughing,leaves,ledger,left_luggage,left_right_arrow,leftwards_arrow_with_hook,lemon,leo,leopard,libra,light_rail,link,lips,lipstick,lock,lock_with_ink_pen,lollipop,loop,loudspeaker,love_hotel,love_letter,low_brightness,m,mag,mag_right,mahjong,mailbox,mailbox_closed,mailbox_with_mail,mailbox_with_no_mail,man,man_with_gua_pi_mao,man_with_turban,mans_shoe,maple_leaf,mask,massage,meat_on_bone,mega,melon,memo,mens,metal,metro,microphone,microscope,milky_way,minibus,minidisc,mobile_phone_off,money_with_wings,moneybag,monkey,monkey_face,monorail,mortar_board,mount_fuji,mountain_bicyclist,mountain_cableway,mountain_railway,mouse,mouse2,movie_camera,moyai,muscle,mushroom,musical_keyboard,musical_note,musical_score,mute,nail_care,name_badge,neckbeard,necktie,negative_squared_cross_mark,neutral_face,new,new_moon,new_moon_with_face,newspaper,ng,nine,no_bell,no_bicycles,no_entry,no_entry_sign,no_good,no_mobile_phones,no_mouth,no_pedestrians,no_smoking,non-potable_water,nose,notebook,notebook_with_decorative_cover,notes,nut_and_bolt,o,o2,ocean,octocat,octopus,oden,office,ok,ok_hand,ok_woman,older_man,older_woman,on,oncoming_automobile,oncoming_bus,oncoming_police_car,oncoming_taxi,one,open_file_folder,open_hands,open_mouth,ophiuchus,orange_book,outbox_tray,ox,package,page_facing_up,page_with_curl,pager,palm_tree,panda_face,paperclip,parking,part_alternation_mark,partly_sunny,passport_control,paw_prints,peach,pear,pencil,pencil2,penguin,pensive,performing_arts,persevere,person_frowning,person_with_blond_hair,person_with_pouting_face,phone,pig,pig2,pig_nose,pill,pineapple,pisces,pizza,plus1,point_down,point_left,point_right,point_up,point_up_2,police_car,poodle,poop,post_office,postal_horn,postbox,potable_water,pouch,poultry_leg,pound,pouting_cat,pray,princess,punch,purple_heart,purse,pushpin,put_litter_in_its_place,question,rabbit,rabbit2,racehorse,radio,radio_button,rage,rage1,rage2,rage3,rage4,railway_car,rainbow,raised_hand,raised_hands,raising_hand,ram,ramen,rat,recycle,red_car,red_circle,registered,relaxed,relieved,repeat,repeat_one,restroom,revolving_hearts,rewind,ribbon,rice,rice_ball,rice_cracker,rice_scene,ring,rocket,roller_coaster,rooster,rose,rotating_light,round_pushpin,rowboat,ru,rugby_football,runner,running,running_shirt_with_sash,sa,sagittarius,sailboat,sake,sandal,santa,satellite,satisfied,saxophone,school,school_satchel,scissors,scorpius,scream,scream_cat,scroll,seat,secret,see_no_evil,seedling,seven,shaved_ice,sheep,shell,ship,shipit,shirt,shit,shoe,shower,signal_strength,six,six_pointed_star,ski,skull,sleeping,sleepy,slot_machine,small_blue_diamond,small_orange_diamond,small_red_triangle,small_red_triangle_down,smile,smile_cat,smiley,smiley_cat,smiling_imp,smirk,smirk_cat,smoking,snail,snake,snowboarder,snowflake,snowman,sob,soccer,soon,sos,sound,space_invader,spades,spaghetti,sparkle,sparkler,sparkles,sparkling_heart,speak_no_evil,speaker,speech_balloon,speedboat,squirrel,star,star2,stars,station,statue_of_liberty,steam_locomotive,stew,straight_ruler,strawberry,stuck_out_tongue,stuck_out_tongue_closed_eyes,stuck_out_tongue_winking_eye,sun_with_face,sunflower,sunglasses,sunny,sunrise,sunrise_over_mountains,surfer,sushi,suspect,suspension_railway,sweat,sweat_drops,sweat_smile,sweet_potato,swimmer,symbols,syringe,tada,tanabata_tree,tangerine,taurus,taxi,tea,telephone,telephone_receiver,telescope,tennis,tent,thought_balloon,three,thumbsdown,thumbsup,ticket,tiger,tiger2,tired_face,tm,toilet,tokyo_tower,tomato,tongue,top,tophat,tractor,traffic_light,train,train2,tram,triangular_flag_on_post,triangular_ruler,trident,triumph,trolleybus,trollface,trophy,tropical_drink,tropical_fish,truck,trumpet,tshirt,tulip,turtle,tv,twisted_rightwards_arrows,two,two_hearts,two_men_holding_hands,two_women_holding_hands,u5272,u5408,u55b6,u6307,u6708,u6709,u6e80,u7121,u7533,u7981,u7a7a,uk,umbrella,unamused,underage,unlock,up,us,v,vertical_traffic_light,vhs,vibration_mode,video_camera,video_game,violin,virgo,volcano,vs,walking,waning_crescent_moon,waning_gibbous_moon,warning,watch,water_buffalo,watermelon,wave,wavy_dash,waxing_crescent_moon,waxing_gibbous_moon,wc,weary,wedding,whale,whale2,wheelchair,white_check_mark,white_circle,white_flower,white_large_square,white_medium_small_square,white_medium_square,white_small_square,white_square_button,wind_chime,wine_glass,wink,wolf,woman,womans_clothes,womans_hat,womens,worried,wrench,x,yellow_heart,yen,yum,zap,zero,zzz",g=u.split(/,/),m=g.reduce(function(e,a){return e[a]=!0,e},{}),d={blacklist:{ids:[],classes:["no-emojify"],elements:["script","textarea","a","pre","code"]},tag_type:null,only_crawl_id:null,img_dir:"images/emoji",ignore_emoticons:!1,mode:"img"},h={img:"img",sprite:"span","data-uri":"span"};return n.prototype={validate:function(e,a,r){function i(){return n.lastEmojiTerminatedAt=_+a,s}var n=this,s=t(e);if(s){var l=e[0],_=l.length;if(0===a)return i();if(r.length===l.length+a)return i();var c=this.lastEmojiTerminatedAt===a;if(c)return i();if(o(r.charAt(a-1)))return i();var u=o(r.charAt(l.length+a));return u&&c?i():void 0}}},{defaultConfig:d,emojiNames:g,setConfig:function(e){Object.keys(d).forEach(function(a){a in e&&(d[a]=e[a])})},replace:s,run:l}}();return e}); \ No newline at end of file
diff --git a/web/static/js/jasny-bootstrap.js b/web/static/js/jasny-bootstrap.js
new file mode 100644
index 000000000..9e7b21993
--- /dev/null
+++ b/web/static/js/jasny-bootstrap.js
@@ -0,0 +1,1024 @@
+/*!
+ * Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap)
+ * Copyright 2012-2014 Arnold Daniels
+ * Licensed under Apache-2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE)
+ */
+
+if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScript requires jQuery') }
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.1.3
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return { end: transEndEventNames[name] }
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ if ($.support.transition !== undefined) return // Prevent conflict with Twitter Bootstrap
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false, $el = this
+ $(this).one($.support.transition.end, function () { called = true })
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+ })
+
+}(window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: offcanvas.js v3.1.3
+ * http://jasny.github.io/bootstrap/javascript/#offcanvas
+ * ========================================================================
+ * Copyright 2013-2014 Arnold Daniels
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
++function ($) { "use strict";
+
+ // OFFCANVAS PUBLIC CLASS DEFINITION
+ // =================================
+
+ var OffCanvas = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, OffCanvas.DEFAULTS, options)
+ this.state = null
+ this.placement = null
+
+ if (this.options.recalc) {
+ this.calcClone()
+ $(window).on('resize', $.proxy(this.recalc, this))
+ }
+
+ if (this.options.autohide)
+ $(document).on('click', $.proxy(this.autohide, this))
+
+ if (this.options.toggle) this.toggle()
+
+ if (this.options.disablescrolling) {
+ this.options.disableScrolling = this.options.disablescrolling
+ delete this.options.disablescrolling
+ }
+ }
+
+ OffCanvas.DEFAULTS = {
+ toggle: true,
+ placement: 'auto',
+ autohide: true,
+ recalc: true,
+ disableScrolling: true
+ }
+
+ OffCanvas.prototype.offset = function () {
+ switch (this.placement) {
+ case 'left':
+ case 'right': return this.$element.outerWidth()
+ case 'top':
+ case 'bottom': return this.$element.outerHeight()
+ }
+ }
+
+ OffCanvas.prototype.calcPlacement = function () {
+ if (this.options.placement !== 'auto') {
+ this.placement = this.options.placement
+ return
+ }
+
+ if (!this.$element.hasClass('in')) {
+ this.$element.css('visiblity', 'hidden !important').addClass('in')
+ }
+
+ var horizontal = $(window).width() / this.$element.width()
+ var vertical = $(window).height() / this.$element.height()
+
+ var element = this.$element
+ function ab(a, b) {
+ if (element.css(b) === 'auto') return a
+ if (element.css(a) === 'auto') return b
+
+ var size_a = parseInt(element.css(a), 10)
+ var size_b = parseInt(element.css(b), 10)
+
+ return size_a > size_b ? b : a
+ }
+
+ this.placement = horizontal >= vertical ? ab('left', 'right') : ab('top', 'bottom')
+
+ if (this.$element.css('visibility') === 'hidden !important') {
+ this.$element.removeClass('in').css('visiblity', '')
+ }
+ }
+
+ OffCanvas.prototype.opposite = function (placement) {
+ switch (placement) {
+ case 'top': return 'bottom'
+ case 'left': return 'right'
+ case 'bottom': return 'top'
+ case 'right': return 'left'
+ }
+ }
+
+ OffCanvas.prototype.getCanvasElements = function() {
+ // Return a set containing the canvas plus all fixed elements
+ var canvas = this.options.canvas ? $(this.options.canvas) : this.$element
+
+ var fixed_elements = canvas.find('*').filter(function() {
+ return $(this).css('position') === 'fixed'
+ }).not(this.options.exclude)
+
+ return canvas.add(fixed_elements)
+ }
+
+ OffCanvas.prototype.slide = function (elements, offset, callback) {
+ // Use jQuery animation if CSS transitions aren't supported
+ if (!$.support.transition) {
+ var anim = {}
+ anim[this.placement] = "+=" + offset
+ return elements.animate(anim, 350, callback)
+ }
+
+ var placement = this.placement
+ var opposite = this.opposite(placement)
+
+ elements.each(function() {
+ if ($(this).css(placement) !== 'auto')
+ $(this).css(placement, (parseInt($(this).css(placement), 10) || 0) + offset)
+
+ if ($(this).css(opposite) !== 'auto')
+ $(this).css(opposite, (parseInt($(this).css(opposite), 10) || 0) - offset)
+ })
+
+ this.$element
+ .one($.support.transition.end, callback)
+ .emulateTransitionEnd(350)
+ }
+
+ OffCanvas.prototype.disableScrolling = function() {
+ var bodyWidth = $('body').width()
+ var prop = 'padding-' + this.opposite(this.placement)
+
+ if ($('body').data('offcanvas-style') === undefined) {
+ $('body').data('offcanvas-style', $('body').attr('style') || '')
+ }
+
+ $('body').css('overflow', 'hidden')
+
+ if ($('body').width() > bodyWidth) {
+ var padding = parseInt($('body').css(prop), 10) + $('body').width() - bodyWidth
+
+ setTimeout(function() {
+ $('body').css(prop, padding)
+ }, 1)
+ }
+ }
+
+ OffCanvas.prototype.show = function () {
+ if (this.state) return
+
+ var startEvent = $.Event('show.bs.offcanvas')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ this.state = 'slide-in'
+ this.calcPlacement();
+
+ var elements = this.getCanvasElements()
+ var placement = this.placement
+ var opposite = this.opposite(placement)
+ var offset = this.offset()
+
+ if (elements.index(this.$element) !== -1) {
+ $(this.$element).data('offcanvas-style', $(this.$element).attr('style') || '')
+ this.$element.css(placement, -1 * offset)
+ this.$element.css(placement); // Workaround: Need to get the CSS property for it to be applied before the next line of code
+ }
+
+ elements.addClass('canvas-sliding').each(function() {
+ if ($(this).data('offcanvas-style') === undefined) $(this).data('offcanvas-style', $(this).attr('style') || '')
+ if ($(this).css('position') === 'static') $(this).css('position', 'relative')
+ if (($(this).css(placement) === 'auto' || $(this).css(placement) === '0px') &&
+ ($(this).css(opposite) === 'auto' || $(this).css(opposite) === '0px')) {
+ $(this).css(placement, 0)
+ }
+ })
+
+ if (this.options.disableScrolling) this.disableScrolling()
+
+ var complete = function () {
+ if (this.state != 'slide-in') return
+
+ this.state = 'slid'
+
+ elements.removeClass('canvas-sliding').addClass('canvas-slid')
+ this.$element.trigger('shown.bs.offcanvas')
+ }
+
+ setTimeout($.proxy(function() {
+ this.$element.addClass('in')
+ this.slide(elements, offset, $.proxy(complete, this))
+ }, this), 1)
+ }
+
+ OffCanvas.prototype.hide = function (fast) {
+ if (this.state !== 'slid') return
+
+ var startEvent = $.Event('hide.bs.offcanvas')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ this.state = 'slide-out'
+
+ var elements = $('.canvas-slid')
+ var placement = this.placement
+ var offset = -1 * this.offset()
+
+ var complete = function () {
+ if (this.state != 'slide-out') return
+
+ this.state = null
+ this.placement = null
+
+ this.$element.removeClass('in')
+
+ elements.removeClass('canvas-sliding')
+ elements.add(this.$element).add('body').each(function() {
+ $(this).attr('style', $(this).data('offcanvas-style')).removeData('offcanvas-style')
+ })
+
+ this.$element.trigger('hidden.bs.offcanvas')
+ }
+
+ elements.removeClass('canvas-slid').addClass('canvas-sliding')
+
+ setTimeout($.proxy(function() {
+ this.slide(elements, offset, $.proxy(complete, this))
+ }, this), 1)
+ }
+
+ OffCanvas.prototype.toggle = function () {
+ if (this.state === 'slide-in' || this.state === 'slide-out') return
+ this[this.state === 'slid' ? 'hide' : 'show']()
+ }
+
+ OffCanvas.prototype.calcClone = function() {
+ this.$calcClone = this.$element.clone()
+ .html('')
+ .addClass('offcanvas-clone').removeClass('in')
+ .appendTo($('body'))
+ }
+
+ OffCanvas.prototype.recalc = function () {
+ if (this.$calcClone.css('display') === 'none' || (this.state !== 'slid' && this.state !== 'slide-in')) return
+
+ this.state = null
+ this.placement = null
+ var elements = this.getCanvasElements()
+
+ this.$element.removeClass('in')
+
+ elements.removeClass('canvas-slid')
+ elements.add(this.$element).add('body').each(function() {
+ $(this).attr('style', $(this).data('offcanvas-style')).removeData('offcanvas-style')
+ })
+ }
+
+ OffCanvas.prototype.autohide = function (e) {
+ if ($(e.target).closest(this.$element).length === 0) this.hide()
+ }
+
+ // OFFCANVAS PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.offcanvas
+
+ $.fn.offcanvas = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.offcanvas')
+ var options = $.extend({}, OffCanvas.DEFAULTS, $this.data(), typeof option === 'object' && option)
+
+ if (!data) $this.data('bs.offcanvas', (data = new OffCanvas(this, options)))
+ if (typeof option === 'string') data[option]()
+ })
+ }
+
+ $.fn.offcanvas.Constructor = OffCanvas
+
+
+ // OFFCANVAS NO CONFLICT
+ // ====================
+
+ $.fn.offcanvas.noConflict = function () {
+ $.fn.offcanvas = old
+ return this
+ }
+
+
+ // OFFCANVAS DATA-API
+ // =================
+
+ $(document).on('click.bs.offcanvas.data-api', '[data-toggle=offcanvas]', function (e) {
+ var $this = $(this), href
+ var target = $this.attr('data-target')
+ || e.preventDefault()
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
+ var $canvas = $(target)
+ var data = $canvas.data('bs.offcanvas')
+ var option = data ? 'toggle' : $this.data()
+
+ e.stopPropagation()
+
+ if (data) data.toggle()
+ else $canvas.offcanvas(option)
+ })
+
+}(window.jQuery);
+
+/* ============================================================
+ * Bootstrap: rowlink.js v3.1.3
+ * http://jasny.github.io/bootstrap/javascript/#rowlink
+ * ============================================================
+ * Copyright 2012-2014 Arnold Daniels
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
++function ($) { "use strict";
+
+ var Rowlink = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Rowlink.DEFAULTS, options)
+
+ this.$element.on('click.bs.rowlink', 'td:not(.rowlink-skip)', $.proxy(this.click, this))
+ }
+
+ Rowlink.DEFAULTS = {
+ target: "a"
+ }
+
+ Rowlink.prototype.click = function(e) {
+ var target = $(e.currentTarget).closest('tr').find(this.options.target)[0]
+ if ($(e.target)[0] === target) return
+
+ e.preventDefault();
+
+ if (target.click) {
+ target.click()
+ } else if (document.createEvent) {
+ var evt = document.createEvent("MouseEvents");
+ evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
+ target.dispatchEvent(evt);
+ }
+ }
+
+
+ // ROWLINK PLUGIN DEFINITION
+ // ===========================
+
+ var old = $.fn.rowlink
+
+ $.fn.rowlink = function (options) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.rowlink')
+ if (!data) $this.data('bs.rowlink', (data = new Rowlink(this, options)))
+ })
+ }
+
+ $.fn.rowlink.Constructor = Rowlink
+
+
+ // ROWLINK NO CONFLICT
+ // ====================
+
+ $.fn.rowlink.noConflict = function () {
+ $.fn.rowlink = old
+ return this
+ }
+
+
+ // ROWLINK DATA-API
+ // ==================
+
+ $(document).on('click.bs.rowlink.data-api', '[data-link="row"]', function (e) {
+ if ($(e.target).closest('.rowlink-skip').length !== 0) return
+
+ var $this = $(this)
+ if ($this.data('bs.rowlink')) return
+ $this.rowlink($this.data())
+ $(e.target).trigger('click.bs.rowlink')
+ })
+
+}(window.jQuery);
+
+/* ===========================================================
+ * Bootstrap: inputmask.js v3.1.0
+ * http://jasny.github.io/bootstrap/javascript/#inputmask
+ *
+ * Based on Masked Input plugin by Josh Bush (digitalbush.com)
+ * ===========================================================
+ * Copyright 2012-2014 Arnold Daniels
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
++function ($) { "use strict";
+
+ var isIphone = (window.orientation !== undefined)
+ var isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1
+ var isIE = window.navigator.appName == 'Microsoft Internet Explorer'
+
+ // INPUTMASK PUBLIC CLASS DEFINITION
+ // =================================
+
+ var Inputmask = function (element, options) {
+ if (isAndroid) return // No support because caret positioning doesn't work on Android
+
+ this.$element = $(element)
+ this.options = $.extend({}, Inputmask.DEFAULTS, options)
+ this.mask = String(this.options.mask)
+
+ this.init()
+ this.listen()
+
+ this.checkVal() //Perform initial check for existing values
+ }
+
+ Inputmask.DEFAULTS = {
+ mask: "",
+ placeholder: "_",
+ definitions: {
+ '9': "[0-9]",
+ 'a': "[A-Za-z]",
+ 'w': "[A-Za-z0-9]",
+ '*': "."
+ }
+ }
+
+ Inputmask.prototype.init = function() {
+ var defs = this.options.definitions
+ var len = this.mask.length
+
+ this.tests = []
+ this.partialPosition = this.mask.length
+ this.firstNonMaskPos = null
+
+ $.each(this.mask.split(""), $.proxy(function(i, c) {
+ if (c == '?') {
+ len--
+ this.partialPosition = i
+ } else if (defs[c]) {
+ this.tests.push(new RegExp(defs[c]))
+ if (this.firstNonMaskPos === null)
+ this.firstNonMaskPos = this.tests.length - 1
+ } else {
+ this.tests.push(null)
+ }
+ }, this))
+
+ this.buffer = $.map(this.mask.split(""), $.proxy(function(c, i) {
+ if (c != '?') return defs[c] ? this.options.placeholder : c
+ }, this))
+
+ this.focusText = this.$element.val()
+
+ this.$element.data("rawMaskFn", $.proxy(function() {
+ return $.map(this.buffer, function(c, i) {
+ return this.tests[i] && c != this.options.placeholder ? c : null
+ }).join('')
+ }, this))
+ }
+
+ Inputmask.prototype.listen = function() {
+ if (this.$element.attr("readonly")) return
+
+ var pasteEventName = (isIE ? 'paste' : 'input') + ".mask"
+
+ this.$element
+ .on("unmask.bs.inputmask", $.proxy(this.unmask, this))
+
+ .on("focus.bs.inputmask", $.proxy(this.focusEvent, this))
+ .on("blur.bs.inputmask", $.proxy(this.blurEvent, this))
+
+ .on("keydown.bs.inputmask", $.proxy(this.keydownEvent, this))
+ .on("keypress.bs.inputmask", $.proxy(this.keypressEvent, this))
+
+ .on(pasteEventName, $.proxy(this.pasteEvent, this))
+ }
+
+ //Helper Function for Caret positioning
+ Inputmask.prototype.caret = function(begin, end) {
+ if (this.$element.length === 0) return
+ if (typeof begin == 'number') {
+ end = (typeof end == 'number') ? end : begin
+ return this.$element.each(function() {
+ if (this.setSelectionRange) {
+ this.setSelectionRange(begin, end)
+ } else if (this.createTextRange) {
+ var range = this.createTextRange()
+ range.collapse(true)
+ range.moveEnd('character', end)
+ range.moveStart('character', begin)
+ range.select()
+ }
+ })
+ } else {
+ if (this.$element[0].setSelectionRange) {
+ begin = this.$element[0].selectionStart
+ end = this.$element[0].selectionEnd
+ } else if (document.selection && document.selection.createRange) {
+ var range = document.selection.createRange()
+ begin = 0 - range.duplicate().moveStart('character', -100000)
+ end = begin + range.text.length
+ }
+ return {
+ begin: begin,
+ end: end
+ }
+ }
+ }
+
+ Inputmask.prototype.seekNext = function(pos) {
+ var len = this.mask.length
+ while (++pos <= len && !this.tests[pos]);
+
+ return pos
+ }
+
+ Inputmask.prototype.seekPrev = function(pos) {
+ while (--pos >= 0 && !this.tests[pos]);
+
+ return pos
+ }
+
+ Inputmask.prototype.shiftL = function(begin,end) {
+ var len = this.mask.length
+
+ if (begin < 0) return
+
+ for (var i = begin, j = this.seekNext(end); i < len; i++) {
+ if (this.tests[i]) {
+ if (j < len && this.tests[i].test(this.buffer[j])) {
+ this.buffer[i] = this.buffer[j]
+ this.buffer[j] = this.options.placeholder
+ } else
+ break
+ j = this.seekNext(j)
+ }
+ }
+ this.writeBuffer()
+ this.caret(Math.max(this.firstNonMaskPos, begin))
+ }
+
+ Inputmask.prototype.shiftR = function(pos) {
+ var len = this.mask.length
+
+ for (var i = pos, c = this.options.placeholder; i < len; i++) {
+ if (this.tests[i]) {
+ var j = this.seekNext(i)
+ var t = this.buffer[i]
+ this.buffer[i] = c
+ if (j < len && this.tests[j].test(t))
+ c = t
+ else
+ break
+ }
+ }
+ },
+
+ Inputmask.prototype.unmask = function() {
+ this.$element
+ .unbind(".mask")
+ .removeData("inputmask")
+ }
+
+ Inputmask.prototype.focusEvent = function() {
+ this.focusText = this.$element.val()
+ var len = this.mask.length
+ var pos = this.checkVal()
+ this.writeBuffer()
+
+ var that = this
+ var moveCaret = function() {
+ if (pos == len)
+ that.caret(0, pos)
+ else
+ that.caret(pos)
+ }
+
+ moveCaret()
+ setTimeout(moveCaret, 50)
+ }
+
+ Inputmask.prototype.blurEvent = function() {
+ this.checkVal()
+ if (this.$element.val() !== this.focusText)
+ this.$element.trigger('change')
+ }
+
+ Inputmask.prototype.keydownEvent = function(e) {
+ var k = e.which
+
+ //backspace, delete, and escape get special treatment
+ if (k == 8 || k == 46 || (isIphone && k == 127)) {
+ var pos = this.caret(),
+ begin = pos.begin,
+ end = pos.end
+
+ if (end - begin === 0) {
+ begin = k != 46 ? this.seekPrev(begin) : (end = this.seekNext(begin - 1))
+ end = k == 46 ? this.seekNext(end) : end
+ }
+ this.clearBuffer(begin, end)
+ this.shiftL(begin, end - 1)
+
+ return false
+ } else if (k == 27) {//escape
+ this.$element.val(this.focusText)
+ this.caret(0, this.checkVal())
+ return false
+ }
+ }
+
+ Inputmask.prototype.keypressEvent = function(e) {
+ var len = this.mask.length
+
+ var k = e.which,
+ pos = this.caret()
+
+ if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore
+ return true
+ } else if (k) {
+ if (pos.end - pos.begin !== 0) {
+ this.clearBuffer(pos.begin, pos.end)
+ this.shiftL(pos.begin, pos.end - 1)
+ }
+
+ var p = this.seekNext(pos.begin - 1)
+ if (p < len) {
+ var c = String.fromCharCode(k)
+ if (this.tests[p].test(c)) {
+ this.shiftR(p)
+ this.buffer[p] = c
+ this.writeBuffer()
+ var next = this.seekNext(p)
+ this.caret(next)
+ }
+ }
+ return false
+ }
+ }
+
+ Inputmask.prototype.pasteEvent = function() {
+ var that = this
+
+ setTimeout(function() {
+ that.caret(that.checkVal(true))
+ }, 0)
+ }
+
+ Inputmask.prototype.clearBuffer = function(start, end) {
+ var len = this.mask.length
+
+ for (var i = start; i < end && i < len; i++) {
+ if (this.tests[i])
+ this.buffer[i] = this.options.placeholder
+ }
+ }
+
+ Inputmask.prototype.writeBuffer = function() {
+ return this.$element.val(this.buffer.join('')).val()
+ }
+
+ Inputmask.prototype.checkVal = function(allow) {
+ var len = this.mask.length
+ //try to place characters where they belong
+ var test = this.$element.val()
+ var lastMatch = -1
+
+ for (var i = 0, pos = 0; i < len; i++) {
+ if (this.tests[i]) {
+ this.buffer[i] = this.options.placeholder
+ while (pos++ < test.length) {
+ var c = test.charAt(pos - 1)
+ if (this.tests[i].test(c)) {
+ this.buffer[i] = c
+ lastMatch = i
+ break
+ }
+ }
+ if (pos > test.length)
+ break
+ } else if (this.buffer[i] == test.charAt(pos) && i != this.partialPosition) {
+ pos++
+ lastMatch = i
+ }
+ }
+ if (!allow && lastMatch + 1 < this.partialPosition) {
+ this.$element.val("")
+ this.clearBuffer(0, len)
+ } else if (allow || lastMatch + 1 >= this.partialPosition) {
+ this.writeBuffer()
+ if (!allow) this.$element.val(this.$element.val().substring(0, lastMatch + 1))
+ }
+ return (this.partialPosition ? i : this.firstNonMaskPos)
+ }
+
+
+ // INPUTMASK PLUGIN DEFINITION
+ // ===========================
+
+ var old = $.fn.inputmask
+
+ $.fn.inputmask = function (options) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.inputmask')
+
+ if (!data) $this.data('bs.inputmask', (data = new Inputmask(this, options)))
+ })
+ }
+
+ $.fn.inputmask.Constructor = Inputmask
+
+
+ // INPUTMASK NO CONFLICT
+ // ====================
+
+ $.fn.inputmask.noConflict = function () {
+ $.fn.inputmask = old
+ return this
+ }
+
+
+ // INPUTMASK DATA-API
+ // ==================
+
+ $(document).on('focus.bs.inputmask.data-api', '[data-mask]', function (e) {
+ var $this = $(this)
+ if ($this.data('bs.inputmask')) return
+ $this.inputmask($this.data())
+ })
+
+}(window.jQuery);
+
+/* ===========================================================
+ * Bootstrap: fileinput.js v3.1.3
+ * http://jasny.github.com/bootstrap/javascript/#fileinput
+ * ===========================================================
+ * Copyright 2012-2014 Arnold Daniels
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
++function ($) { "use strict";
+
+ var isIE = window.navigator.appName == 'Microsoft Internet Explorer'
+
+ // FILEUPLOAD PUBLIC CLASS DEFINITION
+ // =================================
+
+ var Fileinput = function (element, options) {
+ this.$element = $(element)
+
+ this.$input = this.$element.find(':file')
+ if (this.$input.length === 0) return
+
+ this.name = this.$input.attr('name') || options.name
+
+ this.$hidden = this.$element.find('input[type=hidden][name="' + this.name + '"]')
+ if (this.$hidden.length === 0) {
+ this.$hidden = $('<input type="hidden">').insertBefore(this.$input)
+ }
+
+ this.$preview = this.$element.find('.fileinput-preview')
+ var height = this.$preview.css('height')
+ if (this.$preview.css('display') !== 'inline' && height !== '0px' && height !== 'none') {
+ this.$preview.css('line-height', height)
+ }
+
+ this.original = {
+ exists: this.$element.hasClass('fileinput-exists'),
+ preview: this.$preview.html(),
+ hiddenVal: this.$hidden.val()
+ }
+
+ this.listen()
+ }
+
+ Fileinput.prototype.listen = function() {
+ this.$input.on('change.bs.fileinput', $.proxy(this.change, this))
+ $(this.$input[0].form).on('reset.bs.fileinput', $.proxy(this.reset, this))
+
+ this.$element.find('[data-trigger="fileinput"]').on('click.bs.fileinput', $.proxy(this.trigger, this))
+ this.$element.find('[data-dismiss="fileinput"]').on('click.bs.fileinput', $.proxy(this.clear, this))
+ },
+
+ Fileinput.prototype.change = function(e) {
+ var files = e.target.files === undefined ? (e.target && e.target.value ? [{ name: e.target.value.replace(/^.+\\/, '')}] : []) : e.target.files
+
+ e.stopPropagation()
+
+ if (files.length === 0) {
+ this.clear()
+ return
+ }
+
+ this.$hidden.val('')
+ this.$hidden.attr('name', '')
+ this.$input.attr('name', this.name)
+
+ var file = files[0]
+
+ if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match(/^image\/(gif|png|jpeg)$/) : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
+ var reader = new FileReader()
+ var preview = this.$preview
+ var element = this.$element
+
+ reader.onload = function(re) {
+ var $img = $('<img>')
+ $img[0].src = re.target.result
+ files[0].result = re.target.result
+
+ element.find('.fileinput-filename').text(file.name)
+
+ // if parent has max-height, using `(max-)height: 100%` on child doesn't take padding and border into account
+ if (preview.css('max-height') != 'none') $img.css('max-height', parseInt(preview.css('max-height'), 10) - parseInt(preview.css('padding-top'), 10) - parseInt(preview.css('padding-bottom'), 10) - parseInt(preview.css('border-top'), 10) - parseInt(preview.css('border-bottom'), 10))
+
+ preview.html($img)
+ element.addClass('fileinput-exists').removeClass('fileinput-new')
+
+ element.trigger('change.bs.fileinput', files)
+ }
+
+ reader.readAsDataURL(file)
+ } else {
+ this.$element.find('.fileinput-filename').text(file.name)
+ this.$preview.text(file.name)
+
+ this.$element.addClass('fileinput-exists').removeClass('fileinput-new')
+
+ this.$element.trigger('change.bs.fileinput')
+ }
+ },
+
+ Fileinput.prototype.clear = function(e) {
+ if (e) e.preventDefault()
+
+ this.$hidden.val('')
+ this.$hidden.attr('name', this.name)
+ this.$input.attr('name', '')
+
+ //ie8+ doesn't support changing the value of input with type=file so clone instead
+ if (isIE) {
+ var inputClone = this.$input.clone(true);
+ this.$input.after(inputClone);
+ this.$input.remove();
+ this.$input = inputClone;
+ } else {
+ this.$input.val('')
+ }
+
+ this.$preview.html('')
+ this.$element.find('.fileinput-filename').text('')
+ this.$element.addClass('fileinput-new').removeClass('fileinput-exists')
+
+ if (e !== undefined) {
+ this.$input.trigger('change')
+ this.$element.trigger('clear.bs.fileinput')
+ }
+ },
+
+ Fileinput.prototype.reset = function() {
+ this.clear()
+
+ this.$hidden.val(this.original.hiddenVal)
+ this.$preview.html(this.original.preview)
+ this.$element.find('.fileinput-filename').text('')
+
+ if (this.original.exists) this.$element.addClass('fileinput-exists').removeClass('fileinput-new')
+ else this.$element.addClass('fileinput-new').removeClass('fileinput-exists')
+
+ this.$element.trigger('reset.bs.fileinput')
+ },
+
+ Fileinput.prototype.trigger = function(e) {
+ this.$input.trigger('click')
+ e.preventDefault()
+ }
+
+
+ // FILEUPLOAD PLUGIN DEFINITION
+ // ===========================
+
+ var old = $.fn.fileinput
+
+ $.fn.fileinput = function (options) {
+ return this.each(function () {
+ var $this = $(this),
+ data = $this.data('bs.fileinput')
+ if (!data) $this.data('bs.fileinput', (data = new Fileinput(this, options)))
+ if (typeof options == 'string') data[options]()
+ })
+ }
+
+ $.fn.fileinput.Constructor = Fileinput
+
+
+ // FILEINPUT NO CONFLICT
+ // ====================
+
+ $.fn.fileinput.noConflict = function () {
+ $.fn.fileinput = old
+ return this
+ }
+
+
+ // FILEUPLOAD DATA-API
+ // ==================
+
+ $(document).on('click.fileinput.data-api', '[data-provides="fileinput"]', function (e) {
+ var $this = $(this)
+ if ($this.data('bs.fileinput')) return
+ $this.fileinput($this.data())
+
+ var $target = $(e.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');
+ if ($target.length > 0) {
+ e.preventDefault()
+ $target.trigger('click.bs.fileinput')
+ }
+ })
+
+}(window.jQuery);
diff --git a/web/static/js/jasny-bootstrap.min.js b/web/static/js/jasny-bootstrap.min.js
new file mode 100644
index 000000000..6eb175625
--- /dev/null
+++ b/web/static/js/jasny-bootstrap.min.js
@@ -0,0 +1,6 @@
+/*!
+ * Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap)
+ * Copyright 2012-2014 Arnold Daniels
+ * Licensed under Apache-2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE)
+ */
+if("undefined"==typeof jQuery)throw new Error("Jasny 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}void 0===a.support.transition&&(a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,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()}))}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.state=null,this.placement=null,this.options.recalc&&(this.calcClone(),a(window).on("resize",a.proxy(this.recalc,this))),this.options.autohide&&a(document).on("click",a.proxy(this.autohide,this)),this.options.toggle&&this.toggle(),this.options.disablescrolling&&(this.options.disableScrolling=this.options.disablescrolling,delete this.options.disablescrolling)};b.DEFAULTS={toggle:!0,placement:"auto",autohide:!0,recalc:!0,disableScrolling:!0},b.prototype.offset=function(){switch(this.placement){case"left":case"right":return this.$element.outerWidth();case"top":case"bottom":return this.$element.outerHeight()}},b.prototype.calcPlacement=function(){function b(a,b){if("auto"===e.css(b))return a;if("auto"===e.css(a))return b;var c=parseInt(e.css(a),10),d=parseInt(e.css(b),10);return c>d?b:a}if("auto"!==this.options.placement)return void(this.placement=this.options.placement);this.$element.hasClass("in")||this.$element.css("visiblity","hidden !important").addClass("in");var c=a(window).width()/this.$element.width(),d=a(window).height()/this.$element.height(),e=this.$element;this.placement=c>=d?b("left","right"):b("top","bottom"),"hidden !important"===this.$element.css("visibility")&&this.$element.removeClass("in").css("visiblity","")},b.prototype.opposite=function(a){switch(a){case"top":return"bottom";case"left":return"right";case"bottom":return"top";case"right":return"left"}},b.prototype.getCanvasElements=function(){var b=this.options.canvas?a(this.options.canvas):this.$element,c=b.find("*").filter(function(){return"fixed"===a(this).css("position")}).not(this.options.exclude);return b.add(c)},b.prototype.slide=function(b,c,d){if(!a.support.transition){var e={};return e[this.placement]="+="+c,b.animate(e,350,d)}var f=this.placement,g=this.opposite(f);b.each(function(){"auto"!==a(this).css(f)&&a(this).css(f,(parseInt(a(this).css(f),10)||0)+c),"auto"!==a(this).css(g)&&a(this).css(g,(parseInt(a(this).css(g),10)||0)-c)}),this.$element.one(a.support.transition.end,d).emulateTransitionEnd(350)},b.prototype.disableScrolling=function(){var b=a("body").width(),c="padding-"+this.opposite(this.placement);if(void 0===a("body").data("offcanvas-style")&&a("body").data("offcanvas-style",a("body").attr("style")||""),a("body").css("overflow","hidden"),a("body").width()>b){var d=parseInt(a("body").css(c),10)+a("body").width()-b;setTimeout(function(){a("body").css(c,d)},1)}},b.prototype.show=function(){if(!this.state){var b=a.Event("show.bs.offcanvas");if(this.$element.trigger(b),!b.isDefaultPrevented()){this.state="slide-in",this.calcPlacement();var c=this.getCanvasElements(),d=this.placement,e=this.opposite(d),f=this.offset();-1!==c.index(this.$element)&&(a(this.$element).data("offcanvas-style",a(this.$element).attr("style")||""),this.$element.css(d,-1*f),this.$element.css(d)),c.addClass("canvas-sliding").each(function(){void 0===a(this).data("offcanvas-style")&&a(this).data("offcanvas-style",a(this).attr("style")||""),"static"===a(this).css("position")&&a(this).css("position","relative"),"auto"!==a(this).css(d)&&"0px"!==a(this).css(d)||"auto"!==a(this).css(e)&&"0px"!==a(this).css(e)||a(this).css(d,0)}),this.options.disableScrolling&&this.disableScrolling();var g=function(){"slide-in"==this.state&&(this.state="slid",c.removeClass("canvas-sliding").addClass("canvas-slid"),this.$element.trigger("shown.bs.offcanvas"))};setTimeout(a.proxy(function(){this.$element.addClass("in"),this.slide(c,f,a.proxy(g,this))},this),1)}}},b.prototype.hide=function(){if("slid"===this.state){var b=a.Event("hide.bs.offcanvas");if(this.$element.trigger(b),!b.isDefaultPrevented()){this.state="slide-out";var c=a(".canvas-slid"),d=(this.placement,-1*this.offset()),e=function(){"slide-out"==this.state&&(this.state=null,this.placement=null,this.$element.removeClass("in"),c.removeClass("canvas-sliding"),c.add(this.$element).add("body").each(function(){a(this).attr("style",a(this).data("offcanvas-style")).removeData("offcanvas-style")}),this.$element.trigger("hidden.bs.offcanvas"))};c.removeClass("canvas-slid").addClass("canvas-sliding"),setTimeout(a.proxy(function(){this.slide(c,d,a.proxy(e,this))},this),1)}}},b.prototype.toggle=function(){"slide-in"!==this.state&&"slide-out"!==this.state&&this["slid"===this.state?"hide":"show"]()},b.prototype.calcClone=function(){this.$calcClone=this.$element.clone().html("").addClass("offcanvas-clone").removeClass("in").appendTo(a("body"))},b.prototype.recalc=function(){if("none"!==this.$calcClone.css("display")&&("slid"===this.state||"slide-in"===this.state)){this.state=null,this.placement=null;var b=this.getCanvasElements();this.$element.removeClass("in"),b.removeClass("canvas-slid"),b.add(this.$element).add("body").each(function(){a(this).attr("style",a(this).data("offcanvas-style")).removeData("offcanvas-style")})}},b.prototype.autohide=function(b){0===a(b.target).closest(this.$element).length&&this.hide()};var c=a.fn.offcanvas;a.fn.offcanvas=function(c){return this.each(function(){var d=a(this),e=d.data("bs.offcanvas"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.offcanvas",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.offcanvas.Constructor=b,a.fn.offcanvas.noConflict=function(){return a.fn.offcanvas=c,this},a(document).on("click.bs.offcanvas.data-api","[data-toggle=offcanvas]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.offcanvas"),h=g?"toggle":d.data();b.stopPropagation(),g?g.toggle():f.offcanvas(h)})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.$element.on("click.bs.rowlink","td:not(.rowlink-skip)",a.proxy(this.click,this))};b.DEFAULTS={target:"a"},b.prototype.click=function(b){var c=a(b.currentTarget).closest("tr").find(this.options.target)[0];if(a(b.target)[0]!==c)if(b.preventDefault(),c.click)c.click();else if(document.createEvent){var d=document.createEvent("MouseEvents");d.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),c.dispatchEvent(d)}};var c=a.fn.rowlink;a.fn.rowlink=function(c){return this.each(function(){var d=a(this),e=d.data("bs.rowlink");e||d.data("bs.rowlink",e=new b(this,c))})},a.fn.rowlink.Constructor=b,a.fn.rowlink.noConflict=function(){return a.fn.rowlink=c,this},a(document).on("click.bs.rowlink.data-api",'[data-link="row"]',function(b){if(0===a(b.target).closest(".rowlink-skip").length){var c=a(this);c.data("bs.rowlink")||(c.rowlink(c.data()),a(b.target).trigger("click.bs.rowlink"))}})}(window.jQuery),+function(a){"use strict";var b=void 0!==window.orientation,c=navigator.userAgent.toLowerCase().indexOf("android")>-1,d="Microsoft Internet Explorer"==window.navigator.appName,e=function(b,d){c||(this.$element=a(b),this.options=a.extend({},e.DEFAULTS,d),this.mask=String(this.options.mask),this.init(),this.listen(),this.checkVal())};e.DEFAULTS={mask:"",placeholder:"_",definitions:{9:"[0-9]",a:"[A-Za-z]",w:"[A-Za-z0-9]","*":"."}},e.prototype.init=function(){var b=this.options.definitions,c=this.mask.length;this.tests=[],this.partialPosition=this.mask.length,this.firstNonMaskPos=null,a.each(this.mask.split(""),a.proxy(function(a,d){"?"==d?(c--,this.partialPosition=a):b[d]?(this.tests.push(new RegExp(b[d])),null===this.firstNonMaskPos&&(this.firstNonMaskPos=this.tests.length-1)):this.tests.push(null)},this)),this.buffer=a.map(this.mask.split(""),a.proxy(function(a){return"?"!=a?b[a]?this.options.placeholder:a:void 0},this)),this.focusText=this.$element.val(),this.$element.data("rawMaskFn",a.proxy(function(){return a.map(this.buffer,function(a,b){return this.tests[b]&&a!=this.options.placeholder?a:null}).join("")},this))},e.prototype.listen=function(){if(!this.$element.attr("readonly")){var b=(d?"paste":"input")+".mask";this.$element.on("unmask.bs.inputmask",a.proxy(this.unmask,this)).on("focus.bs.inputmask",a.proxy(this.focusEvent,this)).on("blur.bs.inputmask",a.proxy(this.blurEvent,this)).on("keydown.bs.inputmask",a.proxy(this.keydownEvent,this)).on("keypress.bs.inputmask",a.proxy(this.keypressEvent,this)).on(b,a.proxy(this.pasteEvent,this))}},e.prototype.caret=function(a,b){if(0!==this.$element.length){if("number"==typeof a)return b="number"==typeof b?b:a,this.$element.each(function(){if(this.setSelectionRange)this.setSelectionRange(a,b);else if(this.createTextRange){var c=this.createTextRange();c.collapse(!0),c.moveEnd("character",b),c.moveStart("character",a),c.select()}});if(this.$element[0].setSelectionRange)a=this.$element[0].selectionStart,b=this.$element[0].selectionEnd;else if(document.selection&&document.selection.createRange){var c=document.selection.createRange();a=0-c.duplicate().moveStart("character",-1e5),b=a+c.text.length}return{begin:a,end:b}}},e.prototype.seekNext=function(a){for(var b=this.mask.length;++a<=b&&!this.tests[a];);return a},e.prototype.seekPrev=function(a){for(;--a>=0&&!this.tests[a];);return a},e.prototype.shiftL=function(a,b){var c=this.mask.length;if(!(0>a)){for(var d=a,e=this.seekNext(b);c>d;d++)if(this.tests[d]){if(!(c>e&&this.tests[d].test(this.buffer[e])))break;this.buffer[d]=this.buffer[e],this.buffer[e]=this.options.placeholder,e=this.seekNext(e)}this.writeBuffer(),this.caret(Math.max(this.firstNonMaskPos,a))}},e.prototype.shiftR=function(a){for(var b=this.mask.length,c=a,d=this.options.placeholder;b>c;c++)if(this.tests[c]){var e=this.seekNext(c),f=this.buffer[c];if(this.buffer[c]=d,!(b>e&&this.tests[e].test(f)))break;d=f}},e.prototype.unmask=function(){this.$element.unbind(".mask").removeData("inputmask")},e.prototype.focusEvent=function(){this.focusText=this.$element.val();var a=this.mask.length,b=this.checkVal();this.writeBuffer();var c=this,d=function(){b==a?c.caret(0,b):c.caret(b)};d(),setTimeout(d,50)},e.prototype.blurEvent=function(){this.checkVal(),this.$element.val()!==this.focusText&&this.$element.trigger("change")},e.prototype.keydownEvent=function(a){var c=a.which;if(8==c||46==c||b&&127==c){var d=this.caret(),e=d.begin,f=d.end;return f-e===0&&(e=46!=c?this.seekPrev(e):f=this.seekNext(e-1),f=46==c?this.seekNext(f):f),this.clearBuffer(e,f),this.shiftL(e,f-1),!1}return 27==c?(this.$element.val(this.focusText),this.caret(0,this.checkVal()),!1):void 0},e.prototype.keypressEvent=function(a){var b=this.mask.length,c=a.which,d=this.caret();if(a.ctrlKey||a.altKey||a.metaKey||32>c)return!0;if(c){d.end-d.begin!==0&&(this.clearBuffer(d.begin,d.end),this.shiftL(d.begin,d.end-1));var e=this.seekNext(d.begin-1);if(b>e){var f=String.fromCharCode(c);if(this.tests[e].test(f)){this.shiftR(e),this.buffer[e]=f,this.writeBuffer();var g=this.seekNext(e);this.caret(g)}}return!1}},e.prototype.pasteEvent=function(){var a=this;setTimeout(function(){a.caret(a.checkVal(!0))},0)},e.prototype.clearBuffer=function(a,b){for(var c=this.mask.length,d=a;b>d&&c>d;d++)this.tests[d]&&(this.buffer[d]=this.options.placeholder)},e.prototype.writeBuffer=function(){return this.$element.val(this.buffer.join("")).val()},e.prototype.checkVal=function(a){for(var b=this.mask.length,c=this.$element.val(),d=-1,e=0,f=0;b>e;e++)if(this.tests[e]){for(this.buffer[e]=this.options.placeholder;f++<c.length;){var g=c.charAt(f-1);if(this.tests[e].test(g)){this.buffer[e]=g,d=e;break}}if(f>c.length)break}else this.buffer[e]==c.charAt(f)&&e!=this.partialPosition&&(f++,d=e);return!a&&d+1<this.partialPosition?(this.$element.val(""),this.clearBuffer(0,b)):(a||d+1>=this.partialPosition)&&(this.writeBuffer(),a||this.$element.val(this.$element.val().substring(0,d+1))),this.partialPosition?e:this.firstNonMaskPos};var f=a.fn.inputmask;a.fn.inputmask=function(b){return this.each(function(){var c=a(this),d=c.data("bs.inputmask");d||c.data("bs.inputmask",d=new e(this,b))})},a.fn.inputmask.Constructor=e,a.fn.inputmask.noConflict=function(){return a.fn.inputmask=f,this},a(document).on("focus.bs.inputmask.data-api","[data-mask]",function(){var b=a(this);b.data("bs.inputmask")||b.inputmask(b.data())})}(window.jQuery),+function(a){"use strict";var b="Microsoft Internet Explorer"==window.navigator.appName,c=function(b,c){if(this.$element=a(b),this.$input=this.$element.find(":file"),0!==this.$input.length){this.name=this.$input.attr("name")||c.name,this.$hidden=this.$element.find('input[type=hidden][name="'+this.name+'"]'),0===this.$hidden.length&&(this.$hidden=a('<input type="hidden">').insertBefore(this.$input)),this.$preview=this.$element.find(".fileinput-preview");var d=this.$preview.css("height");"inline"!==this.$preview.css("display")&&"0px"!==d&&"none"!==d&&this.$preview.css("line-height",d),this.original={exists:this.$element.hasClass("fileinput-exists"),preview:this.$preview.html(),hiddenVal:this.$hidden.val()},this.listen()}};c.prototype.listen=function(){this.$input.on("change.bs.fileinput",a.proxy(this.change,this)),a(this.$input[0].form).on("reset.bs.fileinput",a.proxy(this.reset,this)),this.$element.find('[data-trigger="fileinput"]').on("click.bs.fileinput",a.proxy(this.trigger,this)),this.$element.find('[data-dismiss="fileinput"]').on("click.bs.fileinput",a.proxy(this.clear,this))},c.prototype.change=function(b){var c=void 0===b.target.files?b.target&&b.target.value?[{name:b.target.value.replace(/^.+\\/,"")}]:[]:b.target.files;if(b.stopPropagation(),0===c.length)return void this.clear();this.$hidden.val(""),this.$hidden.attr("name",""),this.$input.attr("name",this.name);var d=c[0];if(this.$preview.length>0&&("undefined"!=typeof d.type?d.type.match(/^image\/(gif|png|jpeg)$/):d.name.match(/\.(gif|png|jpe?g)$/i))&&"undefined"!=typeof FileReader){var e=new FileReader,f=this.$preview,g=this.$element;e.onload=function(b){var e=a("<img>");e[0].src=b.target.result,c[0].result=b.target.result,g.find(".fileinput-filename").text(d.name),"none"!=f.css("max-height")&&e.css("max-height",parseInt(f.css("max-height"),10)-parseInt(f.css("padding-top"),10)-parseInt(f.css("padding-bottom"),10)-parseInt(f.css("border-top"),10)-parseInt(f.css("border-bottom"),10)),f.html(e),g.addClass("fileinput-exists").removeClass("fileinput-new"),g.trigger("change.bs.fileinput",c)},e.readAsDataURL(d)}else this.$element.find(".fileinput-filename").text(d.name),this.$preview.text(d.name),this.$element.addClass("fileinput-exists").removeClass("fileinput-new"),this.$element.trigger("change.bs.fileinput")},c.prototype.clear=function(a){if(a&&a.preventDefault(),this.$hidden.val(""),this.$hidden.attr("name",this.name),this.$input.attr("name",""),b){var c=this.$input.clone(!0);this.$input.after(c),this.$input.remove(),this.$input=c}else this.$input.val("");this.$preview.html(""),this.$element.find(".fileinput-filename").text(""),this.$element.addClass("fileinput-new").removeClass("fileinput-exists"),void 0!==a&&(this.$input.trigger("change"),this.$element.trigger("clear.bs.fileinput"))},c.prototype.reset=function(){this.clear(),this.$hidden.val(this.original.hiddenVal),this.$preview.html(this.original.preview),this.$element.find(".fileinput-filename").text(""),this.original.exists?this.$element.addClass("fileinput-exists").removeClass("fileinput-new"):this.$element.addClass("fileinput-new").removeClass("fileinput-exists"),this.$element.trigger("reset.bs.fileinput")},c.prototype.trigger=function(a){this.$input.trigger("click"),a.preventDefault()};var d=a.fn.fileinput;a.fn.fileinput=function(b){return this.each(function(){var d=a(this),e=d.data("bs.fileinput");e||d.data("bs.fileinput",e=new c(this,b)),"string"==typeof b&&e[b]()})},a.fn.fileinput.Constructor=c,a.fn.fileinput.noConflict=function(){return a.fn.fileinput=d,this},a(document).on("click.fileinput.data-api",'[data-provides="fileinput"]',function(b){var c=a(this);if(!c.data("bs.fileinput")){c.fileinput(c.data());var d=a(b.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');d.length>0&&(b.preventDefault(),d.trigger("click.bs.fileinput"))}})}(window.jQuery); \ No newline at end of file
diff --git a/web/static/js/perfect-scrollbar-0.6.3.jquery.min.js b/web/static/js/perfect-scrollbar-0.6.3.jquery.min.js
deleted file mode 100755
index c2769dfab..000000000
--- a/web/static/js/perfect-scrollbar-0.6.3.jquery.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* perfect-scrollbar v0.6.3 */
-!function t(e,n,r){function o(l,s){if(!n[l]){if(!e[l]){var a="function"==typeof require&&require;if(!s&&a)return a(l,!0);if(i)return i(l,!0);var c=new Error("Cannot find module '"+l+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[l]={exports:{}};e[l][0].call(u.exports,function(t){var n=e[l][1][t];return o(n?n:t)},u,u.exports,t,e,n,r)}return n[l].exports}for(var i="function"==typeof require&&require,l=0;l<r.length;l++)o(r[l]);return o}({1:[function(t,e,n){"use strict";function r(t){t.fn.perfectScrollbar=function(e){return this.each(function(){if("object"==typeof e||"undefined"==typeof e){var n=e;i.get(this)||o.initialize(this,n)}else{var r=e;"update"===r?o.update(this):"destroy"===r&&o.destroy(this)}return t(this)})}}var o=t("../main"),i=t("../plugin/instances");if("function"==typeof define&&define.amd)define(["jquery"],r);else{var l=window.jQuery?window.jQuery:window.$;"undefined"!=typeof l&&r(l)}e.exports=r},{"../main":7,"../plugin/instances":18}],2:[function(t,e,n){"use strict";function r(t,e){var n=t.className.split(" ");n.indexOf(e)<0&&n.push(e),t.className=n.join(" ")}function o(t,e){var n=t.className.split(" "),r=n.indexOf(e);r>=0&&n.splice(r,1),t.className=n.join(" ")}n.add=function(t,e){t.classList?t.classList.add(e):r(t,e)},n.remove=function(t,e){t.classList?t.classList.remove(e):o(t,e)},n.list=function(t){return t.classList?t.classList:t.className.split(" ")}},{}],3:[function(t,e,n){"use strict";function r(t,e){return window.getComputedStyle(t)[e]}function o(t,e,n){return"number"==typeof n&&(n=n.toString()+"px"),t.style[e]=n,t}function i(t,e){for(var n in e){var r=e[n];"number"==typeof r&&(r=r.toString()+"px"),t.style[n]=r}return t}n.e=function(t,e){var n=document.createElement(t);return n.className=e,n},n.appendTo=function(t,e){return e.appendChild(t),t},n.css=function(t,e,n){return"object"==typeof e?i(t,e):"undefined"==typeof n?r(t,e):o(t,e,n)},n.matches=function(t,e){return"undefined"!=typeof t.matches?t.matches(e):"undefined"!=typeof t.matchesSelector?t.matchesSelector(e):"undefined"!=typeof t.webkitMatchesSelector?t.webkitMatchesSelector(e):"undefined"!=typeof t.mozMatchesSelector?t.mozMatchesSelector(e):"undefined"!=typeof t.msMatchesSelector?t.msMatchesSelector(e):void 0},n.remove=function(t){"undefined"!=typeof t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)}},{}],4:[function(t,e,n){"use strict";var r=function(t){this.element=t,this.events={}};r.prototype.bind=function(t,e){"undefined"==typeof this.events[t]&&(this.events[t]=[]),this.events[t].push(e),this.element.addEventListener(t,e,!1)},r.prototype.unbind=function(t,e){var n="undefined"!=typeof e;this.events[t]=this.events[t].filter(function(r){return n&&r!==e?!0:(this.element.removeEventListener(t,r,!1),!1)},this)},r.prototype.unbindAll=function(){for(var t in this.events)this.unbind(t)};var o=function(){this.eventElements=[]};o.prototype.eventElement=function(t){var e=this.eventElements.filter(function(e){return e.element===t})[0];return"undefined"==typeof e&&(e=new r(t),this.eventElements.push(e)),e},o.prototype.bind=function(t,e,n){this.eventElement(t).bind(e,n)},o.prototype.unbind=function(t,e,n){this.eventElement(t).unbind(e,n)},o.prototype.unbindAll=function(){for(var t=0;t<this.eventElements.length;t++)this.eventElements[t].unbindAll()},o.prototype.once=function(t,e,n){var r=this.eventElement(t),o=function(t){r.unbind(e,o),n(t)};r.bind(e,o)},e.exports=o},{}],5:[function(t,e,n){"use strict";e.exports=function(){function t(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return function(){return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()}}()},{}],6:[function(t,e,n){"use strict";var r=t("./class"),o=t("./dom");n.toInt=function(t){return parseInt(t,10)||0},n.clone=function(t){if(null===t)return null;if("object"==typeof t){var e={};for(var n in t)e[n]=this.clone(t[n]);return e}return t},n.extend=function(t,e){var n=this.clone(t);for(var r in e)n[r]=this.clone(e[r]);return n},n.isEditable=function(t){return o.matches(t,"input,[contenteditable]")||o.matches(t,"select,[contenteditable]")||o.matches(t,"textarea,[contenteditable]")||o.matches(t,"button,[contenteditable]")},n.removePsClasses=function(t){for(var e=r.list(t),n=0;n<e.length;n++){var o=e[n];0===o.indexOf("ps-")&&r.remove(t,o)}},n.outerWidth=function(t){return this.toInt(o.css(t,"width"))+this.toInt(o.css(t,"paddingLeft"))+this.toInt(o.css(t,"paddingRight"))+this.toInt(o.css(t,"borderLeftWidth"))+this.toInt(o.css(t,"borderRightWidth"))},n.startScrolling=function(t,e){r.add(t,"ps-in-scrolling"),"undefined"!=typeof e?r.add(t,"ps-"+e):(r.add(t,"ps-x"),r.add(t,"ps-y"))},n.stopScrolling=function(t,e){r.remove(t,"ps-in-scrolling"),"undefined"!=typeof e?r.remove(t,"ps-"+e):(r.remove(t,"ps-x"),r.remove(t,"ps-y"))},n.env={isWebKit:"WebkitAppearance"in document.documentElement.style,supportsTouch:"ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch,supportsIePointer:null!==window.navigator.msMaxTouchPoints}},{"./class":2,"./dom":3}],7:[function(t,e,n){"use strict";var r=t("./plugin/destroy"),o=t("./plugin/initialize"),i=t("./plugin/update");e.exports={initialize:o,update:i,destroy:r}},{"./plugin/destroy":9,"./plugin/initialize":17,"./plugin/update":20}],8:[function(t,e,n){"use strict";e.exports={wheelSpeed:1,wheelPropagation:!1,swipePropagation:!0,minScrollbarLength:null,maxScrollbarLength:null,useBothWheelAxes:!1,useKeyboard:!0,suppressScrollX:!1,suppressScrollY:!1,scrollXMarginOffset:0,scrollYMarginOffset:0}},{}],9:[function(t,e,n){"use strict";var r=t("../lib/dom"),o=t("../lib/helper"),i=t("./instances");e.exports=function(t){var e=i.get(t);e.event.unbindAll(),r.remove(e.scrollbarX),r.remove(e.scrollbarY),r.remove(e.scrollbarXRail),r.remove(e.scrollbarYRail),o.removePsClasses(t),i.remove(t)}},{"../lib/dom":3,"../lib/helper":6,"./instances":18}],10:[function(t,e,n){"use strict";function r(t,e){function n(t){return t.getBoundingClientRect()}var r=window.Event.prototype.stopPropagation.bind;e.event.bind(e.scrollbarY,"click",r),e.event.bind(e.scrollbarYRail,"click",function(r){var i=o.toInt(e.scrollbarYHeight/2),s=e.railYRatio*(r.pageY-window.scrollY-n(e.scrollbarYRail).top-i),a=e.railYRatio*(e.railYHeight-e.scrollbarYHeight),c=s/a;0>c?c=0:c>1&&(c=1),t.scrollTop=(e.contentHeight-e.containerHeight)*c,l(t),r.stopPropagation()}),e.event.bind(e.scrollbarX,"click",r),e.event.bind(e.scrollbarXRail,"click",function(r){var i=o.toInt(e.scrollbarXWidth/2),s=e.railXRatio*(r.pageX-window.scrollX-n(e.scrollbarXRail).left-i),a=e.railXRatio*(e.railXWidth-e.scrollbarXWidth),c=s/a;0>c?c=0:c>1&&(c=1),t.scrollLeft=(e.contentWidth-e.containerWidth)*c-e.negativeScrollAdjustment,l(t),r.stopPropagation()})}var o=t("../../lib/helper"),i=t("../instances"),l=t("../update-geometry");e.exports=function(t){var e=i.get(t);r(t,e)}},{"../../lib/helper":6,"../instances":18,"../update-geometry":19}],11:[function(t,e,n){"use strict";function r(t,e){function n(n){var o=r+n*e.railXRatio,i=e.scrollbarXRail.getBoundingClientRect().left+e.railXRatio*(e.railXWidth-e.scrollbarXWidth);e.scrollbarXLeft=0>o?0:o>i?i:o;var s=l.toInt(e.scrollbarXLeft*(e.contentWidth-e.containerWidth)/(e.containerWidth-e.railXRatio*e.scrollbarXWidth))-e.negativeScrollAdjustment;t.scrollLeft=s}var r=null,o=null,s=function(e){n(e.pageX-o),a(t),e.stopPropagation(),e.preventDefault()},c=function(){l.stopScrolling(t,"x"),e.event.unbind(e.ownerDocument,"mousemove",s)};e.event.bind(e.scrollbarX,"mousedown",function(n){o=n.pageX,r=l.toInt(i.css(e.scrollbarX,"left"))*e.railXRatio,l.startScrolling(t,"x"),e.event.bind(e.ownerDocument,"mousemove",s),e.event.once(e.ownerDocument,"mouseup",c),n.stopPropagation(),n.preventDefault()})}function o(t,e){function n(n){var o=r+n*e.railYRatio,i=e.scrollbarYRail.getBoundingClientRect().top+e.railYRatio*(e.railYHeight-e.scrollbarYHeight);e.scrollbarYTop=0>o?0:o>i?i:o;var s=l.toInt(e.scrollbarYTop*(e.contentHeight-e.containerHeight)/(e.containerHeight-e.railYRatio*e.scrollbarYHeight));t.scrollTop=s}var r=null,o=null,s=function(e){n(e.pageY-o),a(t),e.stopPropagation(),e.preventDefault()},c=function(){l.stopScrolling(t,"y"),e.event.unbind(e.ownerDocument,"mousemove",s)};e.event.bind(e.scrollbarY,"mousedown",function(n){o=n.pageY,r=l.toInt(i.css(e.scrollbarY,"top"))*e.railYRatio,l.startScrolling(t,"y"),e.event.bind(e.ownerDocument,"mousemove",s),e.event.once(e.ownerDocument,"mouseup",c),n.stopPropagation(),n.preventDefault()})}var i=t("../../lib/dom"),l=t("../../lib/helper"),s=t("../instances"),a=t("../update-geometry");e.exports=function(t){var e=s.get(t);r(t,e),o(t,e)}},{"../../lib/dom":3,"../../lib/helper":6,"../instances":18,"../update-geometry":19}],12:[function(t,e,n){"use strict";function r(t,e){function n(n,r){var o=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===o&&r>0||o>=e.contentHeight-e.containerHeight&&0>r)return!e.settings.wheelPropagation}var i=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===i&&0>n||i>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}var r=!1;e.event.bind(t,"mouseenter",function(){r=!0}),e.event.bind(t,"mouseleave",function(){r=!1});var i=!1;e.event.bind(e.ownerDocument,"keydown",function(s){if((!s.isDefaultPrevented||!s.isDefaultPrevented())&&r){var a=document.activeElement?document.activeElement:e.ownerDocument.activeElement;if(a){for(;a.shadowRoot;)a=a.shadowRoot.activeElement;if(o.isEditable(a))return}var c=0,u=0;switch(s.which){case 37:c=-30;break;case 38:u=30;break;case 39:c=30;break;case 40:u=-30;break;case 33:u=90;break;case 32:case 34:u=-90;break;case 35:u=s.ctrlKey?-e.contentHeight:-e.containerHeight;break;case 36:u=s.ctrlKey?t.scrollTop:e.containerHeight;break;default:return}t.scrollTop=t.scrollTop-u,t.scrollLeft=t.scrollLeft+c,l(t),i=n(c,u),i&&s.preventDefault()}})}var o=t("../../lib/helper"),i=t("../instances"),l=t("../update-geometry");e.exports=function(t){var e=i.get(t);r(t,e)}},{"../../lib/helper":6,"../instances":18,"../update-geometry":19}],13:[function(t,e,n){"use strict";function r(t,e){function n(n,r){var o=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===o&&r>0||o>=e.contentHeight-e.containerHeight&&0>r)return!e.settings.wheelPropagation}var i=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===i&&0>n||i>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}function r(t){var e=t.deltaX,n=-1*t.deltaY;return("undefined"==typeof e||"undefined"==typeof n)&&(e=-1*t.wheelDeltaX/6,n=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(e*=10,n*=10),e!==e&&n!==n&&(e=0,n=t.wheelDelta),[e,n]}function i(e,n){var r=t.querySelector("textarea:hover");if(r){var o=r.scrollHeight-r.clientHeight;if(o>0&&!(0===r.scrollTop&&n>0||r.scrollTop===o&&0>n))return!0;var i=r.scrollLeft-r.clientWidth;if(i>0&&!(0===r.scrollLeft&&0>e||r.scrollLeft===i&&e>0))return!0}return!1}function s(s){if(o.env.isWebKit||!t.querySelector("select:focus")){var c=r(s),u=c[0],d=c[1];i(u,d)||(a=!1,e.settings.useBothWheelAxes?e.scrollbarYActive&&!e.scrollbarXActive?(t.scrollTop=d?t.scrollTop-d*e.settings.wheelSpeed:t.scrollTop+u*e.settings.wheelSpeed,a=!0):e.scrollbarXActive&&!e.scrollbarYActive&&(t.scrollLeft=u?t.scrollLeft+u*e.settings.wheelSpeed:t.scrollLeft-d*e.settings.wheelSpeed,a=!0):(t.scrollTop=t.scrollTop-d*e.settings.wheelSpeed,t.scrollLeft=t.scrollLeft+u*e.settings.wheelSpeed),l(t),a=a||n(u,d),a&&(s.stopPropagation(),s.preventDefault()))}}var a=!1;"undefined"!=typeof window.onwheel?e.event.bind(t,"wheel",s):"undefined"!=typeof window.onmousewheel&&e.event.bind(t,"mousewheel",s)}var o=t("../../lib/helper"),i=t("../instances"),l=t("../update-geometry");e.exports=function(t){var e=i.get(t);r(t,e)}},{"../../lib/helper":6,"../instances":18,"../update-geometry":19}],14:[function(t,e,n){"use strict";function r(t,e){e.event.bind(t,"scroll",function(){i(t)})}var o=t("../instances"),i=t("../update-geometry");e.exports=function(t){var e=o.get(t);r(t,e)}},{"../instances":18,"../update-geometry":19}],15:[function(t,e,n){"use strict";function r(t,e){function n(){var t=window.getSelection?window.getSelection():document.getSelection?document.getSelection():"";return 0===t.toString().length?null:t.getRangeAt(0).commonAncestorContainer}function r(){a||(a=setInterval(function(){return i.get(t)?(t.scrollTop=t.scrollTop+c.top,t.scrollLeft=t.scrollLeft+c.left,void l(t)):void clearInterval(a)},50))}function s(){a&&(clearInterval(a),a=null),o.stopScrolling(t)}var a=null,c={top:0,left:0},u=!1;e.event.bind(e.ownerDocument,"selectionchange",function(){t.contains(n())?u=!0:(u=!1,s())}),e.event.bind(window,"mouseup",function(){u&&(u=!1,s())}),e.event.bind(window,"mousemove",function(e){if(u){var n={x:e.pageX,y:e.pageY},i={left:t.offsetLeft,right:t.offsetLeft+t.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight};n.x<i.left+3?(c.left=-5,o.startScrolling(t,"x")):n.x>i.right-3?(c.left=5,o.startScrolling(t,"x")):c.left=0,n.y<i.top+3?(c.top=i.top+3-n.y<5?-5:-20,o.startScrolling(t,"y")):n.y>i.bottom-3?(c.top=n.y-i.bottom+3<5?5:20,o.startScrolling(t,"y")):c.top=0,0===c.top&&0===c.left?s():r()}})}var o=t("../../lib/helper"),i=t("../instances"),l=t("../update-geometry");e.exports=function(t){var e=i.get(t);r(t,e)}},{"../../lib/helper":6,"../instances":18,"../update-geometry":19}],16:[function(t,e,n){"use strict";function r(t,e,n,r){function l(n,r){var o=t.scrollTop,i=t.scrollLeft,l=Math.abs(n),s=Math.abs(r);if(s>l){if(0>r&&o===e.contentHeight-e.containerHeight||r>0&&0===o)return!e.settings.swipePropagation}else if(l>s&&(0>n&&i===e.contentWidth-e.containerWidth||n>0&&0===i))return!e.settings.swipePropagation;return!0}function s(e,n){t.scrollTop=t.scrollTop-n,t.scrollLeft=t.scrollLeft-e,i(t)}function a(){Y=!0}function c(){Y=!1}function u(t){return t.targetTouches?t.targetTouches[0]:t}function d(t){return t.targetTouches&&1===t.targetTouches.length?!0:t.pointerType&&"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE?!0:!1}function p(t){if(d(t)){y=!0;var e=u(t);b.pageX=e.pageX,b.pageY=e.pageY,g=(new Date).getTime(),null!==m&&clearInterval(m),t.stopPropagation()}}function f(t){if(!Y&&y&&d(t)){var e=u(t),n={pageX:e.pageX,pageY:e.pageY},r=n.pageX-b.pageX,o=n.pageY-b.pageY;s(r,o),b=n;var i=(new Date).getTime(),a=i-g;a>0&&(v.x=r/a,v.y=o/a,g=i),l(r,o)&&(t.stopPropagation(),t.preventDefault())}}function h(){!Y&&y&&(y=!1,clearInterval(m),m=setInterval(function(){return o.get(t)?Math.abs(v.x)<.01&&Math.abs(v.y)<.01?void clearInterval(m):(s(30*v.x,30*v.y),v.x*=.8,void(v.y*=.8)):void clearInterval(m)},10))}var b={},g=0,v={},m=null,Y=!1,y=!1;n&&(e.event.bind(window,"touchstart",a),e.event.bind(window,"touchend",c),e.event.bind(t,"touchstart",p),e.event.bind(t,"touchmove",f),e.event.bind(t,"touchend",h)),r&&(window.PointerEvent?(e.event.bind(window,"pointerdown",a),e.event.bind(window,"pointerup",c),e.event.bind(t,"pointerdown",p),e.event.bind(t,"pointermove",f),e.event.bind(t,"pointerup",h)):window.MSPointerEvent&&(e.event.bind(window,"MSPointerDown",a),e.event.bind(window,"MSPointerUp",c),e.event.bind(t,"MSPointerDown",p),e.event.bind(t,"MSPointerMove",f),e.event.bind(t,"MSPointerUp",h)))}var o=t("../instances"),i=t("../update-geometry");e.exports=function(t,e,n){var i=o.get(t);r(t,i,e,n)}},{"../instances":18,"../update-geometry":19}],17:[function(t,e,n){"use strict";var r=t("../lib/class"),o=t("../lib/helper"),i=t("./instances"),l=t("./update-geometry"),s=t("./handler/click-rail"),a=t("./handler/drag-scrollbar"),c=t("./handler/keyboard"),u=t("./handler/mouse-wheel"),d=t("./handler/native-scroll"),p=t("./handler/selection"),f=t("./handler/touch");e.exports=function(t,e){e="object"==typeof e?e:{},r.add(t,"ps-container");var n=i.add(t);n.settings=o.extend(n.settings,e),s(t),a(t),u(t),d(t),p(t),(o.env.supportsTouch||o.env.supportsIePointer)&&f(t,o.env.supportsTouch,o.env.supportsIePointer),n.settings.useKeyboard&&c(t),l(t)}},{"../lib/class":2,"../lib/helper":6,"./handler/click-rail":10,"./handler/drag-scrollbar":11,"./handler/keyboard":12,"./handler/mouse-wheel":13,"./handler/native-scroll":14,"./handler/selection":15,"./handler/touch":16,"./instances":18,"./update-geometry":19}],18:[function(t,e,n){"use strict";function r(t){var e=this;e.settings=d.clone(a),e.containerWidth=null,e.containerHeight=null,e.contentWidth=null,e.contentHeight=null,e.isRtl="rtl"===s.css(t,"direction"),e.isNegativeScroll=function(){var e=t.scrollLeft,n=null;return t.scrollLeft=-1,n=t.scrollLeft<0,t.scrollLeft=e,n}(),e.negativeScrollAdjustment=e.isNegativeScroll?t.scrollWidth-t.clientWidth:0,e.event=new c,e.ownerDocument=t.ownerDocument||document,e.scrollbarXRail=s.appendTo(s.e("div","ps-scrollbar-x-rail"),t),e.scrollbarX=s.appendTo(s.e("div","ps-scrollbar-x"),e.scrollbarXRail),e.scrollbarXActive=null,e.scrollbarXWidth=null,e.scrollbarXLeft=null,e.scrollbarXBottom=d.toInt(s.css(e.scrollbarXRail,"bottom")),e.isScrollbarXUsingBottom=e.scrollbarXBottom===e.scrollbarXBottom,e.scrollbarXTop=e.isScrollbarXUsingBottom?null:d.toInt(s.css(e.scrollbarXRail,"top")),e.railBorderXWidth=d.toInt(s.css(e.scrollbarXRail,"borderLeftWidth"))+d.toInt(s.css(e.scrollbarXRail,"borderRightWidth")),s.css(e.scrollbarXRail,"display","block"),e.railXMarginWidth=d.toInt(s.css(e.scrollbarXRail,"marginLeft"))+d.toInt(s.css(e.scrollbarXRail,"marginRight")),s.css(e.scrollbarXRail,"display",""),e.railXWidth=null,e.railXRatio=null,e.scrollbarYRail=s.appendTo(s.e("div","ps-scrollbar-y-rail"),t),e.scrollbarY=s.appendTo(s.e("div","ps-scrollbar-y"),e.scrollbarYRail),e.scrollbarYActive=null,e.scrollbarYHeight=null,e.scrollbarYTop=null,e.scrollbarYRight=d.toInt(s.css(e.scrollbarYRail,"right")),e.isScrollbarYUsingRight=e.scrollbarYRight===e.scrollbarYRight,e.scrollbarYLeft=e.isScrollbarYUsingRight?null:d.toInt(s.css(e.scrollbarYRail,"left")),e.scrollbarYOuterWidth=e.isRtl?d.outerWidth(e.scrollbarY):null,e.railBorderYWidth=d.toInt(s.css(e.scrollbarYRail,"borderTopWidth"))+d.toInt(s.css(e.scrollbarYRail,"borderBottomWidth")),s.css(e.scrollbarYRail,"display","block"),e.railYMarginHeight=d.toInt(s.css(e.scrollbarYRail,"marginTop"))+d.toInt(s.css(e.scrollbarYRail,"marginBottom")),s.css(e.scrollbarYRail,"display",""),e.railYHeight=null,e.railYRatio=null}function o(t){return"undefined"==typeof t.dataset?t.getAttribute("data-ps-id"):t.dataset.psId}function i(t,e){"undefined"==typeof t.dataset?t.setAttribute("data-ps-id",e):t.dataset.psId=e}function l(t){"undefined"==typeof t.dataset?t.removeAttribute("data-ps-id"):delete t.dataset.psId}var s=t("../lib/dom"),a=t("./default-setting"),c=t("../lib/event-manager"),u=t("../lib/guid"),d=t("../lib/helper"),p={};n.add=function(t){var e=u();return i(t,e),p[e]=new r(t),p[e]},n.remove=function(t){delete p[o(t)],l(t)},n.get=function(t){return p[o(t)]}},{"../lib/dom":3,"../lib/event-manager":4,"../lib/guid":5,"../lib/helper":6,"./default-setting":8}],19:[function(t,e,n){"use strict";function r(t,e){return t.settings.minScrollbarLength&&(e=Math.max(e,t.settings.minScrollbarLength)),t.settings.maxScrollbarLength&&(e=Math.min(e,t.settings.maxScrollbarLength)),e}function o(t,e){var n={width:e.railXWidth};n.left=e.isRtl?e.negativeScrollAdjustment+t.scrollLeft+e.containerWidth-e.contentWidth:t.scrollLeft,e.isScrollbarXUsingBottom?n.bottom=e.scrollbarXBottom-t.scrollTop:n.top=e.scrollbarXTop+t.scrollTop,l.css(e.scrollbarXRail,n);var r={top:t.scrollTop,height:e.railYHeight};e.isScrollbarYUsingRight?r.right=e.isRtl?e.contentWidth-(e.negativeScrollAdjustment+t.scrollLeft)-e.scrollbarYRight-e.scrollbarYOuterWidth:e.scrollbarYRight-t.scrollLeft:r.left=e.isRtl?e.negativeScrollAdjustment+t.scrollLeft+2*e.containerWidth-e.contentWidth-e.scrollbarYLeft-e.scrollbarYOuterWidth:e.scrollbarYLeft+t.scrollLeft,l.css(e.scrollbarYRail,r),l.css(e.scrollbarX,{left:e.scrollbarXLeft,width:e.scrollbarXWidth-e.railBorderXWidth}),l.css(e.scrollbarY,{top:e.scrollbarYTop,height:e.scrollbarYHeight-e.railBorderYWidth})}var i=t("../lib/class"),l=t("../lib/dom"),s=t("../lib/helper"),a=t("./instances");e.exports=function(t){var e=a.get(t);e.containerWidth=t.clientWidth,e.containerHeight=t.clientHeight,e.contentWidth=t.scrollWidth,e.contentHeight=t.scrollHeight,t.contains(e.scrollbarXRail)||l.appendTo(e.scrollbarXRail,t),t.contains(e.scrollbarYRail)||l.appendTo(e.scrollbarYRail,t),!e.settings.suppressScrollX&&e.containerWidth+e.settings.scrollXMarginOffset<e.contentWidth?(e.scrollbarXActive=!0,e.railXWidth=e.containerWidth-e.railXMarginWidth,e.railXRatio=e.containerWidth/e.railXWidth,e.scrollbarXWidth=r(e,s.toInt(e.railXWidth*e.containerWidth/e.contentWidth)),e.scrollbarXLeft=s.toInt((e.negativeScrollAdjustment+t.scrollLeft)*(e.railXWidth-e.scrollbarXWidth)/(e.contentWidth-e.containerWidth))):(e.scrollbarXActive=!1,e.scrollbarXWidth=0,e.scrollbarXLeft=0,t.scrollLeft=0),!e.settings.suppressScrollY&&e.containerHeight+e.settings.scrollYMarginOffset<e.contentHeight?(e.scrollbarYActive=!0,e.railYHeight=e.containerHeight-e.railYMarginHeight,e.railYRatio=e.containerHeight/e.railYHeight,e.scrollbarYHeight=r(e,s.toInt(e.railYHeight*e.containerHeight/e.contentHeight)),e.scrollbarYTop=s.toInt(t.scrollTop*(e.railYHeight-e.scrollbarYHeight)/(e.contentHeight-e.containerHeight))):(e.scrollbarYActive=!1,e.scrollbarYHeight=0,e.scrollbarYTop=0,t.scrollTop=0),e.scrollbarXLeft>=e.railXWidth-e.scrollbarXWidth&&(e.scrollbarXLeft=e.railXWidth-e.scrollbarXWidth),e.scrollbarYTop>=e.railYHeight-e.scrollbarYHeight&&(e.scrollbarYTop=e.railYHeight-e.scrollbarYHeight),o(t,e),i[e.scrollbarXActive?"add":"remove"](t,"ps-active-x"),i[e.scrollbarYActive?"add":"remove"](t,"ps-active-y")}},{"../lib/class":2,"../lib/dom":3,"../lib/helper":6,"./instances":18}],20:[function(t,e,n){"use strict";var r=t("../lib/dom"),o=t("../lib/helper"),i=t("./instances"),l=t("./update-geometry");e.exports=function(t){var e=i.get(t);e.negativeScrollAdjustment=e.isNegativeScroll?t.scrollWidth-t.clientWidth:0,r.css(e.scrollbarXRail,"display","block"),r.css(e.scrollbarYRail,"display","block"),e.railXMarginWidth=o.toInt(r.css(e.scrollbarXRail,"marginLeft"))+o.toInt(r.css(e.scrollbarXRail,"marginRight")),e.railYMarginHeight=o.toInt(r.css(e.scrollbarYRail,"marginTop"))+o.toInt(r.css(e.scrollbarYRail,"marginBottom")),r.css(e.scrollbarXRail,"display","none"),r.css(e.scrollbarYRail,"display","none"),l(t),r.css(e.scrollbarXRail,"display",""),r.css(e.scrollbarYRail,"display","")}},{"../lib/dom":3,"../lib/helper":6,"./instances":18,"./update-geometry":19}]},{},[1]); \ No newline at end of file
diff --git a/web/static/js/perfect-scrollbar-0.6.3.jquery.js b/web/static/js/perfect-scrollbar-0.6.5.jquery.js
index c4f0998a0..1473db9ad 100755
--- a/web/static/js/perfect-scrollbar-0.6.3.jquery.js
+++ b/web/static/js/perfect-scrollbar-0.6.5.jquery.js
@@ -1,4 +1,4 @@
-/* perfect-scrollbar v0.6.3 */
+/* perfect-scrollbar v0.6.5-1 */
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/* Copyright (c) 2015 Hyunje Alex Jun and other contributors
* Licensed under the MIT License
@@ -100,13 +100,15 @@ exports.list = function (element) {
*/
'use strict';
-exports.e = function (tagName, className) {
+var DOM = {};
+
+DOM.e = function (tagName, className) {
var element = document.createElement(tagName);
element.className = className;
return element;
};
-exports.appendTo = function (child, parent) {
+DOM.appendTo = function (child, parent) {
parent.appendChild(child);
return child;
};
@@ -134,7 +136,7 @@ function cssMultiSet(element, obj) {
return element;
}
-exports.css = function (element, styleNameOrObject, styleValue) {
+DOM.css = function (element, styleNameOrObject, styleValue) {
if (typeof styleNameOrObject === 'object') {
// multiple set with object
return cssMultiSet(element, styleNameOrObject);
@@ -147,7 +149,7 @@ exports.css = function (element, styleNameOrObject, styleValue) {
}
};
-exports.matches = function (element, query) {
+DOM.matches = function (element, query) {
if (typeof element.matches !== 'undefined') {
return element.matches(query);
} else {
@@ -163,7 +165,7 @@ exports.matches = function (element, query) {
}
};
-exports.remove = function (element) {
+DOM.remove = function (element) {
if (typeof element.remove !== 'undefined') {
element.remove();
} else {
@@ -173,6 +175,14 @@ exports.remove = function (element) {
}
};
+DOM.queryChildren = function (element, selector) {
+ return Array.prototype.filter.call(element.childNodes, function (child) {
+ return DOM.matches(child, selector);
+ });
+};
+
+module.exports = DOM;
+
},{}],4:[function(require,module,exports){
/* Copyright (c) 2015 Hyunje Alex Jun and other contributors
* Licensed under the MIT License
@@ -386,7 +396,8 @@ module.exports = {
suppressScrollX: false,
suppressScrollY: false,
scrollXMarginOffset: 0,
- scrollYMarginOffset: 0
+ scrollYMarginOffset: 0,
+ stopPropagationOnClick: true
};
},{}],9:[function(require,module,exports){
@@ -402,6 +413,10 @@ var d = require('../lib/dom')
module.exports = function (element) {
var i = instances.get(element);
+ if (!i) {
+ return;
+ }
+
i.event.unbindAll();
d.remove(i.scrollbarX);
d.remove(i.scrollbarY);
@@ -426,9 +441,12 @@ function bindClickRailHandler(element, i) {
function pageOffset(el) {
return el.getBoundingClientRect();
}
- var stopPropagation = window.Event.prototype.stopPropagation.bind;
- i.event.bind(i.scrollbarY, 'click', stopPropagation);
+ if (i.settings.stopPropagationOnClick) {
+ i.event.bind(i.scrollbarY, 'click', function (e) {
+ e.stopPropagation();
+ });
+ }
i.event.bind(i.scrollbarYRail, 'click', function (e) {
var halfOfScrollbarLength = h.toInt(i.scrollbarYHeight / 2);
var positionTop = i.railYRatio * (e.pageY - window.scrollY - pageOffset(i.scrollbarYRail).top - halfOfScrollbarLength);
@@ -447,7 +465,11 @@ function bindClickRailHandler(element, i) {
e.stopPropagation();
});
- i.event.bind(i.scrollbarX, 'click', stopPropagation);
+ if (i.settings.stopPropagationOnClick) {
+ i.event.bind(i.scrollbarY, 'click', function (e) {
+ e.stopPropagation();
+ });
+ }
i.event.bind(i.scrollbarXRail, 'click', function (e) {
var halfOfScrollbarLength = h.toInt(i.scrollbarXWidth / 2);
var positionLeft = i.railXRatio * (e.pageX - window.scrollX - pageOffset(i.scrollbarXRail).left - halfOfScrollbarLength);
@@ -662,6 +684,12 @@ function bindKeyboardHandler(element, i) {
deltaY = 90;
break;
case 32: // space bar
+ if (e.shiftKey) {
+ deltaY = 90;
+ } else {
+ deltaY = -90;
+ }
+ break;
case 34: // page down
deltaY = -90;
break;
@@ -1368,10 +1396,23 @@ module.exports = function (element) {
i.contentWidth = element.scrollWidth;
i.contentHeight = element.scrollHeight;
+ var existingRails;
if (!element.contains(i.scrollbarXRail)) {
+ existingRails = d.queryChildren(element, '.ps-scrollbar-x-rail');
+ if (existingRails.length > 0) {
+ existingRails.forEach(function (rail) {
+ d.remove(rail);
+ });
+ }
d.appendTo(i.scrollbarXRail, element);
}
if (!element.contains(i.scrollbarYRail)) {
+ existingRails = d.queryChildren(element, '.ps-scrollbar-y-rail');
+ if (existingRails.length > 0) {
+ existingRails.forEach(function (rail) {
+ d.remove(rail);
+ });
+ }
d.appendTo(i.scrollbarYRail, element);
}
@@ -1428,6 +1469,10 @@ var d = require('../lib/dom')
module.exports = function (element) {
var i = instances.get(element);
+ if (!i) {
+ return;
+ }
+
// Recalcuate negative scrollLeft adjustment
i.negativeScrollAdjustment = i.isNegativeScroll ? element.scrollWidth - element.clientWidth : 0;
diff --git a/web/static/js/perfect-scrollbar-0.6.5.jquery.min.js b/web/static/js/perfect-scrollbar-0.6.5.jquery.min.js
new file mode 100755
index 000000000..804ae8c9b
--- /dev/null
+++ b/web/static/js/perfect-scrollbar-0.6.5.jquery.min.js
@@ -0,0 +1,2 @@
+/* perfect-scrollbar v0.6.5-1 */
+!function t(e,n,r){function o(l,s){if(!n[l]){if(!e[l]){var a="function"==typeof require&&require;if(!s&&a)return a(l,!0);if(i)return i(l,!0);var c=new Error("Cannot find module '"+l+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[l]={exports:{}};e[l][0].call(u.exports,function(t){var n=e[l][1][t];return o(n?n:t)},u,u.exports,t,e,n,r)}return n[l].exports}for(var i="function"==typeof require&&require,l=0;l<r.length;l++)o(r[l]);return o}({1:[function(t,e,n){"use strict";function r(t){t.fn.perfectScrollbar=function(e){return this.each(function(){if("object"==typeof e||"undefined"==typeof e){var n=e;i.get(this)||o.initialize(this,n)}else{var r=e;"update"===r?o.update(this):"destroy"===r&&o.destroy(this)}return t(this)})}}var o=t("../main"),i=t("../plugin/instances");if("function"==typeof define&&define.amd)define(["jquery"],r);else{var l=window.jQuery?window.jQuery:window.$;"undefined"!=typeof l&&r(l)}e.exports=r},{"../main":7,"../plugin/instances":18}],2:[function(t,e,n){"use strict";function r(t,e){var n=t.className.split(" ");n.indexOf(e)<0&&n.push(e),t.className=n.join(" ")}function o(t,e){var n=t.className.split(" "),r=n.indexOf(e);r>=0&&n.splice(r,1),t.className=n.join(" ")}n.add=function(t,e){t.classList?t.classList.add(e):r(t,e)},n.remove=function(t,e){t.classList?t.classList.remove(e):o(t,e)},n.list=function(t){return t.classList?t.classList:t.className.split(" ")}},{}],3:[function(t,e,n){"use strict";function r(t,e){return window.getComputedStyle(t)[e]}function o(t,e,n){return"number"==typeof n&&(n=n.toString()+"px"),t.style[e]=n,t}function i(t,e){for(var n in e){var r=e[n];"number"==typeof r&&(r=r.toString()+"px"),t.style[n]=r}return t}var l={};l.e=function(t,e){var n=document.createElement(t);return n.className=e,n},l.appendTo=function(t,e){return e.appendChild(t),t},l.css=function(t,e,n){return"object"==typeof e?i(t,e):"undefined"==typeof n?r(t,e):o(t,e,n)},l.matches=function(t,e){return"undefined"!=typeof t.matches?t.matches(e):"undefined"!=typeof t.matchesSelector?t.matchesSelector(e):"undefined"!=typeof t.webkitMatchesSelector?t.webkitMatchesSelector(e):"undefined"!=typeof t.mozMatchesSelector?t.mozMatchesSelector(e):"undefined"!=typeof t.msMatchesSelector?t.msMatchesSelector(e):void 0},l.remove=function(t){"undefined"!=typeof t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)},l.queryChildren=function(t,e){return Array.prototype.filter.call(t.childNodes,function(t){return l.matches(t,e)})},e.exports=l},{}],4:[function(t,e,n){"use strict";var r=function(t){this.element=t,this.events={}};r.prototype.bind=function(t,e){"undefined"==typeof this.events[t]&&(this.events[t]=[]),this.events[t].push(e),this.element.addEventListener(t,e,!1)},r.prototype.unbind=function(t,e){var n="undefined"!=typeof e;this.events[t]=this.events[t].filter(function(r){return n&&r!==e?!0:(this.element.removeEventListener(t,r,!1),!1)},this)},r.prototype.unbindAll=function(){for(var t in this.events)this.unbind(t)};var o=function(){this.eventElements=[]};o.prototype.eventElement=function(t){var e=this.eventElements.filter(function(e){return e.element===t})[0];return"undefined"==typeof e&&(e=new r(t),this.eventElements.push(e)),e},o.prototype.bind=function(t,e,n){this.eventElement(t).bind(e,n)},o.prototype.unbind=function(t,e,n){this.eventElement(t).unbind(e,n)},o.prototype.unbindAll=function(){for(var t=0;t<this.eventElements.length;t++)this.eventElements[t].unbindAll()},o.prototype.once=function(t,e,n){var r=this.eventElement(t),o=function(t){r.unbind(e,o),n(t)};r.bind(e,o)},e.exports=o},{}],5:[function(t,e,n){"use strict";e.exports=function(){function t(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return function(){return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()}}()},{}],6:[function(t,e,n){"use strict";var r=t("./class"),o=t("./dom");n.toInt=function(t){return parseInt(t,10)||0},n.clone=function(t){if(null===t)return null;if("object"==typeof t){var e={};for(var n in t)e[n]=this.clone(t[n]);return e}return t},n.extend=function(t,e){var n=this.clone(t);for(var r in e)n[r]=this.clone(e[r]);return n},n.isEditable=function(t){return o.matches(t,"input,[contenteditable]")||o.matches(t,"select,[contenteditable]")||o.matches(t,"textarea,[contenteditable]")||o.matches(t,"button,[contenteditable]")},n.removePsClasses=function(t){for(var e=r.list(t),n=0;n<e.length;n++){var o=e[n];0===o.indexOf("ps-")&&r.remove(t,o)}},n.outerWidth=function(t){return this.toInt(o.css(t,"width"))+this.toInt(o.css(t,"paddingLeft"))+this.toInt(o.css(t,"paddingRight"))+this.toInt(o.css(t,"borderLeftWidth"))+this.toInt(o.css(t,"borderRightWidth"))},n.startScrolling=function(t,e){r.add(t,"ps-in-scrolling"),"undefined"!=typeof e?r.add(t,"ps-"+e):(r.add(t,"ps-x"),r.add(t,"ps-y"))},n.stopScrolling=function(t,e){r.remove(t,"ps-in-scrolling"),"undefined"!=typeof e?r.remove(t,"ps-"+e):(r.remove(t,"ps-x"),r.remove(t,"ps-y"))},n.env={isWebKit:"WebkitAppearance"in document.documentElement.style,supportsTouch:"ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch,supportsIePointer:null!==window.navigator.msMaxTouchPoints}},{"./class":2,"./dom":3}],7:[function(t,e,n){"use strict";var r=t("./plugin/destroy"),o=t("./plugin/initialize"),i=t("./plugin/update");e.exports={initialize:o,update:i,destroy:r}},{"./plugin/destroy":9,"./plugin/initialize":17,"./plugin/update":20}],8:[function(t,e,n){"use strict";e.exports={wheelSpeed:1,wheelPropagation:!1,swipePropagation:!0,minScrollbarLength:null,maxScrollbarLength:null,useBothWheelAxes:!1,useKeyboard:!0,suppressScrollX:!1,suppressScrollY:!1,scrollXMarginOffset:0,scrollYMarginOffset:0,stopPropagationOnClick:!0}},{}],9:[function(t,e,n){"use strict";var r=t("../lib/dom"),o=t("../lib/helper"),i=t("./instances");e.exports=function(t){var e=i.get(t);e&&(e.event.unbindAll(),r.remove(e.scrollbarX),r.remove(e.scrollbarY),r.remove(e.scrollbarXRail),r.remove(e.scrollbarYRail),o.removePsClasses(t),i.remove(t))}},{"../lib/dom":3,"../lib/helper":6,"./instances":18}],10:[function(t,e,n){"use strict";function r(t,e){function n(t){return t.getBoundingClientRect()}e.settings.stopPropagationOnClick&&e.event.bind(e.scrollbarY,"click",function(t){t.stopPropagation()}),e.event.bind(e.scrollbarYRail,"click",function(r){var i=o.toInt(e.scrollbarYHeight/2),s=e.railYRatio*(r.pageY-window.scrollY-n(e.scrollbarYRail).top-i),a=e.railYRatio*(e.railYHeight-e.scrollbarYHeight),c=s/a;0>c?c=0:c>1&&(c=1),t.scrollTop=(e.contentHeight-e.containerHeight)*c,l(t),r.stopPropagation()}),e.settings.stopPropagationOnClick&&e.event.bind(e.scrollbarY,"click",function(t){t.stopPropagation()}),e.event.bind(e.scrollbarXRail,"click",function(r){var i=o.toInt(e.scrollbarXWidth/2),s=e.railXRatio*(r.pageX-window.scrollX-n(e.scrollbarXRail).left-i),a=e.railXRatio*(e.railXWidth-e.scrollbarXWidth),c=s/a;0>c?c=0:c>1&&(c=1),t.scrollLeft=(e.contentWidth-e.containerWidth)*c-e.negativeScrollAdjustment,l(t),r.stopPropagation()})}var o=t("../../lib/helper"),i=t("../instances"),l=t("../update-geometry");e.exports=function(t){var e=i.get(t);r(t,e)}},{"../../lib/helper":6,"../instances":18,"../update-geometry":19}],11:[function(t,e,n){"use strict";function r(t,e){function n(n){var o=r+n*e.railXRatio,i=e.scrollbarXRail.getBoundingClientRect().left+e.railXRatio*(e.railXWidth-e.scrollbarXWidth);0>o?e.scrollbarXLeft=0:o>i?e.scrollbarXLeft=i:e.scrollbarXLeft=o;var s=l.toInt(e.scrollbarXLeft*(e.contentWidth-e.containerWidth)/(e.containerWidth-e.railXRatio*e.scrollbarXWidth))-e.negativeScrollAdjustment;t.scrollLeft=s}var r=null,o=null,s=function(e){n(e.pageX-o),a(t),e.stopPropagation(),e.preventDefault()},c=function(){l.stopScrolling(t,"x"),e.event.unbind(e.ownerDocument,"mousemove",s)};e.event.bind(e.scrollbarX,"mousedown",function(n){o=n.pageX,r=l.toInt(i.css(e.scrollbarX,"left"))*e.railXRatio,l.startScrolling(t,"x"),e.event.bind(e.ownerDocument,"mousemove",s),e.event.once(e.ownerDocument,"mouseup",c),n.stopPropagation(),n.preventDefault()})}function o(t,e){function n(n){var o=r+n*e.railYRatio,i=e.scrollbarYRail.getBoundingClientRect().top+e.railYRatio*(e.railYHeight-e.scrollbarYHeight);0>o?e.scrollbarYTop=0:o>i?e.scrollbarYTop=i:e.scrollbarYTop=o;var s=l.toInt(e.scrollbarYTop*(e.contentHeight-e.containerHeight)/(e.containerHeight-e.railYRatio*e.scrollbarYHeight));t.scrollTop=s}var r=null,o=null,s=function(e){n(e.pageY-o),a(t),e.stopPropagation(),e.preventDefault()},c=function(){l.stopScrolling(t,"y"),e.event.unbind(e.ownerDocument,"mousemove",s)};e.event.bind(e.scrollbarY,"mousedown",function(n){o=n.pageY,r=l.toInt(i.css(e.scrollbarY,"top"))*e.railYRatio,l.startScrolling(t,"y"),e.event.bind(e.ownerDocument,"mousemove",s),e.event.once(e.ownerDocument,"mouseup",c),n.stopPropagation(),n.preventDefault()})}var i=t("../../lib/dom"),l=t("../../lib/helper"),s=t("../instances"),a=t("../update-geometry");e.exports=function(t){var e=s.get(t);r(t,e),o(t,e)}},{"../../lib/dom":3,"../../lib/helper":6,"../instances":18,"../update-geometry":19}],12:[function(t,e,n){"use strict";function r(t,e){function n(n,r){var o=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===o&&r>0||o>=e.contentHeight-e.containerHeight&&0>r)return!e.settings.wheelPropagation}var i=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===i&&0>n||i>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}var r=!1;e.event.bind(t,"mouseenter",function(){r=!0}),e.event.bind(t,"mouseleave",function(){r=!1});var i=!1;e.event.bind(e.ownerDocument,"keydown",function(s){if((!s.isDefaultPrevented||!s.isDefaultPrevented())&&r){var a=document.activeElement?document.activeElement:e.ownerDocument.activeElement;if(a){for(;a.shadowRoot;)a=a.shadowRoot.activeElement;if(o.isEditable(a))return}var c=0,u=0;switch(s.which){case 37:c=-30;break;case 38:u=30;break;case 39:c=30;break;case 40:u=-30;break;case 33:u=90;break;case 32:u=s.shiftKey?90:-90;break;case 34:u=-90;break;case 35:u=s.ctrlKey?-e.contentHeight:-e.containerHeight;break;case 36:u=s.ctrlKey?t.scrollTop:e.containerHeight;break;default:return}t.scrollTop=t.scrollTop-u,t.scrollLeft=t.scrollLeft+c,l(t),i=n(c,u),i&&s.preventDefault()}})}var o=t("../../lib/helper"),i=t("../instances"),l=t("../update-geometry");e.exports=function(t){var e=i.get(t);r(t,e)}},{"../../lib/helper":6,"../instances":18,"../update-geometry":19}],13:[function(t,e,n){"use strict";function r(t,e){function n(n,r){var o=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===o&&r>0||o>=e.contentHeight-e.containerHeight&&0>r)return!e.settings.wheelPropagation}var i=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===i&&0>n||i>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}function r(t){var e=t.deltaX,n=-1*t.deltaY;return("undefined"==typeof e||"undefined"==typeof n)&&(e=-1*t.wheelDeltaX/6,n=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(e*=10,n*=10),e!==e&&n!==n&&(e=0,n=t.wheelDelta),[e,n]}function i(e,n){var r=t.querySelector("textarea:hover");if(r){var o=r.scrollHeight-r.clientHeight;if(o>0&&!(0===r.scrollTop&&n>0||r.scrollTop===o&&0>n))return!0;var i=r.scrollLeft-r.clientWidth;if(i>0&&!(0===r.scrollLeft&&0>e||r.scrollLeft===i&&e>0))return!0}return!1}function s(s){if(o.env.isWebKit||!t.querySelector("select:focus")){var c=r(s),u=c[0],d=c[1];i(u,d)||(a=!1,e.settings.useBothWheelAxes?e.scrollbarYActive&&!e.scrollbarXActive?(d?t.scrollTop=t.scrollTop-d*e.settings.wheelSpeed:t.scrollTop=t.scrollTop+u*e.settings.wheelSpeed,a=!0):e.scrollbarXActive&&!e.scrollbarYActive&&(u?t.scrollLeft=t.scrollLeft+u*e.settings.wheelSpeed:t.scrollLeft=t.scrollLeft-d*e.settings.wheelSpeed,a=!0):(t.scrollTop=t.scrollTop-d*e.settings.wheelSpeed,t.scrollLeft=t.scrollLeft+u*e.settings.wheelSpeed),l(t),a=a||n(u,d),a&&(s.stopPropagation(),s.preventDefault()))}}var a=!1;"undefined"!=typeof window.onwheel?e.event.bind(t,"wheel",s):"undefined"!=typeof window.onmousewheel&&e.event.bind(t,"mousewheel",s)}var o=t("../../lib/helper"),i=t("../instances"),l=t("../update-geometry");e.exports=function(t){var e=i.get(t);r(t,e)}},{"../../lib/helper":6,"../instances":18,"../update-geometry":19}],14:[function(t,e,n){"use strict";function r(t,e){e.event.bind(t,"scroll",function(){i(t)})}var o=t("../instances"),i=t("../update-geometry");e.exports=function(t){var e=o.get(t);r(t,e)}},{"../instances":18,"../update-geometry":19}],15:[function(t,e,n){"use strict";function r(t,e){function n(){var t=window.getSelection?window.getSelection():document.getSelection?document.getSelection():"";return 0===t.toString().length?null:t.getRangeAt(0).commonAncestorContainer}function r(){a||(a=setInterval(function(){return i.get(t)?(t.scrollTop=t.scrollTop+c.top,t.scrollLeft=t.scrollLeft+c.left,void l(t)):void clearInterval(a)},50))}function s(){a&&(clearInterval(a),a=null),o.stopScrolling(t)}var a=null,c={top:0,left:0},u=!1;e.event.bind(e.ownerDocument,"selectionchange",function(){t.contains(n())?u=!0:(u=!1,s())}),e.event.bind(window,"mouseup",function(){u&&(u=!1,s())}),e.event.bind(window,"mousemove",function(e){if(u){var n={x:e.pageX,y:e.pageY},i={left:t.offsetLeft,right:t.offsetLeft+t.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight};n.x<i.left+3?(c.left=-5,o.startScrolling(t,"x")):n.x>i.right-3?(c.left=5,o.startScrolling(t,"x")):c.left=0,n.y<i.top+3?(i.top+3-n.y<5?c.top=-5:c.top=-20,o.startScrolling(t,"y")):n.y>i.bottom-3?(n.y-i.bottom+3<5?c.top=5:c.top=20,o.startScrolling(t,"y")):c.top=0,0===c.top&&0===c.left?s():r()}})}var o=t("../../lib/helper"),i=t("../instances"),l=t("../update-geometry");e.exports=function(t){var e=i.get(t);r(t,e)}},{"../../lib/helper":6,"../instances":18,"../update-geometry":19}],16:[function(t,e,n){"use strict";function r(t,e,n,r){function l(n,r){var o=t.scrollTop,i=t.scrollLeft,l=Math.abs(n),s=Math.abs(r);if(s>l){if(0>r&&o===e.contentHeight-e.containerHeight||r>0&&0===o)return!e.settings.swipePropagation}else if(l>s&&(0>n&&i===e.contentWidth-e.containerWidth||n>0&&0===i))return!e.settings.swipePropagation;return!0}function s(e,n){t.scrollTop=t.scrollTop-n,t.scrollLeft=t.scrollLeft-e,i(t)}function a(){y=!0}function c(){y=!1}function u(t){return t.targetTouches?t.targetTouches[0]:t}function d(t){return t.targetTouches&&1===t.targetTouches.length?!0:t.pointerType&&"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE?!0:!1}function p(t){if(d(t)){Y=!0;var e=u(t);b.pageX=e.pageX,b.pageY=e.pageY,g=(new Date).getTime(),null!==m&&clearInterval(m),t.stopPropagation()}}function f(t){if(!y&&Y&&d(t)){var e=u(t),n={pageX:e.pageX,pageY:e.pageY},r=n.pageX-b.pageX,o=n.pageY-b.pageY;s(r,o),b=n;var i=(new Date).getTime(),a=i-g;a>0&&(v.x=r/a,v.y=o/a,g=i),l(r,o)&&(t.stopPropagation(),t.preventDefault())}}function h(){!y&&Y&&(Y=!1,clearInterval(m),m=setInterval(function(){return o.get(t)?Math.abs(v.x)<.01&&Math.abs(v.y)<.01?void clearInterval(m):(s(30*v.x,30*v.y),v.x*=.8,void(v.y*=.8)):void clearInterval(m)},10))}var b={},g=0,v={},m=null,y=!1,Y=!1;n&&(e.event.bind(window,"touchstart",a),e.event.bind(window,"touchend",c),e.event.bind(t,"touchstart",p),e.event.bind(t,"touchmove",f),e.event.bind(t,"touchend",h)),r&&(window.PointerEvent?(e.event.bind(window,"pointerdown",a),e.event.bind(window,"pointerup",c),e.event.bind(t,"pointerdown",p),e.event.bind(t,"pointermove",f),e.event.bind(t,"pointerup",h)):window.MSPointerEvent&&(e.event.bind(window,"MSPointerDown",a),e.event.bind(window,"MSPointerUp",c),e.event.bind(t,"MSPointerDown",p),e.event.bind(t,"MSPointerMove",f),e.event.bind(t,"MSPointerUp",h)))}var o=t("../instances"),i=t("../update-geometry");e.exports=function(t,e,n){var i=o.get(t);r(t,i,e,n)}},{"../instances":18,"../update-geometry":19}],17:[function(t,e,n){"use strict";var r=t("../lib/class"),o=t("../lib/helper"),i=t("./instances"),l=t("./update-geometry"),s=t("./handler/click-rail"),a=t("./handler/drag-scrollbar"),c=t("./handler/keyboard"),u=t("./handler/mouse-wheel"),d=t("./handler/native-scroll"),p=t("./handler/selection"),f=t("./handler/touch");e.exports=function(t,e){e="object"==typeof e?e:{},r.add(t,"ps-container");var n=i.add(t);n.settings=o.extend(n.settings,e),s(t),a(t),u(t),d(t),p(t),(o.env.supportsTouch||o.env.supportsIePointer)&&f(t,o.env.supportsTouch,o.env.supportsIePointer),n.settings.useKeyboard&&c(t),l(t)}},{"../lib/class":2,"../lib/helper":6,"./handler/click-rail":10,"./handler/drag-scrollbar":11,"./handler/keyboard":12,"./handler/mouse-wheel":13,"./handler/native-scroll":14,"./handler/selection":15,"./handler/touch":16,"./instances":18,"./update-geometry":19}],18:[function(t,e,n){"use strict";function r(t){var e=this;e.settings=d.clone(a),e.containerWidth=null,e.containerHeight=null,e.contentWidth=null,e.contentHeight=null,e.isRtl="rtl"===s.css(t,"direction"),e.isNegativeScroll=function(){var e=t.scrollLeft,n=null;return t.scrollLeft=-1,n=t.scrollLeft<0,t.scrollLeft=e,n}(),e.negativeScrollAdjustment=e.isNegativeScroll?t.scrollWidth-t.clientWidth:0,e.event=new c,e.ownerDocument=t.ownerDocument||document,e.scrollbarXRail=s.appendTo(s.e("div","ps-scrollbar-x-rail"),t),e.scrollbarX=s.appendTo(s.e("div","ps-scrollbar-x"),e.scrollbarXRail),e.scrollbarXActive=null,e.scrollbarXWidth=null,e.scrollbarXLeft=null,e.scrollbarXBottom=d.toInt(s.css(e.scrollbarXRail,"bottom")),e.isScrollbarXUsingBottom=e.scrollbarXBottom===e.scrollbarXBottom,e.scrollbarXTop=e.isScrollbarXUsingBottom?null:d.toInt(s.css(e.scrollbarXRail,"top")),e.railBorderXWidth=d.toInt(s.css(e.scrollbarXRail,"borderLeftWidth"))+d.toInt(s.css(e.scrollbarXRail,"borderRightWidth")),s.css(e.scrollbarXRail,"display","block"),e.railXMarginWidth=d.toInt(s.css(e.scrollbarXRail,"marginLeft"))+d.toInt(s.css(e.scrollbarXRail,"marginRight")),s.css(e.scrollbarXRail,"display",""),e.railXWidth=null,e.railXRatio=null,e.scrollbarYRail=s.appendTo(s.e("div","ps-scrollbar-y-rail"),t),e.scrollbarY=s.appendTo(s.e("div","ps-scrollbar-y"),e.scrollbarYRail),e.scrollbarYActive=null,e.scrollbarYHeight=null,e.scrollbarYTop=null,e.scrollbarYRight=d.toInt(s.css(e.scrollbarYRail,"right")),e.isScrollbarYUsingRight=e.scrollbarYRight===e.scrollbarYRight,e.scrollbarYLeft=e.isScrollbarYUsingRight?null:d.toInt(s.css(e.scrollbarYRail,"left")),e.scrollbarYOuterWidth=e.isRtl?d.outerWidth(e.scrollbarY):null,e.railBorderYWidth=d.toInt(s.css(e.scrollbarYRail,"borderTopWidth"))+d.toInt(s.css(e.scrollbarYRail,"borderBottomWidth")),s.css(e.scrollbarYRail,"display","block"),e.railYMarginHeight=d.toInt(s.css(e.scrollbarYRail,"marginTop"))+d.toInt(s.css(e.scrollbarYRail,"marginBottom")),s.css(e.scrollbarYRail,"display",""),e.railYHeight=null,e.railYRatio=null}function o(t){return"undefined"==typeof t.dataset?t.getAttribute("data-ps-id"):t.dataset.psId}function i(t,e){"undefined"==typeof t.dataset?t.setAttribute("data-ps-id",e):t.dataset.psId=e}function l(t){"undefined"==typeof t.dataset?t.removeAttribute("data-ps-id"):delete t.dataset.psId}var s=t("../lib/dom"),a=t("./default-setting"),c=t("../lib/event-manager"),u=t("../lib/guid"),d=t("../lib/helper"),p={};n.add=function(t){var e=u();return i(t,e),p[e]=new r(t),p[e]},n.remove=function(t){delete p[o(t)],l(t)},n.get=function(t){return p[o(t)]}},{"../lib/dom":3,"../lib/event-manager":4,"../lib/guid":5,"../lib/helper":6,"./default-setting":8}],19:[function(t,e,n){"use strict";function r(t,e){return t.settings.minScrollbarLength&&(e=Math.max(e,t.settings.minScrollbarLength)),t.settings.maxScrollbarLength&&(e=Math.min(e,t.settings.maxScrollbarLength)),e}function o(t,e){var n={width:e.railXWidth};e.isRtl?n.left=e.negativeScrollAdjustment+t.scrollLeft+e.containerWidth-e.contentWidth:n.left=t.scrollLeft,e.isScrollbarXUsingBottom?n.bottom=e.scrollbarXBottom-t.scrollTop:n.top=e.scrollbarXTop+t.scrollTop,l.css(e.scrollbarXRail,n);var r={top:t.scrollTop,height:e.railYHeight};e.isScrollbarYUsingRight?e.isRtl?r.right=e.contentWidth-(e.negativeScrollAdjustment+t.scrollLeft)-e.scrollbarYRight-e.scrollbarYOuterWidth:r.right=e.scrollbarYRight-t.scrollLeft:e.isRtl?r.left=e.negativeScrollAdjustment+t.scrollLeft+2*e.containerWidth-e.contentWidth-e.scrollbarYLeft-e.scrollbarYOuterWidth:r.left=e.scrollbarYLeft+t.scrollLeft,l.css(e.scrollbarYRail,r),l.css(e.scrollbarX,{left:e.scrollbarXLeft,width:e.scrollbarXWidth-e.railBorderXWidth}),l.css(e.scrollbarY,{top:e.scrollbarYTop,height:e.scrollbarYHeight-e.railBorderYWidth})}var i=t("../lib/class"),l=t("../lib/dom"),s=t("../lib/helper"),a=t("./instances");e.exports=function(t){var e=a.get(t);e.containerWidth=t.clientWidth,e.containerHeight=t.clientHeight,e.contentWidth=t.scrollWidth,e.contentHeight=t.scrollHeight;var n;t.contains(e.scrollbarXRail)||(n=l.queryChildren(t,".ps-scrollbar-x-rail"),n.length>0&&n.forEach(function(t){l.remove(t)}),l.appendTo(e.scrollbarXRail,t)),t.contains(e.scrollbarYRail)||(n=l.queryChildren(t,".ps-scrollbar-y-rail"),n.length>0&&n.forEach(function(t){l.remove(t)}),l.appendTo(e.scrollbarYRail,t)),!e.settings.suppressScrollX&&e.containerWidth+e.settings.scrollXMarginOffset<e.contentWidth?(e.scrollbarXActive=!0,e.railXWidth=e.containerWidth-e.railXMarginWidth,e.railXRatio=e.containerWidth/e.railXWidth,e.scrollbarXWidth=r(e,s.toInt(e.railXWidth*e.containerWidth/e.contentWidth)),e.scrollbarXLeft=s.toInt((e.negativeScrollAdjustment+t.scrollLeft)*(e.railXWidth-e.scrollbarXWidth)/(e.contentWidth-e.containerWidth))):(e.scrollbarXActive=!1,e.scrollbarXWidth=0,e.scrollbarXLeft=0,t.scrollLeft=0),!e.settings.suppressScrollY&&e.containerHeight+e.settings.scrollYMarginOffset<e.contentHeight?(e.scrollbarYActive=!0,e.railYHeight=e.containerHeight-e.railYMarginHeight,e.railYRatio=e.containerHeight/e.railYHeight,e.scrollbarYHeight=r(e,s.toInt(e.railYHeight*e.containerHeight/e.contentHeight)),e.scrollbarYTop=s.toInt(t.scrollTop*(e.railYHeight-e.scrollbarYHeight)/(e.contentHeight-e.containerHeight))):(e.scrollbarYActive=!1,e.scrollbarYHeight=0,e.scrollbarYTop=0,t.scrollTop=0),e.scrollbarXLeft>=e.railXWidth-e.scrollbarXWidth&&(e.scrollbarXLeft=e.railXWidth-e.scrollbarXWidth),e.scrollbarYTop>=e.railYHeight-e.scrollbarYHeight&&(e.scrollbarYTop=e.railYHeight-e.scrollbarYHeight),o(t,e),i[e.scrollbarXActive?"add":"remove"](t,"ps-active-x"),i[e.scrollbarYActive?"add":"remove"](t,"ps-active-y")}},{"../lib/class":2,"../lib/dom":3,"../lib/helper":6,"./instances":18}],20:[function(t,e,n){"use strict";var r=t("../lib/dom"),o=t("../lib/helper"),i=t("./instances"),l=t("./update-geometry");e.exports=function(t){var e=i.get(t);e&&(e.negativeScrollAdjustment=e.isNegativeScroll?t.scrollWidth-t.clientWidth:0,r.css(e.scrollbarXRail,"display","block"),r.css(e.scrollbarYRail,"display","block"),e.railXMarginWidth=o.toInt(r.css(e.scrollbarXRail,"marginLeft"))+o.toInt(r.css(e.scrollbarXRail,"marginRight")),e.railYMarginHeight=o.toInt(r.css(e.scrollbarYRail,"marginTop"))+o.toInt(r.css(e.scrollbarYRail,"marginBottom")),r.css(e.scrollbarXRail,"display","none"),r.css(e.scrollbarYRail,"display","none"),l(t),r.css(e.scrollbarXRail,"display",""),r.css(e.scrollbarYRail,"display",""))}},{"../lib/dom":3,"../lib/helper":6,"./instances":18,"./update-geometry":19}]},{},[1]); \ No newline at end of file
diff --git a/web/static/js/react-bootstrap-0.25.1.js b/web/static/js/react-bootstrap-0.25.1.js
new file mode 100644
index 000000000..db5326612
--- /dev/null
+++ b/web/static/js/react-bootstrap-0.25.1.js
@@ -0,0 +1,15678 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory(require("react"));
+ else if(typeof define === 'function' && define.amd)
+ define(["react"], factory);
+ else if(typeof exports === 'object')
+ exports["ReactBootstrap"] = factory(require("react"));
+ else
+ root["ReactBootstrap"] = factory(root["React"]);
+})(this, function(__WEBPACK_EXTERNAL_MODULE_32__) {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId])
+/******/ return installedModules[moduleId].exports;
+
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ exports: {},
+/******/ id: moduleId,
+/******/ loaded: false
+/******/ };
+
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ // Flag the module as loaded
+/******/ module.loaded = true;
+
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+
+
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _Object$keys = __webpack_require__(1)['default'];
+
+ var _Object$defineProperty = __webpack_require__(11)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ var _interopRequireWildcard = __webpack_require__(15)['default'];
+
+ exports.__esModule = true;
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ var _utilsDomUtils = __webpack_require__(31);
+
+ var _utilsDomUtils2 = _interopRequireDefault(_utilsDomUtils);
+
+ var _utilsChildrenValueInputValidation = __webpack_require__(52);
+
+ var _utilsChildrenValueInputValidation2 = _interopRequireDefault(_utilsChildrenValueInputValidation);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _Accordion2 = __webpack_require__(57);
+
+ var _Accordion3 = _interopRequireDefault(_Accordion2);
+
+ exports.Accordion = _Accordion3['default'];
+
+ var _Affix2 = __webpack_require__(71);
+
+ var _Affix3 = _interopRequireDefault(_Affix2);
+
+ exports.Affix = _Affix3['default'];
+
+ var _AffixMixin2 = __webpack_require__(72);
+
+ var _AffixMixin3 = _interopRequireDefault(_AffixMixin2);
+
+ exports.AffixMixin = _AffixMixin3['default'];
+
+ var _Alert2 = __webpack_require__(74);
+
+ var _Alert3 = _interopRequireDefault(_Alert2);
+
+ exports.Alert = _Alert3['default'];
+
+ var _Badge2 = __webpack_require__(75);
+
+ var _Badge3 = _interopRequireDefault(_Badge2);
+
+ exports.Badge = _Badge3['default'];
+
+ var _BootstrapMixin2 = __webpack_require__(69);
+
+ var _BootstrapMixin3 = _interopRequireDefault(_BootstrapMixin2);
+
+ exports.BootstrapMixin = _BootstrapMixin3['default'];
+
+ var _Button2 = __webpack_require__(76);
+
+ var _Button3 = _interopRequireDefault(_Button2);
+
+ exports.Button = _Button3['default'];
+
+ var _ButtonGroup2 = __webpack_require__(81);
+
+ var _ButtonGroup3 = _interopRequireDefault(_ButtonGroup2);
+
+ exports.ButtonGroup = _ButtonGroup3['default'];
+
+ var _ButtonInput2 = __webpack_require__(77);
+
+ var _ButtonInput3 = _interopRequireDefault(_ButtonInput2);
+
+ exports.ButtonInput = _ButtonInput3['default'];
+
+ var _ButtonToolbar2 = __webpack_require__(82);
+
+ var _ButtonToolbar3 = _interopRequireDefault(_ButtonToolbar2);
+
+ exports.ButtonToolbar = _ButtonToolbar3['default'];
+
+ var _Carousel2 = __webpack_require__(83);
+
+ var _Carousel3 = _interopRequireDefault(_Carousel2);
+
+ exports.Carousel = _Carousel3['default'];
+
+ var _CarouselItem2 = __webpack_require__(84);
+
+ var _CarouselItem3 = _interopRequireDefault(_CarouselItem2);
+
+ exports.CarouselItem = _CarouselItem3['default'];
+
+ var _Col2 = __webpack_require__(86);
+
+ var _Col3 = _interopRequireDefault(_Col2);
+
+ exports.Col = _Col3['default'];
+
+ var _CollapsibleMixin2 = __webpack_require__(87);
+
+ var _CollapsibleMixin3 = _interopRequireDefault(_CollapsibleMixin2);
+
+ exports.CollapsibleMixin = _CollapsibleMixin3['default'];
+
+ var _CollapsibleNav2 = __webpack_require__(88);
+
+ var _CollapsibleNav3 = _interopRequireDefault(_CollapsibleNav2);
+
+ exports.CollapsibleNav = _CollapsibleNav3['default'];
+
+ var _Dropdown2 = __webpack_require__(93);
+
+ var _Dropdown3 = _interopRequireDefault(_Dropdown2);
+
+ exports.Dropdown = _Dropdown3['default'];
+
+ var _DropdownButton2 = __webpack_require__(171);
+
+ var _DropdownButton3 = _interopRequireDefault(_DropdownButton2);
+
+ exports.DropdownButton = _DropdownButton3['default'];
+
+ var _NavDropdown2 = __webpack_require__(172);
+
+ var _NavDropdown3 = _interopRequireDefault(_NavDropdown2);
+
+ exports.NavDropdown = _NavDropdown3['default'];
+
+ var _SplitButton3 = __webpack_require__(173);
+
+ var _SplitButton4 = _interopRequireDefault(_SplitButton3);
+
+ exports.SplitButton = _SplitButton4['default'];
+
+ var _FadeMixin2 = __webpack_require__(175);
+
+ var _FadeMixin3 = _interopRequireDefault(_FadeMixin2);
+
+ exports.FadeMixin = _FadeMixin3['default'];
+
+ var _Glyphicon2 = __webpack_require__(80);
+
+ var _Glyphicon3 = _interopRequireDefault(_Glyphicon2);
+
+ exports.Glyphicon = _Glyphicon3['default'];
+
+ var _Grid2 = __webpack_require__(176);
+
+ var _Grid3 = _interopRequireDefault(_Grid2);
+
+ exports.Grid = _Grid3['default'];
+
+ var _Input2 = __webpack_require__(177);
+
+ var _Input3 = _interopRequireDefault(_Input2);
+
+ exports.Input = _Input3['default'];
+
+ var _Interpolate2 = __webpack_require__(180);
+
+ var _Interpolate3 = _interopRequireDefault(_Interpolate2);
+
+ exports.Interpolate = _Interpolate3['default'];
+
+ var _Jumbotron2 = __webpack_require__(181);
+
+ var _Jumbotron3 = _interopRequireDefault(_Jumbotron2);
+
+ exports.Jumbotron = _Jumbotron3['default'];
+
+ var _Label2 = __webpack_require__(182);
+
+ var _Label3 = _interopRequireDefault(_Label2);
+
+ exports.Label = _Label3['default'];
+
+ var _ListGroup2 = __webpack_require__(183);
+
+ var _ListGroup3 = _interopRequireDefault(_ListGroup2);
+
+ exports.ListGroup = _ListGroup3['default'];
+
+ var _ListGroupItem2 = __webpack_require__(184);
+
+ var _ListGroupItem3 = _interopRequireDefault(_ListGroupItem2);
+
+ exports.ListGroupItem = _ListGroupItem3['default'];
+
+ var _MenuItem2 = __webpack_require__(185);
+
+ var _MenuItem3 = _interopRequireDefault(_MenuItem2);
+
+ exports.MenuItem = _MenuItem3['default'];
+
+ var _Modal2 = __webpack_require__(186);
+
+ var _Modal3 = _interopRequireDefault(_Modal2);
+
+ exports.Modal = _Modal3['default'];
+
+ var _ModalHeader2 = __webpack_require__(198);
+
+ var _ModalHeader3 = _interopRequireDefault(_ModalHeader2);
+
+ exports.ModalHeader = _ModalHeader3['default'];
+
+ var _ModalTitle2 = __webpack_require__(199);
+
+ var _ModalTitle3 = _interopRequireDefault(_ModalTitle2);
+
+ exports.ModalTitle = _ModalTitle3['default'];
+
+ var _ModalBody2 = __webpack_require__(197);
+
+ var _ModalBody3 = _interopRequireDefault(_ModalBody2);
+
+ exports.ModalBody = _ModalBody3['default'];
+
+ var _ModalFooter2 = __webpack_require__(200);
+
+ var _ModalFooter3 = _interopRequireDefault(_ModalFooter2);
+
+ exports.ModalFooter = _ModalFooter3['default'];
+
+ var _Nav2 = __webpack_require__(201);
+
+ var _Nav3 = _interopRequireDefault(_Nav2);
+
+ exports.Nav = _Nav3['default'];
+
+ var _Navbar2 = __webpack_require__(202);
+
+ var _Navbar3 = _interopRequireDefault(_Navbar2);
+
+ exports.Navbar = _Navbar3['default'];
+
+ var _NavItem2 = __webpack_require__(203);
+
+ var _NavItem3 = _interopRequireDefault(_NavItem2);
+
+ exports.NavItem = _NavItem3['default'];
+
+ var _Overlay2 = __webpack_require__(204);
+
+ var _Overlay3 = _interopRequireDefault(_Overlay2);
+
+ exports.Overlay = _Overlay3['default'];
+
+ var _OverlayTrigger2 = __webpack_require__(209);
+
+ var _OverlayTrigger3 = _interopRequireDefault(_OverlayTrigger2);
+
+ exports.OverlayTrigger = _OverlayTrigger3['default'];
+
+ var _PageHeader2 = __webpack_require__(212);
+
+ var _PageHeader3 = _interopRequireDefault(_PageHeader2);
+
+ exports.PageHeader = _PageHeader3['default'];
+
+ var _PageItem2 = __webpack_require__(213);
+
+ var _PageItem3 = _interopRequireDefault(_PageItem2);
+
+ exports.PageItem = _PageItem3['default'];
+
+ var _Pager2 = __webpack_require__(214);
+
+ var _Pager3 = _interopRequireDefault(_Pager2);
+
+ exports.Pager = _Pager3['default'];
+
+ var _Pagination2 = __webpack_require__(215);
+
+ var _Pagination3 = _interopRequireDefault(_Pagination2);
+
+ exports.Pagination = _Pagination3['default'];
+
+ var _Panel2 = __webpack_require__(218);
+
+ var _Panel3 = _interopRequireDefault(_Panel2);
+
+ exports.Panel = _Panel3['default'];
+
+ var _PanelGroup2 = __webpack_require__(66);
+
+ var _PanelGroup3 = _interopRequireDefault(_PanelGroup2);
+
+ exports.PanelGroup = _PanelGroup3['default'];
+
+ var _Popover2 = __webpack_require__(219);
+
+ var _Popover3 = _interopRequireDefault(_Popover2);
+
+ exports.Popover = _Popover3['default'];
+
+ var _ProgressBar2 = __webpack_require__(220);
+
+ var _ProgressBar3 = _interopRequireDefault(_ProgressBar2);
+
+ exports.ProgressBar = _ProgressBar3['default'];
+
+ var _Row2 = __webpack_require__(221);
+
+ var _Row3 = _interopRequireDefault(_Row2);
+
+ exports.Row = _Row3['default'];
+
+ var _SafeAnchor2 = __webpack_require__(100);
+
+ var _SafeAnchor3 = _interopRequireDefault(_SafeAnchor2);
+
+ exports.SafeAnchor = _SafeAnchor3['default'];
+
+ var _SplitButton5 = _interopRequireDefault(_SplitButton3);
+
+ exports.SplitButton = _SplitButton5['default'];
+
+ var _styleMaps2 = __webpack_require__(70);
+
+ var _styleMaps3 = _interopRequireDefault(_styleMaps2);
+
+ exports.styleMaps = _styleMaps3['default'];
+
+ var _SubNav2 = __webpack_require__(222);
+
+ var _SubNav3 = _interopRequireDefault(_SubNav2);
+
+ exports.SubNav = _SubNav3['default'];
+
+ var _Tab2 = __webpack_require__(223);
+
+ var _Tab3 = _interopRequireDefault(_Tab2);
+
+ exports.Tab = _Tab3['default'];
+
+ var _TabbedArea2 = __webpack_require__(224);
+
+ var _TabbedArea3 = _interopRequireDefault(_TabbedArea2);
+
+ exports.TabbedArea = _TabbedArea3['default'];
+
+ var _Table2 = __webpack_require__(227);
+
+ var _Table3 = _interopRequireDefault(_Table2);
+
+ exports.Table = _Table3['default'];
+
+ var _TabPane2 = __webpack_require__(226);
+
+ var _TabPane3 = _interopRequireDefault(_TabPane2);
+
+ exports.TabPane = _TabPane3['default'];
+
+ var _Tabs2 = __webpack_require__(225);
+
+ var _Tabs3 = _interopRequireDefault(_Tabs2);
+
+ exports.Tabs = _Tabs3['default'];
+
+ var _Thumbnail2 = __webpack_require__(228);
+
+ var _Thumbnail3 = _interopRequireDefault(_Thumbnail2);
+
+ exports.Thumbnail = _Thumbnail3['default'];
+
+ var _Tooltip2 = __webpack_require__(229);
+
+ var _Tooltip3 = _interopRequireDefault(_Tooltip2);
+
+ exports.Tooltip = _Tooltip3['default'];
+
+ var _Well2 = __webpack_require__(230);
+
+ var _Well3 = _interopRequireDefault(_Well2);
+
+ exports.Well = _Well3['default'];
+
+ var _Portal2 = __webpack_require__(231);
+
+ var _Portal3 = _interopRequireDefault(_Portal2);
+
+ exports.Portal = _Portal3['default'];
+
+ var _Position2 = __webpack_require__(232);
+
+ var _Position3 = _interopRequireDefault(_Position2);
+
+ exports.Position = _Position3['default'];
+
+ var _Collapse2 = __webpack_require__(89);
+
+ var _Collapse3 = _interopRequireDefault(_Collapse2);
+
+ exports.Collapse = _Collapse3['default'];
+
+ var _Fade2 = __webpack_require__(195);
+
+ var _Fade3 = _interopRequireDefault(_Fade2);
+
+ exports.Fade = _Fade3['default'];
+
+ var _FormControls2 = __webpack_require__(178);
+
+ var _FormControls = _interopRequireWildcard(_FormControls2);
+
+ exports.FormControls = _FormControls;
+ var utils = {
+ childrenValueInputValidation: _utilsChildrenValueInputValidation2['default'],
+ createChainedFunction: _utilsCreateChainedFunction2['default'],
+ ValidComponentChildren: _utilsValidComponentChildren2['default'],
+ CustomPropTypes: _utilsCustomPropTypes2['default'],
+ domUtils: createDeprecationWrapper(_utilsDomUtils2['default'], 'utils/domUtils', 'npm install dom-helpers')
+ };
+
+ exports.utils = utils;
+ function createDeprecationWrapper(obj, deprecated, instead, link) {
+ var wrapper = {};
+
+ if (false) {
+ return obj;
+ }
+
+ _Object$keys(obj).forEach(function (key) {
+ _Object$defineProperty(wrapper, key, {
+ get: function get() {
+ _utilsDeprecationWarning2['default'](deprecated, instead, link);
+ return obj[key];
+ },
+ set: function set(x) {
+ obj[key] = x;
+ }
+ });
+ });
+
+ return wrapper;
+ }
+
+/***/ },
+/* 1 */
+/***/ function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(2), __esModule: true };
+
+/***/ },
+/* 2 */
+/***/ function(module, exports, __webpack_require__) {
+
+ __webpack_require__(3);
+ module.exports = __webpack_require__(9).Object.keys;
+
+/***/ },
+/* 3 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // 19.1.2.14 Object.keys(O)
+ var toObject = __webpack_require__(4);
+
+ __webpack_require__(6)('keys', function($keys){
+ return function keys(it){
+ return $keys(toObject(it));
+ };
+ });
+
+/***/ },
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // 7.1.13 ToObject(argument)
+ var defined = __webpack_require__(5);
+ module.exports = function(it){
+ return Object(defined(it));
+ };
+
+/***/ },
+/* 5 */
+/***/ function(module, exports) {
+
+ // 7.2.1 RequireObjectCoercible(argument)
+ module.exports = function(it){
+ if(it == undefined)throw TypeError("Can't call method on " + it);
+ return it;
+ };
+
+/***/ },
+/* 6 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // most Object methods by ES6 should accept primitives
+ module.exports = function(KEY, exec){
+ var $def = __webpack_require__(7)
+ , fn = (__webpack_require__(9).Object || {})[KEY] || Object[KEY]
+ , exp = {};
+ exp[KEY] = exec(fn);
+ $def($def.S + $def.F * __webpack_require__(10)(function(){ fn(1); }), 'Object', exp);
+ };
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var global = __webpack_require__(8)
+ , core = __webpack_require__(9)
+ , PROTOTYPE = 'prototype';
+ var ctx = function(fn, that){
+ return function(){
+ return fn.apply(that, arguments);
+ };
+ };
+ var $def = function(type, name, source){
+ var key, own, out, exp
+ , isGlobal = type & $def.G
+ , isProto = type & $def.P
+ , target = isGlobal ? global : type & $def.S
+ ? global[name] : (global[name] || {})[PROTOTYPE]
+ , exports = isGlobal ? core : core[name] || (core[name] = {});
+ if(isGlobal)source = name;
+ for(key in source){
+ // contains in native
+ own = !(type & $def.F) && target && key in target;
+ if(own && key in exports)continue;
+ // export native or passed
+ out = own ? target[key] : source[key];
+ // prevent global pollution for namespaces
+ if(isGlobal && typeof target[key] != 'function')exp = source[key];
+ // bind timers to global for call from export context
+ else if(type & $def.B && own)exp = ctx(out, global);
+ // wrap global constructors for prevent change them in library
+ else if(type & $def.W && target[key] == out)!function(C){
+ exp = function(param){
+ return this instanceof C ? new C(param) : C(param);
+ };
+ exp[PROTOTYPE] = C[PROTOTYPE];
+ }(out);
+ else exp = isProto && typeof out == 'function' ? ctx(Function.call, out) : out;
+ // export
+ exports[key] = exp;
+ if(isProto)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;
+ }
+ };
+ // type bitmap
+ $def.F = 1; // forced
+ $def.G = 2; // global
+ $def.S = 4; // static
+ $def.P = 8; // proto
+ $def.B = 16; // bind
+ $def.W = 32; // wrap
+ module.exports = $def;
+
+/***/ },
+/* 8 */
+/***/ function(module, exports) {
+
+ var global = typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+ module.exports = global;
+ if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+
+/***/ },
+/* 9 */
+/***/ function(module, exports) {
+
+ var core = module.exports = {};
+ if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+/* 10 */
+/***/ function(module, exports) {
+
+ module.exports = function(exec){
+ try {
+ return !!exec();
+ } catch(e){
+ return true;
+ }
+ };
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(12), __esModule: true };
+
+/***/ },
+/* 12 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var $ = __webpack_require__(13);
+ module.exports = function defineProperty(it, key, desc){
+ return $.setDesc(it, key, desc);
+ };
+
+/***/ },
+/* 13 */
+/***/ function(module, exports) {
+
+ var $Object = Object;
+ module.exports = {
+ create: $Object.create,
+ getProto: $Object.getPrototypeOf,
+ isEnum: {}.propertyIsEnumerable,
+ getDesc: $Object.getOwnPropertyDescriptor,
+ setDesc: $Object.defineProperty,
+ setDescs: $Object.defineProperties,
+ getKeys: $Object.keys,
+ getNames: $Object.getOwnPropertyNames,
+ getSymbols: $Object.getOwnPropertySymbols,
+ each: [].forEach
+ };
+
+/***/ },
+/* 14 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports["default"] = function (obj) {
+ return obj && obj.__esModule ? obj : {
+ "default": obj
+ };
+ };
+
+ exports.__esModule = true;
+
+/***/ },
+/* 15 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports["default"] = function (obj) {
+ if (obj && obj.__esModule) {
+ return obj;
+ } else {
+ var newObj = {};
+
+ if (obj != null) {
+ for (var key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
+ }
+ }
+
+ newObj["default"] = obj;
+ return newObj;
+ }
+ };
+
+ exports.__esModule = true;
+
+/***/ },
+/* 16 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _reactLibWarning = __webpack_require__(29);
+
+ var _reactLibWarning2 = _interopRequireDefault(_reactLibWarning);
+
+ var warned = {};
+
+ function deprecationWarning(oldname, newname, link) {
+ var message = undefined;
+
+ if (typeof oldname === 'object') {
+ message = oldname.message;
+ } else {
+ message = oldname + ' is deprecated. Use ' + newname + ' instead.';
+
+ if (link) {
+ message += '\nYou can read more about it at ' + link;
+ }
+ }
+
+ if (warned[message]) {
+ return;
+ }
+
+ _reactLibWarning2['default'](false, message);
+ warned[message] = true;
+ }
+
+ deprecationWarning.wrapper = function (Component) {
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ args[_key - 1] = arguments[_key];
+ }
+
+ return (function (_Component) {
+ _inherits(DeprecatedComponent, _Component);
+
+ function DeprecatedComponent() {
+ _classCallCheck(this, DeprecatedComponent);
+
+ _Component.apply(this, arguments);
+ }
+
+ DeprecatedComponent.prototype.componentWillMount = function componentWillMount() {
+ deprecationWarning.apply(undefined, args);
+
+ if (_Component.prototype.componentWillMount) {
+ var _Component$prototype$componentWillMount;
+
+ for (var _len2 = arguments.length, methodArgs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ methodArgs[_key2] = arguments[_key2];
+ }
+
+ (_Component$prototype$componentWillMount = _Component.prototype.componentWillMount).call.apply(_Component$prototype$componentWillMount, [this].concat(methodArgs));
+ }
+ };
+
+ return DeprecatedComponent;
+ })(Component);
+ };
+
+ exports['default'] = deprecationWarning;
+ module.exports = exports['default'];
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ var _Object$create = __webpack_require__(18)["default"];
+
+ var _Object$setPrototypeOf = __webpack_require__(20)["default"];
+
+ exports["default"] = function (subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
+ }
+
+ subClass.prototype = _Object$create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _Object$setPrototypeOf ? _Object$setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
+ };
+
+ exports.__esModule = true;
+
+/***/ },
+/* 18 */
+/***/ function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(19), __esModule: true };
+
+/***/ },
+/* 19 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var $ = __webpack_require__(13);
+ module.exports = function create(P, D){
+ return $.create(P, D);
+ };
+
+/***/ },
+/* 20 */
+/***/ function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(21), __esModule: true };
+
+/***/ },
+/* 21 */
+/***/ function(module, exports, __webpack_require__) {
+
+ __webpack_require__(22);
+ module.exports = __webpack_require__(9).Object.setPrototypeOf;
+
+/***/ },
+/* 22 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // 19.1.3.19 Object.setPrototypeOf(O, proto)
+ var $def = __webpack_require__(7);
+ $def($def.S, 'Object', {setPrototypeOf: __webpack_require__(23).set});
+
+/***/ },
+/* 23 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // Works with __proto__ only. Old v8 can't work with null proto objects.
+ /* eslint-disable no-proto */
+ var getDesc = __webpack_require__(13).getDesc
+ , isObject = __webpack_require__(24)
+ , anObject = __webpack_require__(25);
+ var check = function(O, proto){
+ anObject(O);
+ if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!");
+ };
+ module.exports = {
+ set: Object.setPrototypeOf || ('__proto__' in {} // eslint-disable-line
+ ? function(buggy, set){
+ try {
+ set = __webpack_require__(26)(Function.call, getDesc(Object.prototype, '__proto__').set, 2);
+ set({}, []);
+ } catch(e){ buggy = true; }
+ return function setPrototypeOf(O, proto){
+ check(O, proto);
+ if(buggy)O.__proto__ = proto;
+ else set(O, proto);
+ return O;
+ };
+ }()
+ : undefined),
+ check: check
+ };
+
+/***/ },
+/* 24 */
+/***/ function(module, exports) {
+
+ // http://jsperf.com/core-js-isobject
+ module.exports = function(it){
+ return it !== null && (typeof it == 'object' || typeof it == 'function');
+ };
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(24);
+ module.exports = function(it){
+ if(!isObject(it))throw TypeError(it + ' is not an object!');
+ return it;
+ };
+
+/***/ },
+/* 26 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // optional / simple context binding
+ var aFunction = __webpack_require__(27);
+ module.exports = function(fn, that, length){
+ aFunction(fn);
+ if(that === undefined)return fn;
+ switch(length){
+ case 1: return function(a){
+ return fn.call(that, a);
+ };
+ case 2: return function(a, b){
+ return fn.call(that, a, b);
+ };
+ case 3: return function(a, b, c){
+ return fn.call(that, a, b, c);
+ };
+ } return function(/* ...args */){
+ return fn.apply(that, arguments);
+ };
+ };
+
+/***/ },
+/* 27 */
+/***/ function(module, exports) {
+
+ module.exports = function(it){
+ if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+ return it;
+ };
+
+/***/ },
+/* 28 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports["default"] = function (instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ };
+
+ exports.__esModule = true;
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Copyright 2014-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule warning
+ */
+
+ "use strict";
+
+ var emptyFunction = __webpack_require__(30);
+
+ /**
+ * Similar to invariant but only logs a warning if the condition is not met.
+ * This can be used to log issues in development environments in critical
+ * paths. Removing the logging code for production environments will keep the
+ * same logic and follow the same code paths.
+ */
+
+ var warning = emptyFunction;
+
+ if (true) {
+ warning = function(condition, format ) {for (var args=[],$__0=2,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]);
+ if (format === undefined) {
+ throw new Error(
+ '`warning(condition, format, ...args)` requires a warning ' +
+ 'message argument'
+ );
+ }
+
+ if (format.length < 10 || /^[s\W]*$/.test(format)) {
+ throw new Error(
+ 'The warning format should be able to uniquely identify this ' +
+ 'warning. Please, use a more descriptive format than: ' + format
+ );
+ }
+
+ if (format.indexOf('Failed Composite propType: ') === 0) {
+ return; // Ignore CompositeComponent proptype check.
+ }
+
+ if (!condition) {
+ var argIndex = 0;
+ var message = 'Warning: ' + format.replace(/%s/g, function() {return args[argIndex++];});
+ console.warn(message);
+ try {
+ // --- Welcome to debugging React ---
+ // This error was thrown as a convenience so that you can use this stack
+ // to find the callsite that caused this warning to fire.
+ throw new Error(message);
+ } catch(x) {}
+ }
+ };
+ }
+
+ module.exports = warning;
+
+
+/***/ },
+/* 30 */
+/***/ function(module, exports) {
+
+ /**
+ * Copyright 2013-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule emptyFunction
+ */
+
+ function makeEmptyFunction(arg) {
+ return function() {
+ return arg;
+ };
+ }
+
+ /**
+ * This function accepts and discards inputs; it has no side effects. This is
+ * primarily useful idiomatically for overridable function endpoints which
+ * always need to be callable, since JS lacks a null-call idiom ala Cocoa.
+ */
+ function emptyFunction() {}
+
+ emptyFunction.thatReturns = makeEmptyFunction;
+ emptyFunction.thatReturnsFalse = makeEmptyFunction(false);
+ emptyFunction.thatReturnsTrue = makeEmptyFunction(true);
+ emptyFunction.thatReturnsNull = makeEmptyFunction(null);
+ emptyFunction.thatReturnsThis = function() { return this; };
+ emptyFunction.thatReturnsArgument = function(arg) { return arg; };
+
+ module.exports = emptyFunction;
+
+
+/***/ },
+/* 31 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _domHelpersUtilInDOM = __webpack_require__(33);
+
+ var _domHelpersUtilInDOM2 = _interopRequireDefault(_domHelpersUtilInDOM);
+
+ var _domHelpersOwnerDocument = __webpack_require__(34);
+
+ var _domHelpersOwnerDocument2 = _interopRequireDefault(_domHelpersOwnerDocument);
+
+ var _domHelpersOwnerWindow = __webpack_require__(35);
+
+ var _domHelpersOwnerWindow2 = _interopRequireDefault(_domHelpersOwnerWindow);
+
+ var _domHelpersQueryContains = __webpack_require__(37);
+
+ var _domHelpersQueryContains2 = _interopRequireDefault(_domHelpersQueryContains);
+
+ var _domHelpersActiveElement = __webpack_require__(38);
+
+ var _domHelpersActiveElement2 = _interopRequireDefault(_domHelpersActiveElement);
+
+ var _domHelpersQueryOffset = __webpack_require__(39);
+
+ var _domHelpersQueryOffset2 = _interopRequireDefault(_domHelpersQueryOffset);
+
+ var _domHelpersQueryOffsetParent = __webpack_require__(41);
+
+ var _domHelpersQueryOffsetParent2 = _interopRequireDefault(_domHelpersQueryOffsetParent);
+
+ var _domHelpersQueryPosition = __webpack_require__(49);
+
+ var _domHelpersQueryPosition2 = _interopRequireDefault(_domHelpersQueryPosition);
+
+ var _domHelpersStyle = __webpack_require__(42);
+
+ var _domHelpersStyle2 = _interopRequireDefault(_domHelpersStyle);
+
+ function ownerDocument(componentOrElement) {
+ var elem = _react2['default'].findDOMNode(componentOrElement);
+ return _domHelpersOwnerDocument2['default'](elem && elem.ownerDocument || document);
+ }
+
+ function ownerWindow(componentOrElement) {
+ var doc = ownerDocument(componentOrElement);
+ return _domHelpersOwnerWindow2['default'](doc);
+ }
+
+ //TODO remove in 0.26
+ function getComputedStyles(elem) {
+ return ownerDocument(elem).defaultView.getComputedStyle(elem, null);
+ }
+
+ /**
+ * Get the height of the document
+ *
+ * @returns {documentHeight: number}
+ */
+ function getDocumentHeight() {
+ return Math.max(document.documentElement.offsetHeight, document.height, document.body.scrollHeight, document.body.offsetHeight);
+ }
+
+ /**
+ * Get an element's size
+ *
+ * @param {HTMLElement} elem
+ * @returns {{width: number, height: number}}
+ */
+ function getSize(elem) {
+ var rect = {
+ width: elem.offsetWidth || 0,
+ height: elem.offsetHeight || 0
+ };
+ if (typeof elem.getBoundingClientRect !== 'undefined') {
+ var _elem$getBoundingClientRect = elem.getBoundingClientRect();
+
+ var width = _elem$getBoundingClientRect.width;
+ var height = _elem$getBoundingClientRect.height;
+
+ rect.width = width || rect.width;
+ rect.height = height || rect.height;
+ }
+ return rect;
+ }
+
+ exports['default'] = {
+ canUseDom: _domHelpersUtilInDOM2['default'],
+ css: _domHelpersStyle2['default'],
+ getComputedStyles: getComputedStyles,
+ contains: _domHelpersQueryContains2['default'],
+ ownerWindow: ownerWindow,
+ ownerDocument: ownerDocument,
+ getOffset: _domHelpersQueryOffset2['default'],
+ getDocumentHeight: getDocumentHeight,
+ getPosition: _domHelpersQueryPosition2['default'],
+ getSize: getSize,
+ activeElement: _domHelpersActiveElement2['default'],
+ offsetParent: _domHelpersQueryOffsetParent2['default']
+ };
+ module.exports = exports['default'];
+
+/***/ },
+/* 32 */
+/***/ function(module, exports) {
+
+ module.exports = __WEBPACK_EXTERNAL_MODULE_32__;
+
+/***/ },
+/* 33 */
+/***/ function(module, exports) {
+
+ 'use strict';
+ module.exports = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
+
+/***/ },
+/* 34 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ exports["default"] = ownerDocument;
+
+ function ownerDocument(node) {
+ return node && node.ownerDocument || document;
+ }
+
+ module.exports = exports["default"];
+
+/***/ },
+/* 35 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var babelHelpers = __webpack_require__(36);
+
+ exports.__esModule = true;
+ exports['default'] = ownerWindow;
+
+ var _ownerDocument = __webpack_require__(34);
+
+ var _ownerDocument2 = babelHelpers.interopRequireDefault(_ownerDocument);
+
+ function ownerWindow(node) {
+ var doc = (0, _ownerDocument2['default'])(node);
+ return doc && doc.defaultView || doc.parentWindow;
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 36 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {
+ if (true) {
+ !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+ } else if (typeof exports === "object") {
+ factory(exports);
+ } else {
+ factory(root.babelHelpers = {});
+ }
+ })(this, function (global) {
+ var babelHelpers = global;
+
+ babelHelpers.interopRequireDefault = function (obj) {
+ return obj && obj.__esModule ? obj : {
+ "default": obj
+ };
+ };
+
+ babelHelpers._extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+ };
+ })
+
+/***/ },
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var canUseDOM = __webpack_require__(33);
+
+ var contains = (function () {
+ var root = canUseDOM && document.documentElement;
+
+ return root && root.contains ? function (context, node) {
+ return context.contains(node);
+ } : root && root.compareDocumentPosition ? function (context, node) {
+ return context === node || !!(context.compareDocumentPosition(node) & 16);
+ } : function (context, node) {
+ if (node) do {
+ if (node === context) return true;
+ } while (node = node.parentNode);
+
+ return false;
+ };
+ })();
+
+ module.exports = contains;
+
+/***/ },
+/* 38 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var babelHelpers = __webpack_require__(36);
+
+ exports.__esModule = true;
+
+ /**
+ * document.activeElement
+ */
+ exports['default'] = activeElement;
+
+ var _ownerDocument = __webpack_require__(34);
+
+ var _ownerDocument2 = babelHelpers.interopRequireDefault(_ownerDocument);
+
+ function activeElement() {
+ var doc = arguments[0] === undefined ? document : arguments[0];
+
+ try {
+ return doc.activeElement;
+ } catch (e) {}
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 39 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var contains = __webpack_require__(37),
+ getWindow = __webpack_require__(40),
+ ownerDocument = __webpack_require__(34);
+
+ module.exports = function offset(node) {
+ var doc = ownerDocument(node),
+ win = getWindow(doc),
+ docElem = doc && doc.documentElement,
+ box = { top: 0, left: 0, height: 0, width: 0 };
+
+ if (!doc) return;
+
+ // Make sure it's not a disconnected DOM node
+ if (!contains(docElem, node)) return box;
+
+ if (node.getBoundingClientRect !== undefined) box = node.getBoundingClientRect();
+
+ if (box.width || box.height) {
+
+ box = {
+ top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),
+ left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0),
+ width: (box.width == null ? node.offsetWidth : box.width) || 0,
+ height: (box.height == null ? node.offsetHeight : box.height) || 0
+ };
+ }
+
+ return box;
+ };
+
+/***/ },
+/* 40 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ module.exports = function getWindow(node) {
+ return node === node.window ? node : node.nodeType === 9 ? node.defaultView || node.parentWindow : false;
+ };
+
+/***/ },
+/* 41 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var babelHelpers = __webpack_require__(36);
+
+ exports.__esModule = true;
+ exports['default'] = offsetParent;
+
+ var _ownerDocument = __webpack_require__(34);
+
+ var _ownerDocument2 = babelHelpers.interopRequireDefault(_ownerDocument);
+
+ var _style = __webpack_require__(42);
+
+ var _style2 = babelHelpers.interopRequireDefault(_style);
+
+ function nodeName(node) {
+ return node.nodeName && node.nodeName.toLowerCase();
+ }
+
+ function offsetParent(node) {
+ var doc = (0, _ownerDocument2['default'])(node),
+ offsetParent = node && node.offsetParent;
+
+ while (offsetParent && nodeName(node) !== 'html' && (0, _style2['default'])(offsetParent, 'position') === 'static') {
+ offsetParent = offsetParent.offsetParent;
+ }
+
+ return offsetParent || doc.documentElement;
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 42 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var camelize = __webpack_require__(43),
+ hyphenate = __webpack_require__(45),
+ _getComputedStyle = __webpack_require__(47),
+ removeStyle = __webpack_require__(48);
+
+ var has = Object.prototype.hasOwnProperty;
+
+ module.exports = function style(node, property, value) {
+ var css = '',
+ props = property;
+
+ if (typeof property === 'string') {
+
+ if (value === undefined) return node.style[camelize(property)] || _getComputedStyle(node).getPropertyValue(hyphenate(property));else (props = {})[property] = value;
+ }
+
+ for (var key in props) if (has.call(props, key)) {
+ !props[key] && props[key] !== 0 ? removeStyle(node, hyphenate(key)) : css += hyphenate(key) + ':' + props[key] + ';';
+ }
+
+ node.style.cssText += ';' + css;
+ };
+
+/***/ },
+/* 43 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Copyright 2014-2015, Facebook, Inc.
+ * All rights reserved.
+ * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/camelizeStyleName.js
+ */
+
+ 'use strict';
+ var camelize = __webpack_require__(44);
+ var msPattern = /^-ms-/;
+
+ module.exports = function camelizeStyleName(string) {
+ return camelize(string.replace(msPattern, 'ms-'));
+ };
+
+/***/ },
+/* 44 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ var rHyphen = /-(.)/g;
+
+ module.exports = function camelize(string) {
+ return string.replace(rHyphen, function (_, chr) {
+ return chr.toUpperCase();
+ });
+ };
+
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Copyright 2013-2014, Facebook, Inc.
+ * All rights reserved.
+ * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/hyphenateStyleName.js
+ */
+
+ "use strict";
+
+ var hyphenate = __webpack_require__(46);
+ var msPattern = /^ms-/;
+
+ module.exports = function hyphenateStyleName(string) {
+ return hyphenate(string).replace(msPattern, "-ms-");
+ };
+
+/***/ },
+/* 46 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ var rUpper = /([A-Z])/g;
+
+ module.exports = function hyphenate(string) {
+ return string.replace(rUpper, '-$1').toLowerCase();
+ };
+
+/***/ },
+/* 47 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var babelHelpers = __webpack_require__(36);
+
+ var _utilCamelizeStyle = __webpack_require__(43);
+
+ var _utilCamelizeStyle2 = babelHelpers.interopRequireDefault(_utilCamelizeStyle);
+
+ var rposition = /^(top|right|bottom|left)$/;
+ var rnumnonpx = /^([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/i;
+
+ module.exports = function _getComputedStyle(node) {
+ if (!node) throw new TypeError('No Element passed to `getComputedStyle()`');
+ var doc = node.ownerDocument;
+
+ return 'defaultView' in doc ? doc.defaultView.opener ? node.ownerDocument.defaultView.getComputedStyle(node, null) : window.getComputedStyle(node, null) : { //ie 8 "magic" from: https://github.com/jquery/jquery/blob/1.11-stable/src/css/curCSS.js#L72
+ getPropertyValue: function getPropertyValue(prop) {
+ var style = node.style;
+
+ prop = (0, _utilCamelizeStyle2['default'])(prop);
+
+ if (prop == 'float') prop = 'styleFloat';
+
+ var current = node.currentStyle[prop] || null;
+
+ if (current == null && style && style[prop]) current = style[prop];
+
+ if (rnumnonpx.test(current) && !rposition.test(prop)) {
+ // Remember the original values
+ var left = style.left;
+ var runStyle = node.runtimeStyle;
+ var rsLeft = runStyle && runStyle.left;
+
+ // Put in the new values to get a computed value out
+ if (rsLeft) runStyle.left = node.currentStyle.left;
+
+ style.left = prop === 'fontSize' ? '1em' : current;
+ current = style.pixelLeft + 'px';
+
+ // Revert the changed values
+ style.left = left;
+ if (rsLeft) runStyle.left = rsLeft;
+ }
+
+ return current;
+ }
+ };
+ };
+
+/***/ },
+/* 48 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ module.exports = function removeStyle(node, key) {
+ return 'removeProperty' in node.style ? node.style.removeProperty(key) : node.style.removeAttribute(key);
+ };
+
+/***/ },
+/* 49 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var babelHelpers = __webpack_require__(36);
+
+ exports.__esModule = true;
+ exports['default'] = position;
+
+ var _offset = __webpack_require__(39);
+
+ var _offset2 = babelHelpers.interopRequireDefault(_offset);
+
+ var _offsetParent = __webpack_require__(41);
+
+ var _offsetParent2 = babelHelpers.interopRequireDefault(_offsetParent);
+
+ var _scrollTop = __webpack_require__(50);
+
+ var _scrollTop2 = babelHelpers.interopRequireDefault(_scrollTop);
+
+ var _scrollLeft = __webpack_require__(51);
+
+ var _scrollLeft2 = babelHelpers.interopRequireDefault(_scrollLeft);
+
+ var _style = __webpack_require__(42);
+
+ var _style2 = babelHelpers.interopRequireDefault(_style);
+
+ function nodeName(node) {
+ return node.nodeName && node.nodeName.toLowerCase();
+ }
+
+ function position(node, offsetParent) {
+ var parentOffset = { top: 0, left: 0 },
+ offset;
+
+ // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+ // because it is its only offset parent
+ if ((0, _style2['default'])(node, 'position') === 'fixed') {
+ offset = node.getBoundingClientRect();
+ } else {
+ offsetParent = offsetParent || (0, _offsetParent2['default'])(node);
+ offset = (0, _offset2['default'])(node);
+
+ if (nodeName(offsetParent) !== 'html') parentOffset = (0, _offset2['default'])(offsetParent);
+
+ parentOffset.top += parseInt((0, _style2['default'])(offsetParent, 'borderTopWidth'), 10) - (0, _scrollTop2['default'])(offsetParent) || 0;
+ parentOffset.left += parseInt((0, _style2['default'])(offsetParent, 'borderLeftWidth'), 10) - (0, _scrollLeft2['default'])(offsetParent) || 0;
+ }
+
+ // Subtract parent offsets and node margins
+ return babelHelpers._extends({}, offset, {
+ top: offset.top - parentOffset.top - (parseInt((0, _style2['default'])(node, 'marginTop'), 10) || 0),
+ left: offset.left - parentOffset.left - (parseInt((0, _style2['default'])(node, 'marginLeft'), 10) || 0)
+ });
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 50 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var getWindow = __webpack_require__(40);
+
+ module.exports = function scrollTop(node, val) {
+ var win = getWindow(node);
+
+ if (val === undefined) return win ? 'pageYOffset' in win ? win.pageYOffset : win.document.documentElement.scrollTop : node.scrollTop;
+
+ if (win) win.scrollTo('pageXOffset' in win ? win.pageXOffset : win.document.documentElement.scrollLeft, val);else node.scrollTop = val;
+ };
+
+/***/ },
+/* 51 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var getWindow = __webpack_require__(40);
+
+ module.exports = function scrollTop(node, val) {
+ var win = getWindow(node);
+
+ if (val === undefined) return win ? 'pageXOffset' in win ? win.pageXOffset : win.document.documentElement.scrollLeft : node.scrollLeft;
+
+ if (win) win.scrollTo(val, 'pageYOffset' in win ? win.pageYOffset : win.document.documentElement.scrollTop);else node.scrollLeft = val;
+ };
+
+/***/ },
+/* 52 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+ exports['default'] = valueValidation;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _CustomPropTypes = __webpack_require__(53);
+
+ var propList = ['children', 'value'];
+ var typeList = [_react2['default'].PropTypes.number, _react2['default'].PropTypes.string];
+
+ function valueValidation(props, propName, componentName) {
+ var error = _CustomPropTypes.singlePropFrom(propList)(props, propName, componentName);
+ if (!error) {
+ var oneOfType = _react2['default'].PropTypes.oneOfType(typeList);
+ error = oneOfType(props, propName, componentName);
+ }
+ return error;
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 53 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _Object$keys = __webpack_require__(1)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _reactLibWarning = __webpack_require__(29);
+
+ var _reactLibWarning2 = _interopRequireDefault(_reactLibWarning);
+
+ var _childrenToArray = __webpack_require__(54);
+
+ var _childrenToArray2 = _interopRequireDefault(_childrenToArray);
+
+ var ANONYMOUS = '<<anonymous>>';
+
+ /**
+ * Create chain-able isRequired validator
+ *
+ * Largely copied directly from:
+ * https://github.com/facebook/react/blob/0.11-stable/src/core/ReactPropTypes.js#L94
+ */
+ function createChainableTypeChecker(validate) {
+ function checkType(isRequired, props, propName, componentName) {
+ componentName = componentName || ANONYMOUS;
+ if (props[propName] == null) {
+ if (isRequired) {
+ return new Error('Required prop \'' + propName + '\' was not specified in \'' + componentName + '\'.');
+ }
+ } else {
+ return validate(props, propName, componentName);
+ }
+ }
+
+ var chainedCheckType = checkType.bind(null, false);
+ chainedCheckType.isRequired = checkType.bind(null, true);
+
+ return chainedCheckType;
+ }
+
+ var CustomPropTypes = {
+
+ deprecated: function deprecated(propType, explanation) {
+ return function (props, propName, componentName) {
+ if (props[propName] != null) {
+ _reactLibWarning2['default'](false, '"' + propName + '" property of "' + componentName + '" has been deprecated.\n' + explanation);
+ }
+
+ return propType(props, propName, componentName);
+ };
+ },
+
+ isRequiredForA11y: function isRequiredForA11y(propType) {
+ return function (props, propName, componentName) {
+ if (props[propName] == null) {
+ return new Error('The prop `' + propName + '` is required to make ' + componentName + ' accessible ' + 'for users using assistive technologies such as screen readers `');
+ }
+
+ return propType(props, propName, componentName);
+ };
+ },
+
+ requiredRoles: function requiredRoles() {
+ for (var _len = arguments.length, roles = Array(_len), _key = 0; _key < _len; _key++) {
+ roles[_key] = arguments[_key];
+ }
+
+ return createChainableTypeChecker(function requiredRolesValidator(props, propName, component) {
+ var missing = undefined;
+ var children = _childrenToArray2['default'](props.children);
+
+ var inRole = function inRole(role, child) {
+ return role === child.props.bsRole;
+ };
+
+ roles.every(function (role) {
+ if (!children.some(function (child) {
+ return inRole(role, child);
+ })) {
+ missing = role;
+ return false;
+ }
+ return true;
+ });
+
+ if (missing) {
+ return new Error('(children) ' + component + ' - Missing a required child with bsRole: ' + missing + '. ' + (component + ' must have at least one child of each of the following bsRoles: ' + roles.join(', ')));
+ }
+ });
+ },
+
+ exclusiveRoles: function exclusiveRoles() {
+ for (var _len2 = arguments.length, roles = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ roles[_key2] = arguments[_key2];
+ }
+
+ return createChainableTypeChecker(function exclusiveRolesValidator(props, propName, component) {
+ var children = _childrenToArray2['default'](props.children);
+ var duplicate = undefined;
+
+ roles.every(function (role) {
+ var childrenWithRole = children.filter(function (child) {
+ return child.props.bsRole === role;
+ });
+
+ if (childrenWithRole.length > 1) {
+ duplicate = role;
+ return false;
+ }
+ return true;
+ });
+
+ if (duplicate) {
+ return new Error('(children) ' + component + ' - Duplicate children detected of bsRole: ' + duplicate + '. ' + ('Only one child each allowed with the following bsRoles: ' + roles.join(', ')));
+ }
+ });
+ },
+
+ /**
+ * Checks whether a prop provides a DOM element
+ *
+ * The element can be provided in two forms:
+ * - Directly passed
+ * - Or passed an object that has a `render` method
+ *
+ * @param props
+ * @param propName
+ * @param componentName
+ * @returns {Error|undefined}
+ */
+ mountable: createMountableChecker(),
+
+ /**
+ * Checks whether a prop provides a type of element.
+ *
+ * The type of element can be provided in two forms:
+ * - tag name (string)
+ * - a return value of React.createClass(...)
+ *
+ * @param props
+ * @param propName
+ * @param componentName
+ * @returns {Error|undefined}
+ */
+ elementType: createElementTypeChecker(),
+
+ /**
+ * Checks whether a prop matches a key of an associated object
+ *
+ * @param props
+ * @param propName
+ * @param componentName
+ * @returns {Error|undefined}
+ */
+ keyOf: createKeyOfChecker,
+ /**
+ * Checks if only one of the listed properties is in use. An error is given
+ * if multiple have a value
+ *
+ * @param props
+ * @param propName
+ * @param componentName
+ * @returns {Error|undefined}
+ */
+ singlePropFrom: createSinglePropFromChecker,
+
+ all: all
+ };
+
+ function errMsg(props, propName, componentName, msgContinuation) {
+ return 'Invalid prop \'' + propName + '\' of value \'' + props[propName] + '\'' + (' supplied to \'' + componentName + '\'' + msgContinuation);
+ }
+
+ function createMountableChecker() {
+ function validate(props, propName, componentName) {
+ if (typeof props[propName] !== 'object' || typeof props[propName].render !== 'function' && props[propName].nodeType !== 1) {
+ return new Error(errMsg(props, propName, componentName, ', expected a DOM element or an object that has a `render` method'));
+ }
+ }
+
+ return createChainableTypeChecker(validate);
+ }
+
+ function createKeyOfChecker(obj) {
+ function validate(props, propName, componentName) {
+ var propValue = props[propName];
+ if (!obj.hasOwnProperty(propValue)) {
+ var valuesString = JSON.stringify(_Object$keys(obj));
+ return new Error(errMsg(props, propName, componentName, ', expected one of ' + valuesString + '.'));
+ }
+ }
+ return createChainableTypeChecker(validate);
+ }
+
+ function createSinglePropFromChecker(arrOfProps) {
+ function validate(props, propName, componentName) {
+ var usedPropCount = arrOfProps.map(function (listedProp) {
+ return props[listedProp];
+ }).reduce(function (acc, curr) {
+ return acc + (curr !== undefined ? 1 : 0);
+ }, 0);
+
+ if (usedPropCount > 1) {
+ var first = arrOfProps[0];
+ var others = arrOfProps.slice(1);
+
+ var message = others.join(', ') + ' and ' + first;
+ return new Error('Invalid prop \'' + propName + '\', only one of the following ' + ('may be provided: ' + message));
+ }
+ }
+ return validate;
+ }
+
+ function all(propTypes) {
+ if (propTypes === undefined) {
+ throw new Error('No validations provided');
+ }
+
+ if (!(propTypes instanceof Array)) {
+ throw new Error('Invalid argument must be an array');
+ }
+
+ if (propTypes.length === 0) {
+ throw new Error('No validations provided');
+ }
+
+ return function (props, propName, componentName) {
+ for (var i = 0; i < propTypes.length; i++) {
+ var result = propTypes[i](props, propName, componentName);
+
+ if (result !== undefined && result !== null) {
+ return result;
+ }
+ }
+ };
+ }
+
+ function createElementTypeChecker() {
+ function validate(props, propName, componentName) {
+ var errBeginning = errMsg(props, propName, componentName, '. Expected an Element `type`');
+
+ if (typeof props[propName] !== 'function') {
+ if (_react2['default'].isValidElement(props[propName])) {
+ return new Error(errBeginning + ', not an actual Element');
+ }
+
+ if (typeof props[propName] !== 'string') {
+ return new Error(errBeginning + ' such as a tag name or return value of React.createClass(...)');
+ }
+ }
+ }
+
+ return createChainableTypeChecker(validate);
+ }
+
+ exports['default'] = CustomPropTypes;
+ module.exports = exports['default'];
+
+/***/ },
+/* 54 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+ exports['default'] = childrenAsArray;
+
+ var _ValidComponentChildren = __webpack_require__(55);
+
+ var _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);
+
+ function childrenAsArray(children) {
+ var result = [];
+
+ if (children === undefined) {
+ return result;
+ }
+
+ _ValidComponentChildren2['default'].forEach(children, function (child) {
+ result.push(child);
+ });
+
+ return result;
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 55 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ /**
+ * Maps children that are typically specified as `props.children`,
+ * but only iterates over children that are "valid components".
+ *
+ * The mapFunction provided index will be normalised to the components mapped,
+ * so an invalid component would not increase the index.
+ *
+ * @param {?*} children Children tree container.
+ * @param {function(*, int)} mapFunction.
+ * @param {*} mapContext Context for mapFunction.
+ * @return {object} Object containing the ordered map of results.
+ */
+ function mapValidComponents(children, func, context) {
+ var index = 0;
+
+ return _react2['default'].Children.map(children, function (child) {
+ if (_react2['default'].isValidElement(child)) {
+ var lastIndex = index;
+ index++;
+ return func.call(context, child, lastIndex);
+ }
+
+ return child;
+ });
+ }
+
+ /**
+ * Iterates through children that are typically specified as `props.children`,
+ * but only iterates over children that are "valid components".
+ *
+ * The provided forEachFunc(child, index) will be called for each
+ * leaf child with the index reflecting the position relative to "valid components".
+ *
+ * @param {?*} children Children tree container.
+ * @param {function(*, int)} forEachFunc.
+ * @param {*} forEachContext Context for forEachContext.
+ */
+ function forEachValidComponents(children, func, context) {
+ var index = 0;
+
+ return _react2['default'].Children.forEach(children, function (child) {
+ if (_react2['default'].isValidElement(child)) {
+ func.call(context, child, index);
+ index++;
+ }
+ });
+ }
+
+ /**
+ * Count the number of "valid components" in the Children container.
+ *
+ * @param {?*} children Children tree container.
+ * @returns {number}
+ */
+ function numberOfValidComponents(children) {
+ var count = 0;
+
+ _react2['default'].Children.forEach(children, function (child) {
+ if (_react2['default'].isValidElement(child)) {
+ count++;
+ }
+ });
+
+ return count;
+ }
+
+ /**
+ * Determine if the Child container has one or more "valid components".
+ *
+ * @param {?*} children Children tree container.
+ * @returns {boolean}
+ */
+ function hasValidComponent(children) {
+ var hasValid = false;
+
+ _react2['default'].Children.forEach(children, function (child) {
+ if (!hasValid && _react2['default'].isValidElement(child)) {
+ hasValid = true;
+ }
+ });
+
+ return hasValid;
+ }
+
+ exports['default'] = {
+ map: mapValidComponents,
+ forEach: forEachValidComponents,
+ numberOf: numberOfValidComponents,
+ hasValidComponent: hasValidComponent
+ };
+ module.exports = exports['default'];
+
+/***/ },
+/* 56 */
+/***/ function(module, exports) {
+
+ /**
+ * Safe chained function
+ *
+ * Will only create a new function if needed,
+ * otherwise will pass back existing functions or null.
+ *
+ * @param {function} functions to chain
+ * @returns {function|null}
+ */
+ 'use strict';
+
+ exports.__esModule = true;
+ function createChainedFunction() {
+ for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
+ funcs[_key] = arguments[_key];
+ }
+
+ return funcs.filter(function (f) {
+ return f != null;
+ }).reduce(function (acc, f) {
+ if (typeof f !== 'function') {
+ throw new Error('Invalid Argument Type, must only provide functions, undefined, or null.');
+ }
+
+ if (acc === null) {
+ return f;
+ }
+
+ return function chainedFunction() {
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+
+ acc.apply(this, args);
+ f.apply(this, args);
+ };
+ }, null);
+ }
+
+ exports['default'] = createChainedFunction;
+ module.exports = exports['default'];
+
+/***/ },
+/* 57 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _PanelGroup = __webpack_require__(66);
+
+ var _PanelGroup2 = _interopRequireDefault(_PanelGroup);
+
+ var Accordion = _react2['default'].createClass({
+ displayName: 'Accordion',
+
+ render: function render() {
+ return _react2['default'].createElement(
+ _PanelGroup2['default'],
+ _extends({}, this.props, { accordion: true }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Accordion;
+ module.exports = exports['default'];
+
+/***/ },
+/* 58 */
+/***/ function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ var _Object$assign = __webpack_require__(59)["default"];
+
+ exports["default"] = _Object$assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+ };
+
+ exports.__esModule = true;
+
+/***/ },
+/* 59 */
+/***/ function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(60), __esModule: true };
+
+/***/ },
+/* 60 */
+/***/ function(module, exports, __webpack_require__) {
+
+ __webpack_require__(61);
+ module.exports = __webpack_require__(9).Object.assign;
+
+/***/ },
+/* 61 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // 19.1.3.1 Object.assign(target, source)
+ var $def = __webpack_require__(7);
+ $def($def.S, 'Object', {assign: __webpack_require__(62)});
+
+/***/ },
+/* 62 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // 19.1.2.1 Object.assign(target, source, ...)
+ var toObject = __webpack_require__(4)
+ , IObject = __webpack_require__(63)
+ , enumKeys = __webpack_require__(65);
+ /* eslint-disable no-unused-vars */
+ module.exports = Object.assign || function assign(target, source){
+ /* eslint-enable no-unused-vars */
+ var T = toObject(target)
+ , l = arguments.length
+ , i = 1;
+ while(l > i){
+ var S = IObject(arguments[i++])
+ , keys = enumKeys(S)
+ , length = keys.length
+ , j = 0
+ , key;
+ while(length > j)T[key = keys[j++]] = S[key];
+ }
+ return T;
+ };
+
+/***/ },
+/* 63 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // indexed object, fallback for non-array-like ES3 strings
+ var cof = __webpack_require__(64);
+ module.exports = 0 in Object('z') ? Object : function(it){
+ return cof(it) == 'String' ? it.split('') : Object(it);
+ };
+
+/***/ },
+/* 64 */
+/***/ function(module, exports) {
+
+ var toString = {}.toString;
+
+ module.exports = function(it){
+ return toString.call(it).slice(8, -1);
+ };
+
+/***/ },
+/* 65 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // all enumerable object keys, includes symbols
+ var $ = __webpack_require__(13);
+ module.exports = function(it){
+ var keys = $.getKeys(it)
+ , getSymbols = $.getSymbols;
+ if(getSymbols){
+ var symbols = getSymbols(it)
+ , isEnum = $.isEnum
+ , i = 0
+ , key;
+ while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key);
+ }
+ return keys;
+ };
+
+/***/ },
+/* 66 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* eslint react/prop-types: [2, {ignore: "bsStyle"}] */
+ /* BootstrapMixin contains `bsStyle` type validation */
+
+ 'use strict';
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var PanelGroup = _react2['default'].createClass({
+ displayName: 'PanelGroup',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ accordion: _react2['default'].PropTypes.bool,
+ activeKey: _react2['default'].PropTypes.any,
+ className: _react2['default'].PropTypes.string,
+ children: _react2['default'].PropTypes.node,
+ defaultActiveKey: _react2['default'].PropTypes.any,
+ onSelect: _react2['default'].PropTypes.func
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ accordion: false,
+ bsClass: 'panel-group'
+ };
+ },
+
+ getInitialState: function getInitialState() {
+ var defaultActiveKey = this.props.defaultActiveKey;
+
+ return {
+ activeKey: defaultActiveKey
+ };
+ },
+
+ render: function render() {
+ var classes = this.getBsClassSet();
+ var _props = this.props;
+ var className = _props.className;
+
+ var props = _objectWithoutProperties(_props, ['className']);
+
+ if (this.props.accordion) {
+ props.role = 'tablist';
+ }
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, props, { className: _classnames2['default'](className, classes), onSelect: null }),
+ _utilsValidComponentChildren2['default'].map(props.children, this.renderPanel)
+ );
+ },
+
+ renderPanel: function renderPanel(child, index) {
+ var activeKey = this.props.activeKey != null ? this.props.activeKey : this.state.activeKey;
+
+ var props = {
+ bsStyle: child.props.bsStyle || this.props.bsStyle,
+ key: child.key ? child.key : index,
+ ref: child.ref
+ };
+
+ if (this.props.accordion) {
+ props.headerRole = 'tab';
+ props.panelRole = 'tabpanel';
+ props.collapsible = true;
+ props.expanded = child.props.eventKey === activeKey;
+ props.onSelect = this.handleSelect;
+ }
+
+ return _react.cloneElement(child, props);
+ },
+
+ shouldComponentUpdate: function shouldComponentUpdate() {
+ // Defer any updates to this component during the `onSelect` handler.
+ return !this._isChanging;
+ },
+
+ handleSelect: function handleSelect(e, key) {
+ e.preventDefault();
+
+ if (this.props.onSelect) {
+ this._isChanging = true;
+ this.props.onSelect(key);
+ this._isChanging = false;
+ }
+
+ if (this.state.activeKey === key) {
+ key = null;
+ }
+
+ this.setState({
+ activeKey: key
+ });
+ }
+ });
+
+ exports['default'] = PanelGroup;
+ module.exports = exports['default'];
+
+/***/ },
+/* 67 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports["default"] = function (obj, keys) {
+ var target = {};
+
+ for (var i in obj) {
+ if (keys.indexOf(i) >= 0) continue;
+ if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;
+ target[i] = obj[i];
+ }
+
+ return target;
+ };
+
+ exports.__esModule = true;
+
+/***/ },
+/* 68 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/*!
+ Copyright (c) 2015 Jed Watson.
+ Licensed under the MIT License (MIT), see
+ http://jedwatson.github.io/classnames
+ */
+
+ (function () {
+ 'use strict';
+
+ function classNames () {
+
+ var classes = '';
+
+ for (var i = 0; i < arguments.length; i++) {
+ var arg = arguments[i];
+ if (!arg) continue;
+
+ var argType = typeof arg;
+
+ if ('string' === argType || 'number' === argType) {
+ classes += ' ' + arg;
+
+ } else if (Array.isArray(arg)) {
+ classes += ' ' + classNames.apply(null, arg);
+
+ } else if ('object' === argType) {
+ for (var key in arg) {
+ if (arg.hasOwnProperty(key) && arg[key]) {
+ classes += ' ' + key;
+ }
+ }
+ }
+ }
+
+ return classes.substr(1);
+ }
+
+ if (typeof module !== 'undefined' && module.exports) {
+ module.exports = classNames;
+ } else if (true){
+ // AMD. Register as an anonymous module.
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {
+ return classNames;
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+ } else {
+ window.classNames = classNames;
+ }
+
+ }());
+
+
+/***/ },
+/* 69 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _styleMaps = __webpack_require__(70);
+
+ var _styleMaps2 = _interopRequireDefault(_styleMaps);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var BootstrapMixin = {
+ propTypes: {
+ /**
+ * bootstrap className
+ * @private
+ */
+ bsClass: _utilsCustomPropTypes2['default'].keyOf(_styleMaps2['default'].CLASSES),
+ /**
+ * Style variants
+ * @type {("default"|"primary"|"success"|"info"|"warning"|"danger"|"link")}
+ */
+ bsStyle: _react2['default'].PropTypes.oneOf(_styleMaps2['default'].STYLES),
+ /**
+ * Size variants
+ * @type {("xsmall"|"small"|"medium"|"large"|"xs"|"sm"|"md"|"lg")}
+ */
+ bsSize: _utilsCustomPropTypes2['default'].keyOf(_styleMaps2['default'].SIZES)
+ },
+
+ getBsClassSet: function getBsClassSet() {
+ var classes = {};
+
+ var bsClass = this.props.bsClass && _styleMaps2['default'].CLASSES[this.props.bsClass];
+ if (bsClass) {
+ classes[bsClass] = true;
+
+ var prefix = bsClass + '-';
+
+ var bsSize = this.props.bsSize && _styleMaps2['default'].SIZES[this.props.bsSize];
+ if (bsSize) {
+ classes[prefix + bsSize] = true;
+ }
+
+ if (this.props.bsStyle) {
+ if (_styleMaps2['default'].STYLES.indexOf(this.props.bsStyle) >= 0) {
+ classes[prefix + this.props.bsStyle] = true;
+ } else {
+ classes[this.props.bsStyle] = true;
+ }
+ }
+ }
+
+ return classes;
+ },
+
+ prefixClass: function prefixClass(subClass) {
+ return _styleMaps2['default'].CLASSES[this.props.bsClass] + '-' + subClass;
+ }
+ };
+
+ exports['default'] = BootstrapMixin;
+ module.exports = exports['default'];
+
+/***/ },
+/* 70 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ var styleMaps = {
+ CLASSES: {
+ 'alert': 'alert',
+ 'button': 'btn',
+ 'button-group': 'btn-group',
+ 'button-toolbar': 'btn-toolbar',
+ 'column': 'col',
+ 'input-group': 'input-group',
+ 'form': 'form',
+ 'glyphicon': 'glyphicon',
+ 'label': 'label',
+ 'thumbnail': 'thumbnail',
+ 'list-group-item': 'list-group-item',
+ 'panel': 'panel',
+ 'panel-group': 'panel-group',
+ 'pagination': 'pagination',
+ 'progress-bar': 'progress-bar',
+ 'nav': 'nav',
+ 'navbar': 'navbar',
+ 'modal': 'modal',
+ 'row': 'row',
+ 'well': 'well'
+ },
+ STYLES: ['default', 'primary', 'success', 'info', 'warning', 'danger', 'link', 'inline', 'tabs', 'pills'],
+ addStyle: function addStyle(name) {
+ styleMaps.STYLES.push(name);
+ },
+ SIZES: {
+ 'large': 'lg',
+ 'medium': 'md',
+ 'small': 'sm',
+ 'xsmall': 'xs',
+ 'lg': 'lg',
+ 'md': 'md',
+ 'sm': 'sm',
+ 'xs': 'xs'
+ },
+ GRID_COLUMNS: 12
+ };
+
+ exports['default'] = styleMaps;
+ module.exports = exports['default'];
+
+/***/ },
+/* 71 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _AffixMixin = __webpack_require__(72);
+
+ var _AffixMixin2 = _interopRequireDefault(_AffixMixin);
+
+ var Affix = _react2['default'].createClass({
+ displayName: 'Affix',
+
+ mixins: [_AffixMixin2['default']],
+
+ render: function render() {
+ var holderStyle = _extends({
+ top: this.state.affixPositionTop
+ }, this.props.style);
+
+ // eslint-disable-line react/prop-types
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, this.state.affixClass),
+ style: holderStyle }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Affix;
+ module.exports = exports['default'];
+ // we don't want to expose the `style` property
+
+/***/ },
+/* 72 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _utilsDomUtils = __webpack_require__(31);
+
+ var _utilsDomUtils2 = _interopRequireDefault(_utilsDomUtils);
+
+ var _utilsEventListener = __webpack_require__(73);
+
+ var _utilsEventListener2 = _interopRequireDefault(_utilsEventListener);
+
+ var AffixMixin = {
+ propTypes: {
+ offset: _react2['default'].PropTypes.number,
+ offsetTop: _react2['default'].PropTypes.number,
+ offsetBottom: _react2['default'].PropTypes.number
+ },
+
+ getInitialState: function getInitialState() {
+ return {
+ affixClass: 'affix-top'
+ };
+ },
+
+ getPinnedOffset: function getPinnedOffset(DOMNode) {
+ if (this.pinnedOffset) {
+ return this.pinnedOffset;
+ }
+
+ DOMNode.className = DOMNode.className.replace(/affix-top|affix-bottom|affix/, '');
+ DOMNode.className += DOMNode.className.length ? ' affix' : 'affix';
+
+ this.pinnedOffset = _utilsDomUtils2['default'].getOffset(DOMNode).top - window.pageYOffset;
+
+ return this.pinnedOffset;
+ },
+
+ checkPosition: function checkPosition() {
+ var DOMNode = undefined,
+ scrollHeight = undefined,
+ scrollTop = undefined,
+ position = undefined,
+ offsetTop = undefined,
+ offsetBottom = undefined,
+ affix = undefined,
+ affixType = undefined,
+ affixPositionTop = undefined;
+
+ // TODO: or not visible
+ if (!this.isMounted()) {
+ return;
+ }
+
+ DOMNode = _react2['default'].findDOMNode(this);
+ scrollHeight = _utilsDomUtils2['default'].getDocumentHeight();
+ scrollTop = window.pageYOffset;
+ position = _utilsDomUtils2['default'].getOffset(DOMNode);
+
+ if (this.affixed === 'top') {
+ position.top += scrollTop;
+ }
+
+ offsetTop = this.props.offsetTop != null ? this.props.offsetTop : this.props.offset;
+ offsetBottom = this.props.offsetBottom != null ? this.props.offsetBottom : this.props.offset;
+
+ if (offsetTop == null && offsetBottom == null) {
+ return;
+ }
+ if (offsetTop == null) {
+ offsetTop = 0;
+ }
+ if (offsetBottom == null) {
+ offsetBottom = 0;
+ }
+
+ if (this.unpin != null && scrollTop + this.unpin <= position.top) {
+ affix = false;
+ } else if (offsetBottom != null && position.top + DOMNode.offsetHeight >= scrollHeight - offsetBottom) {
+ affix = 'bottom';
+ } else if (offsetTop != null && scrollTop <= offsetTop) {
+ affix = 'top';
+ } else {
+ affix = false;
+ }
+
+ if (this.affixed === affix) {
+ return;
+ }
+
+ if (this.unpin != null) {
+ DOMNode.style.top = '';
+ }
+
+ affixType = 'affix' + (affix ? '-' + affix : '');
+
+ this.affixed = affix;
+ this.unpin = affix === 'bottom' ? this.getPinnedOffset(DOMNode) : null;
+
+ if (affix === 'bottom') {
+ DOMNode.className = DOMNode.className.replace(/affix-top|affix-bottom|affix/, 'affix-bottom');
+ affixPositionTop = scrollHeight - offsetBottom - DOMNode.offsetHeight - _utilsDomUtils2['default'].getOffset(DOMNode).top;
+ }
+
+ this.setState({
+ affixClass: affixType,
+ affixPositionTop: affixPositionTop
+ });
+ },
+
+ checkPositionWithEventLoop: function checkPositionWithEventLoop() {
+ setTimeout(this.checkPosition, 0);
+ },
+
+ componentDidMount: function componentDidMount() {
+ this._onWindowScrollListener = _utilsEventListener2['default'].listen(window, 'scroll', this.checkPosition);
+ this._onDocumentClickListener = _utilsEventListener2['default'].listen(_utilsDomUtils2['default'].ownerDocument(this), 'click', this.checkPositionWithEventLoop);
+ },
+
+ componentWillUnmount: function componentWillUnmount() {
+ if (this._onWindowScrollListener) {
+ this._onWindowScrollListener.remove();
+ }
+
+ if (this._onDocumentClickListener) {
+ this._onDocumentClickListener.remove();
+ }
+ },
+
+ componentDidUpdate: function componentDidUpdate(prevProps, prevState) {
+ if (prevState.affixClass === this.state.affixClass) {
+ this.checkPositionWithEventLoop();
+ }
+ }
+ };
+
+ exports['default'] = AffixMixin;
+ module.exports = exports['default'];
+
+/***/ },
+/* 73 */
+/***/ function(module, exports) {
+
+ /**
+ * Copyright 2013-2014 Facebook, Inc.
+ *
+ * This file contains a modified version of:
+ * https://github.com/facebook/react/blob/v0.12.0/src/vendor/stubs/EventListener.js
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * TODO: remove in favour of solution provided by:
+ * https://github.com/facebook/react/issues/285
+ */
+
+ /**
+ * Does not take into account specific nature of platform.
+ */
+ 'use strict';
+
+ exports.__esModule = true;
+ var EventListener = {
+ /**
+ * Listen to DOM events during the bubble phase.
+ *
+ * @param {DOMEventTarget} target DOM element to register listener on.
+ * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
+ * @param {function} callback Callback function.
+ * @return {object} Object with a `remove` method.
+ */
+ listen: function listen(target, eventType, callback) {
+ if (target.addEventListener) {
+ target.addEventListener(eventType, callback, false);
+ return {
+ remove: function remove() {
+ target.removeEventListener(eventType, callback, false);
+ }
+ };
+ } else if (target.attachEvent) {
+ target.attachEvent('on' + eventType, callback);
+ return {
+ remove: function remove() {
+ target.detachEvent('on' + eventType, callback);
+ }
+ };
+ }
+ }
+ };
+
+ exports['default'] = EventListener;
+ module.exports = exports['default'];
+
+/***/ },
+/* 74 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var Alert = _react2['default'].createClass({
+ displayName: 'Alert',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ onDismiss: _react2['default'].PropTypes.func,
+ dismissAfter: _react2['default'].PropTypes.number,
+ closeLabel: _react2['default'].PropTypes.string
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'alert',
+ bsStyle: 'info',
+ closeLabel: 'Close Alert'
+ };
+ },
+
+ renderDismissButton: function renderDismissButton() {
+ return _react2['default'].createElement(
+ 'button',
+ {
+ type: 'button',
+ className: 'close',
+ 'aria-label': this.props.closeLabel,
+ onClick: this.props.onDismiss },
+ _react2['default'].createElement(
+ 'span',
+ { 'aria-hidden': 'true' },
+ '×'
+ )
+ );
+ },
+
+ render: function render() {
+ var classes = this.getBsClassSet();
+ var isDismissable = !!this.props.onDismiss;
+
+ classes['alert-dismissable'] = isDismissable;
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, { role: 'alert', className: _classnames2['default'](this.props.className, classes) }),
+ isDismissable ? this.renderDismissButton() : null,
+ this.props.children
+ );
+ },
+
+ componentDidMount: function componentDidMount() {
+ if (this.props.dismissAfter && this.props.onDismiss) {
+ this.dismissTimer = setTimeout(this.props.onDismiss, this.props.dismissAfter);
+ }
+ },
+
+ componentWillUnmount: function componentWillUnmount() {
+ clearTimeout(this.dismissTimer);
+ }
+ });
+
+ exports['default'] = Alert;
+ module.exports = exports['default'];
+
+/***/ },
+/* 75 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var Badge = _react2['default'].createClass({
+ displayName: 'Badge',
+
+ propTypes: {
+ pullRight: _react2['default'].PropTypes.bool
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ pullRight: false
+ };
+ },
+
+ hasContent: function hasContent() {
+ return _utilsValidComponentChildren2['default'].hasValidComponent(this.props.children) || _react2['default'].Children.count(this.props.children) > 1 || typeof this.props.children === 'string' || typeof this.props.children === 'number';
+ },
+
+ render: function render() {
+ var classes = {
+ 'pull-right': this.props.pullRight,
+ 'badge': this.hasContent()
+ };
+ return _react2['default'].createElement(
+ 'span',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, classes) }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Badge;
+ module.exports = exports['default'];
+
+/***/ },
+/* 76 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _ButtonInput = __webpack_require__(77);
+
+ var _ButtonInput2 = _interopRequireDefault(_ButtonInput);
+
+ var Button = _react2['default'].createClass({
+ displayName: 'Button',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ active: _react2['default'].PropTypes.bool,
+ disabled: _react2['default'].PropTypes.bool,
+ block: _react2['default'].PropTypes.bool,
+ navItem: _react2['default'].PropTypes.bool,
+ navDropdown: _react2['default'].PropTypes.bool,
+ /**
+ * You can use a custom element for this component
+ */
+ componentClass: _utilsCustomPropTypes2['default'].elementType,
+ href: _react2['default'].PropTypes.string,
+ target: _react2['default'].PropTypes.string,
+ /**
+ * Defines HTML button type Attribute
+ * @type {("button"|"reset"|"submit")}
+ * @defaultValue 'button'
+ */
+ type: _react2['default'].PropTypes.oneOf(_ButtonInput2['default'].types)
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ active: false,
+ block: false,
+ bsClass: 'button',
+ bsStyle: 'default',
+ disabled: false,
+ navItem: false,
+ navDropdown: false
+ };
+ },
+
+ render: function render() {
+ var classes = this.props.navDropdown ? {} : this.getBsClassSet();
+ var renderFuncName = undefined;
+
+ classes = _extends({
+ active: this.props.active,
+ 'btn-block': this.props.block
+ }, classes);
+
+ if (this.props.navItem) {
+ return this.renderNavItem(classes);
+ }
+
+ renderFuncName = this.props.href || this.props.target || this.props.navDropdown ? 'renderAnchor' : 'renderButton';
+
+ return this[renderFuncName](classes);
+ },
+
+ renderAnchor: function renderAnchor(classes) {
+
+ var Component = this.props.componentClass || 'a';
+ var href = this.props.href || '#';
+ classes.disabled = this.props.disabled;
+
+ return _react2['default'].createElement(
+ Component,
+ _extends({}, this.props, {
+ href: href,
+ className: _classnames2['default'](this.props.className, classes),
+ role: 'button' }),
+ this.props.children
+ );
+ },
+
+ renderButton: function renderButton(classes) {
+ var Component = this.props.componentClass || 'button';
+
+ return _react2['default'].createElement(
+ Component,
+ _extends({}, this.props, {
+ type: this.props.type || 'button',
+ className: _classnames2['default'](this.props.className, classes) }),
+ this.props.children
+ );
+ },
+
+ renderNavItem: function renderNavItem(classes) {
+ var liClasses = {
+ active: this.props.active
+ };
+
+ return _react2['default'].createElement(
+ 'li',
+ { className: _classnames2['default'](liClasses) },
+ this.renderAnchor(classes)
+ );
+ }
+ });
+
+ exports['default'] = Button;
+ module.exports = exports['default'];
+
+/***/ },
+/* 77 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _Button = __webpack_require__(76);
+
+ var _Button2 = _interopRequireDefault(_Button);
+
+ var _FormGroup = __webpack_require__(78);
+
+ var _FormGroup2 = _interopRequireDefault(_FormGroup);
+
+ var _InputBase2 = __webpack_require__(79);
+
+ var _InputBase3 = _interopRequireDefault(_InputBase2);
+
+ var _utilsChildrenValueInputValidation = __webpack_require__(52);
+
+ var _utilsChildrenValueInputValidation2 = _interopRequireDefault(_utilsChildrenValueInputValidation);
+
+ var ButtonInput = (function (_InputBase) {
+ _inherits(ButtonInput, _InputBase);
+
+ function ButtonInput() {
+ _classCallCheck(this, ButtonInput);
+
+ _InputBase.apply(this, arguments);
+ }
+
+ ButtonInput.prototype.renderFormGroup = function renderFormGroup(children) {
+ var _props = this.props;
+ var bsStyle = _props.bsStyle;
+ var value = _props.value;
+
+ var other = _objectWithoutProperties(_props, ['bsStyle', 'value']);
+
+ return _react2['default'].createElement(
+ _FormGroup2['default'],
+ other,
+ children
+ );
+ };
+
+ ButtonInput.prototype.renderInput = function renderInput() {
+ var _props2 = this.props;
+ var children = _props2.children;
+ var value = _props2.value;
+
+ var other = _objectWithoutProperties(_props2, ['children', 'value']);
+
+ var val = children ? children : value;
+ return _react2['default'].createElement(_Button2['default'], _extends({}, other, { componentClass: 'input', ref: 'input', key: 'input', value: val }));
+ };
+
+ return ButtonInput;
+ })(_InputBase3['default']);
+
+ ButtonInput.types = ['button', 'reset', 'submit'];
+
+ ButtonInput.defaultProps = {
+ type: 'button'
+ };
+
+ ButtonInput.propTypes = {
+ type: _react2['default'].PropTypes.oneOf(ButtonInput.types),
+ bsStyle: function bsStyle(props) {
+ //defer to Button propTypes of bsStyle
+ return null;
+ },
+ children: _utilsChildrenValueInputValidation2['default'],
+ value: _utilsChildrenValueInputValidation2['default']
+ };
+
+ exports['default'] = ButtonInput;
+ module.exports = exports['default'];
+
+/***/ },
+/* 78 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var FormGroup = (function (_React$Component) {
+ _inherits(FormGroup, _React$Component);
+
+ function FormGroup() {
+ _classCallCheck(this, FormGroup);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ FormGroup.prototype.render = function render() {
+ var classes = {
+ 'form-group': !this.props.standalone,
+ 'form-group-lg': !this.props.standalone && this.props.bsSize === 'large',
+ 'form-group-sm': !this.props.standalone && this.props.bsSize === 'small',
+ 'has-feedback': this.props.hasFeedback,
+ 'has-success': this.props.bsStyle === 'success',
+ 'has-warning': this.props.bsStyle === 'warning',
+ 'has-error': this.props.bsStyle === 'error'
+ };
+
+ return _react2['default'].createElement(
+ 'div',
+ { className: _classnames2['default'](classes, this.props.groupClassName) },
+ this.props.children
+ );
+ };
+
+ return FormGroup;
+ })(_react2['default'].Component);
+
+ FormGroup.defaultProps = {
+ hasFeedback: false,
+ standalone: false
+ };
+
+ FormGroup.propTypes = {
+ standalone: _react2['default'].PropTypes.bool,
+ hasFeedback: _react2['default'].PropTypes.bool,
+ bsSize: function bsSize(props) {
+ if (props.standalone && props.bsSize !== undefined) {
+ return new Error('bsSize will not be used when `standalone` is set.');
+ }
+
+ return _react2['default'].PropTypes.oneOf(['small', 'medium', 'large']).apply(null, arguments);
+ },
+ bsStyle: _react2['default'].PropTypes.oneOf(['success', 'warning', 'error']),
+ groupClassName: _react2['default'].PropTypes.string
+ };
+
+ exports['default'] = FormGroup;
+ module.exports = exports['default'];
+
+/***/ },
+/* 79 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _FormGroup = __webpack_require__(78);
+
+ var _FormGroup2 = _interopRequireDefault(_FormGroup);
+
+ var _Glyphicon = __webpack_require__(80);
+
+ var _Glyphicon2 = _interopRequireDefault(_Glyphicon);
+
+ var InputBase = (function (_React$Component) {
+ _inherits(InputBase, _React$Component);
+
+ function InputBase() {
+ _classCallCheck(this, InputBase);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ InputBase.prototype.getInputDOMNode = function getInputDOMNode() {
+ return _react2['default'].findDOMNode(this.refs.input);
+ };
+
+ InputBase.prototype.getValue = function getValue() {
+ if (this.props.type === 'static') {
+ return this.props.value;
+ } else if (this.props.type) {
+ if (this.props.type === 'select' && this.props.multiple) {
+ return this.getSelectedOptions();
+ } else {
+ return this.getInputDOMNode().value;
+ }
+ } else {
+ throw 'Cannot use getValue without specifying input type.';
+ }
+ };
+
+ InputBase.prototype.getChecked = function getChecked() {
+ return this.getInputDOMNode().checked;
+ };
+
+ InputBase.prototype.getSelectedOptions = function getSelectedOptions() {
+ var values = [];
+
+ Array.prototype.forEach.call(this.getInputDOMNode().getElementsByTagName('option'), function (option) {
+ if (option.selected) {
+ var value = option.getAttribute('value') || option.innerHtml;
+ values.push(value);
+ }
+ });
+
+ return values;
+ };
+
+ InputBase.prototype.isCheckboxOrRadio = function isCheckboxOrRadio() {
+ return this.props.type === 'checkbox' || this.props.type === 'radio';
+ };
+
+ InputBase.prototype.isFile = function isFile() {
+ return this.props.type === 'file';
+ };
+
+ InputBase.prototype.renderInputGroup = function renderInputGroup(children) {
+ var addonBefore = this.props.addonBefore ? _react2['default'].createElement(
+ 'span',
+ { className: 'input-group-addon', key: 'addonBefore' },
+ this.props.addonBefore
+ ) : null;
+
+ var addonAfter = this.props.addonAfter ? _react2['default'].createElement(
+ 'span',
+ { className: 'input-group-addon', key: 'addonAfter' },
+ this.props.addonAfter
+ ) : null;
+
+ var buttonBefore = this.props.buttonBefore ? _react2['default'].createElement(
+ 'span',
+ { className: 'input-group-btn' },
+ this.props.buttonBefore
+ ) : null;
+
+ var buttonAfter = this.props.buttonAfter ? _react2['default'].createElement(
+ 'span',
+ { className: 'input-group-btn' },
+ this.props.buttonAfter
+ ) : null;
+
+ var inputGroupClassName = undefined;
+ switch (this.props.bsSize) {
+ case 'small':
+ inputGroupClassName = 'input-group-sm';break;
+ case 'large':
+ inputGroupClassName = 'input-group-lg';break;
+ default:
+ }
+
+ return addonBefore || addonAfter || buttonBefore || buttonAfter ? _react2['default'].createElement(
+ 'div',
+ { className: _classnames2['default'](inputGroupClassName, 'input-group'), key: 'input-group' },
+ addonBefore,
+ buttonBefore,
+ children,
+ addonAfter,
+ buttonAfter
+ ) : children;
+ };
+
+ InputBase.prototype.renderIcon = function renderIcon() {
+ if (this.props.hasFeedback) {
+ if (this.props.feedbackIcon) {
+ return _react2['default'].cloneElement(this.props.feedbackIcon, { formControlFeedback: true });
+ }
+
+ switch (this.props.bsStyle) {
+ case 'success':
+ return _react2['default'].createElement(_Glyphicon2['default'], { formControlFeedback: true, glyph: 'ok', key: 'icon' });
+ case 'warning':
+ return _react2['default'].createElement(_Glyphicon2['default'], { formControlFeedback: true, glyph: 'warning-sign', key: 'icon' });
+ case 'error':
+ return _react2['default'].createElement(_Glyphicon2['default'], { formControlFeedback: true, glyph: 'remove', key: 'icon' });
+ default:
+ return _react2['default'].createElement('span', { className: 'form-control-feedback', key: 'icon' });
+ }
+ } else {
+ return null;
+ }
+ };
+
+ InputBase.prototype.renderHelp = function renderHelp() {
+ return this.props.help ? _react2['default'].createElement(
+ 'span',
+ { className: 'help-block', key: 'help' },
+ this.props.help
+ ) : null;
+ };
+
+ InputBase.prototype.renderCheckboxAndRadioWrapper = function renderCheckboxAndRadioWrapper(children) {
+ var classes = {
+ 'checkbox': this.props.type === 'checkbox',
+ 'radio': this.props.type === 'radio'
+ };
+
+ return _react2['default'].createElement(
+ 'div',
+ { className: _classnames2['default'](classes), key: 'checkboxRadioWrapper' },
+ children
+ );
+ };
+
+ InputBase.prototype.renderWrapper = function renderWrapper(children) {
+ return this.props.wrapperClassName ? _react2['default'].createElement(
+ 'div',
+ { className: this.props.wrapperClassName, key: 'wrapper' },
+ children
+ ) : children;
+ };
+
+ InputBase.prototype.renderLabel = function renderLabel(children) {
+ var classes = {
+ 'control-label': !this.isCheckboxOrRadio()
+ };
+ classes[this.props.labelClassName] = this.props.labelClassName;
+
+ return this.props.label ? _react2['default'].createElement(
+ 'label',
+ { htmlFor: this.props.id, className: _classnames2['default'](classes), key: 'label' },
+ children,
+ this.props.label
+ ) : children;
+ };
+
+ InputBase.prototype.renderInput = function renderInput() {
+ if (!this.props.type) {
+ return this.props.children;
+ }
+
+ switch (this.props.type) {
+ case 'select':
+ return _react2['default'].createElement(
+ 'select',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'form-control'), ref: 'input', key: 'input' }),
+ this.props.children
+ );
+ case 'textarea':
+ return _react2['default'].createElement('textarea', _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'form-control'), ref: 'input', key: 'input' }));
+ case 'static':
+ return _react2['default'].createElement(
+ 'p',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'form-control-static'), ref: 'input', key: 'input' }),
+ this.props.value
+ );
+ default:
+ var className = this.isCheckboxOrRadio() || this.isFile() ? '' : 'form-control';
+ return _react2['default'].createElement('input', _extends({}, this.props, { className: _classnames2['default'](this.props.className, className), ref: 'input', key: 'input' }));
+ }
+ };
+
+ InputBase.prototype.renderFormGroup = function renderFormGroup(children) {
+ return _react2['default'].createElement(
+ _FormGroup2['default'],
+ this.props,
+ children
+ );
+ };
+
+ InputBase.prototype.renderChildren = function renderChildren() {
+ return !this.isCheckboxOrRadio() ? [this.renderLabel(), this.renderWrapper([this.renderInputGroup(this.renderInput()), this.renderIcon(), this.renderHelp()])] : this.renderWrapper([this.renderCheckboxAndRadioWrapper(this.renderLabel(this.renderInput())), this.renderHelp()]);
+ };
+
+ InputBase.prototype.render = function render() {
+ var children = this.renderChildren();
+ return this.renderFormGroup(children);
+ };
+
+ return InputBase;
+ })(_react2['default'].Component);
+
+ InputBase.propTypes = {
+ type: _react2['default'].PropTypes.string,
+ label: _react2['default'].PropTypes.node,
+ help: _react2['default'].PropTypes.node,
+ addonBefore: _react2['default'].PropTypes.node,
+ addonAfter: _react2['default'].PropTypes.node,
+ buttonBefore: _react2['default'].PropTypes.node,
+ buttonAfter: _react2['default'].PropTypes.node,
+ bsSize: _react2['default'].PropTypes.oneOf(['small', 'medium', 'large']),
+ bsStyle: _react2['default'].PropTypes.oneOf(['success', 'warning', 'error']),
+ hasFeedback: _react2['default'].PropTypes.bool,
+ feedbackIcon: _react2['default'].PropTypes.node,
+ id: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number]),
+ groupClassName: _react2['default'].PropTypes.string,
+ wrapperClassName: _react2['default'].PropTypes.string,
+ labelClassName: _react2['default'].PropTypes.string,
+ multiple: _react2['default'].PropTypes.bool,
+ disabled: _react2['default'].PropTypes.bool,
+ value: _react2['default'].PropTypes.any
+ };
+
+ InputBase.defaultProps = {
+ disabled: false,
+ hasFeedback: false,
+ multiple: false
+ };
+
+ exports['default'] = InputBase;
+ module.exports = exports['default'];
+
+/***/ },
+/* 80 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var Glyphicon = _react2['default'].createClass({
+ displayName: 'Glyphicon',
+
+ propTypes: {
+ /**
+ * bootstrap className
+ * @private
+ */
+ bsClass: _react2['default'].PropTypes.string,
+ /**
+ * An icon name. See e.g. http://getbootstrap.com/components/#glyphicons
+ */
+ glyph: _react2['default'].PropTypes.string.isRequired,
+ /**
+ * Adds 'form-control-feedback' class
+ * @private
+ */
+ formControlFeedback: _react2['default'].PropTypes.bool
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'glyphicon',
+ formControlFeedback: false
+ };
+ },
+
+ render: function render() {
+ var _classNames;
+
+ var className = _classnames2['default'](this.props.className, (_classNames = {}, _classNames[this.props.bsClass] = true, _classNames['glyphicon-' + this.props.glyph] = true, _classNames['form-control-feedback'] = this.props.formControlFeedback, _classNames));
+
+ return _react2['default'].createElement(
+ 'span',
+ _extends({}, this.props, { className: className }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Glyphicon;
+ module.exports = exports['default'];
+
+/***/ },
+/* 81 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var ButtonGroup = _react2['default'].createClass({
+ displayName: 'ButtonGroup',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ vertical: _react2['default'].PropTypes.bool,
+ justified: _react2['default'].PropTypes.bool,
+ /**
+ * Display block buttons, only useful when used with the "vertical" prop.
+ * @type {bool}
+ */
+ block: _utilsCustomPropTypes2['default'].all([_react2['default'].PropTypes.bool, function (props, propName, componentName) {
+ if (props.block && !props.vertical) {
+ return new Error('The block property requires the vertical property to be set to have any effect');
+ }
+ }])
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ block: false,
+ bsClass: 'button-group',
+ justified: false,
+ vertical: false
+ };
+ },
+
+ render: function render() {
+ var classes = this.getBsClassSet();
+ classes['btn-group'] = !this.props.vertical;
+ classes['btn-group-vertical'] = this.props.vertical;
+ classes['btn-group-justified'] = this.props.justified;
+ classes['btn-block'] = this.props.block;
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, classes) }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = ButtonGroup;
+ module.exports = exports['default'];
+
+/***/ },
+/* 82 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var ButtonToolbar = _react2['default'].createClass({
+ displayName: 'ButtonToolbar',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'button-toolbar'
+ };
+ },
+
+ render: function render() {
+ var classes = this.getBsClassSet();
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ role: 'toolbar',
+ className: _classnames2['default'](this.props.className, classes) }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = ButtonToolbar;
+ module.exports = exports['default'];
+
+/***/ },
+/* 83 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var _Glyphicon = __webpack_require__(80);
+
+ var _Glyphicon2 = _interopRequireDefault(_Glyphicon);
+
+ var Carousel = _react2['default'].createClass({
+ displayName: 'Carousel',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ slide: _react2['default'].PropTypes.bool,
+ indicators: _react2['default'].PropTypes.bool,
+ interval: _react2['default'].PropTypes.number,
+ controls: _react2['default'].PropTypes.bool,
+ pauseOnHover: _react2['default'].PropTypes.bool,
+ wrap: _react2['default'].PropTypes.bool,
+ onSelect: _react2['default'].PropTypes.func,
+ onSlideEnd: _react2['default'].PropTypes.func,
+ activeIndex: _react2['default'].PropTypes.number,
+ defaultActiveIndex: _react2['default'].PropTypes.number,
+ direction: _react2['default'].PropTypes.oneOf(['prev', 'next']),
+ prevIcon: _react2['default'].PropTypes.node,
+ nextIcon: _react2['default'].PropTypes.node
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ slide: true,
+ interval: 5000,
+ pauseOnHover: true,
+ wrap: true,
+ indicators: true,
+ controls: true,
+ prevIcon: _react2['default'].createElement(_Glyphicon2['default'], { glyph: 'chevron-left' }),
+ nextIcon: _react2['default'].createElement(_Glyphicon2['default'], { glyph: 'chevron-right' })
+ };
+ },
+
+ getInitialState: function getInitialState() {
+ return {
+ activeIndex: this.props.defaultActiveIndex == null ? 0 : this.props.defaultActiveIndex,
+ previousActiveIndex: null,
+ direction: null
+ };
+ },
+
+ getDirection: function getDirection(prevIndex, index) {
+ if (prevIndex === index) {
+ return null;
+ }
+
+ return prevIndex > index ? 'prev' : 'next';
+ },
+
+ componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
+ var activeIndex = this.getActiveIndex();
+
+ if (nextProps.activeIndex != null && nextProps.activeIndex !== activeIndex) {
+ clearTimeout(this.timeout);
+ this.setState({
+ previousActiveIndex: activeIndex,
+ direction: nextProps.direction != null ? nextProps.direction : this.getDirection(activeIndex, nextProps.activeIndex)
+ });
+ }
+ },
+
+ componentDidMount: function componentDidMount() {
+ this.waitForNext();
+ },
+
+ componentWillUnmount: function componentWillUnmount() {
+ clearTimeout(this.timeout);
+ },
+
+ next: function next(e) {
+ if (e) {
+ e.preventDefault();
+ }
+
+ var index = this.getActiveIndex() + 1;
+ var count = _utilsValidComponentChildren2['default'].numberOf(this.props.children);
+
+ if (index > count - 1) {
+ if (!this.props.wrap) {
+ return;
+ }
+ index = 0;
+ }
+
+ this.handleSelect(index, 'next');
+ },
+
+ prev: function prev(e) {
+ if (e) {
+ e.preventDefault();
+ }
+
+ var index = this.getActiveIndex() - 1;
+
+ if (index < 0) {
+ if (!this.props.wrap) {
+ return;
+ }
+ index = _utilsValidComponentChildren2['default'].numberOf(this.props.children) - 1;
+ }
+
+ this.handleSelect(index, 'prev');
+ },
+
+ pause: function pause() {
+ this.isPaused = true;
+ clearTimeout(this.timeout);
+ },
+
+ play: function play() {
+ this.isPaused = false;
+ this.waitForNext();
+ },
+
+ waitForNext: function waitForNext() {
+ if (!this.isPaused && this.props.slide && this.props.interval && this.props.activeIndex == null) {
+ this.timeout = setTimeout(this.next, this.props.interval);
+ }
+ },
+
+ handleMouseOver: function handleMouseOver() {
+ if (this.props.pauseOnHover) {
+ this.pause();
+ }
+ },
+
+ handleMouseOut: function handleMouseOut() {
+ if (this.isPaused) {
+ this.play();
+ }
+ },
+
+ render: function render() {
+ var classes = {
+ carousel: true,
+ slide: this.props.slide
+ };
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, classes),
+ onMouseOver: this.handleMouseOver,
+ onMouseOut: this.handleMouseOut }),
+ this.props.indicators ? this.renderIndicators() : null,
+ _react2['default'].createElement(
+ 'div',
+ { className: 'carousel-inner', ref: 'inner' },
+ _utilsValidComponentChildren2['default'].map(this.props.children, this.renderItem)
+ ),
+ this.props.controls ? this.renderControls() : null
+ );
+ },
+
+ renderPrev: function renderPrev() {
+ return _react2['default'].createElement(
+ 'a',
+ { className: 'left carousel-control', href: '#prev', key: 0, onClick: this.prev },
+ this.props.prevIcon
+ );
+ },
+
+ renderNext: function renderNext() {
+ return _react2['default'].createElement(
+ 'a',
+ { className: 'right carousel-control', href: '#next', key: 1, onClick: this.next },
+ this.props.nextIcon
+ );
+ },
+
+ renderControls: function renderControls() {
+ if (!this.props.wrap) {
+ var activeIndex = this.getActiveIndex();
+ var count = _utilsValidComponentChildren2['default'].numberOf(this.props.children);
+
+ return [activeIndex !== 0 ? this.renderPrev() : null, activeIndex !== count - 1 ? this.renderNext() : null];
+ }
+
+ return [this.renderPrev(), this.renderNext()];
+ },
+
+ renderIndicator: function renderIndicator(child, index) {
+ var className = index === this.getActiveIndex() ? 'active' : null;
+
+ return _react2['default'].createElement('li', {
+ key: index,
+ className: className,
+ onClick: this.handleSelect.bind(this, index, null) });
+ },
+
+ renderIndicators: function renderIndicators() {
+ var indicators = [];
+ _utilsValidComponentChildren2['default'].forEach(this.props.children, function (child, index) {
+ indicators.push(this.renderIndicator(child, index),
+
+ // Force whitespace between indicator elements, bootstrap
+ // requires this for correct spacing of elements.
+ ' ');
+ }, this);
+
+ return _react2['default'].createElement(
+ 'ol',
+ { className: 'carousel-indicators' },
+ indicators
+ );
+ },
+
+ getActiveIndex: function getActiveIndex() {
+ return this.props.activeIndex != null ? this.props.activeIndex : this.state.activeIndex;
+ },
+
+ handleItemAnimateOutEnd: function handleItemAnimateOutEnd() {
+ this.setState({
+ previousActiveIndex: null,
+ direction: null
+ }, function () {
+ this.waitForNext();
+
+ if (this.props.onSlideEnd) {
+ this.props.onSlideEnd();
+ }
+ });
+ },
+
+ renderItem: function renderItem(child, index) {
+ var activeIndex = this.getActiveIndex();
+ var isActive = index === activeIndex;
+ var isPreviousActive = this.state.previousActiveIndex != null && this.state.previousActiveIndex === index && this.props.slide;
+
+ return _react.cloneElement(child, {
+ active: isActive,
+ ref: child.ref,
+ key: child.key ? child.key : index,
+ index: index,
+ animateOut: isPreviousActive,
+ animateIn: isActive && this.state.previousActiveIndex != null && this.props.slide,
+ direction: this.state.direction,
+ onAnimateOutEnd: isPreviousActive ? this.handleItemAnimateOutEnd : null
+ });
+ },
+
+ handleSelect: function handleSelect(index, direction) {
+ clearTimeout(this.timeout);
+
+ if (this.isMounted()) {
+ var previousActiveIndex = this.getActiveIndex();
+ direction = direction || this.getDirection(previousActiveIndex, index);
+
+ if (this.props.onSelect) {
+ this.props.onSelect(index, direction);
+ }
+
+ if (this.props.activeIndex == null && index !== previousActiveIndex) {
+ if (this.state.previousActiveIndex != null) {
+ // If currently animating don't activate the new index.
+ // TODO: look into queuing this canceled call and
+ // animating after the current animation has ended.
+ return;
+ }
+
+ this.setState({
+ activeIndex: index,
+ previousActiveIndex: previousActiveIndex,
+ direction: direction
+ });
+ }
+ }
+ }
+ });
+
+ exports['default'] = Carousel;
+ module.exports = exports['default'];
+
+/***/ },
+/* 84 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsTransitionEvents = __webpack_require__(85);
+
+ var _utilsTransitionEvents2 = _interopRequireDefault(_utilsTransitionEvents);
+
+ var CarouselItem = _react2['default'].createClass({
+ displayName: 'CarouselItem',
+
+ propTypes: {
+ direction: _react2['default'].PropTypes.oneOf(['prev', 'next']),
+ onAnimateOutEnd: _react2['default'].PropTypes.func,
+ active: _react2['default'].PropTypes.bool,
+ animateIn: _react2['default'].PropTypes.bool,
+ animateOut: _react2['default'].PropTypes.bool,
+ caption: _react2['default'].PropTypes.node,
+ index: _react2['default'].PropTypes.number
+ },
+
+ getInitialState: function getInitialState() {
+ return {
+ direction: null
+ };
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ active: false,
+ animateIn: false,
+ animateOut: false
+ };
+ },
+
+ handleAnimateOutEnd: function handleAnimateOutEnd() {
+ if (this.props.onAnimateOutEnd && this.isMounted()) {
+ this.props.onAnimateOutEnd(this.props.index);
+ }
+ },
+
+ componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
+ if (this.props.active !== nextProps.active) {
+ this.setState({
+ direction: null
+ });
+ }
+ },
+
+ componentDidUpdate: function componentDidUpdate(prevProps) {
+ if (!this.props.active && prevProps.active) {
+ _utilsTransitionEvents2['default'].addEndEventListener(_react2['default'].findDOMNode(this), this.handleAnimateOutEnd);
+ }
+
+ if (this.props.active !== prevProps.active) {
+ setTimeout(this.startAnimation, 20);
+ }
+ },
+
+ startAnimation: function startAnimation() {
+ if (!this.isMounted()) {
+ return;
+ }
+
+ this.setState({
+ direction: this.props.direction === 'prev' ? 'right' : 'left'
+ });
+ },
+
+ render: function render() {
+ var classes = {
+ item: true,
+ active: this.props.active && !this.props.animateIn || this.props.animateOut,
+ next: this.props.active && this.props.animateIn && this.props.direction === 'next',
+ prev: this.props.active && this.props.animateIn && this.props.direction === 'prev'
+ };
+
+ if (this.state.direction && (this.props.animateIn || this.props.animateOut)) {
+ classes[this.state.direction] = true;
+ }
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ this.props.children,
+ this.props.caption ? this.renderCaption() : null
+ );
+ },
+
+ renderCaption: function renderCaption() {
+ return _react2['default'].createElement(
+ 'div',
+ { className: 'carousel-caption' },
+ this.props.caption
+ );
+ }
+ });
+
+ exports['default'] = CarouselItem;
+ module.exports = exports['default'];
+
+/***/ },
+/* 85 */
+/***/ function(module, exports) {
+
+ /**
+ * Copyright 2013-2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This file contains a modified version of:
+ * https://github.com/facebook/react/blob/v0.12.0/src/addons/transitions/ReactTransitionEvents.js
+ *
+ * This source code is licensed under the BSD-style license found here:
+ * https://github.com/facebook/react/blob/v0.12.0/LICENSE
+ * An additional grant of patent rights can be found here:
+ * https://github.com/facebook/react/blob/v0.12.0/PATENTS
+ */
+
+ 'use strict';
+
+ exports.__esModule = true;
+ var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
+
+ /**
+ * EVENT_NAME_MAP is used to determine which event fired when a
+ * transition/animation ends, based on the style property used to
+ * define that event.
+ */
+ var EVENT_NAME_MAP = {
+ transitionend: {
+ 'transition': 'transitionend',
+ 'WebkitTransition': 'webkitTransitionEnd',
+ 'MozTransition': 'mozTransitionEnd',
+ 'OTransition': 'oTransitionEnd',
+ 'msTransition': 'MSTransitionEnd'
+ },
+
+ animationend: {
+ 'animation': 'animationend',
+ 'WebkitAnimation': 'webkitAnimationEnd',
+ 'MozAnimation': 'mozAnimationEnd',
+ 'OAnimation': 'oAnimationEnd',
+ 'msAnimation': 'MSAnimationEnd'
+ }
+ };
+
+ var endEvents = [];
+
+ function detectEvents() {
+ var testEl = document.createElement('div');
+ var style = testEl.style;
+
+ // On some platforms, in particular some releases of Android 4.x,
+ // the un-prefixed "animation" and "transition" properties are defined on the
+ // style object but the events that fire will still be prefixed, so we need
+ // to check if the un-prefixed events are useable, and if not remove them
+ // from the map
+ if (!('AnimationEvent' in window)) {
+ delete EVENT_NAME_MAP.animationend.animation;
+ }
+
+ if (!('TransitionEvent' in window)) {
+ delete EVENT_NAME_MAP.transitionend.transition;
+ }
+
+ for (var baseEventName in EVENT_NAME_MAP) {
+ var baseEvents = EVENT_NAME_MAP[baseEventName];
+ for (var styleName in baseEvents) {
+ if (styleName in style) {
+ endEvents.push(baseEvents[styleName]);
+ break;
+ }
+ }
+ }
+ }
+
+ if (canUseDOM) {
+ detectEvents();
+ }
+
+ // We use the raw {add|remove}EventListener() call because EventListener
+ // does not know how to remove event listeners and we really should
+ // clean up. Also, these events are not triggered in older browsers
+ // so we should be A-OK here.
+
+ function addEventListener(node, eventName, eventListener) {
+ node.addEventListener(eventName, eventListener, false);
+ }
+
+ function removeEventListener(node, eventName, eventListener) {
+ node.removeEventListener(eventName, eventListener, false);
+ }
+
+ var ReactTransitionEvents = {
+ addEndEventListener: function addEndEventListener(node, eventListener) {
+ if (endEvents.length === 0) {
+ // If CSS transitions are not supported, trigger an "end animation"
+ // event immediately.
+ window.setTimeout(eventListener, 0);
+ return;
+ }
+ endEvents.forEach(function (endEvent) {
+ addEventListener(node, endEvent, eventListener);
+ });
+ },
+
+ removeEndEventListener: function removeEndEventListener(node, eventListener) {
+ if (endEvents.length === 0) {
+ return;
+ }
+ endEvents.forEach(function (endEvent) {
+ removeEventListener(node, endEvent, eventListener);
+ });
+ }
+ };
+
+ exports['default'] = ReactTransitionEvents;
+ module.exports = exports['default'];
+
+/***/ },
+/* 86 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _Object$keys = __webpack_require__(1)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _styleMaps = __webpack_require__(70);
+
+ var _styleMaps2 = _interopRequireDefault(_styleMaps);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var Col = _react2['default'].createClass({
+ displayName: 'Col',
+
+ propTypes: {
+ /**
+ * The number of columns you wish to span
+ *
+ * for Extra small devices Phones (<768px)
+ *
+ * class-prefix `col-xs-`
+ */
+ xs: _react2['default'].PropTypes.number,
+ /**
+ * The number of columns you wish to span
+ *
+ * for Small devices Tablets (≥768px)
+ *
+ * class-prefix `col-sm-`
+ */
+ sm: _react2['default'].PropTypes.number,
+ /**
+ * The number of columns you wish to span
+ *
+ * for Medium devices Desktops (≥992px)
+ *
+ * class-prefix `col-md-`
+ */
+ md: _react2['default'].PropTypes.number,
+ /**
+ * The number of columns you wish to span
+ *
+ * for Large devices Desktops (≥1200px)
+ *
+ * class-prefix `col-lg-`
+ */
+ lg: _react2['default'].PropTypes.number,
+ /**
+ * Move columns to the right
+ *
+ * for Extra small devices Phones
+ *
+ * class-prefix `col-xs-offset-`
+ */
+ xsOffset: _react2['default'].PropTypes.number,
+ /**
+ * Move columns to the right
+ *
+ * for Small devices Tablets
+ *
+ * class-prefix `col-sm-offset-`
+ */
+ smOffset: _react2['default'].PropTypes.number,
+ /**
+ * Move columns to the right
+ *
+ * for Medium devices Desktops
+ *
+ * class-prefix `col-md-offset-`
+ */
+ mdOffset: _react2['default'].PropTypes.number,
+ /**
+ * Move columns to the right
+ *
+ * for Large devices Desktops
+ *
+ * class-prefix `col-lg-offset-`
+ */
+ lgOffset: _react2['default'].PropTypes.number,
+ /**
+ * Change the order of grid columns to the right
+ *
+ * for Extra small devices Phones
+ *
+ * class-prefix `col-xs-push-`
+ */
+ xsPush: _react2['default'].PropTypes.number,
+ /**
+ * Change the order of grid columns to the right
+ *
+ * for Small devices Tablets
+ *
+ * class-prefix `col-sm-push-`
+ */
+ smPush: _react2['default'].PropTypes.number,
+ /**
+ * Change the order of grid columns to the right
+ *
+ * for Medium devices Desktops
+ *
+ * class-prefix `col-md-push-`
+ */
+ mdPush: _react2['default'].PropTypes.number,
+ /**
+ * Change the order of grid columns to the right
+ *
+ * for Large devices Desktops
+ *
+ * class-prefix `col-lg-push-`
+ */
+ lgPush: _react2['default'].PropTypes.number,
+ /**
+ * Change the order of grid columns to the left
+ *
+ * for Extra small devices Phones
+ *
+ * class-prefix `col-xs-pull-`
+ */
+ xsPull: _react2['default'].PropTypes.number,
+ /**
+ * Change the order of grid columns to the left
+ *
+ * for Small devices Tablets
+ *
+ * class-prefix `col-sm-pull-`
+ */
+ smPull: _react2['default'].PropTypes.number,
+ /**
+ * Change the order of grid columns to the left
+ *
+ * for Medium devices Desktops
+ *
+ * class-prefix `col-md-pull-`
+ */
+ mdPull: _react2['default'].PropTypes.number,
+ /**
+ * Change the order of grid columns to the left
+ *
+ * for Large devices Desktops
+ *
+ * class-prefix `col-lg-pull-`
+ */
+ lgPull: _react2['default'].PropTypes.number,
+ /**
+ * You can use a custom element for this component
+ */
+ componentClass: _utilsCustomPropTypes2['default'].elementType
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ componentClass: 'div'
+ };
+ },
+
+ render: function render() {
+ var ComponentClass = this.props.componentClass;
+ var classes = {};
+
+ _Object$keys(_styleMaps2['default'].SIZES).forEach(function (key) {
+ var size = _styleMaps2['default'].SIZES[key];
+ var prop = size;
+ var classPart = size + '-';
+
+ if (this.props[prop]) {
+ classes['col-' + classPart + this.props[prop]] = true;
+ }
+
+ prop = size + 'Offset';
+ classPart = size + '-offset-';
+ if (this.props[prop] >= 0) {
+ classes['col-' + classPart + this.props[prop]] = true;
+ }
+
+ prop = size + 'Push';
+ classPart = size + '-push-';
+ if (this.props[prop] >= 0) {
+ classes['col-' + classPart + this.props[prop]] = true;
+ }
+
+ prop = size + 'Pull';
+ classPart = size + '-pull-';
+ if (this.props[prop] >= 0) {
+ classes['col-' + classPart + this.props[prop]] = true;
+ }
+ }, this);
+
+ return _react2['default'].createElement(
+ ComponentClass,
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Col;
+ module.exports = exports['default'];
+
+/***/ },
+/* 87 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _utilsTransitionEvents = __webpack_require__(85);
+
+ var _utilsTransitionEvents2 = _interopRequireDefault(_utilsTransitionEvents);
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ var CollapsibleMixin = {
+
+ propTypes: {
+ defaultExpanded: _react2['default'].PropTypes.bool,
+ expanded: _react2['default'].PropTypes.bool
+ },
+
+ getInitialState: function getInitialState() {
+ var defaultExpanded = this.props.defaultExpanded != null ? this.props.defaultExpanded : this.props.expanded != null ? this.props.expanded : false;
+
+ return {
+ expanded: defaultExpanded,
+ collapsing: false
+ };
+ },
+
+ componentWillMount: function componentWillMount() {
+ _utilsDeprecationWarning2['default']('CollapsibleMixin', 'Collapse Component');
+ },
+
+ componentWillUpdate: function componentWillUpdate(nextProps, nextState) {
+ var willExpanded = nextProps.expanded != null ? nextProps.expanded : nextState.expanded;
+ if (willExpanded === this.isExpanded()) {
+ return;
+ }
+
+ // if the expanded state is being toggled, ensure node has a dimension value
+ // this is needed for the animation to work and needs to be set before
+ // the collapsing class is applied (after collapsing is applied the in class
+ // is removed and the node's dimension will be wrong)
+
+ var node = this.getCollapsibleDOMNode();
+ var dimension = this.dimension();
+ var value = '0';
+
+ if (!willExpanded) {
+ value = this.getCollapsibleDimensionValue();
+ }
+
+ node.style[dimension] = value + 'px';
+
+ this._afterWillUpdate();
+ },
+
+ componentDidUpdate: function componentDidUpdate(prevProps, prevState) {
+ // check if expanded is being toggled; if so, set collapsing
+ this._checkToggleCollapsing(prevProps, prevState);
+
+ // check if collapsing was turned on; if so, start animation
+ this._checkStartAnimation();
+ },
+
+ // helps enable test stubs
+ _afterWillUpdate: function _afterWillUpdate() {},
+
+ _checkStartAnimation: function _checkStartAnimation() {
+ if (!this.state.collapsing) {
+ return;
+ }
+
+ var node = this.getCollapsibleDOMNode();
+ var dimension = this.dimension();
+ var value = this.getCollapsibleDimensionValue();
+
+ // setting the dimension here starts the transition animation
+ var result = undefined;
+ if (this.isExpanded()) {
+ result = value + 'px';
+ } else {
+ result = '0px';
+ }
+ node.style[dimension] = result;
+ },
+
+ _checkToggleCollapsing: function _checkToggleCollapsing(prevProps, prevState) {
+ var wasExpanded = prevProps.expanded != null ? prevProps.expanded : prevState.expanded;
+ var isExpanded = this.isExpanded();
+ if (wasExpanded !== isExpanded) {
+ if (wasExpanded) {
+ this._handleCollapse();
+ } else {
+ this._handleExpand();
+ }
+ }
+ },
+
+ _handleExpand: function _handleExpand() {
+ var _this = this;
+
+ var node = this.getCollapsibleDOMNode();
+ var dimension = this.dimension();
+
+ var complete = function complete() {
+ _this._removeEndEventListener(node, complete);
+ // remove dimension value - this ensures the collapsible item can grow
+ // in dimension after initial display (such as an image loading)
+ node.style[dimension] = '';
+ _this.setState({
+ collapsing: false
+ });
+ };
+
+ this._addEndEventListener(node, complete);
+
+ this.setState({
+ collapsing: true
+ });
+ },
+
+ _handleCollapse: function _handleCollapse() {
+ var _this2 = this;
+
+ var node = this.getCollapsibleDOMNode();
+
+ var complete = function complete() {
+ _this2._removeEndEventListener(node, complete);
+ _this2.setState({
+ collapsing: false
+ });
+ };
+
+ this._addEndEventListener(node, complete);
+
+ this.setState({
+ collapsing: true
+ });
+ },
+
+ // helps enable test stubs
+ _addEndEventListener: function _addEndEventListener(node, complete) {
+ _utilsTransitionEvents2['default'].addEndEventListener(node, complete);
+ },
+
+ // helps enable test stubs
+ _removeEndEventListener: function _removeEndEventListener(node, complete) {
+ _utilsTransitionEvents2['default'].removeEndEventListener(node, complete);
+ },
+
+ dimension: function dimension() {
+ return typeof this.getCollapsibleDimension === 'function' ? this.getCollapsibleDimension() : 'height';
+ },
+
+ isExpanded: function isExpanded() {
+ return this.props.expanded != null ? this.props.expanded : this.state.expanded;
+ },
+
+ getCollapsibleClassSet: function getCollapsibleClassSet(className) {
+ var classes = {};
+
+ if (typeof className === 'string') {
+ className.split(' ').forEach(function (subClasses) {
+ if (subClasses) {
+ classes[subClasses] = true;
+ }
+ });
+ }
+
+ classes.collapsing = this.state.collapsing;
+ classes.collapse = !this.state.collapsing;
+ classes['in'] = this.isExpanded() && !this.state.collapsing;
+
+ return classes;
+ }
+ };
+
+ exports['default'] = CollapsibleMixin;
+ module.exports = exports['default'];
+
+/***/ },
+/* 88 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _Collapse = __webpack_require__(89);
+
+ var _Collapse2 = _interopRequireDefault(_Collapse);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var CollapsibleNav = _react2['default'].createClass({
+ displayName: 'CollapsibleNav',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ onSelect: _react2['default'].PropTypes.func,
+ activeHref: _react2['default'].PropTypes.string,
+ activeKey: _react2['default'].PropTypes.any,
+ collapsible: _react2['default'].PropTypes.bool,
+ expanded: _react2['default'].PropTypes.bool,
+ eventKey: _react2['default'].PropTypes.any
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ collapsible: false,
+ expanded: false
+ };
+ },
+
+ render: function render() {
+ /*
+ * this.props.collapsible is set in NavBar when an eventKey is supplied.
+ */
+ var classes = this.props.collapsible ? 'navbar-collapse' : null;
+ var renderChildren = this.props.collapsible ? this.renderCollapsibleNavChildren : this.renderChildren;
+
+ var nav = _react2['default'].createElement(
+ 'div',
+ { eventKey: this.props.eventKey, className: _classnames2['default'](this.props.className, classes) },
+ _utilsValidComponentChildren2['default'].map(this.props.children, renderChildren)
+ );
+
+ if (this.props.collapsible) {
+ return _react2['default'].createElement(
+ _Collapse2['default'],
+ { 'in': this.props.expanded },
+ nav
+ );
+ } else {
+ return nav;
+ }
+ },
+
+ getChildActiveProp: function getChildActiveProp(child) {
+ if (child.props.active) {
+ return true;
+ }
+ if (this.props.activeKey != null) {
+ if (child.props.eventKey === this.props.activeKey) {
+ return true;
+ }
+ }
+ if (this.props.activeHref != null) {
+ if (child.props.href === this.props.activeHref) {
+ return true;
+ }
+ }
+
+ return child.props.active;
+ },
+
+ renderChildren: function renderChildren(child, index) {
+ var key = child.key ? child.key : index;
+ return _react.cloneElement(child, {
+ activeKey: this.props.activeKey,
+ activeHref: this.props.activeHref,
+ ref: 'nocollapse_' + key,
+ key: key,
+ navItem: true
+ });
+ },
+
+ renderCollapsibleNavChildren: function renderCollapsibleNavChildren(child, index) {
+ var key = child.key ? child.key : index;
+ return _react.cloneElement(child, {
+ active: this.getChildActiveProp(child),
+ activeKey: this.props.activeKey,
+ activeHref: this.props.activeHref,
+ onSelect: _utilsCreateChainedFunction2['default'](child.props.onSelect, this.props.onSelect),
+ ref: 'collapsible_' + key,
+ key: key,
+ navItem: true
+ });
+ }
+ });
+
+ exports['default'] = CollapsibleNav;
+ module.exports = exports['default'];
+
+/***/ },
+/* 89 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _reactOverlaysLibTransition = __webpack_require__(90);
+
+ var _reactOverlaysLibTransition2 = _interopRequireDefault(_reactOverlaysLibTransition);
+
+ var _utilsDomUtils = __webpack_require__(31);
+
+ var _utilsDomUtils2 = _interopRequireDefault(_utilsDomUtils);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var capitalize = function capitalize(str) {
+ return str[0].toUpperCase() + str.substr(1);
+ };
+
+ // reading a dimension prop will cause the browser to recalculate,
+ // which will let our animations work
+ var triggerBrowserReflow = function triggerBrowserReflow(node) {
+ return node.offsetHeight;
+ };
+
+ var MARGINS = {
+ height: ['marginTop', 'marginBottom'],
+ width: ['marginLeft', 'marginRight']
+ };
+
+ function getDimensionValue(dimension, elem) {
+ var value = elem['offset' + capitalize(dimension)];
+ var margins = MARGINS[dimension];
+
+ return value + parseInt(_utilsDomUtils2['default'].css(elem, margins[0]), 10) + parseInt(_utilsDomUtils2['default'].css(elem, margins[1]), 10);
+ }
+
+ var Collapse = (function (_React$Component) {
+ _inherits(Collapse, _React$Component);
+
+ function Collapse(props, context) {
+ _classCallCheck(this, Collapse);
+
+ _React$Component.call(this, props, context);
+
+ this.onEnterListener = this.handleEnter.bind(this);
+ this.onEnteringListener = this.handleEntering.bind(this);
+ this.onEnteredListener = this.handleEntered.bind(this);
+ this.onExitListener = this.handleExit.bind(this);
+ this.onExitingListener = this.handleExiting.bind(this);
+ }
+
+ // Explicitly copied from Transition for doc generation.
+ // TODO: Remove duplication once #977 is resolved.
+
+ Collapse.prototype.render = function render() {
+ var enter = _utilsCreateChainedFunction2['default'](this.onEnterListener, this.props.onEnter);
+ var entering = _utilsCreateChainedFunction2['default'](this.onEnteringListener, this.props.onEntering);
+ var entered = _utilsCreateChainedFunction2['default'](this.onEnteredListener, this.props.onEntered);
+ var exit = _utilsCreateChainedFunction2['default'](this.onExitListener, this.props.onExit);
+ var exiting = _utilsCreateChainedFunction2['default'](this.onExitingListener, this.props.onExiting);
+
+ return _react2['default'].createElement(
+ _reactOverlaysLibTransition2['default'],
+ _extends({
+ ref: 'transition'
+ }, this.props, {
+ 'aria-expanded': this.props.role ? this.props['in'] : null,
+ className: this._dimension() === 'width' ? 'width' : '',
+ exitedClassName: 'collapse',
+ exitingClassName: 'collapsing',
+ enteredClassName: 'collapse in',
+ enteringClassName: 'collapsing',
+ onEnter: enter,
+ onEntering: entering,
+ onEntered: entered,
+ onExit: exit,
+ onExiting: exiting,
+ onExited: this.props.onExited
+ }),
+ this.props.children
+ );
+ };
+
+ /* -- Expanding -- */
+
+ Collapse.prototype.handleEnter = function handleEnter(elem) {
+ var dimension = this._dimension();
+ elem.style[dimension] = '0';
+ };
+
+ Collapse.prototype.handleEntering = function handleEntering(elem) {
+ var dimension = this._dimension();
+
+ elem.style[dimension] = this._getScrollDimensionValue(elem, dimension);
+ };
+
+ Collapse.prototype.handleEntered = function handleEntered(elem) {
+ var dimension = this._dimension();
+ elem.style[dimension] = null;
+ };
+
+ /* -- Collapsing -- */
+
+ Collapse.prototype.handleExit = function handleExit(elem) {
+ var dimension = this._dimension();
+
+ elem.style[dimension] = this.props.getDimensionValue(dimension, elem) + 'px';
+ };
+
+ Collapse.prototype.handleExiting = function handleExiting(elem) {
+ var dimension = this._dimension();
+
+ triggerBrowserReflow(elem);
+ elem.style[dimension] = '0';
+ };
+
+ Collapse.prototype._dimension = function _dimension() {
+ return typeof this.props.dimension === 'function' ? this.props.dimension() : this.props.dimension;
+ };
+
+ //for testing
+
+ Collapse.prototype._getTransitionInstance = function _getTransitionInstance() {
+ return this.refs.transition;
+ };
+
+ Collapse.prototype._getScrollDimensionValue = function _getScrollDimensionValue(elem, dimension) {
+ return elem['scroll' + capitalize(dimension)] + 'px';
+ };
+
+ return Collapse;
+ })(_react2['default'].Component);
+
+ Collapse.propTypes = {
+ /**
+ * Show the component; triggers the expand or collapse animation
+ */
+ 'in': _react2['default'].PropTypes.bool,
+
+ /**
+ * Unmount the component (remove it from the DOM) when it is collapsed
+ */
+ unmountOnExit: _react2['default'].PropTypes.bool,
+
+ /**
+ * Run the expand animation when the component mounts, if it is initially
+ * shown
+ */
+ transitionAppear: _react2['default'].PropTypes.bool,
+
+ /**
+ * Duration of the collapse animation in milliseconds, to ensure that
+ * finishing callbacks are fired even if the original browser transition end
+ * events are canceled
+ */
+ timeout: _react2['default'].PropTypes.number,
+
+ /**
+ * duration
+ * @private
+ */
+ duration: _utilsCustomPropTypes2['default'].all([_react2['default'].PropTypes.number, function (props) {
+ if (props.duration != null) {
+ _utilsDeprecationWarning2['default']('Collapse `duration`', 'the `timeout` prop');
+ }
+ return null;
+ }]),
+
+ /**
+ * Callback fired before the component expands
+ */
+ onEnter: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the component starts to expand
+ */
+ onEntering: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the component has expanded
+ */
+ onEntered: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired before the component collapses
+ */
+ onExit: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the component starts to collapse
+ */
+ onExiting: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the component has collapsed
+ */
+ onExited: _react2['default'].PropTypes.func,
+
+ /**
+ * The dimension used when collapsing, or a function that returns the
+ * dimension
+ *
+ * _Note: Bootstrap only partially supports 'width'!
+ * You will need to supply your own CSS animation for the `.width` CSS class._
+ */
+ dimension: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.oneOf(['height', 'width']), _react2['default'].PropTypes.func]),
+
+ /**
+ * Function that returns the height or width of the animating DOM node
+ *
+ * Allows for providing some custom logic for how much the Collapse component
+ * should animate in its specified dimension. Called with the current
+ * dimension prop value and the DOM node.
+ */
+ getDimensionValue: _react2['default'].PropTypes.func,
+
+ /**
+ * ARIA role of collapsible element
+ */
+ role: _react2['default'].PropTypes.string
+ };
+
+ Collapse.defaultProps = {
+ 'in': false,
+ timeout: 300,
+ unmountOnExit: false,
+ transitionAppear: false,
+
+ dimension: 'height',
+ getDimensionValue: getDimensionValue
+ };
+
+ exports['default'] = Collapse;
+ module.exports = exports['default'];
+
+/***/ },
+/* 90 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
+
+ function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _domHelpersTransitionProperties = __webpack_require__(91);
+
+ var _domHelpersTransitionProperties2 = _interopRequireDefault(_domHelpersTransitionProperties);
+
+ var _domHelpersEventsOn = __webpack_require__(92);
+
+ var _domHelpersEventsOn2 = _interopRequireDefault(_domHelpersEventsOn);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var transitionEndEvent = _domHelpersTransitionProperties2['default'].end;
+
+ var UNMOUNTED = 0;
+ exports.UNMOUNTED = UNMOUNTED;
+ var EXITED = 1;
+ exports.EXITED = EXITED;
+ var ENTERING = 2;
+ exports.ENTERING = ENTERING;
+ var ENTERED = 3;
+ exports.ENTERED = ENTERED;
+ var EXITING = 4;
+
+ exports.EXITING = EXITING;
+ /**
+ * The Transition component lets you define and run css transitions with a simple declarative api.
+ * It works similar to React's own [CSSTransitionGroup](http://facebook.github.io/react/docs/animation.html#high-level-api-reactcsstransitiongroup)
+ * but is specifically optimized for transitioning a single child "in" or "out".
+ *
+ * You don't even need to use class based css transitions if you don't want to (but it is easiest).
+ * The extensive set of lifecyle callbacks means you have control over
+ * the transitioning now at each step of the way.
+ */
+
+ var Transition = (function (_React$Component) {
+ function Transition(props, context) {
+ _classCallCheck(this, Transition);
+
+ _React$Component.call(this, props, context);
+
+ var initialStatus = undefined;
+ if (props['in']) {
+ // Start enter transition in componentDidMount.
+ initialStatus = props.transitionAppear ? EXITED : ENTERED;
+ } else {
+ initialStatus = props.unmountOnExit ? UNMOUNTED : EXITED;
+ }
+ this.state = { status: initialStatus };
+
+ this.nextCallback = null;
+ }
+
+ _inherits(Transition, _React$Component);
+
+ Transition.prototype.componentDidMount = function componentDidMount() {
+ if (this.props.transitionAppear && this.props['in']) {
+ this.performEnter(this.props);
+ }
+ };
+
+ Transition.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
+ var status = this.state.status;
+ if (nextProps['in']) {
+ if (status === EXITING) {
+ this.performEnter(nextProps);
+ } else if (this.props.unmountOnExit) {
+ if (status === UNMOUNTED) {
+ // Start enter transition in componentDidUpdate.
+ this.setState({ status: EXITED });
+ }
+ } else if (status === EXITED) {
+ this.performEnter(nextProps);
+ }
+
+ // Otherwise we're already entering or entered.
+ } else {
+ if (status === ENTERING || status === ENTERED) {
+ this.performExit(nextProps);
+ }
+
+ // Otherwise we're already exited or exiting.
+ }
+ };
+
+ Transition.prototype.componentDidUpdate = function componentDidUpdate() {
+ if (this.props.unmountOnExit && this.state.status === EXITED) {
+ // EXITED is always a transitional state to either ENTERING or UNMOUNTED
+ // when using unmountOnExit.
+ if (this.props['in']) {
+ this.performEnter(this.props);
+ } else {
+ this.setState({ status: UNMOUNTED });
+ }
+ }
+ };
+
+ Transition.prototype.componentWillUnmount = function componentWillUnmount() {
+ this.cancelNextCallback();
+ };
+
+ Transition.prototype.performEnter = function performEnter(props) {
+ var _this = this;
+
+ this.cancelNextCallback();
+ var node = _react2['default'].findDOMNode(this);
+
+ // Not this.props, because we might be about to receive new props.
+ props.onEnter(node);
+
+ this.safeSetState({ status: ENTERING }, function () {
+ _this.props.onEntering(node);
+
+ _this.onTransitionEnd(node, function () {
+ _this.safeSetState({ status: ENTERED }, function () {
+ _this.props.onEntered(node);
+ });
+ });
+ });
+ };
+
+ Transition.prototype.performExit = function performExit(props) {
+ var _this2 = this;
+
+ this.cancelNextCallback();
+ var node = _react2['default'].findDOMNode(this);
+
+ // Not this.props, because we might be about to receive new props.
+ props.onExit(node);
+
+ this.safeSetState({ status: EXITING }, function () {
+ _this2.props.onExiting(node);
+
+ _this2.onTransitionEnd(node, function () {
+ _this2.safeSetState({ status: EXITED }, function () {
+ _this2.props.onExited(node);
+ });
+ });
+ });
+ };
+
+ Transition.prototype.cancelNextCallback = function cancelNextCallback() {
+ if (this.nextCallback !== null) {
+ this.nextCallback.cancel();
+ this.nextCallback = null;
+ }
+ };
+
+ Transition.prototype.safeSetState = function safeSetState(nextState, callback) {
+ // This shouldn't be necessary, but there are weird race conditions with
+ // setState callbacks and unmounting in testing, so always make sure that
+ // we can cancel any pending setState callbacks after we unmount.
+ this.setState(nextState, this.setNextCallback(callback));
+ };
+
+ Transition.prototype.setNextCallback = function setNextCallback(callback) {
+ var _this3 = this;
+
+ var active = true;
+
+ this.nextCallback = function (event) {
+ if (active) {
+ active = false;
+ _this3.nextCallback = null;
+
+ callback(event);
+ }
+ };
+
+ this.nextCallback.cancel = function () {
+ active = false;
+ };
+
+ return this.nextCallback;
+ };
+
+ Transition.prototype.onTransitionEnd = function onTransitionEnd(node, handler) {
+ this.setNextCallback(handler);
+
+ if (node) {
+ _domHelpersEventsOn2['default'](node, transitionEndEvent, this.nextCallback);
+ setTimeout(this.nextCallback, this.props.timeout);
+ } else {
+ setTimeout(this.nextCallback, 0);
+ }
+ };
+
+ Transition.prototype.render = function render() {
+ var status = this.state.status;
+ if (status === UNMOUNTED) {
+ return null;
+ }
+
+ var _props = this.props;
+ var children = _props.children;
+ var className = _props.className;
+
+ var childProps = _objectWithoutProperties(_props, ['children', 'className']);
+
+ Object.keys(Transition.propTypes).forEach(function (key) {
+ return delete childProps[key];
+ });
+
+ var transitionClassName = undefined;
+ if (status === EXITED) {
+ transitionClassName = this.props.exitedClassName;
+ } else if (status === ENTERING) {
+ transitionClassName = this.props.enteringClassName;
+ } else if (status === ENTERED) {
+ transitionClassName = this.props.enteredClassName;
+ } else if (status === EXITING) {
+ transitionClassName = this.props.exitingClassName;
+ }
+
+ var child = _react2['default'].Children.only(children);
+ return _react2['default'].cloneElement(child, _extends({}, childProps, {
+ className: _classnames2['default'](child.props.className, className, transitionClassName)
+ }));
+ };
+
+ return Transition;
+ })(_react2['default'].Component);
+
+ Transition.propTypes = {
+ /**
+ * Show the component; triggers the enter or exit animation
+ */
+ 'in': _react2['default'].PropTypes.bool,
+
+ /**
+ * Unmount the component (remove it from the DOM) when it is not shown
+ */
+ unmountOnExit: _react2['default'].PropTypes.bool,
+
+ /**
+ * Run the enter animation when the component mounts, if it is initially
+ * shown
+ */
+ transitionAppear: _react2['default'].PropTypes.bool,
+
+ /**
+ * A Timeout for the animation, in milliseconds, to ensure that a node doesn't
+ * transition indefinately if the browser transitionEnd events are
+ * canceled or interrupted.
+ *
+ * By default this is set to a high number (5 seconds) as a failsafe. You should consider
+ * setting this to the duration of your animation (or a bit above it).
+ */
+ timeout: _react2['default'].PropTypes.number,
+
+ /**
+ * CSS class or classes applied when the component is exited
+ */
+ exitedClassName: _react2['default'].PropTypes.string,
+ /**
+ * CSS class or classes applied while the component is exiting
+ */
+ exitingClassName: _react2['default'].PropTypes.string,
+ /**
+ * CSS class or classes applied when the component is entered
+ */
+ enteredClassName: _react2['default'].PropTypes.string,
+ /**
+ * CSS class or classes applied while the component is entering
+ */
+ enteringClassName: _react2['default'].PropTypes.string,
+
+ /**
+ * Callback fired before the "entering" classes are applied
+ */
+ onEnter: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the "entering" classes are applied
+ */
+ onEntering: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the "enter" classes are applied
+ */
+ onEntered: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired before the "exiting" classes are applied
+ */
+ onExit: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the "exiting" classes are applied
+ */
+ onExiting: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the "exited" classes are applied
+ */
+ onExited: _react2['default'].PropTypes.func
+ };
+
+ // Name the function so it is clearer in the documentation
+ function noop() {}
+
+ Transition.displayName = 'Transition';
+
+ Transition.defaultProps = {
+ 'in': false,
+ unmountOnExit: false,
+ transitionAppear: false,
+
+ timeout: 5000,
+
+ onEnter: noop,
+ onEntering: noop,
+ onEntered: noop,
+
+ onExit: noop,
+ onExiting: noop,
+ onExited: noop
+ };
+
+ exports['default'] = Transition;
+
+/***/ },
+/* 91 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var canUseDOM = __webpack_require__(33);
+
+ var has = Object.prototype.hasOwnProperty,
+ transform = 'transform',
+ transition = {},
+ transitionTiming,
+ transitionDuration,
+ transitionProperty,
+ transitionDelay;
+
+ if (canUseDOM) {
+ transition = getTransitionProperties();
+
+ transform = transition.prefix + transform;
+
+ transitionProperty = transition.prefix + 'transition-property';
+ transitionDuration = transition.prefix + 'transition-duration';
+ transitionDelay = transition.prefix + 'transition-delay';
+ transitionTiming = transition.prefix + 'transition-timing-function';
+ }
+
+ module.exports = {
+ transform: transform,
+ end: transition.end,
+ property: transitionProperty,
+ timing: transitionTiming,
+ delay: transitionDelay,
+ duration: transitionDuration
+ };
+
+ function getTransitionProperties() {
+ var endEvent,
+ prefix = '',
+ transitions = {
+ O: 'otransitionend',
+ Moz: 'transitionend',
+ Webkit: 'webkitTransitionEnd',
+ ms: 'MSTransitionEnd'
+ };
+
+ var element = document.createElement('div');
+
+ for (var vendor in transitions) if (has.call(transitions, vendor)) {
+ if (element.style[vendor + 'TransitionProperty'] !== undefined) {
+ prefix = '-' + vendor.toLowerCase() + '-';
+ endEvent = transitions[vendor];
+ break;
+ }
+ }
+
+ if (!endEvent && element.style.transitionProperty !== undefined) endEvent = 'transitionend';
+
+ return { end: endEvent, prefix: prefix };
+ }
+
+/***/ },
+/* 92 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var canUseDOM = __webpack_require__(33);
+ var on = function on() {};
+
+ if (canUseDOM) {
+ on = (function () {
+
+ if (document.addEventListener) return function (node, eventName, handler, capture) {
+ return node.addEventListener(eventName, handler, capture || false);
+ };else if (document.attachEvent) return function (node, eventName, handler) {
+ return node.attachEvent('on' + eventName, handler);
+ };
+ })();
+ }
+
+ module.exports = on;
+
+/***/ },
+/* 93 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _keycode = __webpack_require__(94);
+
+ var _keycode2 = _interopRequireDefault(_keycode);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _uncontrollable = __webpack_require__(95);
+
+ var _uncontrollable2 = _interopRequireDefault(_uncontrollable);
+
+ var _ButtonGroup = __webpack_require__(81);
+
+ var _ButtonGroup2 = _interopRequireDefault(_ButtonGroup);
+
+ var _DropdownToggle = __webpack_require__(99);
+
+ var _DropdownToggle2 = _interopRequireDefault(_DropdownToggle);
+
+ var _DropdownMenu = __webpack_require__(101);
+
+ var _DropdownMenu2 = _interopRequireDefault(_DropdownMenu);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var _lodashCollectionFind = __webpack_require__(107);
+
+ var _lodashCollectionFind2 = _interopRequireDefault(_lodashCollectionFind);
+
+ var _lodashObjectOmit = __webpack_require__(156);
+
+ var _lodashObjectOmit2 = _interopRequireDefault(_lodashObjectOmit);
+
+ var TOGGLE_REF = 'toggle-btn';
+
+ var TOGGLE_ROLE = _DropdownToggle2['default'].defaultProps.bsRole;
+ exports.TOGGLE_ROLE = TOGGLE_ROLE;
+ var MENU_ROLE = _DropdownMenu2['default'].defaultProps.bsRole;
+
+ exports.MENU_ROLE = MENU_ROLE;
+
+ var Dropdown = (function (_React$Component) {
+ _inherits(Dropdown, _React$Component);
+
+ function Dropdown(props) {
+ _classCallCheck(this, Dropdown);
+
+ _React$Component.call(this, props);
+
+ this.Toggle = _DropdownToggle2['default'];
+
+ this.toggleOpen = this.toggleOpen.bind(this);
+ this.handleClick = this.handleClick.bind(this);
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ this.handleClose = this.handleClose.bind(this);
+ this.extractChildren = this.extractChildren.bind(this);
+
+ this.refineMenu = this.refineMenu.bind(this);
+ this.refineToggle = this.refineToggle.bind(this);
+
+ this.childExtractors = [{
+ key: 'toggle',
+ matches: function matches(child) {
+ return child.props.bsRole === TOGGLE_ROLE;
+ },
+ refine: this.refineToggle
+ }, {
+ key: 'menu',
+ exclusive: true,
+ matches: function matches(child) {
+ return child.props.bsRole === MENU_ROLE;
+ },
+ refine: this.refineMenu
+ }];
+
+ this.state = {};
+ }
+
+ Dropdown.prototype.componentDidMount = function componentDidMount() {
+ var menu = this.refs.menu;
+ if (this.props.open && menu.focusNext) {
+ menu.focusNext();
+ }
+ };
+
+ Dropdown.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {
+ var menu = this.refs.menu;
+ if (this.props.open && !prevProps.open && menu.focusNext) {
+ menu.focusNext();
+ }
+ };
+
+ Dropdown.prototype.render = function render() {
+ var children = this.extractChildren();
+ var Component = this.props.componentClass;
+
+ var props = _lodashObjectOmit2['default'](this.props, ['id']);
+
+ var rootClasses = {
+ open: this.props.open,
+ dropdown: !this.props.dropup,
+ dropup: this.props.dropup
+ };
+
+ return _react2['default'].createElement(
+ Component,
+ _extends({}, props, {
+ className: _classnames2['default'](this.props.className, rootClasses)
+ }),
+ children
+ );
+ };
+
+ Dropdown.prototype.toggleOpen = function toggleOpen() {
+ var open = !this.props.open;
+
+ if (this.props.onToggle) {
+ this.props.onToggle(open);
+ }
+ };
+
+ Dropdown.prototype.handleClick = function handleClick(event) {
+ if (this.props.disabled) {
+ return;
+ }
+
+ this.toggleOpen();
+ };
+
+ Dropdown.prototype.handleKeyDown = function handleKeyDown(event) {
+ var _this = this;
+
+ var focusNext = function focusNext() {
+ if (_this.refs.menu.focusNext) {
+ _this.refs.menu.focusNext();
+ }
+ };
+
+ switch (event.keyCode) {
+ case _keycode2['default'].codes.down:
+ if (!this.props.open) {
+ this.toggleOpen();
+ } else {
+ focusNext();
+ }
+ event.preventDefault();
+ break;
+ case _keycode2['default'].codes.esc:
+ case _keycode2['default'].codes.tab:
+ if (this.props.open) {
+ this.handleClose(event);
+ }
+ break;
+ default:
+ }
+ };
+
+ Dropdown.prototype.handleClose = function handleClose(event) {
+ if (!this.props.open) {
+ return;
+ }
+
+ // we need to let the current event finish before closing the menu.
+ // otherwise the menu may close, shifting focus to document.body, before focus has moved
+ // to the next focusable input
+ if (event && event.keyCode === _keycode2['default'].codes.tab) {
+ setTimeout(this.toggleOpen);
+ } else {
+ this.toggleOpen();
+ }
+
+ if (event && event.type === 'keydown' && event.keyCode === _keycode2['default'].codes.esc) {
+ var toggle = _react2['default'].findDOMNode(this.refs[TOGGLE_REF]);
+ event.preventDefault();
+ event.stopPropagation();
+ toggle.focus();
+ }
+ };
+
+ Dropdown.prototype.extractChildren = function extractChildren() {
+ var _this2 = this;
+
+ var open = !!this.props.open;
+ var seen = {};
+
+ return _react2['default'].Children.map(this.props.children, function (child) {
+ var extractor = _lodashCollectionFind2['default'](_this2.childExtractors, function (x) {
+ return x.matches(child);
+ });
+
+ if (extractor) {
+ if (seen[extractor.key]) {
+ return false;
+ }
+
+ seen[extractor.key] = extractor.exclusive;
+ child = extractor.refine(child, open);
+ }
+
+ return child;
+ });
+ };
+
+ Dropdown.prototype.refineMenu = function refineMenu(menu, open) {
+ var menuProps = {
+ ref: 'menu',
+ open: open,
+ labelledBy: this.props.id,
+ pullRight: this.props.pullRight
+ };
+
+ menuProps.onClose = _utilsCreateChainedFunction2['default'](menu.props.onClose, this.props.onClose, this.handleClose);
+
+ menuProps.onSelect = _utilsCreateChainedFunction2['default'](menu.props.onSelect, this.props.onSelect, this.handleClose);
+
+ return _react.cloneElement(menu, menuProps, menu.props.children);
+ };
+
+ Dropdown.prototype.refineToggle = function refineToggle(toggle, open) {
+ var toggleProps = {
+ open: open,
+ id: this.props.id,
+ ref: TOGGLE_REF
+ };
+
+ toggleProps.onClick = _utilsCreateChainedFunction2['default'](toggle.props.onClick, this.handleClick);
+
+ toggleProps.onKeyDown = _utilsCreateChainedFunction2['default'](toggle.props.onKeyDown, this.handleKeyDown);
+
+ return _react.cloneElement(toggle, toggleProps, toggle.props.children);
+ };
+
+ return Dropdown;
+ })(_react2['default'].Component);
+
+ Dropdown.Toggle = _DropdownToggle2['default'];
+
+ Dropdown.TOGGLE_REF = TOGGLE_REF;
+
+ Dropdown.defaultProps = {
+ componentClass: _ButtonGroup2['default']
+ };
+
+ Dropdown.propTypes = {
+ /**
+ * The menu will open above the dropdown button, instead of below it.
+ */
+ dropup: _react2['default'].PropTypes.bool,
+
+ /**
+ * An html id attribute, necessary for assistive technologies, such as screen readers.
+ * @type {string|number}
+ * @required
+ */
+ id: _utilsCustomPropTypes2['default'].isRequiredForA11y(_react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number])),
+
+ componentClass: _utilsCustomPropTypes2['default'].elementType,
+
+ /**
+ * The children of a Dropdown may be a `<Dropdown.Toggle/>` or a `<Dropdown.Menu/>`.
+ * @type {node}
+ */
+ children: _utilsCustomPropTypes2['default'].all([_utilsCustomPropTypes2['default'].requiredRoles(TOGGLE_ROLE, MENU_ROLE), _utilsCustomPropTypes2['default'].exclusiveRoles(MENU_ROLE)]),
+
+ /**
+ * Whether or not component is disabled.
+ */
+ disabled: _react2['default'].PropTypes.bool,
+
+ /**
+ * Align the menu to the right side of the Dropdown toggle
+ */
+ pullRight: _react2['default'].PropTypes.bool,
+
+ /**
+ * Whether or not the Dropdown is visible.
+ *
+ * @controllable onToggle
+ */
+ open: _react2['default'].PropTypes.bool,
+
+ /**
+ * A callback fired when the Dropdown closes.
+ */
+ onClose: _react2['default'].PropTypes.func,
+
+ /**
+ * A callback fired when the Dropdown wishes to change visibility. Called with the requested
+ * `open` value.
+ *
+ * ```js
+ * function(Boolean isOpen){}
+ * ```
+ * @controllable open
+ */
+ onToggle: _react2['default'].PropTypes.func,
+
+ /**
+ * A callback fired when a menu item is selected.
+ *
+ * ```js
+ * function(Object event, Any eventKey)
+ * ```
+ */
+ onSelect: _react2['default'].PropTypes.func
+ };
+
+ Dropdown = _uncontrollable2['default'](Dropdown, { open: 'onToggle' });
+
+ Dropdown.Toggle = _DropdownToggle2['default'];
+ Dropdown.Menu = _DropdownMenu2['default'];
+
+ exports['default'] = Dropdown;
+
+/***/ },
+/* 94 */
+/***/ function(module, exports) {
+
+ // Source: http://jsfiddle.net/vWx8V/
+ // http://stackoverflow.com/questions/5603195/full-list-of-javascript-keycodes
+
+
+
+ /**
+ * Conenience method returns corresponding value for given keyName or keyCode.
+ *
+ * @param {Mixed} keyCode {Number} or keyName {String}
+ * @return {Mixed}
+ * @api public
+ */
+
+ exports = module.exports = function(searchInput) {
+ // Keyboard Events
+ if (searchInput && 'object' === typeof searchInput) {
+ var hasKeyCode = searchInput.which || searchInput.keyCode || searchInput.charCode
+ if (hasKeyCode) searchInput = hasKeyCode
+ }
+
+ // Numbers
+ if ('number' === typeof searchInput) return names[searchInput]
+
+ // Everything else (cast to string)
+ var search = String(searchInput)
+
+ // check codes
+ var foundNamedKey = codes[search.toLowerCase()]
+ if (foundNamedKey) return foundNamedKey
+
+ // check aliases
+ var foundNamedKey = aliases[search.toLowerCase()]
+ if (foundNamedKey) return foundNamedKey
+
+ // weird character?
+ if (search.length === 1) return search.charCodeAt(0)
+
+ return undefined
+ }
+
+ /**
+ * Get by name
+ *
+ * exports.code['enter'] // => 13
+ */
+
+ var codes = exports.code = exports.codes = {
+ 'backspace': 8,
+ 'tab': 9,
+ 'enter': 13,
+ 'shift': 16,
+ 'ctrl': 17,
+ 'alt': 18,
+ 'pause/break': 19,
+ 'caps lock': 20,
+ 'esc': 27,
+ 'space': 32,
+ 'page up': 33,
+ 'page down': 34,
+ 'end': 35,
+ 'home': 36,
+ 'left': 37,
+ 'up': 38,
+ 'right': 39,
+ 'down': 40,
+ 'insert': 45,
+ 'delete': 46,
+ 'command': 91,
+ 'right click': 93,
+ 'numpad *': 106,
+ 'numpad +': 107,
+ 'numpad -': 109,
+ 'numpad .': 110,
+ 'numpad /': 111,
+ 'num lock': 144,
+ 'scroll lock': 145,
+ 'my computer': 182,
+ 'my calculator': 183,
+ ';': 186,
+ '=': 187,
+ ',': 188,
+ '-': 189,
+ '.': 190,
+ '/': 191,
+ '`': 192,
+ '[': 219,
+ '\\': 220,
+ ']': 221,
+ "'": 222,
+ }
+
+ // Helper aliases
+
+ var aliases = exports.aliases = {
+ 'windows': 91,
+ '⇧': 16,
+ '⌥': 18,
+ '⌃': 17,
+ '⌘': 91,
+ 'ctl': 17,
+ 'control': 17,
+ 'option': 18,
+ 'pause': 19,
+ 'break': 19,
+ 'caps': 20,
+ 'return': 13,
+ 'escape': 27,
+ 'spc': 32,
+ 'pgup': 33,
+ 'pgdn': 33,
+ 'ins': 45,
+ 'del': 46,
+ 'cmd': 91
+ }
+
+
+ /*!
+ * Programatically add the following
+ */
+
+ // lower case chars
+ for (i = 97; i < 123; i++) codes[String.fromCharCode(i)] = i - 32
+
+ // numbers
+ for (var i = 48; i < 58; i++) codes[i - 48] = i
+
+ // function keys
+ for (i = 1; i < 13; i++) codes['f'+i] = i + 111
+
+ // numpad keys
+ for (i = 0; i < 10; i++) codes['numpad '+i] = i + 96
+
+ /**
+ * Get by code
+ *
+ * exports.name[13] // => 'Enter'
+ */
+
+ var names = exports.names = exports.title = {} // title for backward compat
+
+ // Create reverse mapping
+ for (i in codes) names[codes[i]] = i
+
+ // Add aliases
+ for (var alias in aliases) {
+ codes[alias] = aliases[alias]
+ }
+
+
+/***/ },
+/* 95 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _createUncontrollable = __webpack_require__(96);
+
+ var _createUncontrollable2 = _interopRequireDefault(_createUncontrollable);
+
+ var mixin = {
+ shouldComponentUpdate: function shouldComponentUpdate() {
+ //let the setState trigger the update
+ return !this._notifying;
+ }
+ };
+
+ function set(component, propName, handler, value, args) {
+ if (handler) {
+ component._notifying = true;
+ handler.call.apply(handler, [component, value].concat(args));
+ component._notifying = false;
+ }
+
+ component._values[propName] = value;
+ component.forceUpdate();
+ }
+
+ exports['default'] = _createUncontrollable2['default']([mixin], set);
+ module.exports = exports['default'];
+
+/***/ },
+/* 96 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+ exports['default'] = createUncontrollable;
+
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _utils = __webpack_require__(97);
+
+ var utils = _interopRequireWildcard(_utils);
+
+ function createUncontrollable(mixins, set) {
+
+ return uncontrollable;
+
+ function uncontrollable(Component, controlledValues) {
+ var forwardMethods = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];
+
+ var displayName = Component.displayName || Component.name || 'Component',
+ basePropTypes = utils.getType(Component).propTypes,
+ propTypes;
+
+ propTypes = utils.uncontrolledPropTypes(controlledValues, basePropTypes, displayName);
+
+ var methods = utils.transform(forwardMethods, function (proto, method) {
+ proto[method] = function () {
+ var controlled = this.refs.controlled;
+ return controlled[method].apply(controlled, arguments);
+ };
+ }, {});
+
+ var component = _react2['default'].createClass(_extends({
+
+ displayName: 'Uncontrolled(' + displayName + ')',
+
+ mixins: mixins,
+
+ propTypes: propTypes
+
+ }, methods, {
+
+ componentWillMount: function componentWillMount() {
+ var props = this.props,
+ keys = Object.keys(controlledValues);
+
+ this._values = utils.transform(keys, function (values, key) {
+ values[key] = props[utils.defaultKey(key)];
+ }, {});
+ },
+
+ render: function render() {
+ var _this = this;
+
+ var newProps = {};
+ var _props = this.props;
+ var valueLink = _props.valueLink;
+ var checkedLink = _props.checkedLink;
+
+ var props = _objectWithoutProperties(_props, ['valueLink', 'checkedLink']);
+
+ utils.each(controlledValues, function (handle, propName) {
+ var linkPropName = utils.getLinkName(propName),
+ prop = _this.props[propName];
+
+ if (linkPropName && !isProp(_this.props, propName) && isProp(_this.props, linkPropName)) {
+ prop = _this.props[linkPropName].value;
+ }
+
+ newProps[propName] = prop !== undefined ? prop : _this._values[propName];
+
+ newProps[handle] = setAndNotify.bind(_this, propName);
+ });
+
+ newProps = _extends({ ref: 'controlled' }, props, newProps);
+
+ return _react2['default'].createElement(Component, newProps);
+ }
+
+ }));
+
+ component.ControlledComponent = Component;
+
+ return component;
+
+ function setAndNotify(propName, value) {
+ var linkName = utils.getLinkName(propName),
+ handler = this.props[controlledValues[propName]];
+
+ if (linkName && isProp(this.props, linkName) && !handler) {
+ handler = this.props[linkName].requestChange;
+ }
+
+ for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
+ args[_key - 2] = arguments[_key];
+ }
+
+ set(this, propName, handler, value, args);
+ }
+
+ function isProp(props, prop) {
+ return props[prop] !== undefined;
+ }
+ }
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 97 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports.customPropType = customPropType;
+ exports.uncontrolledPropTypes = uncontrolledPropTypes;
+ exports.getType = getType;
+ exports.getLinkName = getLinkName;
+ exports.defaultKey = defaultKey;
+ exports.chain = chain;
+ exports.transform = transform;
+ exports.each = each;
+ exports.has = has;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _invariant = __webpack_require__(98);
+
+ var _invariant2 = _interopRequireDefault(_invariant);
+
+ function customPropType(handler, propType, name) {
+
+ return function (props, propName, componentName) {
+
+ if (props[propName] !== undefined) {
+ if (!props[handler]) {
+ return new Error('You have provided a `' + propName + '` prop to ' + '`' + name + '` without an `' + handler + '` handler. This will render a read-only field. ' + 'If the field should be mutable use `' + defaultKey(propName) + '`. Otherwise, set `' + handler + '`');
+ }
+
+ return propType && propType(props, propName, name);
+ }
+ };
+ }
+
+ function uncontrolledPropTypes(controlledValues, basePropTypes, displayName) {
+ var propTypes = {};
+
+ if (("development") !== 'production' && basePropTypes) {
+ transform(controlledValues, function (obj, handler, prop) {
+ var type = basePropTypes[prop];
+
+ _invariant2['default'](typeof handler === 'string' && handler.trim().length, 'Uncontrollable - [%s]: the prop `%s` needs a valid handler key name in order to make it uncontrollable', displayName, prop);
+
+ obj[prop] = customPropType(handler, type, displayName);
+
+ if (type !== undefined) obj[defaultKey(prop)] = type;
+ }, propTypes);
+ }
+
+ return propTypes;
+ }
+
+ var version = _react2['default'].version.split('.').map(parseFloat);
+
+ exports.version = version;
+
+ function getType(component) {
+ if (version[0] === 0 && version[1] >= 13) return component;
+
+ return component.type;
+ }
+
+ function getLinkName(name) {
+ return name === 'value' ? 'valueLink' : name === 'checked' ? 'checkedLink' : null;
+ }
+
+ function defaultKey(key) {
+ return 'default' + key.charAt(0).toUpperCase() + key.substr(1);
+ }
+
+ function chain(thisArg, a, b) {
+ return function chainedFunction() {
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ a && a.call.apply(a, [thisArg].concat(args));
+ b && b.call.apply(b, [thisArg].concat(args));
+ };
+ }
+
+ function transform(obj, cb, seed) {
+ each(obj, cb.bind(null, seed = seed || (Array.isArray(obj) ? [] : {})));
+ return seed;
+ }
+
+ function each(obj, cb, thisArg) {
+ if (Array.isArray(obj)) return obj.forEach(cb, thisArg);
+
+ for (var key in obj) if (has(obj, key)) cb.call(thisArg, obj[key], key, obj);
+ }
+
+ function has(o, k) {
+ return o ? Object.prototype.hasOwnProperty.call(o, k) : false;
+ }
+
+/***/ },
+/* 98 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Copyright 2013-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule invariant
+ */
+
+ 'use strict';
+
+ /**
+ * Use invariant() to assert state which your program assumes to be true.
+ *
+ * Provide sprintf-style format (only %s is supported) and arguments
+ * to provide information about what broke and what you were
+ * expecting.
+ *
+ * The invariant message will be stripped in production, but the invariant
+ * will remain to ensure logic does not differ in production.
+ */
+
+ var invariant = function(condition, format, a, b, c, d, e, f) {
+ if (true) {
+ if (format === undefined) {
+ throw new Error('invariant requires an error message argument');
+ }
+ }
+
+ if (!condition) {
+ var error;
+ if (format === undefined) {
+ error = new Error(
+ 'Minified exception occurred; use the non-minified dev environment ' +
+ 'for the full error message and additional helpful warnings.'
+ );
+ } else {
+ var args = [a, b, c, d, e, f];
+ var argIndex = 0;
+ error = new Error(
+ 'Invariant Violation: ' +
+ format.replace(/%s/g, function() { return args[argIndex++]; })
+ );
+ }
+
+ error.framesToPop = 1; // we don't care about invariant's own frame
+ throw error;
+ }
+ };
+
+ module.exports = invariant;
+
+
+/***/ },
+/* 99 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _Button = __webpack_require__(76);
+
+ var _Button2 = _interopRequireDefault(_Button);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _SafeAnchor = __webpack_require__(100);
+
+ var _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);
+
+ var CARET = _react2['default'].createElement(
+ 'span',
+ null,
+ ' ',
+ _react2['default'].createElement('span', { className: 'caret' })
+ );
+
+ var DropdownToggle = (function (_React$Component) {
+ _inherits(DropdownToggle, _React$Component);
+
+ function DropdownToggle() {
+ _classCallCheck(this, DropdownToggle);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ DropdownToggle.prototype.render = function render() {
+ var caret = this.props.noCaret ? null : CARET;
+
+ var classes = {
+ 'dropdown-toggle': true
+ };
+
+ var Component = this.props.useAnchor ? _SafeAnchor2['default'] : _Button2['default'];
+
+ return _react2['default'].createElement(
+ Component,
+ _extends({}, this.props, {
+ className: _classnames2['default'](classes, this.props.className),
+ type: 'button',
+ 'aria-haspopup': true,
+ 'aria-expanded': this.props.open }),
+ this.props.title || this.props.children,
+ caret
+ );
+ };
+
+ return DropdownToggle;
+ })(_react2['default'].Component);
+
+ exports['default'] = DropdownToggle;
+
+ var titleAndChildrenValidation = _utilsCustomPropTypes2['default'].singlePropFrom(['title', 'children']);
+
+ DropdownToggle.defaultProps = {
+ open: false,
+ useAnchor: false,
+ bsRole: 'toggle'
+ };
+
+ DropdownToggle.propTypes = {
+ bsRole: _react2['default'].PropTypes.string,
+ children: titleAndChildrenValidation,
+ noCaret: _react2['default'].PropTypes.bool,
+ open: _react2['default'].PropTypes.bool,
+ title: titleAndChildrenValidation,
+ useAnchor: _react2['default'].PropTypes.bool
+ };
+
+ DropdownToggle.isToggle = true;
+ DropdownToggle.titleProp = 'title';
+ DropdownToggle.onClickProp = 'onClick';
+ module.exports = exports['default'];
+
+/***/ },
+/* 100 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ /**
+ * Note: This is intended as a stop-gap for accessibility concerns that the
+ * Bootstrap CSS does not address as they have styled anchors and not buttons
+ * in many cases.
+ */
+
+ var SafeAnchor = (function (_React$Component) {
+ _inherits(SafeAnchor, _React$Component);
+
+ function SafeAnchor(props) {
+ _classCallCheck(this, SafeAnchor);
+
+ _React$Component.call(this, props);
+
+ this.handleClick = this.handleClick.bind(this);
+ }
+
+ SafeAnchor.prototype.handleClick = function handleClick(event) {
+ if (this.props.href === undefined) {
+ event.preventDefault();
+ }
+ };
+
+ SafeAnchor.prototype.render = function render() {
+ return _react2['default'].createElement('a', _extends({ role: this.props.href ? undefined : 'button'
+ }, this.props, {
+ onClick: _utilsCreateChainedFunction2['default'](this.props.onClick, this.handleClick),
+ href: this.props.href || '' }));
+ };
+
+ return SafeAnchor;
+ })(_react2['default'].Component);
+
+ exports['default'] = SafeAnchor;
+
+ SafeAnchor.propTypes = {
+ href: _react2['default'].PropTypes.string,
+ onClick: _react2['default'].PropTypes.func
+ };
+ module.exports = exports['default'];
+
+/***/ },
+/* 101 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _keycode = __webpack_require__(94);
+
+ var _keycode2 = _interopRequireDefault(_keycode);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _reactOverlaysLibRootCloseWrapper = __webpack_require__(102);
+
+ var _reactOverlaysLibRootCloseWrapper2 = _interopRequireDefault(_reactOverlaysLibRootCloseWrapper);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var DropdownMenu = (function (_React$Component) {
+ _inherits(DropdownMenu, _React$Component);
+
+ function DropdownMenu(props) {
+ _classCallCheck(this, DropdownMenu);
+
+ _React$Component.call(this, props);
+
+ this.focusNext = this.focusNext.bind(this);
+ this.focusPrevious = this.focusPrevious.bind(this);
+ this.getFocusableMenuItems = this.getFocusableMenuItems.bind(this);
+ this.getItemsAndActiveIndex = this.getItemsAndActiveIndex.bind(this);
+
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ }
+
+ DropdownMenu.prototype.handleKeyDown = function handleKeyDown(event) {
+
+ switch (event.keyCode) {
+ case _keycode2['default'].codes.down:
+ this.focusNext();
+ event.preventDefault();
+ break;
+ case _keycode2['default'].codes.up:
+ this.focusPrevious();
+ event.preventDefault();
+ break;
+ case _keycode2['default'].codes.esc:
+ case _keycode2['default'].codes.tab:
+ this.props.onClose(event);
+ break;
+ default:
+ }
+ };
+
+ DropdownMenu.prototype.focusNext = function focusNext() {
+ var _getItemsAndActiveIndex = this.getItemsAndActiveIndex();
+
+ var items = _getItemsAndActiveIndex.items;
+ var activeItemIndex = _getItemsAndActiveIndex.activeItemIndex;
+
+ if (activeItemIndex === items.length - 1) {
+ items[0].focus();
+ return;
+ }
+
+ items[activeItemIndex + 1].focus();
+ };
+
+ DropdownMenu.prototype.focusPrevious = function focusPrevious() {
+ var _getItemsAndActiveIndex2 = this.getItemsAndActiveIndex();
+
+ var items = _getItemsAndActiveIndex2.items;
+ var activeItemIndex = _getItemsAndActiveIndex2.activeItemIndex;
+
+ if (activeItemIndex === 0) {
+ items[items.length - 1].focus();
+ return;
+ }
+
+ items[activeItemIndex - 1].focus();
+ };
+
+ DropdownMenu.prototype.getItemsAndActiveIndex = function getItemsAndActiveIndex() {
+ var items = this.getFocusableMenuItems();
+ var activeElement = document.activeElement;
+ var activeItemIndex = items.indexOf(activeElement);
+
+ return { items: items, activeItemIndex: activeItemIndex };
+ };
+
+ DropdownMenu.prototype.getFocusableMenuItems = function getFocusableMenuItems() {
+ var menuNode = _react2['default'].findDOMNode(this);
+
+ if (menuNode === undefined) {
+ return [];
+ }
+
+ return [].slice.call(menuNode.querySelectorAll('[tabIndex="-1"]'), 0);
+ };
+
+ DropdownMenu.prototype.render = function render() {
+ var _this = this;
+
+ var items = _utilsValidComponentChildren2['default'].map(this.props.children, function (child) {
+ var _ref = child.props || {};
+
+ var children = _ref.children;
+ var onKeyDown = _ref.onKeyDown;
+ var onSelect = _ref.onSelect;
+
+ return _react2['default'].cloneElement(child, {
+ onKeyDown: _utilsCreateChainedFunction2['default'](onKeyDown, _this.handleKeyDown),
+ onSelect: _utilsCreateChainedFunction2['default'](onSelect, _this.props.onSelect)
+ }, children);
+ });
+
+ var classes = {
+ 'dropdown-menu': true,
+ 'dropdown-menu-right': this.props.pullRight
+ };
+
+ var list = _react2['default'].createElement(
+ 'ul',
+ {
+ className: _classnames2['default'](this.props.className, classes),
+ role: 'menu',
+ 'aria-labelledby': this.props.labelledBy
+ },
+ items
+ );
+
+ if (this.props.open) {
+ list = _react2['default'].createElement(
+ _reactOverlaysLibRootCloseWrapper2['default'],
+ { noWrap: true, onRootClose: this.props.onClose },
+ list
+ );
+ }
+
+ return list;
+ };
+
+ return DropdownMenu;
+ })(_react2['default'].Component);
+
+ DropdownMenu.defaultProps = {
+ bsRole: 'menu',
+ pullRight: false
+ };
+
+ DropdownMenu.propTypes = {
+ open: _react2['default'].PropTypes.bool,
+ pullRight: _react2['default'].PropTypes.bool,
+ onClose: _react2['default'].PropTypes.func,
+ labelledBy: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number]),
+ onSelect: _react2['default'].PropTypes.func
+ };
+
+ exports['default'] = DropdownMenu;
+ module.exports = exports['default'];
+
+/***/ },
+/* 102 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
+
+ function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _utilsAddEventListener = __webpack_require__(103);
+
+ var _utilsAddEventListener2 = _interopRequireDefault(_utilsAddEventListener);
+
+ var _utilsCreateChainedFunction = __webpack_require__(105);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var _utilsOwnerDocument = __webpack_require__(106);
+
+ var _utilsOwnerDocument2 = _interopRequireDefault(_utilsOwnerDocument);
+
+ // TODO: Consider using an ES6 symbol here, once we use babel-runtime.
+ var CLICK_WAS_INSIDE = '__click_was_inside';
+
+ function suppressRootClose(event) {
+ // Tag the native event to prevent the root close logic on document click.
+ // This seems safer than using event.nativeEvent.stopImmediatePropagation(),
+ // which is only supported in IE >= 9.
+ event.nativeEvent[CLICK_WAS_INSIDE] = true;
+ }
+
+ var RootCloseWrapper = (function (_React$Component) {
+ function RootCloseWrapper(props) {
+ _classCallCheck(this, RootCloseWrapper);
+
+ _React$Component.call(this, props);
+
+ this.handleDocumentClick = this.handleDocumentClick.bind(this);
+ this.handleDocumentKeyUp = this.handleDocumentKeyUp.bind(this);
+ }
+
+ _inherits(RootCloseWrapper, _React$Component);
+
+ RootCloseWrapper.prototype.bindRootCloseHandlers = function bindRootCloseHandlers() {
+ var doc = _utilsOwnerDocument2['default'](this);
+
+ this._onDocumentClickListener = _utilsAddEventListener2['default'](doc, 'click', this.handleDocumentClick);
+
+ this._onDocumentKeyupListener = _utilsAddEventListener2['default'](doc, 'keyup', this.handleDocumentKeyUp);
+ };
+
+ RootCloseWrapper.prototype.handleDocumentClick = function handleDocumentClick(e) {
+ // This is now the native event.
+ if (e[CLICK_WAS_INSIDE]) {
+ return;
+ }
+
+ this.props.onRootClose();
+ };
+
+ RootCloseWrapper.prototype.handleDocumentKeyUp = function handleDocumentKeyUp(e) {
+ if (e.keyCode === 27) {
+ this.props.onRootClose();
+ }
+ };
+
+ RootCloseWrapper.prototype.unbindRootCloseHandlers = function unbindRootCloseHandlers() {
+ if (this._onDocumentClickListener) {
+ this._onDocumentClickListener.remove();
+ }
+
+ if (this._onDocumentKeyupListener) {
+ this._onDocumentKeyupListener.remove();
+ }
+ };
+
+ RootCloseWrapper.prototype.componentDidMount = function componentDidMount() {
+ this.bindRootCloseHandlers();
+ };
+
+ RootCloseWrapper.prototype.render = function render() {
+ var _props = this.props;
+ var noWrap = _props.noWrap;
+ var children = _props.children;
+
+ var child = _react2['default'].Children.only(children);
+
+ if (noWrap) {
+ return _react2['default'].cloneElement(child, {
+ onClick: _utilsCreateChainedFunction2['default'](suppressRootClose, child.props.onClick)
+ });
+ }
+
+ // Wrap the child in a new element, so the child won't have to handle
+ // potentially combining multiple onClick listeners.
+ return _react2['default'].createElement(
+ 'div',
+ { onClick: suppressRootClose },
+ child
+ );
+ };
+
+ RootCloseWrapper.prototype.getWrappedDOMNode = function getWrappedDOMNode() {
+ // We can't use a ref to identify the wrapped child, since we might be
+ // stealing the ref from the owner, but we know exactly the DOM structure
+ // that will be rendered, so we can just do this to get the child's DOM
+ // node for doing size calculations in OverlayMixin.
+ var node = _react2['default'].findDOMNode(this);
+ return this.props.noWrap ? node : node.firstChild;
+ };
+
+ RootCloseWrapper.prototype.componentWillUnmount = function componentWillUnmount() {
+ this.unbindRootCloseHandlers();
+ };
+
+ return RootCloseWrapper;
+ })(_react2['default'].Component);
+
+ exports['default'] = RootCloseWrapper;
+
+ RootCloseWrapper.displayName = 'RootCloseWrapper';
+
+ RootCloseWrapper.propTypes = {
+ onRootClose: _react2['default'].PropTypes.func.isRequired,
+
+ /**
+ * Passes the suppress click handler directly to the child component instead
+ * of placing it on a wrapping div. Only use when you can be sure the child
+ * properly handle the click event.
+ */
+ noWrap: _react2['default'].PropTypes.bool
+ };
+ module.exports = exports['default'];
+
+/***/ },
+/* 103 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _domHelpersEventsOn = __webpack_require__(92);
+
+ var _domHelpersEventsOn2 = _interopRequireDefault(_domHelpersEventsOn);
+
+ var _domHelpersEventsOff = __webpack_require__(104);
+
+ var _domHelpersEventsOff2 = _interopRequireDefault(_domHelpersEventsOff);
+
+ exports['default'] = function (node, event, handler) {
+ _domHelpersEventsOn2['default'](node, event, handler);
+ return {
+ remove: function remove() {
+ _domHelpersEventsOff2['default'](node, event, handler);
+ }
+ };
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 104 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+ var canUseDOM = __webpack_require__(33);
+ var off = function off() {};
+
+ if (canUseDOM) {
+
+ off = (function () {
+
+ if (document.addEventListener) return function (node, eventName, handler, capture) {
+ return node.removeEventListener(eventName, handler, capture || false);
+ };else if (document.attachEvent) return function (node, eventName, handler) {
+ return node.detachEvent('on' + eventName, handler);
+ };
+ })();
+ }
+
+ module.exports = off;
+
+/***/ },
+/* 105 */
+/***/ function(module, exports) {
+
+ /**
+ * Safe chained function
+ *
+ * Will only create a new function if needed,
+ * otherwise will pass back existing functions or null.
+ *
+ * @param {function} functions to chain
+ * @returns {function|null}
+ */
+ 'use strict';
+
+ exports.__esModule = true;
+ function createChainedFunction() {
+ for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
+ funcs[_key] = arguments[_key];
+ }
+
+ return funcs.filter(function (f) {
+ return f != null;
+ }).reduce(function (acc, f) {
+ if (typeof f !== 'function') {
+ throw new Error('Invalid Argument Type, must only provide functions, undefined, or null.');
+ }
+
+ if (acc === null) {
+ return f;
+ }
+
+ return function chainedFunction() {
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+
+ acc.apply(this, args);
+ f.apply(this, args);
+ };
+ }, null);
+ }
+
+ exports['default'] = createChainedFunction;
+ module.exports = exports['default'];
+
+/***/ },
+/* 106 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _domHelpersOwnerDocument = __webpack_require__(34);
+
+ var _domHelpersOwnerDocument2 = _interopRequireDefault(_domHelpersOwnerDocument);
+
+ exports['default'] = function (componentOrElement) {
+ return _domHelpersOwnerDocument2['default'](_react2['default'].findDOMNode(componentOrElement));
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 107 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseEach = __webpack_require__(108),
+ createFind = __webpack_require__(129);
+
+ /**
+ * Iterates over elements of `collection`, returning the first element
+ * `predicate` returns truthy for. The predicate is bound to `thisArg` and
+ * invoked with three arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias detect
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false },
+ * { 'user': 'pebbles', 'age': 1, 'active': true }
+ * ];
+ *
+ * _.result(_.find(users, function(chr) {
+ * return chr.age < 40;
+ * }), 'user');
+ * // => 'barney'
+ *
+ * // using the `_.matches` callback shorthand
+ * _.result(_.find(users, { 'age': 1, 'active': true }), 'user');
+ * // => 'pebbles'
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.result(_.find(users, 'active', false), 'user');
+ * // => 'fred'
+ *
+ * // using the `_.property` callback shorthand
+ * _.result(_.find(users, 'active'), 'user');
+ * // => 'barney'
+ */
+ var find = createFind(baseEach);
+
+ module.exports = find;
+
+
+/***/ },
+/* 108 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseForOwn = __webpack_require__(109),
+ createBaseEach = __webpack_require__(128);
+
+ /**
+ * The base implementation of `_.forEach` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object|string} Returns `collection`.
+ */
+ var baseEach = createBaseEach(baseForOwn);
+
+ module.exports = baseEach;
+
+
+/***/ },
+/* 109 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseFor = __webpack_require__(110),
+ keys = __webpack_require__(114);
+
+ /**
+ * The base implementation of `_.forOwn` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+ function baseForOwn(object, iteratee) {
+ return baseFor(object, iteratee, keys);
+ }
+
+ module.exports = baseForOwn;
+
+
+/***/ },
+/* 110 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var createBaseFor = __webpack_require__(111);
+
+ /**
+ * The base implementation of `baseForIn` and `baseForOwn` which iterates
+ * over `object` properties returned by `keysFunc` invoking `iteratee` for
+ * each property. Iteratee functions may exit iteration early by explicitly
+ * returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+ var baseFor = createBaseFor();
+
+ module.exports = baseFor;
+
+
+/***/ },
+/* 111 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var toObject = __webpack_require__(112);
+
+ /**
+ * Creates a base function for `_.forIn` or `_.forInRight`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+ function createBaseFor(fromRight) {
+ return function(object, iteratee, keysFunc) {
+ var iterable = toObject(object),
+ props = keysFunc(object),
+ length = props.length,
+ index = fromRight ? length : -1;
+
+ while ((fromRight ? index-- : ++index < length)) {
+ var key = props[index];
+ if (iteratee(iterable[key], key, iterable) === false) {
+ break;
+ }
+ }
+ return object;
+ };
+ }
+
+ module.exports = createBaseFor;
+
+
+/***/ },
+/* 112 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(113);
+
+ /**
+ * Converts `value` to an object if it's not one.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {Object} Returns the object.
+ */
+ function toObject(value) {
+ return isObject(value) ? value : Object(value);
+ }
+
+ module.exports = toObject;
+
+
+/***/ },
+/* 113 */
+/***/ function(module, exports) {
+
+ /**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+ function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+ }
+
+ module.exports = isObject;
+
+
+/***/ },
+/* 114 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getNative = __webpack_require__(115),
+ isArrayLike = __webpack_require__(119),
+ isObject = __webpack_require__(113),
+ shimKeys = __webpack_require__(123);
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeKeys = getNative(Object, 'keys');
+
+ /**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+ var keys = !nativeKeys ? shimKeys : function(object) {
+ var Ctor = object == null ? undefined : object.constructor;
+ if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
+ (typeof object != 'function' && isArrayLike(object))) {
+ return shimKeys(object);
+ }
+ return isObject(object) ? nativeKeys(object) : [];
+ };
+
+ module.exports = keys;
+
+
+/***/ },
+/* 115 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isNative = __webpack_require__(116);
+
+ /**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+ function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+ }
+
+ module.exports = getNative;
+
+
+/***/ },
+/* 116 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isFunction = __webpack_require__(117),
+ isObjectLike = __webpack_require__(118);
+
+ /** Used to detect host constructors (Safari > 5). */
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to resolve the decompiled source of functions. */
+ var fnToString = Function.prototype.toString;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /** Used to detect if a method is native. */
+ var reIsNative = RegExp('^' +
+ fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+ );
+
+ /**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+ function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(fnToString.call(value));
+ }
+ return isObjectLike(value) && reIsHostCtor.test(value);
+ }
+
+ module.exports = isNative;
+
+
+/***/ },
+/* 117 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(113);
+
+ /** `Object#toString` result references. */
+ var funcTag = '[object Function]';
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objToString = objectProto.toString;
+
+ /**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+ function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in older versions of Chrome and Safari which return 'function' for regexes
+ // and Safari 8 which returns 'object' for typed array constructors.
+ return isObject(value) && objToString.call(value) == funcTag;
+ }
+
+ module.exports = isFunction;
+
+
+/***/ },
+/* 118 */
+/***/ function(module, exports) {
+
+ /**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */
+ function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+ }
+
+ module.exports = isObjectLike;
+
+
+/***/ },
+/* 119 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getLength = __webpack_require__(120),
+ isLength = __webpack_require__(122);
+
+ /**
+ * Checks if `value` is array-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+ function isArrayLike(value) {
+ return value != null && isLength(getLength(value));
+ }
+
+ module.exports = isArrayLike;
+
+
+/***/ },
+/* 120 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseProperty = __webpack_require__(121);
+
+ /**
+ * Gets the "length" property value of `object`.
+ *
+ * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+ * that affects Safari on at least iOS 8.1-8.3 ARM64.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {*} Returns the "length" value.
+ */
+ var getLength = baseProperty('length');
+
+ module.exports = getLength;
+
+
+/***/ },
+/* 121 */
+/***/ function(module, exports) {
+
+ /**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+ function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+ }
+
+ module.exports = baseProperty;
+
+
+/***/ },
+/* 122 */
+/***/ function(module, exports) {
+
+ /**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+ var MAX_SAFE_INTEGER = 9007199254740991;
+
+ /**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+ function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+ }
+
+ module.exports = isLength;
+
+
+/***/ },
+/* 123 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArguments = __webpack_require__(124),
+ isArray = __webpack_require__(125),
+ isIndex = __webpack_require__(126),
+ isLength = __webpack_require__(122),
+ keysIn = __webpack_require__(127);
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * A fallback implementation of `Object.keys` which creates an array of the
+ * own enumerable property names of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+ function shimKeys(object) {
+ var props = keysIn(object),
+ propsLength = props.length,
+ length = propsLength && object.length;
+
+ var allowIndexes = !!length && isLength(length) &&
+ (isArray(object) || isArguments(object));
+
+ var index = -1,
+ result = [];
+
+ while (++index < propsLength) {
+ var key = props[index];
+ if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ module.exports = shimKeys;
+
+
+/***/ },
+/* 124 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArrayLike = __webpack_require__(119),
+ isObjectLike = __webpack_require__(118);
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /** Native method references. */
+ var propertyIsEnumerable = objectProto.propertyIsEnumerable;
+
+ /**
+ * Checks if `value` is classified as an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+ function isArguments(value) {
+ return isObjectLike(value) && isArrayLike(value) &&
+ hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
+ }
+
+ module.exports = isArguments;
+
+
+/***/ },
+/* 125 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getNative = __webpack_require__(115),
+ isLength = __webpack_require__(122),
+ isObjectLike = __webpack_require__(118);
+
+ /** `Object#toString` result references. */
+ var arrayTag = '[object Array]';
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objToString = objectProto.toString;
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeIsArray = getNative(Array, 'isArray');
+
+ /**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(function() { return arguments; }());
+ * // => false
+ */
+ var isArray = nativeIsArray || function(value) {
+ return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
+ };
+
+ module.exports = isArray;
+
+
+/***/ },
+/* 126 */
+/***/ function(module, exports) {
+
+ /** Used to detect unsigned integer values. */
+ var reIsUint = /^\d+$/;
+
+ /**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+ var MAX_SAFE_INTEGER = 9007199254740991;
+
+ /**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+ function isIndex(value, length) {
+ value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return value > -1 && value % 1 == 0 && value < length;
+ }
+
+ module.exports = isIndex;
+
+
+/***/ },
+/* 127 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArguments = __webpack_require__(124),
+ isArray = __webpack_require__(125),
+ isIndex = __webpack_require__(126),
+ isLength = __webpack_require__(122),
+ isObject = __webpack_require__(113);
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */
+ function keysIn(object) {
+ if (object == null) {
+ return [];
+ }
+ if (!isObject(object)) {
+ object = Object(object);
+ }
+ var length = object.length;
+ length = (length && isLength(length) &&
+ (isArray(object) || isArguments(object)) && length) || 0;
+
+ var Ctor = object.constructor,
+ index = -1,
+ isProto = typeof Ctor == 'function' && Ctor.prototype === object,
+ result = Array(length),
+ skipIndexes = length > 0;
+
+ while (++index < length) {
+ result[index] = (index + '');
+ }
+ for (var key in object) {
+ if (!(skipIndexes && isIndex(key, length)) &&
+ !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ module.exports = keysIn;
+
+
+/***/ },
+/* 128 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getLength = __webpack_require__(120),
+ isLength = __webpack_require__(122),
+ toObject = __webpack_require__(112);
+
+ /**
+ * Creates a `baseEach` or `baseEachRight` function.
+ *
+ * @private
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+ function createBaseEach(eachFunc, fromRight) {
+ return function(collection, iteratee) {
+ var length = collection ? getLength(collection) : 0;
+ if (!isLength(length)) {
+ return eachFunc(collection, iteratee);
+ }
+ var index = fromRight ? length : -1,
+ iterable = toObject(collection);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ if (iteratee(iterable[index], index, iterable) === false) {
+ break;
+ }
+ }
+ return collection;
+ };
+ }
+
+ module.exports = createBaseEach;
+
+
+/***/ },
+/* 129 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseCallback = __webpack_require__(130),
+ baseFind = __webpack_require__(154),
+ baseFindIndex = __webpack_require__(155),
+ isArray = __webpack_require__(125);
+
+ /**
+ * Creates a `_.find` or `_.findLast` function.
+ *
+ * @private
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new find function.
+ */
+ function createFind(eachFunc, fromRight) {
+ return function(collection, predicate, thisArg) {
+ predicate = baseCallback(predicate, thisArg, 3);
+ if (isArray(collection)) {
+ var index = baseFindIndex(collection, predicate, fromRight);
+ return index > -1 ? collection[index] : undefined;
+ }
+ return baseFind(collection, predicate, eachFunc);
+ };
+ }
+
+ module.exports = createFind;
+
+
+/***/ },
+/* 130 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseMatches = __webpack_require__(131),
+ baseMatchesProperty = __webpack_require__(143),
+ bindCallback = __webpack_require__(150),
+ identity = __webpack_require__(151),
+ property = __webpack_require__(152);
+
+ /**
+ * The base implementation of `_.callback` which supports specifying the
+ * number of arguments to provide to `func`.
+ *
+ * @private
+ * @param {*} [func=_.identity] The value to convert to a callback.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {number} [argCount] The number of arguments to provide to `func`.
+ * @returns {Function} Returns the callback.
+ */
+ function baseCallback(func, thisArg, argCount) {
+ var type = typeof func;
+ if (type == 'function') {
+ return thisArg === undefined
+ ? func
+ : bindCallback(func, thisArg, argCount);
+ }
+ if (func == null) {
+ return identity;
+ }
+ if (type == 'object') {
+ return baseMatches(func);
+ }
+ return thisArg === undefined
+ ? property(func)
+ : baseMatchesProperty(func, thisArg);
+ }
+
+ module.exports = baseCallback;
+
+
+/***/ },
+/* 131 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseIsMatch = __webpack_require__(132),
+ getMatchData = __webpack_require__(140),
+ toObject = __webpack_require__(112);
+
+ /**
+ * The base implementation of `_.matches` which does not clone `source`.
+ *
+ * @private
+ * @param {Object} source The object of property values to match.
+ * @returns {Function} Returns the new function.
+ */
+ function baseMatches(source) {
+ var matchData = getMatchData(source);
+ if (matchData.length == 1 && matchData[0][2]) {
+ var key = matchData[0][0],
+ value = matchData[0][1];
+
+ return function(object) {
+ if (object == null) {
+ return false;
+ }
+ return object[key] === value && (value !== undefined || (key in toObject(object)));
+ };
+ }
+ return function(object) {
+ return baseIsMatch(object, matchData);
+ };
+ }
+
+ module.exports = baseMatches;
+
+
+/***/ },
+/* 132 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseIsEqual = __webpack_require__(133),
+ toObject = __webpack_require__(112);
+
+ /**
+ * The base implementation of `_.isMatch` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Array} matchData The propery names, values, and compare flags to match.
+ * @param {Function} [customizer] The function to customize comparing objects.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ */
+ function baseIsMatch(object, matchData, customizer) {
+ var index = matchData.length,
+ length = index,
+ noCustomizer = !customizer;
+
+ if (object == null) {
+ return !length;
+ }
+ object = toObject(object);
+ while (index--) {
+ var data = matchData[index];
+ if ((noCustomizer && data[2])
+ ? data[1] !== object[data[0]]
+ : !(data[0] in object)
+ ) {
+ return false;
+ }
+ }
+ while (++index < length) {
+ data = matchData[index];
+ var key = data[0],
+ objValue = object[key],
+ srcValue = data[1];
+
+ if (noCustomizer && data[2]) {
+ if (objValue === undefined && !(key in object)) {
+ return false;
+ }
+ } else {
+ var result = customizer ? customizer(objValue, srcValue, key) : undefined;
+ if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ module.exports = baseIsMatch;
+
+
+/***/ },
+/* 133 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseIsEqualDeep = __webpack_require__(134),
+ isObject = __webpack_require__(113),
+ isObjectLike = __webpack_require__(118);
+
+ /**
+ * The base implementation of `_.isEqual` without support for `this` binding
+ * `customizer` functions.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {Function} [customizer] The function to customize comparing values.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA] Tracks traversed `value` objects.
+ * @param {Array} [stackB] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ */
+ function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
+ if (value === other) {
+ return true;
+ }
+ if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
+ return value !== value && other !== other;
+ }
+ return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
+ }
+
+ module.exports = baseIsEqual;
+
+
+/***/ },
+/* 134 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var equalArrays = __webpack_require__(135),
+ equalByTag = __webpack_require__(137),
+ equalObjects = __webpack_require__(138),
+ isArray = __webpack_require__(125),
+ isTypedArray = __webpack_require__(139);
+
+ /** `Object#toString` result references. */
+ var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ objectTag = '[object Object]';
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objToString = objectProto.toString;
+
+ /**
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
+ * deep comparisons and tracks traversed objects enabling objects with circular
+ * references to be compared.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparing objects.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA=[]] Tracks traversed `value` objects.
+ * @param {Array} [stackB=[]] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
+ var objIsArr = isArray(object),
+ othIsArr = isArray(other),
+ objTag = arrayTag,
+ othTag = arrayTag;
+
+ if (!objIsArr) {
+ objTag = objToString.call(object);
+ if (objTag == argsTag) {
+ objTag = objectTag;
+ } else if (objTag != objectTag) {
+ objIsArr = isTypedArray(object);
+ }
+ }
+ if (!othIsArr) {
+ othTag = objToString.call(other);
+ if (othTag == argsTag) {
+ othTag = objectTag;
+ } else if (othTag != objectTag) {
+ othIsArr = isTypedArray(other);
+ }
+ }
+ var objIsObj = objTag == objectTag,
+ othIsObj = othTag == objectTag,
+ isSameTag = objTag == othTag;
+
+ if (isSameTag && !(objIsArr || objIsObj)) {
+ return equalByTag(object, other, objTag);
+ }
+ if (!isLoose) {
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+
+ if (objIsWrapped || othIsWrapped) {
+ return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
+ }
+ }
+ if (!isSameTag) {
+ return false;
+ }
+ // Assume cyclic values are equal.
+ // For more information on detecting circular references see https://es5.github.io/#JO.
+ stackA || (stackA = []);
+ stackB || (stackB = []);
+
+ var length = stackA.length;
+ while (length--) {
+ if (stackA[length] == object) {
+ return stackB[length] == other;
+ }
+ }
+ // Add `object` and `other` to the stack of traversed objects.
+ stackA.push(object);
+ stackB.push(other);
+
+ var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
+
+ stackA.pop();
+ stackB.pop();
+
+ return result;
+ }
+
+ module.exports = baseIsEqualDeep;
+
+
+/***/ },
+/* 135 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var arraySome = __webpack_require__(136);
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Array} array The array to compare.
+ * @param {Array} other The other array to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparing arrays.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA] Tracks traversed `value` objects.
+ * @param {Array} [stackB] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+ */
+ function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
+ var index = -1,
+ arrLength = array.length,
+ othLength = other.length;
+
+ if (arrLength != othLength && !(isLoose && othLength > arrLength)) {
+ return false;
+ }
+ // Ignore non-index properties.
+ while (++index < arrLength) {
+ var arrValue = array[index],
+ othValue = other[index],
+ result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;
+
+ if (result !== undefined) {
+ if (result) {
+ continue;
+ }
+ return false;
+ }
+ // Recursively compare arrays (susceptible to call stack limits).
+ if (isLoose) {
+ if (!arraySome(other, function(othValue) {
+ return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
+ })) {
+ return false;
+ }
+ } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ module.exports = equalArrays;
+
+
+/***/ },
+/* 136 */
+/***/ function(module, exports) {
+
+ /**
+ * A specialized version of `_.some` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */
+ function arraySome(array, predicate) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ if (predicate(array[index], index, array)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ module.exports = arraySome;
+
+
+/***/ },
+/* 137 */
+/***/ function(module, exports) {
+
+ /** `Object#toString` result references. */
+ var boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ numberTag = '[object Number]',
+ regexpTag = '[object RegExp]',
+ stringTag = '[object String]';
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
+ * the same `toStringTag`.
+ *
+ * **Note:** This function only supports comparing values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {string} tag The `toStringTag` of the objects to compare.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function equalByTag(object, other, tag) {
+ switch (tag) {
+ case boolTag:
+ case dateTag:
+ // Coerce dates and booleans to numbers, dates to milliseconds and booleans
+ // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.
+ return +object == +other;
+
+ case errorTag:
+ return object.name == other.name && object.message == other.message;
+
+ case numberTag:
+ // Treat `NaN` vs. `NaN` as equal.
+ return (object != +object)
+ ? other != +other
+ : object == +other;
+
+ case regexpTag:
+ case stringTag:
+ // Coerce regexes to strings and treat strings primitives and string
+ // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.
+ return object == (other + '');
+ }
+ return false;
+ }
+
+ module.exports = equalByTag;
+
+
+/***/ },
+/* 138 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var keys = __webpack_require__(114);
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for objects with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparing values.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA] Tracks traversed `value` objects.
+ * @param {Array} [stackB] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
+ var objProps = keys(object),
+ objLength = objProps.length,
+ othProps = keys(other),
+ othLength = othProps.length;
+
+ if (objLength != othLength && !isLoose) {
+ return false;
+ }
+ var index = objLength;
+ while (index--) {
+ var key = objProps[index];
+ if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {
+ return false;
+ }
+ }
+ var skipCtor = isLoose;
+ while (++index < objLength) {
+ key = objProps[index];
+ var objValue = object[key],
+ othValue = other[key],
+ result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;
+
+ // Recursively compare objects (susceptible to call stack limits).
+ if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {
+ return false;
+ }
+ skipCtor || (skipCtor = key == 'constructor');
+ }
+ if (!skipCtor) {
+ var objCtor = object.constructor,
+ othCtor = other.constructor;
+
+ // Non `Object` object instances with different constructors are not equal.
+ if (objCtor != othCtor &&
+ ('constructor' in object && 'constructor' in other) &&
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ module.exports = equalObjects;
+
+
+/***/ },
+/* 139 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isLength = __webpack_require__(122),
+ isObjectLike = __webpack_require__(118);
+
+ /** `Object#toString` result references. */
+ var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ objectTag = '[object Object]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ weakMapTag = '[object WeakMap]';
+
+ var arrayBufferTag = '[object ArrayBuffer]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+
+ /** Used to identify `toStringTag` values of typed arrays. */
+ var typedArrayTags = {};
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
+ typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
+ typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
+ typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
+ typedArrayTags[uint32Tag] = true;
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
+ typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
+ typedArrayTags[dateTag] = typedArrayTags[errorTag] =
+ typedArrayTags[funcTag] = typedArrayTags[mapTag] =
+ typedArrayTags[numberTag] = typedArrayTags[objectTag] =
+ typedArrayTags[regexpTag] = typedArrayTags[setTag] =
+ typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
+
+ /** Used for native method references. */
+ var objectProto = Object.prototype;
+
+ /**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objToString = objectProto.toString;
+
+ /**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */
+ function isTypedArray(value) {
+ return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
+ }
+
+ module.exports = isTypedArray;
+
+
+/***/ },
+/* 140 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isStrictComparable = __webpack_require__(141),
+ pairs = __webpack_require__(142);
+
+ /**
+ * Gets the propery names, values, and compare flags of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the match data of `object`.
+ */
+ function getMatchData(object) {
+ var result = pairs(object),
+ length = result.length;
+
+ while (length--) {
+ result[length][2] = isStrictComparable(result[length][1]);
+ }
+ return result;
+ }
+
+ module.exports = getMatchData;
+
+
+/***/ },
+/* 141 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(113);
+
+ /**
+ * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` if suitable for strict
+ * equality comparisons, else `false`.
+ */
+ function isStrictComparable(value) {
+ return value === value && !isObject(value);
+ }
+
+ module.exports = isStrictComparable;
+
+
+/***/ },
+/* 142 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var keys = __webpack_require__(114),
+ toObject = __webpack_require__(112);
+
+ /**
+ * Creates a two dimensional array of the key-value pairs for `object`,
+ * e.g. `[[key1, value1], [key2, value2]]`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the new array of key-value pairs.
+ * @example
+ *
+ * _.pairs({ 'barney': 36, 'fred': 40 });
+ * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)
+ */
+ function pairs(object) {
+ object = toObject(object);
+
+ var index = -1,
+ props = keys(object),
+ length = props.length,
+ result = Array(length);
+
+ while (++index < length) {
+ var key = props[index];
+ result[index] = [key, object[key]];
+ }
+ return result;
+ }
+
+ module.exports = pairs;
+
+
+/***/ },
+/* 143 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseGet = __webpack_require__(144),
+ baseIsEqual = __webpack_require__(133),
+ baseSlice = __webpack_require__(145),
+ isArray = __webpack_require__(125),
+ isKey = __webpack_require__(146),
+ isStrictComparable = __webpack_require__(141),
+ last = __webpack_require__(147),
+ toObject = __webpack_require__(112),
+ toPath = __webpack_require__(148);
+
+ /**
+ * The base implementation of `_.matchesProperty` which does not clone `srcValue`.
+ *
+ * @private
+ * @param {string} path The path of the property to get.
+ * @param {*} srcValue The value to compare.
+ * @returns {Function} Returns the new function.
+ */
+ function baseMatchesProperty(path, srcValue) {
+ var isArr = isArray(path),
+ isCommon = isKey(path) && isStrictComparable(srcValue),
+ pathKey = (path + '');
+
+ path = toPath(path);
+ return function(object) {
+ if (object == null) {
+ return false;
+ }
+ var key = pathKey;
+ object = toObject(object);
+ if ((isArr || !isCommon) && !(key in object)) {
+ object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
+ if (object == null) {
+ return false;
+ }
+ key = last(path);
+ object = toObject(object);
+ }
+ return object[key] === srcValue
+ ? (srcValue !== undefined || (key in object))
+ : baseIsEqual(srcValue, object[key], undefined, true);
+ };
+ }
+
+ module.exports = baseMatchesProperty;
+
+
+/***/ },
+/* 144 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var toObject = __webpack_require__(112);
+
+ /**
+ * The base implementation of `get` without support for string paths
+ * and default values.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} path The path of the property to get.
+ * @param {string} [pathKey] The key representation of path.
+ * @returns {*} Returns the resolved value.
+ */
+ function baseGet(object, path, pathKey) {
+ if (object == null) {
+ return;
+ }
+ if (pathKey !== undefined && pathKey in toObject(object)) {
+ path = [pathKey];
+ }
+ var index = 0,
+ length = path.length;
+
+ while (object != null && index < length) {
+ object = object[path[index++]];
+ }
+ return (index && index == length) ? object : undefined;
+ }
+
+ module.exports = baseGet;
+
+
+/***/ },
+/* 145 */
+/***/ function(module, exports) {
+
+ /**
+ * The base implementation of `_.slice` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */
+ function baseSlice(array, start, end) {
+ var index = -1,
+ length = array.length;
+
+ start = start == null ? 0 : (+start || 0);
+ if (start < 0) {
+ start = -start > length ? 0 : (length + start);
+ }
+ end = (end === undefined || end > length) ? length : (+end || 0);
+ if (end < 0) {
+ end += length;
+ }
+ length = start > end ? 0 : ((end - start) >>> 0);
+ start >>>= 0;
+
+ var result = Array(length);
+ while (++index < length) {
+ result[index] = array[index + start];
+ }
+ return result;
+ }
+
+ module.exports = baseSlice;
+
+
+/***/ },
+/* 146 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArray = __webpack_require__(125),
+ toObject = __webpack_require__(112);
+
+ /** Used to match property names within property paths. */
+ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,
+ reIsPlainProp = /^\w*$/;
+
+ /**
+ * Checks if `value` is a property name and not a property path.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+ */
+ function isKey(value, object) {
+ var type = typeof value;
+ if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {
+ return true;
+ }
+ if (isArray(value)) {
+ return false;
+ }
+ var result = !reIsDeepProp.test(value);
+ return result || (object != null && value in toObject(object));
+ }
+
+ module.exports = isKey;
+
+
+/***/ },
+/* 147 */
+/***/ function(module, exports) {
+
+ /**
+ * Gets the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the last element of `array`.
+ * @example
+ *
+ * _.last([1, 2, 3]);
+ * // => 3
+ */
+ function last(array) {
+ var length = array ? array.length : 0;
+ return length ? array[length - 1] : undefined;
+ }
+
+ module.exports = last;
+
+
+/***/ },
+/* 148 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseToString = __webpack_require__(149),
+ isArray = __webpack_require__(125);
+
+ /** Used to match property names within property paths. */
+ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g;
+
+ /** Used to match backslashes in property paths. */
+ var reEscapeChar = /\\(\\)?/g;
+
+ /**
+ * Converts `value` to property path array if it's not one.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {Array} Returns the property path array.
+ */
+ function toPath(value) {
+ if (isArray(value)) {
+ return value;
+ }
+ var result = [];
+ baseToString(value).replace(rePropName, function(match, number, quote, string) {
+ result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
+ });
+ return result;
+ }
+
+ module.exports = toPath;
+
+
+/***/ },
+/* 149 */
+/***/ function(module, exports) {
+
+ /**
+ * Converts `value` to a string if it's not one. An empty string is returned
+ * for `null` or `undefined` values.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+ function baseToString(value) {
+ return value == null ? '' : (value + '');
+ }
+
+ module.exports = baseToString;
+
+
+/***/ },
+/* 150 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var identity = __webpack_require__(151);
+
+ /**
+ * A specialized version of `baseCallback` which only supports `this` binding
+ * and specifying the number of arguments to provide to `func`.
+ *
+ * @private
+ * @param {Function} func The function to bind.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {number} [argCount] The number of arguments to provide to `func`.
+ * @returns {Function} Returns the callback.
+ */
+ function bindCallback(func, thisArg, argCount) {
+ if (typeof func != 'function') {
+ return identity;
+ }
+ if (thisArg === undefined) {
+ return func;
+ }
+ switch (argCount) {
+ case 1: return function(value) {
+ return func.call(thisArg, value);
+ };
+ case 3: return function(value, index, collection) {
+ return func.call(thisArg, value, index, collection);
+ };
+ case 4: return function(accumulator, value, index, collection) {
+ return func.call(thisArg, accumulator, value, index, collection);
+ };
+ case 5: return function(value, other, key, object, source) {
+ return func.call(thisArg, value, other, key, object, source);
+ };
+ }
+ return function() {
+ return func.apply(thisArg, arguments);
+ };
+ }
+
+ module.exports = bindCallback;
+
+
+/***/ },
+/* 151 */
+/***/ function(module, exports) {
+
+ /**
+ * This method returns the first argument provided to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.identity(object) === object;
+ * // => true
+ */
+ function identity(value) {
+ return value;
+ }
+
+ module.exports = identity;
+
+
+/***/ },
+/* 152 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseProperty = __webpack_require__(121),
+ basePropertyDeep = __webpack_require__(153),
+ isKey = __webpack_require__(146);
+
+ /**
+ * Creates a function that returns the property value at `path` on a
+ * given object.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var objects = [
+ * { 'a': { 'b': { 'c': 2 } } },
+ * { 'a': { 'b': { 'c': 1 } } }
+ * ];
+ *
+ * _.map(objects, _.property('a.b.c'));
+ * // => [2, 1]
+ *
+ * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');
+ * // => [1, 2]
+ */
+ function property(path) {
+ return isKey(path) ? baseProperty(path) : basePropertyDeep(path);
+ }
+
+ module.exports = property;
+
+
+/***/ },
+/* 153 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseGet = __webpack_require__(144),
+ toPath = __webpack_require__(148);
+
+ /**
+ * A specialized version of `baseProperty` which supports deep paths.
+ *
+ * @private
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+ function basePropertyDeep(path) {
+ var pathKey = (path + '');
+ path = toPath(path);
+ return function(object) {
+ return baseGet(object, path, pathKey);
+ };
+ }
+
+ module.exports = basePropertyDeep;
+
+
+/***/ },
+/* 154 */
+/***/ function(module, exports) {
+
+ /**
+ * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`,
+ * without support for callback shorthands and `this` binding, which iterates
+ * over `collection` using the provided `eachFunc`.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {Function} eachFunc The function to iterate over `collection`.
+ * @param {boolean} [retKey] Specify returning the key of the found element
+ * instead of the element itself.
+ * @returns {*} Returns the found element or its key, else `undefined`.
+ */
+ function baseFind(collection, predicate, eachFunc, retKey) {
+ var result;
+ eachFunc(collection, function(value, key, collection) {
+ if (predicate(value, key, collection)) {
+ result = retKey ? key : value;
+ return false;
+ }
+ });
+ return result;
+ }
+
+ module.exports = baseFind;
+
+
+/***/ },
+/* 155 */
+/***/ function(module, exports) {
+
+ /**
+ * The base implementation of `_.findIndex` and `_.findLastIndex` without
+ * support for callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function baseFindIndex(array, predicate, fromRight) {
+ var length = array.length,
+ index = fromRight ? length : -1;
+
+ while ((fromRight ? index-- : ++index < length)) {
+ if (predicate(array[index], index, array)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ module.exports = baseFindIndex;
+
+
+/***/ },
+/* 156 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var arrayMap = __webpack_require__(157),
+ baseDifference = __webpack_require__(158),
+ baseFlatten = __webpack_require__(165),
+ bindCallback = __webpack_require__(150),
+ keysIn = __webpack_require__(127),
+ pickByArray = __webpack_require__(167),
+ pickByCallback = __webpack_require__(168),
+ restParam = __webpack_require__(170);
+
+ /**
+ * The opposite of `_.pick`; this method creates an object composed of the
+ * own and inherited enumerable properties of `object` that are not omitted.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {Function|...(string|string[])} [predicate] The function invoked per
+ * iteration or property names to omit, specified as individual property
+ * names or arrays of property names.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'user': 'fred', 'age': 40 };
+ *
+ * _.omit(object, 'age');
+ * // => { 'user': 'fred' }
+ *
+ * _.omit(object, _.isNumber);
+ * // => { 'user': 'fred' }
+ */
+ var omit = restParam(function(object, props) {
+ if (object == null) {
+ return {};
+ }
+ if (typeof props[0] != 'function') {
+ var props = arrayMap(baseFlatten(props), String);
+ return pickByArray(object, baseDifference(keysIn(object), props));
+ }
+ var predicate = bindCallback(props[0], props[1], 3);
+ return pickByCallback(object, function(value, key, object) {
+ return !predicate(value, key, object);
+ });
+ });
+
+ module.exports = omit;
+
+
+/***/ },
+/* 157 */
+/***/ function(module, exports) {
+
+ /**
+ * A specialized version of `_.map` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+ function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+ return result;
+ }
+
+ module.exports = arrayMap;
+
+
+/***/ },
+/* 158 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseIndexOf = __webpack_require__(159),
+ cacheIndexOf = __webpack_require__(161),
+ createCache = __webpack_require__(162);
+
+ /** Used as the size to enable large array optimizations. */
+ var LARGE_ARRAY_SIZE = 200;
+
+ /**
+ * The base implementation of `_.difference` which accepts a single array
+ * of values to exclude.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Array} values The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ */
+ function baseDifference(array, values) {
+ var length = array ? array.length : 0,
+ result = [];
+
+ if (!length) {
+ return result;
+ }
+ var index = -1,
+ indexOf = baseIndexOf,
+ isCommon = true,
+ cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,
+ valuesLength = values.length;
+
+ if (cache) {
+ indexOf = cacheIndexOf;
+ isCommon = false;
+ values = cache;
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index];
+
+ if (isCommon && value === value) {
+ var valuesIndex = valuesLength;
+ while (valuesIndex--) {
+ if (values[valuesIndex] === value) {
+ continue outer;
+ }
+ }
+ result.push(value);
+ }
+ else if (indexOf(values, value, 0) < 0) {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ module.exports = baseDifference;
+
+
+/***/ },
+/* 159 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var indexOfNaN = __webpack_require__(160);
+
+ /**
+ * The base implementation of `_.indexOf` without support for binary searches.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function baseIndexOf(array, value, fromIndex) {
+ if (value !== value) {
+ return indexOfNaN(array, fromIndex);
+ }
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ module.exports = baseIndexOf;
+
+
+/***/ },
+/* 160 */
+/***/ function(module, exports) {
+
+ /**
+ * Gets the index at which the first occurrence of `NaN` is found in `array`.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {number} fromIndex The index to search from.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched `NaN`, else `-1`.
+ */
+ function indexOfNaN(array, fromIndex, fromRight) {
+ var length = array.length,
+ index = fromIndex + (fromRight ? 0 : -1);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ var other = array[index];
+ if (other !== other) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ module.exports = indexOfNaN;
+
+
+/***/ },
+/* 161 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(113);
+
+ /**
+ * Checks if `value` is in `cache` mimicking the return signature of
+ * `_.indexOf` by returning `0` if the value is found, else `-1`.
+ *
+ * @private
+ * @param {Object} cache The cache to search.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `0` if `value` is found, else `-1`.
+ */
+ function cacheIndexOf(cache, value) {
+ var data = cache.data,
+ result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];
+
+ return result ? 0 : -1;
+ }
+
+ module.exports = cacheIndexOf;
+
+
+/***/ },
+/* 162 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(global) {var SetCache = __webpack_require__(163),
+ getNative = __webpack_require__(115);
+
+ /** Native method references. */
+ var Set = getNative(global, 'Set');
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeCreate = getNative(Object, 'create');
+
+ /**
+ * Creates a `Set` cache object to optimize linear searches of large arrays.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.
+ */
+ function createCache(values) {
+ return (nativeCreate && Set) ? new SetCache(values) : null;
+ }
+
+ module.exports = createCache;
+
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 163 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(global) {var cachePush = __webpack_require__(164),
+ getNative = __webpack_require__(115);
+
+ /** Native method references. */
+ var Set = getNative(global, 'Set');
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeCreate = getNative(Object, 'create');
+
+ /**
+ *
+ * Creates a cache object to store unique values.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+ function SetCache(values) {
+ var length = values ? values.length : 0;
+
+ this.data = { 'hash': nativeCreate(null), 'set': new Set };
+ while (length--) {
+ this.push(values[length]);
+ }
+ }
+
+ // Add functions to the `Set` cache.
+ SetCache.prototype.push = cachePush;
+
+ module.exports = SetCache;
+
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 164 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(113);
+
+ /**
+ * Adds `value` to the cache.
+ *
+ * @private
+ * @name push
+ * @memberOf SetCache
+ * @param {*} value The value to cache.
+ */
+ function cachePush(value) {
+ var data = this.data;
+ if (typeof value == 'string' || isObject(value)) {
+ data.set.add(value);
+ } else {
+ data.hash[value] = true;
+ }
+ }
+
+ module.exports = cachePush;
+
+
+/***/ },
+/* 165 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var arrayPush = __webpack_require__(166),
+ isArguments = __webpack_require__(124),
+ isArray = __webpack_require__(125),
+ isArrayLike = __webpack_require__(119),
+ isObjectLike = __webpack_require__(118);
+
+ /**
+ * The base implementation of `_.flatten` with added support for restricting
+ * flattening and specifying the start index.
+ *
+ * @private
+ * @param {Array} array The array to flatten.
+ * @param {boolean} [isDeep] Specify a deep flatten.
+ * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.
+ * @param {Array} [result=[]] The initial result value.
+ * @returns {Array} Returns the new flattened array.
+ */
+ function baseFlatten(array, isDeep, isStrict, result) {
+ result || (result = []);
+
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ var value = array[index];
+ if (isObjectLike(value) && isArrayLike(value) &&
+ (isStrict || isArray(value) || isArguments(value))) {
+ if (isDeep) {
+ // Recursively flatten arrays (susceptible to call stack limits).
+ baseFlatten(value, isDeep, isStrict, result);
+ } else {
+ arrayPush(result, value);
+ }
+ } else if (!isStrict) {
+ result[result.length] = value;
+ }
+ }
+ return result;
+ }
+
+ module.exports = baseFlatten;
+
+
+/***/ },
+/* 166 */
+/***/ function(module, exports) {
+
+ /**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayPush(array, values) {
+ var index = -1,
+ length = values.length,
+ offset = array.length;
+
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+ }
+
+ module.exports = arrayPush;
+
+
+/***/ },
+/* 167 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var toObject = __webpack_require__(112);
+
+ /**
+ * A specialized version of `_.pick` which picks `object` properties specified
+ * by `props`.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {string[]} props The property names to pick.
+ * @returns {Object} Returns the new object.
+ */
+ function pickByArray(object, props) {
+ object = toObject(object);
+
+ var index = -1,
+ length = props.length,
+ result = {};
+
+ while (++index < length) {
+ var key = props[index];
+ if (key in object) {
+ result[key] = object[key];
+ }
+ }
+ return result;
+ }
+
+ module.exports = pickByArray;
+
+
+/***/ },
+/* 168 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseForIn = __webpack_require__(169);
+
+ /**
+ * A specialized version of `_.pick` which picks `object` properties `predicate`
+ * returns truthy for.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Object} Returns the new object.
+ */
+ function pickByCallback(object, predicate) {
+ var result = {};
+ baseForIn(object, function(value, key, object) {
+ if (predicate(value, key, object)) {
+ result[key] = value;
+ }
+ });
+ return result;
+ }
+
+ module.exports = pickByCallback;
+
+
+/***/ },
+/* 169 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseFor = __webpack_require__(110),
+ keysIn = __webpack_require__(127);
+
+ /**
+ * The base implementation of `_.forIn` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+ function baseForIn(object, iteratee) {
+ return baseFor(object, iteratee, keysIn);
+ }
+
+ module.exports = baseForIn;
+
+
+/***/ },
+/* 170 */
+/***/ function(module, exports) {
+
+ /** Used as the `TypeError` message for "Functions" methods. */
+ var FUNC_ERROR_TEXT = 'Expected a function';
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeMax = Math.max;
+
+ /**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as an array.
+ *
+ * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.restParam(function(what, names) {
+ * return what + ' ' + _.initial(names).join(', ') +
+ * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */
+ function restParam(func, start) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);
+ return function() {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ rest = Array(length);
+
+ while (++index < length) {
+ rest[index] = args[start + index];
+ }
+ switch (start) {
+ case 0: return func.call(this, rest);
+ case 1: return func.call(this, args[0], rest);
+ case 2: return func.call(this, args[0], args[1], rest);
+ }
+ var otherArgs = Array(start + 1);
+ index = -1;
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = rest;
+ return func.apply(this, otherArgs);
+ };
+ }
+
+ module.exports = restParam;
+
+
+/***/ },
+/* 171 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _Dropdown = __webpack_require__(93);
+
+ var _Dropdown2 = _interopRequireDefault(_Dropdown);
+
+ var _NavDropdown = __webpack_require__(172);
+
+ var _NavDropdown2 = _interopRequireDefault(_NavDropdown);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ var _lodashObjectOmit = __webpack_require__(156);
+
+ var _lodashObjectOmit2 = _interopRequireDefault(_lodashObjectOmit);
+
+ var DropdownButton = (function (_React$Component) {
+ _inherits(DropdownButton, _React$Component);
+
+ function DropdownButton(props) {
+ _classCallCheck(this, DropdownButton);
+
+ _React$Component.call(this, props);
+ }
+
+ DropdownButton.prototype.render = function render() {
+ var _props = this.props;
+ var title = _props.title;
+ var navItem = _props.navItem;
+
+ var props = _objectWithoutProperties(_props, ['title', 'navItem']);
+
+ var toggleProps = _lodashObjectOmit2['default'](props, _Dropdown2['default'].ControlledComponent.propTypes);
+
+ if (navItem) {
+ return _react2['default'].createElement(_NavDropdown2['default'], this.props);
+ }
+
+ return _react2['default'].createElement(
+ _Dropdown2['default'],
+ props,
+ _react2['default'].createElement(
+ _Dropdown2['default'].Toggle,
+ toggleProps,
+ title
+ ),
+ _react2['default'].createElement(
+ _Dropdown2['default'].Menu,
+ null,
+ this.props.children
+ )
+ );
+ };
+
+ return DropdownButton;
+ })(_react2['default'].Component);
+
+ DropdownButton.propTypes = _extends({
+ /**
+ * When used with the `title` prop, the noCaret option will not render a caret icon, in the toggle element.
+ */
+ noCaret: _react2['default'].PropTypes.bool,
+
+ /**
+ * Specify whether this Dropdown is part of a Nav component
+ *
+ * @type {bool}
+ * @deprecated Use the `NavDropdown` instead.
+ */
+ navItem: _utilsCustomPropTypes2['default'].all([_react2['default'].PropTypes.bool, function (props, propName, componentName) {
+ if (props.navItem) {
+ _utilsDeprecationWarning2['default']('navItem', 'NavDropdown component', 'https://github.com/react-bootstrap/react-bootstrap/issues/526');
+ }
+ }]),
+ title: _react2['default'].PropTypes.node.isRequired
+ }, _Dropdown2['default'].propTypes, _BootstrapMixin2['default'].propTypes);
+
+ DropdownButton.defaultProps = {
+ pullRight: false,
+ dropup: false,
+ navItem: false,
+ noCaret: false
+ };
+
+ exports['default'] = DropdownButton;
+ module.exports = exports['default'];
+
+/***/ },
+/* 172 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _Dropdown = __webpack_require__(93);
+
+ var _Dropdown2 = _interopRequireDefault(_Dropdown);
+
+ var NavDropdown = (function (_React$Component) {
+ _inherits(NavDropdown, _React$Component);
+
+ function NavDropdown() {
+ _classCallCheck(this, NavDropdown);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ NavDropdown.prototype.render = function render() {
+ var _props = this.props;
+ var children = _props.children;
+ var title = _props.title;
+ var noCaret = _props.noCaret;
+
+ var props = _objectWithoutProperties(_props, ['children', 'title', 'noCaret']);
+
+ return _react2['default'].createElement(
+ _Dropdown2['default'],
+ _extends({}, props, { componentClass: 'li' }),
+ _react2['default'].createElement(
+ _Dropdown2['default'].Toggle,
+ {
+ useAnchor: true,
+ disabled: props.disabled,
+ noCaret: noCaret
+ },
+ title
+ ),
+ _react2['default'].createElement(
+ _Dropdown2['default'].Menu,
+ null,
+ children
+ )
+ );
+ };
+
+ return NavDropdown;
+ })(_react2['default'].Component);
+
+ NavDropdown.propTypes = _extends({
+ noCaret: _react2['default'].PropTypes.bool,
+ title: _react2['default'].PropTypes.node.isRequired
+ }, _Dropdown2['default'].propTypes);
+
+ exports['default'] = NavDropdown;
+ module.exports = exports['default'];
+
+/***/ },
+/* 173 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _Button = __webpack_require__(76);
+
+ var _Button2 = _interopRequireDefault(_Button);
+
+ var _Dropdown = __webpack_require__(93);
+
+ var _Dropdown2 = _interopRequireDefault(_Dropdown);
+
+ var _SplitToggle = __webpack_require__(174);
+
+ var _SplitToggle2 = _interopRequireDefault(_SplitToggle);
+
+ var SplitButton = (function (_React$Component) {
+ _inherits(SplitButton, _React$Component);
+
+ function SplitButton() {
+ _classCallCheck(this, SplitButton);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ SplitButton.prototype.render = function render() {
+ var _props = this.props;
+ var children = _props.children;
+ var title = _props.title;
+ var onClick = _props.onClick;
+ var target = _props.target;
+ var href = _props.href;
+ var
+ // bsStyle is validated by 'Button' component
+ bsStyle = _props.bsStyle;
+
+ var props = _objectWithoutProperties(_props, ['children', 'title', 'onClick', 'target', 'href', 'bsStyle']);
+
+ var disabled = props.disabled;
+
+ var button = _react2['default'].createElement(
+ _Button2['default'],
+ {
+ onClick: onClick,
+ bsStyle: bsStyle,
+ disabled: disabled,
+ target: target,
+ href: href
+ },
+ title
+ );
+
+ return _react2['default'].createElement(
+ _Dropdown2['default'],
+ props,
+ button,
+ _react2['default'].createElement(_SplitToggle2['default'], {
+ 'aria-label': title,
+ bsStyle: bsStyle,
+ disabled: disabled
+ }),
+ _react2['default'].createElement(
+ _Dropdown2['default'].Menu,
+ null,
+ children
+ )
+ );
+ };
+
+ return SplitButton;
+ })(_react2['default'].Component);
+
+ SplitButton.propTypes = _extends({}, _Dropdown2['default'].propTypes, _BootstrapMixin2['default'].propTypes, {
+
+ /**
+ * @private
+ */
+ onClick: function onClick() {},
+ target: _react2['default'].PropTypes.string,
+ href: _react2['default'].PropTypes.string,
+ /**
+ * The content of the split button.
+ */
+ title: _react2['default'].PropTypes.node.isRequired
+ });
+
+ SplitButton.defaultProps = {
+ disabled: false,
+ dropup: false,
+ pullRight: false
+ };
+
+ SplitButton.Toggle = _SplitToggle2['default'];
+
+ exports['default'] = SplitButton;
+ module.exports = exports['default'];
+ // eslint-disable-line
+
+ //dropup: React.PropTypes.bool,
+
+/***/ },
+/* 174 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _DropdownToggle = __webpack_require__(99);
+
+ var _DropdownToggle2 = _interopRequireDefault(_DropdownToggle);
+
+ var SplitToggle = (function (_React$Component) {
+ _inherits(SplitToggle, _React$Component);
+
+ function SplitToggle() {
+ _classCallCheck(this, SplitToggle);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ SplitToggle.prototype.render = function render() {
+ return _react2['default'].createElement(_DropdownToggle2['default'], _extends({}, this.props, {
+ useAnchor: false,
+ noCaret: false
+ }));
+ };
+
+ return SplitToggle;
+ })(_react2['default'].Component);
+
+ exports['default'] = SplitToggle;
+
+ SplitToggle.defaultProps = _DropdownToggle2['default'].defaultProps;
+ module.exports = exports['default'];
+
+/***/ },
+/* 175 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _utilsDomUtils = __webpack_require__(31);
+
+ var _utilsDomUtils2 = _interopRequireDefault(_utilsDomUtils);
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ // TODO: listen for onTransitionEnd to remove el
+ function getElementsAndSelf(root, classes) {
+ var els = root.querySelectorAll('.' + classes.join('.'));
+
+ els = [].map.call(els, function (e) {
+ return e;
+ });
+
+ for (var i = 0; i < classes.length; i++) {
+ if (!root.className.match(new RegExp('\\b' + classes[i] + '\\b'))) {
+ return els;
+ }
+ }
+ els.unshift(root);
+ return els;
+ }
+
+ exports['default'] = {
+ componentWillMount: function componentWillMount() {
+ _utilsDeprecationWarning2['default']('FadeMixin', 'Fade Component');
+ },
+
+ _fadeIn: function _fadeIn() {
+ var els = undefined;
+
+ if (this.isMounted()) {
+ els = getElementsAndSelf(_react2['default'].findDOMNode(this), ['fade']);
+
+ if (els.length) {
+ els.forEach(function (el) {
+ el.className += ' in';
+ });
+ }
+ }
+ },
+
+ _fadeOut: function _fadeOut() {
+ var els = getElementsAndSelf(this._fadeOutEl, ['fade', 'in']);
+
+ if (els.length) {
+ els.forEach(function (el) {
+ el.className = el.className.replace(/\bin\b/, '');
+ });
+ }
+
+ setTimeout(this._handleFadeOutEnd, 300);
+ },
+
+ _handleFadeOutEnd: function _handleFadeOutEnd() {
+ if (this._fadeOutEl && this._fadeOutEl.parentNode) {
+ this._fadeOutEl.parentNode.removeChild(this._fadeOutEl);
+ }
+ },
+
+ componentDidMount: function componentDidMount() {
+ if (document.querySelectorAll) {
+ // Firefox needs delay for transition to be triggered
+ setTimeout(this._fadeIn, 20);
+ }
+ },
+
+ componentWillUnmount: function componentWillUnmount() {
+ var els = getElementsAndSelf(_react2['default'].findDOMNode(this), ['fade']);
+ var container = this.props.container && _react2['default'].findDOMNode(this.props.container) || _utilsDomUtils2['default'].ownerDocument(this).body;
+
+ if (els.length) {
+ this._fadeOutEl = document.createElement('div');
+ container.appendChild(this._fadeOutEl);
+ this._fadeOutEl.appendChild(_react2['default'].findDOMNode(this).cloneNode(true));
+ // Firefox needs delay for transition to be triggered
+ setTimeout(this._fadeOut, 20);
+ }
+ }
+ };
+ module.exports = exports['default'];
+
+/***/ },
+/* 176 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var Grid = _react2['default'].createClass({
+ displayName: 'Grid',
+
+ propTypes: {
+ /**
+ * Turn any fixed-width grid layout into a full-width layout by this property.
+ *
+ * Adds `container-fluid` class.
+ */
+ fluid: _react2['default'].PropTypes.bool,
+ /**
+ * You can use a custom element for this component
+ */
+ componentClass: _utilsCustomPropTypes2['default'].elementType
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ componentClass: 'div',
+ fluid: false
+ };
+ },
+
+ render: function render() {
+ var ComponentClass = this.props.componentClass;
+ var className = this.props.fluid ? 'container-fluid' : 'container';
+
+ return _react2['default'].createElement(
+ ComponentClass,
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, className) }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Grid;
+ module.exports = exports['default'];
+
+/***/ },
+/* 177 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ var _interopRequireWildcard = __webpack_require__(15)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _InputBase2 = __webpack_require__(79);
+
+ var _InputBase3 = _interopRequireDefault(_InputBase2);
+
+ var _FormControls = __webpack_require__(178);
+
+ var FormControls = _interopRequireWildcard(_FormControls);
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ var Input = (function (_InputBase) {
+ _inherits(Input, _InputBase);
+
+ function Input() {
+ _classCallCheck(this, Input);
+
+ _InputBase.apply(this, arguments);
+ }
+
+ Input.prototype.render = function render() {
+ if (this.props.type === 'static') {
+ _utilsDeprecationWarning2['default']('Input type=static', 'StaticText');
+ return _react2['default'].createElement(FormControls.Static, this.props);
+ }
+
+ return _InputBase.prototype.render.call(this);
+ };
+
+ return Input;
+ })(_InputBase3['default']);
+
+ Input.propTypes = {
+ type: _react2['default'].PropTypes.string
+ };
+
+ exports['default'] = Input;
+ module.exports = exports['default'];
+
+/***/ },
+/* 178 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _Static2 = __webpack_require__(179);
+
+ var _Static3 = _interopRequireDefault(_Static2);
+
+ exports.Static = _Static3['default'];
+
+/***/ },
+/* 179 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _InputBase2 = __webpack_require__(79);
+
+ var _InputBase3 = _interopRequireDefault(_InputBase2);
+
+ var _utilsChildrenValueInputValidation = __webpack_require__(52);
+
+ var _utilsChildrenValueInputValidation2 = _interopRequireDefault(_utilsChildrenValueInputValidation);
+
+ var Static = (function (_InputBase) {
+ _inherits(Static, _InputBase);
+
+ function Static() {
+ _classCallCheck(this, Static);
+
+ _InputBase.apply(this, arguments);
+ }
+
+ Static.prototype.getValue = function getValue() {
+ var _props = this.props;
+ var children = _props.children;
+ var value = _props.value;
+
+ return children ? children : value;
+ };
+
+ Static.prototype.renderInput = function renderInput() {
+ return _react2['default'].createElement(
+ 'p',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'form-control-static'), ref: 'input', key: 'input' }),
+ this.getValue()
+ );
+ };
+
+ return Static;
+ })(_InputBase3['default']);
+
+ Static.propTypes = {
+ value: _utilsChildrenValueInputValidation2['default'],
+ children: _utilsChildrenValueInputValidation2['default']
+ };
+
+ exports['default'] = Static;
+ module.exports = exports['default'];
+
+/***/ },
+/* 180 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // https://www.npmjs.org/package/react-interpolate-component
+ // TODO: Drop this in favor of es6 string interpolation
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var REGEXP = /\%\((.+?)\)s/;
+
+ var Interpolate = _react2['default'].createClass({
+ displayName: 'Interpolate',
+
+ propTypes: {
+ component: _react2['default'].PropTypes.node,
+ format: _react2['default'].PropTypes.string,
+ unsafe: _react2['default'].PropTypes.bool
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ component: 'span',
+ unsafe: false
+ };
+ },
+
+ render: function render() {
+ var format = _utilsValidComponentChildren2['default'].hasValidComponent(this.props.children) || typeof this.props.children === 'string' ? this.props.children : this.props.format;
+ var parent = this.props.component;
+ var unsafe = this.props.unsafe === true;
+ var props = _extends({}, this.props);
+
+ delete props.children;
+ delete props.format;
+ delete props.component;
+ delete props.unsafe;
+
+ if (unsafe) {
+ var content = format.split(REGEXP).reduce(function (memo, match, index) {
+ var html = undefined;
+
+ if (index % 2 === 0) {
+ html = match;
+ } else {
+ html = props[match];
+ delete props[match];
+ }
+
+ if (_react2['default'].isValidElement(html)) {
+ throw new Error('cannot interpolate a React component into unsafe text');
+ }
+
+ memo += html;
+
+ return memo;
+ }, '');
+
+ props.dangerouslySetInnerHTML = { __html: content };
+
+ return _react2['default'].createElement(parent, props);
+ } else {
+ var kids = format.split(REGEXP).reduce(function (memo, match, index) {
+ var child = undefined;
+
+ if (index % 2 === 0) {
+ if (match.length === 0) {
+ return memo;
+ }
+
+ child = match;
+ } else {
+ child = props[match];
+ delete props[match];
+ }
+
+ memo.push(child);
+
+ return memo;
+ }, []);
+
+ return _react2['default'].createElement(parent, props, kids);
+ }
+ }
+ });
+
+ exports['default'] = Interpolate;
+ module.exports = exports['default'];
+
+/***/ },
+/* 181 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var Jumbotron = _react2['default'].createClass({
+ displayName: 'Jumbotron',
+
+ propTypes: {
+ /**
+ * You can use a custom element for this component
+ */
+ componentClass: _utilsCustomPropTypes2['default'].elementType
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return { componentClass: 'div' };
+ },
+
+ render: function render() {
+ var ComponentClass = this.props.componentClass;
+
+ return _react2['default'].createElement(
+ ComponentClass,
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'jumbotron') }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Jumbotron;
+ module.exports = exports['default'];
+
+/***/ },
+/* 182 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var Label = _react2['default'].createClass({
+ displayName: 'Label',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'label',
+ bsStyle: 'default'
+ };
+ },
+
+ render: function render() {
+ var classes = this.getBsClassSet();
+
+ return _react2['default'].createElement(
+ 'span',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Label;
+ module.exports = exports['default'];
+
+/***/ },
+/* 183 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var ListGroup = (function (_React$Component) {
+ _inherits(ListGroup, _React$Component);
+
+ function ListGroup() {
+ _classCallCheck(this, ListGroup);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ ListGroup.prototype.render = function render() {
+ var _this = this;
+
+ var items = _utilsValidComponentChildren2['default'].map(this.props.children, function (item, index) {
+ return _react.cloneElement(item, { key: item.key ? item.key : index });
+ });
+
+ var shouldRenderDiv = false;
+
+ if (!this.props.children) {
+ shouldRenderDiv = true;
+ } else {
+ _react2['default'].Children.forEach(this.props.children, function (child) {
+ if (_this.isAnchorOrButton(child.props)) {
+ shouldRenderDiv = true;
+ }
+ });
+ }
+
+ if (shouldRenderDiv) {
+ return this.renderDiv(items);
+ } else {
+ return this.renderUL(items);
+ }
+ };
+
+ ListGroup.prototype.isAnchorOrButton = function isAnchorOrButton(props) {
+ return props.href || props.onClick;
+ };
+
+ ListGroup.prototype.renderUL = function renderUL(items) {
+ var listItems = _utilsValidComponentChildren2['default'].map(items, function (item, index) {
+ return _react.cloneElement(item, { listItem: true });
+ });
+
+ return _react2['default'].createElement(
+ 'ul',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, 'list-group') }),
+ listItems
+ );
+ };
+
+ ListGroup.prototype.renderDiv = function renderDiv(items) {
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, 'list-group') }),
+ items
+ );
+ };
+
+ return ListGroup;
+ })(_react2['default'].Component);
+
+ ListGroup.propTypes = {
+ className: _react2['default'].PropTypes.string,
+ id: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number])
+ };
+
+ exports['default'] = ListGroup;
+ module.exports = exports['default'];
+
+/***/ },
+/* 184 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var ListGroupItem = _react2['default'].createClass({
+ displayName: 'ListGroupItem',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ bsStyle: _react2['default'].PropTypes.oneOf(['danger', 'info', 'success', 'warning']),
+ className: _react2['default'].PropTypes.string,
+ active: _react2['default'].PropTypes.any,
+ disabled: _react2['default'].PropTypes.any,
+ header: _react2['default'].PropTypes.node,
+ listItem: _react2['default'].PropTypes.bool,
+ onClick: _react2['default'].PropTypes.func,
+ eventKey: _react2['default'].PropTypes.any,
+ href: _react2['default'].PropTypes.string,
+ target: _react2['default'].PropTypes.string
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'list-group-item',
+ listItem: false
+ };
+ },
+
+ render: function render() {
+ var classes = this.getBsClassSet();
+
+ classes.active = this.props.active;
+ classes.disabled = this.props.disabled;
+
+ if (this.props.href) {
+ return this.renderAnchor(classes);
+ } else if (this.props.onClick) {
+ return this.renderButton(classes);
+ } else if (this.props.listItem) {
+ return this.renderLi(classes);
+ } else {
+ return this.renderSpan(classes);
+ }
+ },
+
+ renderLi: function renderLi(classes) {
+ return _react2['default'].createElement(
+ 'li',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ this.props.header ? this.renderStructuredContent() : this.props.children
+ );
+ },
+
+ renderAnchor: function renderAnchor(classes) {
+ return _react2['default'].createElement(
+ 'a',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, classes)
+ }),
+ this.props.header ? this.renderStructuredContent() : this.props.children
+ );
+ },
+
+ renderButton: function renderButton(classes) {
+ return _react2['default'].createElement(
+ 'button',
+ _extends({
+ type: 'button'
+ }, this.props, {
+ className: _classnames2['default'](this.props.className, classes) }),
+ this.props.children
+ );
+ },
+
+ renderSpan: function renderSpan(classes) {
+ return _react2['default'].createElement(
+ 'span',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ this.props.header ? this.renderStructuredContent() : this.props.children
+ );
+ },
+
+ renderStructuredContent: function renderStructuredContent() {
+ var header = undefined;
+ if (_react2['default'].isValidElement(this.props.header)) {
+ header = _react.cloneElement(this.props.header, {
+ key: 'header',
+ className: _classnames2['default'](this.props.header.props.className, 'list-group-item-heading')
+ });
+ } else {
+ header = _react2['default'].createElement(
+ 'h4',
+ { key: 'header', className: 'list-group-item-heading' },
+ this.props.header
+ );
+ }
+
+ var content = _react2['default'].createElement(
+ 'p',
+ { key: 'content', className: 'list-group-item-text' },
+ this.props.children
+ );
+
+ return [header, content];
+ }
+ });
+
+ exports['default'] = ListGroupItem;
+ module.exports = exports['default'];
+
+/***/ },
+/* 185 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _SafeAnchor = __webpack_require__(100);
+
+ var _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);
+
+ var MenuItem = (function (_React$Component) {
+ _inherits(MenuItem, _React$Component);
+
+ function MenuItem(props) {
+ _classCallCheck(this, MenuItem);
+
+ _React$Component.call(this, props);
+
+ this.handleClick = this.handleClick.bind(this);
+ }
+
+ MenuItem.prototype.handleClick = function handleClick(event) {
+ if (!this.props.href || this.props.disabled) {
+ event.preventDefault();
+ }
+
+ if (this.props.disabled) {
+ return;
+ }
+
+ if (this.props.onSelect) {
+ this.props.onSelect(event, this.props.eventKey);
+ }
+ };
+
+ MenuItem.prototype.render = function render() {
+ if (this.props.divider) {
+ return _react2['default'].createElement('li', { role: 'separator', className: 'divider' });
+ }
+
+ if (this.props.header) {
+ return _react2['default'].createElement(
+ 'li',
+ { role: 'heading', className: 'dropdown-header' },
+ this.props.children
+ );
+ }
+
+ var classes = {
+ disabled: this.props.disabled
+ };
+
+ return _react2['default'].createElement(
+ 'li',
+ { role: 'presentation',
+ className: _classnames2['default'](this.props.className, classes),
+ style: this.props.style
+ },
+ _react2['default'].createElement(
+ _SafeAnchor2['default'],
+ {
+ role: 'menuitem',
+ tabIndex: '-1',
+ id: this.props.id,
+ target: this.props.target,
+ title: this.props.title,
+ href: this.props.href || '',
+ onKeyDown: this.props.onKeyDown,
+ onClick: this.handleClick },
+ this.props.children
+ )
+ );
+ };
+
+ return MenuItem;
+ })(_react2['default'].Component);
+
+ exports['default'] = MenuItem;
+
+ MenuItem.propTypes = {
+ disabled: _react2['default'].PropTypes.bool,
+ divider: _utilsCustomPropTypes2['default'].all([_react2['default'].PropTypes.bool, function (props, propName, componentName) {
+ if (props.divider && props.children) {
+ return new Error('Children will not be rendered for dividers');
+ }
+ }]),
+ eventKey: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),
+ header: _react2['default'].PropTypes.bool,
+ href: _react2['default'].PropTypes.string,
+ target: _react2['default'].PropTypes.string,
+ title: _react2['default'].PropTypes.string,
+ onKeyDown: _react2['default'].PropTypes.func,
+ onSelect: _react2['default'].PropTypes.func,
+ id: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number])
+ };
+
+ MenuItem.defaultProps = {
+ divider: false,
+ disabled: false,
+ header: false
+ };
+ module.exports = exports['default'];
+
+/***/ },
+/* 186 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /*eslint-disable react/prop-types */
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _Object$isFrozen = __webpack_require__(187)['default'];
+
+ var _Object$keys = __webpack_require__(1)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsDomUtils = __webpack_require__(31);
+
+ var _utilsDomUtils2 = _interopRequireDefault(_utilsDomUtils);
+
+ var _domHelpersUtilScrollbarSize = __webpack_require__(190);
+
+ var _domHelpersUtilScrollbarSize2 = _interopRequireDefault(_domHelpersUtilScrollbarSize);
+
+ var _utilsEventListener = __webpack_require__(73);
+
+ var _utilsEventListener2 = _interopRequireDefault(_utilsEventListener);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _reactOverlaysLibPortal = __webpack_require__(191);
+
+ var _reactOverlaysLibPortal2 = _interopRequireDefault(_reactOverlaysLibPortal);
+
+ var _Fade = __webpack_require__(195);
+
+ var _Fade2 = _interopRequireDefault(_Fade);
+
+ var _ModalDialog = __webpack_require__(196);
+
+ var _ModalDialog2 = _interopRequireDefault(_ModalDialog);
+
+ var _ModalBody = __webpack_require__(197);
+
+ var _ModalBody2 = _interopRequireDefault(_ModalBody);
+
+ var _ModalHeader = __webpack_require__(198);
+
+ var _ModalHeader2 = _interopRequireDefault(_ModalHeader);
+
+ var _ModalTitle = __webpack_require__(199);
+
+ var _ModalTitle2 = _interopRequireDefault(_ModalTitle);
+
+ var _ModalFooter = __webpack_require__(200);
+
+ var _ModalFooter2 = _interopRequireDefault(_ModalFooter);
+
+ /**
+ * Gets the correct clientHeight of the modal container
+ * when the body/window/document you need to use the docElement clientHeight
+ * @param {HTMLElement} container
+ * @param {ReactElement|HTMLElement} context
+ * @return {Number}
+ */
+ function containerClientHeight(container, context) {
+ var doc = _utilsDomUtils2['default'].ownerDocument(context);
+
+ return container === doc.body || container === doc.documentElement ? doc.documentElement.clientHeight : container.clientHeight;
+ }
+
+ function getContainer(context) {
+ return context.props.container && _react2['default'].findDOMNode(context.props.container) || _utilsDomUtils2['default'].ownerDocument(context).body;
+ }
+
+ var currentFocusListener = undefined;
+
+ /**
+ * Firefox doesn't have a focusin event so using capture is easiest way to get bubbling
+ * IE8 can't do addEventListener, but does have onfocusin, so we use that in ie8
+ *
+ * We only allow one Listener at a time to avoid stack overflows
+ *
+ * @param {ReactElement|HTMLElement} context
+ * @param {Function} handler
+ */
+ function onFocus(context, handler) {
+ var doc = _utilsDomUtils2['default'].ownerDocument(context);
+ var useFocusin = !doc.addEventListener;
+ var remove = undefined;
+
+ if (currentFocusListener) {
+ currentFocusListener.remove();
+ }
+
+ if (useFocusin) {
+ document.attachEvent('onfocusin', handler);
+ remove = function () {
+ return document.detachEvent('onfocusin', handler);
+ };
+ } else {
+ document.addEventListener('focus', handler, true);
+ remove = function () {
+ return document.removeEventListener('focus', handler, true);
+ };
+ }
+
+ currentFocusListener = { remove: remove };
+
+ return currentFocusListener;
+ }
+
+ var Modal = _react2['default'].createClass({
+ displayName: 'Modal',
+
+ propTypes: _extends({}, _reactOverlaysLibPortal2['default'].propTypes, _ModalDialog2['default'].propTypes, {
+
+ /**
+ * Include a backdrop component. Specify 'static' for a backdrop that doesn't trigger an "onHide" when clicked.
+ */
+ backdrop: _react2['default'].PropTypes.oneOf(['static', true, false]),
+
+ /**
+ * Close the modal when escape key is pressed
+ */
+ keyboard: _react2['default'].PropTypes.bool,
+
+ /**
+ * Open and close the Modal with a slide and fade animation.
+ */
+ animation: _react2['default'].PropTypes.bool,
+
+ /**
+ * A Component type that provides the modal content Markup. This is a useful prop when you want to use your own
+ * styles and markup to create a custom modal component.
+ */
+ dialogComponent: _utilsCustomPropTypes2['default'].elementType,
+
+ /**
+ * When `true` The modal will automatically shift focus to itself when it opens, and replace it to the last focused element when it closes.
+ * Generally this should never be set to false as it makes the Modal less accessible to assistive technologies, like screen-readers.
+ */
+ autoFocus: _react2['default'].PropTypes.bool,
+
+ /**
+ * When `true` The modal will prevent focus from leaving the Modal while open.
+ * Consider leaving the default value here, as it is necessary to make the Modal work well with assistive technologies,
+ * such as screen readers.
+ */
+ enforceFocus: _react2['default'].PropTypes.bool,
+
+ /**
+ * Hide this from automatic props documentation generation.
+ * @private
+ */
+ bsStyle: _react2['default'].PropTypes.string,
+
+ /**
+ * When `true` The modal will show itself.
+ */
+ show: _react2['default'].PropTypes.bool
+ }),
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'modal',
+ dialogComponent: _ModalDialog2['default'],
+ show: false,
+ animation: true,
+ backdrop: true,
+ keyboard: true,
+ autoFocus: true,
+ enforceFocus: true
+ };
+ },
+
+ getInitialState: function getInitialState() {
+ return {
+ exited: !this.props.show
+ };
+ },
+
+ render: function render() {
+ var _props = this.props;
+ var children = _props.children;
+ var animation = _props.animation;
+ var backdrop = _props.backdrop;
+
+ var props = _objectWithoutProperties(_props, ['children', 'animation', 'backdrop']);
+
+ var onExit = props.onExit;
+ var onExiting = props.onExiting;
+ var onEnter = props.onEnter;
+ var onEntering = props.onEntering;
+ var onEntered = props.onEntered;
+
+ var show = !!props.show;
+ var Dialog = props.dialogComponent;
+
+ var mountModal = show || animation && !this.state.exited;
+ if (!mountModal) {
+ return null;
+ }
+
+ var modal = _react2['default'].createElement(
+ Dialog,
+ _extends({}, props, {
+ ref: this._setDialogRef,
+ className: _classnames2['default'](this.props.className, { 'in': show && !animation }),
+ onClick: backdrop === true ? this.handleBackdropClick : null }),
+ this.renderContent()
+ );
+
+ if (animation) {
+ modal = _react2['default'].createElement(
+ _Fade2['default'],
+ {
+ transitionAppear: true,
+ unmountOnExit: true,
+ 'in': show,
+ timeout: Modal.TRANSITION_DURATION,
+ onExit: onExit,
+ onExiting: onExiting,
+ onExited: this.handleHidden,
+ onEnter: onEnter,
+ onEntering: onEntering,
+ onEntered: onEntered },
+ modal
+ );
+ }
+
+ if (backdrop) {
+ modal = this.renderBackdrop(modal);
+ }
+
+ return _react2['default'].createElement(
+ _reactOverlaysLibPortal2['default'],
+ { container: props.container },
+ modal
+ );
+ },
+
+ renderContent: function renderContent() {
+ var _this = this;
+
+ return _react2['default'].Children.map(this.props.children, function (child) {
+ // TODO: use context in 0.14
+ if (child && child.type && child.type.__isModalHeader) {
+ return _react.cloneElement(child, {
+ onHide: _utilsCreateChainedFunction2['default'](_this.props.onHide, child.props.onHide)
+ });
+ }
+ return child;
+ });
+ },
+
+ renderBackdrop: function renderBackdrop(modal) {
+ var _props2 = this.props;
+ var animation = _props2.animation;
+ var bsClass = _props2.bsClass;
+
+ var duration = Modal.BACKDROP_TRANSITION_DURATION;
+
+ // Don't handle clicks for "static" backdrops
+ var onClick = this.props.backdrop === true ? this.handleBackdropClick : null;
+
+ var backdrop = _react2['default'].createElement('div', {
+ ref: 'backdrop',
+ className: _classnames2['default'](bsClass + '-backdrop', { 'in': this.props.show && !animation }),
+ onClick: onClick });
+
+ return _react2['default'].createElement(
+ 'div',
+ {
+ ref: 'modal' },
+ animation ? _react2['default'].createElement(
+ _Fade2['default'],
+ { transitionAppear: true, 'in': this.props.show, timeout: duration },
+ backdrop
+ ) : backdrop,
+ modal
+ );
+ },
+
+ _setDialogRef: function _setDialogRef(ref) {
+ // issue #1074
+ // due to: https://github.com/facebook/react/blob/v0.13.3/src/core/ReactCompositeComponent.js#L842
+ //
+ // when backdrop is `false` react hasn't had a chance to reassign the refs to a usable object, b/c there are no other
+ // "classic" refs on the component (or they haven't been processed yet)
+ // TODO: Remove the need for this in next breaking release
+ if (_Object$isFrozen(this.refs) && !_Object$keys(this.refs).length) {
+ this.refs = {};
+ }
+
+ this.refs.dialog = ref;
+
+ //maintains backwards compat with older component breakdown
+ if (!this.props.backdrop) {
+ this.refs.modal = ref;
+ }
+ },
+
+ componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
+ if (nextProps.show) {
+ this.setState({ exited: false });
+ } else if (!nextProps.animation) {
+ // Otherwise let handleHidden take care of marking exited.
+ this.setState({ exited: true });
+ }
+ },
+
+ componentWillUpdate: function componentWillUpdate(nextProps) {
+ if (nextProps.show) {
+ this.checkForFocus();
+ }
+ },
+
+ componentDidMount: function componentDidMount() {
+ if (this.props.show) {
+ this.onShow();
+ }
+ },
+
+ componentDidUpdate: function componentDidUpdate(prevProps) {
+ var animation = this.props.animation;
+
+ if (prevProps.show && !this.props.show && !animation) {
+ //otherwise handleHidden will call this.
+ this.onHide();
+ } else if (!prevProps.show && this.props.show) {
+ this.onShow();
+ }
+ },
+
+ componentWillUnmount: function componentWillUnmount() {
+ if (this.props.show) {
+ this.onHide();
+ }
+ },
+
+ onShow: function onShow() {
+ var _this2 = this;
+
+ var doc = _utilsDomUtils2['default'].ownerDocument(this);
+ var win = _utilsDomUtils2['default'].ownerWindow(this);
+
+ this._onDocumentKeyupListener = _utilsEventListener2['default'].listen(doc, 'keyup', this.handleDocumentKeyUp);
+
+ this._onWindowResizeListener = _utilsEventListener2['default'].listen(win, 'resize', this.handleWindowResize);
+
+ if (this.props.enforceFocus) {
+ this._onFocusinListener = onFocus(this, this.enforceFocus);
+ }
+
+ var container = getContainer(this);
+
+ container.className += container.className.length ? ' modal-open' : 'modal-open';
+
+ this._containerIsOverflowing = container.scrollHeight > containerClientHeight(container, this);
+
+ this._originalPadding = container.style.paddingRight;
+
+ if (this._containerIsOverflowing) {
+ container.style.paddingRight = parseInt(this._originalPadding || 0, 10) + _domHelpersUtilScrollbarSize2['default']() + 'px';
+ }
+
+ if (this.props.backdrop) {
+ this.iosClickHack();
+ }
+
+ this.setState(this._getStyles(), function () {
+ return _this2.focusModalContent();
+ });
+ },
+
+ onHide: function onHide() {
+ this._onDocumentKeyupListener.remove();
+ this._onWindowResizeListener.remove();
+
+ if (this._onFocusinListener) {
+ this._onFocusinListener.remove();
+ }
+
+ var container = getContainer(this);
+
+ container.style.paddingRight = this._originalPadding;
+
+ container.className = container.className.replace(/ ?modal-open/, '');
+
+ this.restoreLastFocus();
+ },
+
+ handleHidden: function handleHidden() {
+ this.setState({ exited: true });
+
+ this.onHide();
+
+ if (this.props.onExited) {
+ var _props3;
+
+ (_props3 = this.props).onExited.apply(_props3, arguments);
+ }
+ },
+
+ handleBackdropClick: function handleBackdropClick(e) {
+ if (e.target !== e.currentTarget) {
+ return;
+ }
+
+ this.props.onHide();
+ },
+
+ handleDocumentKeyUp: function handleDocumentKeyUp(e) {
+ if (this.props.keyboard && e.keyCode === 27) {
+ this.props.onHide();
+ }
+ },
+
+ handleWindowResize: function handleWindowResize() {
+ this.setState(this._getStyles());
+ },
+
+ checkForFocus: function checkForFocus() {
+ if (_utilsDomUtils2['default'].canUseDom) {
+ this.lastFocus = _utilsDomUtils2['default'].activeElement(document);
+ }
+ },
+
+ focusModalContent: function focusModalContent() {
+ var modalContent = _react2['default'].findDOMNode(this.refs.dialog);
+ var current = _utilsDomUtils2['default'].activeElement(_utilsDomUtils2['default'].ownerDocument(this));
+ var focusInModal = current && _utilsDomUtils2['default'].contains(modalContent, current);
+
+ if (modalContent && this.props.autoFocus && !focusInModal) {
+ this.lastFocus = current;
+ modalContent.focus();
+ }
+ },
+
+ restoreLastFocus: function restoreLastFocus() {
+ if (this.lastFocus && this.lastFocus.focus) {
+ this.lastFocus.focus();
+ this.lastFocus = null;
+ }
+ },
+
+ enforceFocus: function enforceFocus() {
+ if (!this.isMounted()) {
+ return;
+ }
+
+ var active = _utilsDomUtils2['default'].activeElement(_utilsDomUtils2['default'].ownerDocument(this));
+ var modal = _react2['default'].findDOMNode(this.refs.dialog);
+
+ if (modal && modal !== active && !_utilsDomUtils2['default'].contains(modal, active)) {
+ modal.focus();
+ }
+ },
+
+ iosClickHack: function iosClickHack() {
+ // IOS only allows click events to be delegated to the document on elements
+ // it considers 'clickable' - anchors, buttons, etc. We fake a click handler on the
+ // DOM nodes themselves. Remove if handled by React: https://github.com/facebook/react/issues/1169
+ _react2['default'].findDOMNode(this.refs.modal).onclick = function () {};
+ _react2['default'].findDOMNode(this.refs.backdrop).onclick = function () {};
+ },
+
+ _getStyles: function _getStyles() {
+ if (!_utilsDomUtils2['default'].canUseDom) {
+ return {};
+ }
+
+ var node = _react2['default'].findDOMNode(this.refs.modal);
+ var scrollHt = node.scrollHeight;
+ var container = getContainer(this);
+ var containerIsOverflowing = this._containerIsOverflowing;
+ var modalIsOverflowing = scrollHt > containerClientHeight(container, this);
+
+ return {
+ dialogStyles: {
+ paddingRight: containerIsOverflowing && !modalIsOverflowing ? _domHelpersUtilScrollbarSize2['default']() : void 0,
+ paddingLeft: !containerIsOverflowing && modalIsOverflowing ? _domHelpersUtilScrollbarSize2['default']() : void 0
+ }
+ };
+ }
+
+ });
+
+ Modal.Body = _ModalBody2['default'];
+ Modal.Header = _ModalHeader2['default'];
+ Modal.Title = _ModalTitle2['default'];
+ Modal.Footer = _ModalFooter2['default'];
+
+ Modal.Dialog = _ModalDialog2['default'];
+
+ Modal.TRANSITION_DURATION = 300;
+ Modal.BACKDROP_TRANSITION_DURATION = 150;
+
+ exports['default'] = Modal;
+ module.exports = exports['default'];
+
+/***/ },
+/* 187 */
+/***/ function(module, exports, __webpack_require__) {
+
+ module.exports = { "default": __webpack_require__(188), __esModule: true };
+
+/***/ },
+/* 188 */
+/***/ function(module, exports, __webpack_require__) {
+
+ __webpack_require__(189);
+ module.exports = __webpack_require__(9).Object.isFrozen;
+
+/***/ },
+/* 189 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // 19.1.2.12 Object.isFrozen(O)
+ var isObject = __webpack_require__(24);
+
+ __webpack_require__(6)('isFrozen', function($isFrozen){
+ return function isFrozen(it){
+ return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
+ };
+ });
+
+/***/ },
+/* 190 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var canUseDOM = __webpack_require__(33);
+
+ var size;
+
+ module.exports = function (recalc) {
+ if (!size || recalc) {
+ if (canUseDOM) {
+ var scrollDiv = document.createElement('div');
+
+ scrollDiv.style.position = 'absolute';
+ scrollDiv.style.top = '-9999px';
+ scrollDiv.style.width = '50px';
+ scrollDiv.style.height = '50px';
+ scrollDiv.style.overflow = 'scroll';
+
+ document.body.appendChild(scrollDiv);
+ size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+ document.body.removeChild(scrollDiv);
+ }
+ }
+
+ return size;
+ };
+
+/***/ },
+/* 191 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _reactPropTypesLibMountable = __webpack_require__(192);
+
+ var _reactPropTypesLibMountable2 = _interopRequireDefault(_reactPropTypesLibMountable);
+
+ var _utilsOwnerDocument = __webpack_require__(106);
+
+ var _utilsOwnerDocument2 = _interopRequireDefault(_utilsOwnerDocument);
+
+ var _utilsGetContainer = __webpack_require__(194);
+
+ var _utilsGetContainer2 = _interopRequireDefault(_utilsGetContainer);
+
+ /**
+ * The `<Portal/>` component renders its children into a new "subtree" outside of current component hierarchy.
+ * You can think of it as a declarative `appendChild()`, or jQuery's `$.fn.appendTo()`.
+ * The children of `<Portal/>` component will be appended to the `container` specified.
+ */
+ var Portal = _react2['default'].createClass({
+
+ displayName: 'Portal',
+
+ propTypes: {
+ /**
+ * A Node, Component instance, or function that returns either. The `container` will have the Portal children
+ * appended to it.
+ */
+ container: _react2['default'].PropTypes.oneOfType([_reactPropTypesLibMountable2['default'], _react2['default'].PropTypes.func])
+ },
+
+ componentDidMount: function componentDidMount() {
+ this._renderOverlay();
+ },
+
+ componentDidUpdate: function componentDidUpdate() {
+ this._renderOverlay();
+ },
+
+ componentWillUnmount: function componentWillUnmount() {
+ this._unrenderOverlay();
+ this._unmountOverlayTarget();
+ },
+
+ _mountOverlayTarget: function _mountOverlayTarget() {
+ if (!this._overlayTarget) {
+ this._overlayTarget = document.createElement('div');
+ this.getContainerDOMNode().appendChild(this._overlayTarget);
+ }
+ },
+
+ _unmountOverlayTarget: function _unmountOverlayTarget() {
+ if (this._overlayTarget) {
+ this.getContainerDOMNode().removeChild(this._overlayTarget);
+ this._overlayTarget = null;
+ }
+ },
+
+ _renderOverlay: function _renderOverlay() {
+
+ var overlay = !this.props.children ? null : _react2['default'].Children.only(this.props.children);
+
+ // Save reference for future access.
+ if (overlay !== null) {
+ this._mountOverlayTarget();
+ this._overlayInstance = _react2['default'].render(overlay, this._overlayTarget);
+ } else {
+ // Unrender if the component is null for transitions to null
+ this._unrenderOverlay();
+ this._unmountOverlayTarget();
+ }
+ },
+
+ _unrenderOverlay: function _unrenderOverlay() {
+ if (this._overlayTarget) {
+ _react2['default'].unmountComponentAtNode(this._overlayTarget);
+ this._overlayInstance = null;
+ }
+ },
+
+ render: function render() {
+ return null;
+ },
+
+ getOverlayDOMNode: function getOverlayDOMNode() {
+ if (!this.isMounted()) {
+ throw new Error('getOverlayDOMNode(): A component must be mounted to have a DOM node.');
+ }
+
+ if (this._overlayInstance) {
+ if (this._overlayInstance.getWrappedDOMNode) {
+ return this._overlayInstance.getWrappedDOMNode();
+ } else {
+ return _react2['default'].findDOMNode(this._overlayInstance);
+ }
+ }
+
+ return null;
+ },
+
+ getContainerDOMNode: function getContainerDOMNode() {
+ return _utilsGetContainer2['default'](this.props.container, _utilsOwnerDocument2['default'](this).body);
+ }
+ });
+
+ exports['default'] = Portal;
+ module.exports = exports['default'];
+
+/***/ },
+/* 192 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _common = __webpack_require__(193);
+
+ /**
+ * Checks whether a prop provides a DOM element
+ *
+ * The element can be provided in two forms:
+ * - Directly passed
+ * - Or passed an object that has a `render` method
+ *
+ * @param props
+ * @param propName
+ * @param componentName
+ * @returns {Error|undefined}
+ */
+
+ function validate(props, propName, componentName) {
+ if (typeof props[propName] !== 'object' || typeof props[propName].render !== 'function' && props[propName].nodeType !== 1) {
+ return new Error(_common.errMsg(props, propName, componentName, ', expected a DOM element or an object that has a `render` method'));
+ }
+ }
+
+ exports['default'] = _common.createChainableTypeChecker(validate);
+ module.exports = exports['default'];
+
+/***/ },
+/* 193 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports.errMsg = errMsg;
+ exports.createChainableTypeChecker = createChainableTypeChecker;
+
+ function errMsg(props, propName, componentName, msgContinuation) {
+ return 'Invalid prop \'' + propName + '\' of value \'' + props[propName] + '\'' + (' supplied to \'' + componentName + '\'' + msgContinuation);
+ }
+
+ /**
+ * Create chain-able isRequired validator
+ *
+ * Largely copied directly from:
+ * https://github.com/facebook/react/blob/0.11-stable/src/core/ReactPropTypes.js#L94
+ */
+
+ function createChainableTypeChecker(validate) {
+ function checkType(isRequired, props, propName, componentName) {
+ componentName = componentName || '<<anonymous>>';
+ if (props[propName] == null) {
+ if (isRequired) {
+ return new Error('Required prop \'' + propName + '\' was not specified in \'' + componentName + '\'.');
+ }
+ } else {
+ return validate(props, propName, componentName);
+ }
+ }
+
+ var chainedCheckType = checkType.bind(null, false);
+ chainedCheckType.isRequired = checkType.bind(null, true);
+
+ return chainedCheckType;
+ }
+
+/***/ },
+/* 194 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports['default'] = getContainer;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ function getContainer(container, defaultContainer) {
+ container = typeof container === 'function' ? container() : container;
+ return _react2['default'].findDOMNode(container) || defaultContainer;
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 195 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _reactOverlaysLibTransition = __webpack_require__(90);
+
+ var _reactOverlaysLibTransition2 = _interopRequireDefault(_reactOverlaysLibTransition);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ var Fade = (function (_React$Component) {
+ _inherits(Fade, _React$Component);
+
+ function Fade() {
+ _classCallCheck(this, Fade);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ // Explicitly copied from Transition for doc generation.
+ // TODO: Remove duplication once #977 is resolved.
+
+ Fade.prototype.render = function render() {
+ var timeout = this.props.timeout || this.props.duration;
+
+ return _react2['default'].createElement(
+ _reactOverlaysLibTransition2['default'],
+ _extends({}, this.props, {
+ timeout: timeout,
+ className: 'fade',
+ enteredClassName: 'in',
+ enteringClassName: 'in'
+ }),
+ this.props.children
+ );
+ };
+
+ return Fade;
+ })(_react2['default'].Component);
+
+ Fade.propTypes = {
+ /**
+ * Show the component; triggers the fade in or fade out animation
+ */
+ 'in': _react2['default'].PropTypes.bool,
+
+ /**
+ * Unmount the component (remove it from the DOM) when it is faded out
+ */
+ unmountOnExit: _react2['default'].PropTypes.bool,
+
+ /**
+ * Run the fade in animation when the component mounts, if it is initially
+ * shown
+ */
+ transitionAppear: _react2['default'].PropTypes.bool,
+
+ /**
+ * Duration of the fade animation in milliseconds, to ensure that finishing
+ * callbacks are fired even if the original browser transition end events are
+ * canceled
+ */
+ timeout: _react2['default'].PropTypes.number,
+
+ /**
+ * duration
+ * @private
+ */
+ duration: _utilsCustomPropTypes2['default'].all([_react2['default'].PropTypes.number, function (props) {
+ if (props.duration != null) {
+ _utilsDeprecationWarning2['default']('Fade `duration`', 'the `timeout` prop');
+ }
+ return null;
+ }]),
+
+ /**
+ * Callback fired before the component fades in
+ */
+ onEnter: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the component starts to fade in
+ */
+ onEntering: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the has component faded in
+ */
+ onEntered: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired before the component fades out
+ */
+ onExit: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the component starts to fade out
+ */
+ onExiting: _react2['default'].PropTypes.func,
+ /**
+ * Callback fired after the component has faded out
+ */
+ onExited: _react2['default'].PropTypes.func
+ };
+
+ Fade.defaultProps = {
+ 'in': false,
+ timeout: 300,
+ unmountOnExit: false,
+ transitionAppear: false
+ };
+
+ exports['default'] = Fade;
+ module.exports = exports['default'];
+
+/***/ },
+/* 196 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /*eslint-disable react/prop-types */
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var ModalDialog = _react2['default'].createClass({
+ displayName: 'ModalDialog',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ /**
+ * A Callback fired when the header closeButton or non-static backdrop is clicked.
+ * @type {function}
+ * @required
+ */
+ onHide: _react2['default'].PropTypes.func.isRequired,
+
+ /**
+ * A css class to apply to the Modal dialog DOM node.
+ */
+ dialogClassName: _react2['default'].PropTypes.string
+
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'modal',
+ closeButton: true
+ };
+ },
+
+ render: function render() {
+ var modalStyle = _extends({
+ display: 'block'
+ }, this.props.style);
+ var bsClass = this.props.bsClass;
+ var dialogClasses = this.getBsClassSet();
+
+ delete dialogClasses.modal;
+ dialogClasses[bsClass + '-dialog'] = true;
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ title: null,
+ tabIndex: '-1',
+ role: 'dialog',
+ style: modalStyle,
+ className: _classnames2['default'](this.props.className, bsClass) }),
+ _react2['default'].createElement(
+ 'div',
+ { className: _classnames2['default'](this.props.dialogClassName, dialogClasses) },
+ _react2['default'].createElement(
+ 'div',
+ { className: bsClass + '-content', role: 'document' },
+ this.props.children
+ )
+ )
+ );
+ }
+ });
+
+ exports['default'] = ModalDialog;
+ module.exports = exports['default'];
+
+/***/ },
+/* 197 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var ModalBody = (function (_React$Component) {
+ _inherits(ModalBody, _React$Component);
+
+ function ModalBody() {
+ _classCallCheck(this, ModalBody);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ ModalBody.prototype.render = function render() {
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, this.props.modalClassName) }),
+ this.props.children
+ );
+ };
+
+ return ModalBody;
+ })(_react2['default'].Component);
+
+ ModalBody.propTypes = {
+ /**
+ * A css class applied to the Component
+ */
+ modalClassName: _react2['default'].PropTypes.string
+ };
+
+ ModalBody.defaultProps = {
+ modalClassName: 'modal-body'
+ };
+
+ exports['default'] = ModalBody;
+ module.exports = exports['default'];
+
+/***/ },
+/* 198 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var ModalHeader = (function (_React$Component) {
+ _inherits(ModalHeader, _React$Component);
+
+ function ModalHeader() {
+ _classCallCheck(this, ModalHeader);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ //used in liue of parent contexts right now to auto wire the close button
+
+ ModalHeader.prototype.render = function render() {
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, this.props.modalClassName) }),
+ this.props.closeButton && _react2['default'].createElement(
+ 'button',
+ {
+ className: 'close',
+ onClick: this.props.onHide },
+ _react2['default'].createElement(
+ 'span',
+ { 'aria-hidden': 'true' },
+ '×'
+ )
+ ),
+ this.props.children
+ );
+ };
+
+ return ModalHeader;
+ })(_react2['default'].Component);
+
+ ModalHeader.__isModalHeader = true;
+
+ ModalHeader.propTypes = {
+ /**
+ * The 'aria-label' attribute is used to define a string that labels the current element.
+ * It is used for Assistive Technology when the label text is not visible on screen.
+ */
+ 'aria-label': _react2['default'].PropTypes.string,
+
+ /**
+ * A css class applied to the Component
+ */
+ modalClassName: _react2['default'].PropTypes.string,
+
+ /**
+ * Specify whether the Component should contain a close button
+ */
+ closeButton: _react2['default'].PropTypes.bool,
+
+ /**
+ * A Callback fired when the close button is clicked. If used directly inside a Modal component, the onHide will automatically
+ * be propagated up to the parent Modal `onHide`.
+ */
+ onHide: _react2['default'].PropTypes.func
+ };
+
+ ModalHeader.defaultProps = {
+ 'aria-label': 'Close',
+ modalClassName: 'modal-header',
+ closeButton: false
+ };
+
+ exports['default'] = ModalHeader;
+ module.exports = exports['default'];
+
+/***/ },
+/* 199 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var ModalTitle = (function (_React$Component) {
+ _inherits(ModalTitle, _React$Component);
+
+ function ModalTitle() {
+ _classCallCheck(this, ModalTitle);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ ModalTitle.prototype.render = function render() {
+ return _react2['default'].createElement(
+ 'h4',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, this.props.modalClassName) }),
+ this.props.children
+ );
+ };
+
+ return ModalTitle;
+ })(_react2['default'].Component);
+
+ ModalTitle.propTypes = {
+ /**
+ * A css class applied to the Component
+ */
+ modalClassName: _react2['default'].PropTypes.string
+ };
+
+ ModalTitle.defaultProps = {
+ modalClassName: 'modal-title'
+ };
+
+ exports['default'] = ModalTitle;
+ module.exports = exports['default'];
+
+/***/ },
+/* 200 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var ModalFooter = (function (_React$Component) {
+ _inherits(ModalFooter, _React$Component);
+
+ function ModalFooter() {
+ _classCallCheck(this, ModalFooter);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ ModalFooter.prototype.render = function render() {
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, this.props.modalClassName) }),
+ this.props.children
+ );
+ };
+
+ return ModalFooter;
+ })(_react2['default'].Component);
+
+ ModalFooter.propTypes = {
+ /**
+ * A css class applied to the Component
+ */
+ modalClassName: _react2['default'].PropTypes.string
+ };
+
+ ModalFooter.defaultProps = {
+ modalClassName: 'modal-footer'
+ };
+
+ exports['default'] = ModalFooter;
+ module.exports = exports['default'];
+
+/***/ },
+/* 201 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _Collapse = __webpack_require__(89);
+
+ var _Collapse2 = _interopRequireDefault(_Collapse);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var Nav = _react2['default'].createClass({
+ displayName: 'Nav',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ activeHref: _react2['default'].PropTypes.string,
+ activeKey: _react2['default'].PropTypes.any,
+ bsStyle: _react2['default'].PropTypes.oneOf(['tabs', 'pills']),
+ stacked: _react2['default'].PropTypes.bool,
+ justified: _react2['default'].PropTypes.bool,
+ onSelect: _react2['default'].PropTypes.func,
+ collapsible: _react2['default'].PropTypes.bool,
+ /**
+ * CSS classes for the wrapper `nav` element
+ */
+ className: _react2['default'].PropTypes.string,
+ /**
+ * HTML id for the wrapper `nav` element
+ */
+ id: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number]),
+ /**
+ * CSS classes for the inner `ul` element
+ */
+ ulClassName: _react2['default'].PropTypes.string,
+ /**
+ * HTML id for the inner `ul` element
+ */
+ ulId: _react2['default'].PropTypes.string,
+ expanded: _react2['default'].PropTypes.bool,
+ navbar: _react2['default'].PropTypes.bool,
+ eventKey: _react2['default'].PropTypes.any,
+ pullRight: _react2['default'].PropTypes.bool,
+ right: _react2['default'].PropTypes.bool
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'nav',
+ collapsible: false,
+ expanded: true,
+ justified: false,
+ navbar: false,
+ pullRight: false,
+ right: false,
+ stacked: false
+ };
+ },
+
+ render: function render() {
+ var classes = this.props.collapsible ? 'navbar-collapse' : null;
+
+ if (this.props.navbar && !this.props.collapsible) {
+ return this.renderUl();
+ }
+
+ return _react2['default'].createElement(
+ _Collapse2['default'],
+ { 'in': this.props.expanded },
+ _react2['default'].createElement(
+ 'nav',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ this.renderUl()
+ )
+ );
+ },
+
+ renderUl: function renderUl() {
+ var classes = this.getBsClassSet();
+
+ classes['nav-stacked'] = this.props.stacked;
+ classes['nav-justified'] = this.props.justified;
+ classes['navbar-nav'] = this.props.navbar;
+ classes['pull-right'] = this.props.pullRight;
+ classes['navbar-right'] = this.props.right;
+
+ return _react2['default'].createElement(
+ 'ul',
+ _extends({}, this.props, {
+ role: this.props.bsStyle === 'tabs' ? 'tablist' : null,
+ className: _classnames2['default'](this.props.ulClassName, classes),
+ id: this.props.ulId,
+ ref: 'ul'
+ }),
+ _utilsValidComponentChildren2['default'].map(this.props.children, this.renderNavItem)
+ );
+ },
+
+ getChildActiveProp: function getChildActiveProp(child) {
+ if (child.props.active) {
+ return true;
+ }
+ if (this.props.activeKey != null) {
+ if (child.props.eventKey === this.props.activeKey) {
+ return true;
+ }
+ }
+ if (this.props.activeHref != null) {
+ if (child.props.href === this.props.activeHref) {
+ return true;
+ }
+ }
+
+ return child.props.active;
+ },
+
+ renderNavItem: function renderNavItem(child, index) {
+ return _react.cloneElement(child, {
+ role: this.props.bsStyle === 'tabs' ? 'tab' : null,
+ active: this.getChildActiveProp(child),
+ activeKey: this.props.activeKey,
+ activeHref: this.props.activeHref,
+ onSelect: _utilsCreateChainedFunction2['default'](child.props.onSelect, this.props.onSelect),
+ key: child.key ? child.key : index,
+ navItem: true
+ });
+ }
+ });
+
+ exports['default'] = Nav;
+ module.exports = exports['default'];
+
+/***/ },
+/* 202 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var Navbar = _react2['default'].createClass({
+ displayName: 'Navbar',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ fixedTop: _react2['default'].PropTypes.bool,
+ fixedBottom: _react2['default'].PropTypes.bool,
+ staticTop: _react2['default'].PropTypes.bool,
+ inverse: _react2['default'].PropTypes.bool,
+ fluid: _react2['default'].PropTypes.bool,
+ role: _react2['default'].PropTypes.string,
+ /**
+ * You can use a custom element for this component
+ */
+ componentClass: _utilsCustomPropTypes2['default'].elementType,
+ brand: _react2['default'].PropTypes.node,
+ toggleButton: _react2['default'].PropTypes.node,
+ toggleNavKey: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number]),
+ onToggle: _react2['default'].PropTypes.func,
+ navExpanded: _react2['default'].PropTypes.bool,
+ defaultNavExpanded: _react2['default'].PropTypes.bool
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'navbar',
+ bsStyle: 'default',
+ role: 'navigation',
+ componentClass: 'nav',
+ fixedTop: false,
+ fixedBottom: false,
+ staticTop: false,
+ inverse: false,
+ fluid: false,
+ defaultNavExpanded: false
+ };
+ },
+
+ getInitialState: function getInitialState() {
+ return {
+ navExpanded: this.props.defaultNavExpanded
+ };
+ },
+
+ shouldComponentUpdate: function shouldComponentUpdate() {
+ // Defer any updates to this component during the `onSelect` handler.
+ return !this._isChanging;
+ },
+
+ handleToggle: function handleToggle() {
+ if (this.props.onToggle) {
+ this._isChanging = true;
+ this.props.onToggle();
+ this._isChanging = false;
+ }
+
+ this.setState({
+ navExpanded: !this.state.navExpanded
+ });
+ },
+
+ isNavExpanded: function isNavExpanded() {
+ return this.props.navExpanded != null ? this.props.navExpanded : this.state.navExpanded;
+ },
+
+ render: function render() {
+ var classes = this.getBsClassSet();
+ var ComponentClass = this.props.componentClass;
+
+ classes['navbar-fixed-top'] = this.props.fixedTop;
+ classes['navbar-fixed-bottom'] = this.props.fixedBottom;
+ classes['navbar-static-top'] = this.props.staticTop;
+ classes['navbar-inverse'] = this.props.inverse;
+
+ return _react2['default'].createElement(
+ ComponentClass,
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ _react2['default'].createElement(
+ 'div',
+ { className: this.props.fluid ? 'container-fluid' : 'container' },
+ this.props.brand || this.props.toggleButton || this.props.toggleNavKey != null ? this.renderHeader() : null,
+ _utilsValidComponentChildren2['default'].map(this.props.children, this.renderChild)
+ )
+ );
+ },
+
+ renderChild: function renderChild(child, index) {
+ return _react.cloneElement(child, {
+ navbar: true,
+ collapsible: this.props.toggleNavKey != null && this.props.toggleNavKey === child.props.eventKey,
+ expanded: this.props.toggleNavKey != null && this.props.toggleNavKey === child.props.eventKey && this.isNavExpanded(),
+ key: child.key ? child.key : index
+ });
+ },
+
+ renderHeader: function renderHeader() {
+ var brand = undefined;
+
+ if (this.props.brand) {
+ if (_react2['default'].isValidElement(this.props.brand)) {
+ brand = _react.cloneElement(this.props.brand, {
+ className: _classnames2['default'](this.props.brand.props.className, 'navbar-brand')
+ });
+ } else {
+ brand = _react2['default'].createElement(
+ 'span',
+ { className: 'navbar-brand' },
+ this.props.brand
+ );
+ }
+ }
+
+ return _react2['default'].createElement(
+ 'div',
+ { className: 'navbar-header' },
+ brand,
+ this.props.toggleButton || this.props.toggleNavKey != null ? this.renderToggleButton() : null
+ );
+ },
+
+ renderToggleButton: function renderToggleButton() {
+ var children = undefined;
+
+ if (_react2['default'].isValidElement(this.props.toggleButton)) {
+
+ return _react.cloneElement(this.props.toggleButton, {
+ className: _classnames2['default'](this.props.toggleButton.props.className, 'navbar-toggle'),
+ onClick: _utilsCreateChainedFunction2['default'](this.handleToggle, this.props.toggleButton.props.onClick)
+ });
+ }
+
+ children = this.props.toggleButton != null ? this.props.toggleButton : [_react2['default'].createElement(
+ 'span',
+ { className: 'sr-only', key: 0 },
+ 'Toggle navigation'
+ ), _react2['default'].createElement('span', { className: 'icon-bar', key: 1 }), _react2['default'].createElement('span', { className: 'icon-bar', key: 2 }), _react2['default'].createElement('span', { className: 'icon-bar', key: 3 })];
+
+ return _react2['default'].createElement(
+ 'button',
+ { className: 'navbar-toggle', type: 'button', onClick: this.handleToggle },
+ children
+ );
+ }
+ });
+
+ exports['default'] = Navbar;
+ module.exports = exports['default'];
+
+/***/ },
+/* 203 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _SafeAnchor = __webpack_require__(100);
+
+ var _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);
+
+ var NavItem = _react2['default'].createClass({
+ displayName: 'NavItem',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ linkId: _react2['default'].PropTypes.string,
+ onSelect: _react2['default'].PropTypes.func,
+ active: _react2['default'].PropTypes.bool,
+ disabled: _react2['default'].PropTypes.bool,
+ href: _react2['default'].PropTypes.string,
+ role: _react2['default'].PropTypes.string,
+ title: _react2['default'].PropTypes.node,
+ eventKey: _react2['default'].PropTypes.any,
+ target: _react2['default'].PropTypes.string,
+ 'aria-controls': _react2['default'].PropTypes.string
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ active: false,
+ disabled: false
+ };
+ },
+
+ render: function render() {
+ var _props = this.props;
+ var role = _props.role;
+ var linkId = _props.linkId;
+ var disabled = _props.disabled;
+ var active = _props.active;
+ var href = _props.href;
+ var title = _props.title;
+ var target = _props.target;
+ var children = _props.children;
+ var ariaControls = _props['aria-controls'];
+
+ var props = _objectWithoutProperties(_props, ['role', 'linkId', 'disabled', 'active', 'href', 'title', 'target', 'children', 'aria-controls']);
+
+ var classes = {
+ active: active,
+ disabled: disabled
+ };
+ var linkProps = {
+ role: role,
+ href: href,
+ title: title,
+ target: target,
+ id: linkId,
+ onClick: this.handleClick
+ };
+
+ if (!role && href === '#') {
+ linkProps.role = 'button';
+ }
+
+ return _react2['default'].createElement(
+ 'li',
+ _extends({}, props, { role: 'presentation', className: _classnames2['default'](props.className, classes) }),
+ _react2['default'].createElement(
+ _SafeAnchor2['default'],
+ _extends({}, linkProps, { 'aria-selected': active, 'aria-controls': ariaControls }),
+ children
+ )
+ );
+ },
+
+ handleClick: function handleClick(e) {
+ if (this.props.onSelect) {
+ e.preventDefault();
+
+ if (!this.props.disabled) {
+ this.props.onSelect(this.props.eventKey, this.props.href, this.props.target);
+ }
+ }
+ }
+ });
+
+ exports['default'] = NavItem;
+ module.exports = exports['default'];
+
+/***/ },
+/* 204 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* eslint react/prop-types: [2, {ignore: ["container", "containerPadding", "target", "placement", "children"] }] */
+ /* These properties are validated in 'Portal' and 'Position' components */
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _reactOverlaysLibOverlay = __webpack_require__(205);
+
+ var _reactOverlaysLibOverlay2 = _interopRequireDefault(_reactOverlaysLibOverlay);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _Fade = __webpack_require__(195);
+
+ var _Fade2 = _interopRequireDefault(_Fade);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var Overlay = (function (_React$Component) {
+ _inherits(Overlay, _React$Component);
+
+ function Overlay() {
+ _classCallCheck(this, Overlay);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ Overlay.prototype.render = function render() {
+ var _props = this.props;
+ var child = _props.children;
+ var transition = _props.animation;
+
+ var props = _objectWithoutProperties(_props, ['children', 'animation']);
+
+ if (transition === true) {
+ transition = _Fade2['default'];
+ }
+
+ if (!transition) {
+ child = _react.cloneElement(child, {
+ className: _classnames2['default']('in', child.props.className)
+ });
+ }
+
+ return _react2['default'].createElement(
+ _reactOverlaysLibOverlay2['default'],
+ _extends({}, props, {
+ transition: transition
+ }),
+ child
+ );
+ };
+
+ return Overlay;
+ })(_react2['default'].Component);
+
+ Overlay.propTypes = _extends({}, _reactOverlaysLibOverlay2['default'].propTypes, {
+
+ /**
+ * Set the visibility of the Overlay
+ */
+ show: _react2['default'].PropTypes.bool,
+ /**
+ * Specify whether the overlay should trigger onHide when the user clicks outside the overlay
+ */
+ rootClose: _react2['default'].PropTypes.bool,
+ /**
+ * A Callback fired by the Overlay when it wishes to be hidden.
+ */
+ onHide: _react2['default'].PropTypes.func,
+
+ /**
+ * Use animation
+ */
+ animation: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.bool, _utilsCustomPropTypes2['default'].elementType]),
+
+ /**
+ * Callback fired before the Overlay transitions in
+ */
+ onEnter: _react2['default'].PropTypes.func,
+
+ /**
+ * Callback fired as the Overlay begins to transition in
+ */
+ onEntering: _react2['default'].PropTypes.func,
+
+ /**
+ * Callback fired after the Overlay finishes transitioning in
+ */
+ onEntered: _react2['default'].PropTypes.func,
+
+ /**
+ * Callback fired right before the Overlay transitions out
+ */
+ onExit: _react2['default'].PropTypes.func,
+
+ /**
+ * Callback fired as the Overlay begins to transition out
+ */
+ onExiting: _react2['default'].PropTypes.func,
+
+ /**
+ * Callback fired after the Overlay finishes transitioning out
+ */
+ onExited: _react2['default'].PropTypes.func
+ });
+
+ Overlay.defaultProps = {
+ animation: _Fade2['default'],
+ rootClose: false,
+ show: false
+ };
+
+ exports['default'] = Overlay;
+ module.exports = exports['default'];
+
+/***/ },
+/* 205 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
+
+ function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _Portal = __webpack_require__(191);
+
+ var _Portal2 = _interopRequireDefault(_Portal);
+
+ var _Position = __webpack_require__(206);
+
+ var _Position2 = _interopRequireDefault(_Position);
+
+ var _RootCloseWrapper = __webpack_require__(102);
+
+ var _RootCloseWrapper2 = _interopRequireDefault(_RootCloseWrapper);
+
+ var _reactPropTypesLibElementType = __webpack_require__(208);
+
+ var _reactPropTypesLibElementType2 = _interopRequireDefault(_reactPropTypesLibElementType);
+
+ /**
+ * Built on top of `<Position/>` and `<Portal/>`, the overlay component is great for custom tooltip overlays.
+ */
+
+ var Overlay = (function (_React$Component) {
+ function Overlay(props, context) {
+ _classCallCheck(this, Overlay);
+
+ _React$Component.call(this, props, context);
+
+ this.state = { exited: !props.show };
+ this.onHiddenListener = this.handleHidden.bind(this);
+ }
+
+ _inherits(Overlay, _React$Component);
+
+ Overlay.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
+ if (nextProps.show) {
+ this.setState({ exited: false });
+ } else if (!nextProps.transition) {
+ // Otherwise let handleHidden take care of marking exited.
+ this.setState({ exited: true });
+ }
+ };
+
+ Overlay.prototype.render = function render() {
+ var _props = this.props;
+ var container = _props.container;
+ var containerPadding = _props.containerPadding;
+ var target = _props.target;
+ var placement = _props.placement;
+ var rootClose = _props.rootClose;
+ var children = _props.children;
+ var Transition = _props.transition;
+
+ var props = _objectWithoutProperties(_props, ['container', 'containerPadding', 'target', 'placement', 'rootClose', 'children', 'transition']);
+
+ // Don't un-render the overlay while it's transitioning out.
+ var mountOverlay = props.show || Transition && !this.state.exited;
+ if (!mountOverlay) {
+ // Don't bother showing anything if we don't have to.
+ return null;
+ }
+
+ var child = children;
+
+ // Position is be inner-most because it adds inline styles into the child,
+ // which the other wrappers don't forward correctly.
+ child = _react2['default'].createElement(
+ _Position2['default'],
+ { container: container, containerPadding: containerPadding, target: target, placement: placement },
+ child
+ );
+
+ if (Transition) {
+ var onExit = props.onExit;
+ var onExiting = props.onExiting;
+ var onEnter = props.onEnter;
+ var onEntering = props.onEntering;
+ var onEntered = props.onEntered;
+
+ // This animates the child node by injecting props, so it must precede
+ // anything that adds a wrapping div.
+ child = _react2['default'].createElement(
+ Transition,
+ {
+ 'in': props.show,
+ transitionAppear: true,
+ onExit: onExit,
+ onExiting: onExiting,
+ onExited: this.onHiddenListener,
+ onEnter: onEnter,
+ onEntering: onEntering,
+ onEntered: onEntered
+ },
+ child
+ );
+ }
+
+ // This goes after everything else because it adds a wrapping div.
+ if (rootClose) {
+ child = _react2['default'].createElement(
+ _RootCloseWrapper2['default'],
+ { onRootClose: props.onHide },
+ child
+ );
+ }
+
+ return _react2['default'].createElement(
+ _Portal2['default'],
+ { container: container },
+ child
+ );
+ };
+
+ Overlay.prototype.handleHidden = function handleHidden() {
+ this.setState({ exited: true });
+
+ if (this.props.onExited) {
+ var _props2;
+
+ (_props2 = this.props).onExited.apply(_props2, arguments);
+ }
+ };
+
+ return Overlay;
+ })(_react2['default'].Component);
+
+ Overlay.propTypes = _extends({}, _Portal2['default'].propTypes, _Position2['default'].propTypes, {
+ /**
+ * Set the visibility of the Overlay
+ */
+ show: _react2['default'].PropTypes.bool,
+ /**
+ * Specify whether the overlay should trigger onHide when the user clicks outside the overlay
+ */
+ rootClose: _react2['default'].PropTypes.bool,
+ /**
+ * A Callback fired by the Overlay when it wishes to be hidden.
+ */
+ onHide: _react2['default'].PropTypes.func,
+
+ /**
+ * A `<Transition/>` component used to animate the overlay changes visibility.
+ */
+ transition: _reactPropTypesLibElementType2['default'],
+
+ /**
+ * Callback fired before the Overlay transitions in
+ */
+ onEnter: _react2['default'].PropTypes.func,
+
+ /**
+ * Callback fired as the Overlay begins to transition in
+ */
+ onEntering: _react2['default'].PropTypes.func,
+
+ /**
+ * Callback fired after the Overlay finishes transitioning in
+ */
+ onEntered: _react2['default'].PropTypes.func,
+
+ /**
+ * Callback fired right before the Overlay transitions out
+ */
+ onExit: _react2['default'].PropTypes.func,
+
+ /**
+ * Callback fired as the Overlay begins to transition out
+ */
+ onExiting: _react2['default'].PropTypes.func,
+
+ /**
+ * Callback fired after the Overlay finishes transitioning out
+ */
+ onExited: _react2['default'].PropTypes.func
+ });
+
+ exports['default'] = Overlay;
+ module.exports = exports['default'];
+
+/***/ },
+/* 206 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
+
+ function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsOwnerDocument = __webpack_require__(106);
+
+ var _utilsOwnerDocument2 = _interopRequireDefault(_utilsOwnerDocument);
+
+ var _utilsGetContainer = __webpack_require__(194);
+
+ var _utilsGetContainer2 = _interopRequireDefault(_utilsGetContainer);
+
+ var _utilsOverlayPositionUtils = __webpack_require__(207);
+
+ var _reactPropTypesLibMountable = __webpack_require__(192);
+
+ var _reactPropTypesLibMountable2 = _interopRequireDefault(_reactPropTypesLibMountable);
+
+ /**
+ * The Position component calulates the corrdinates for its child, to
+ * position it relative to a `target` component or node. Useful for creating callouts and tooltips,
+ * the Position component injects a `style` props with `left` and `top` values for positioning your component.
+ *
+ * It also injects "arrow" `left`, and `top` values for styling callout arrows for giving your components
+ * a sense of directionality.
+ */
+
+ var Position = (function (_React$Component) {
+ function Position(props, context) {
+ _classCallCheck(this, Position);
+
+ _React$Component.call(this, props, context);
+
+ this.state = {
+ positionLeft: null,
+ positionTop: null,
+ arrowOffsetLeft: null,
+ arrowOffsetTop: null
+ };
+
+ this._needsFlush = false;
+ this._lastTarget = null;
+ }
+
+ _inherits(Position, _React$Component);
+
+ Position.prototype.componentDidMount = function componentDidMount() {
+ this.updatePosition();
+ };
+
+ Position.prototype.componentWillReceiveProps = function componentWillReceiveProps() {
+ this._needsFlush = true;
+ };
+
+ Position.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {
+ if (this._needsFlush) {
+ this._needsFlush = false;
+ this.updatePosition(prevProps.placement !== this.props.placement);
+ }
+ };
+
+ Position.prototype.componentWillUnmount = function componentWillUnmount() {
+ // Probably not necessary, but just in case holding a reference to the
+ // target causes problems somewhere.
+ this._lastTarget = null;
+ };
+
+ Position.prototype.render = function render() {
+ var _props = this.props;
+ var children = _props.children;
+ var className = _props.className;
+
+ var props = _objectWithoutProperties(_props, ['children', 'className']);
+
+ var _state = this.state;
+ var positionLeft = _state.positionLeft;
+ var positionTop = _state.positionTop;
+
+ var arrowPosition = _objectWithoutProperties(_state, ['positionLeft', 'positionTop']);
+
+ var child = _react2['default'].Children.only(children);
+ return _react.cloneElement(child, _extends({}, props, arrowPosition, {
+ //do we need to also forward positionLeft and positionTop if they are set to style?
+ positionLeft: positionLeft,
+ positionTop: positionTop,
+ className: _classnames2['default'](className, child.props.className),
+ style: _extends({}, child.props.style, {
+ left: positionLeft,
+ top: positionTop
+ })
+ }));
+ };
+
+ Position.prototype.getTargetSafe = function getTargetSafe() {
+ if (!this.props.target) {
+ return null;
+ }
+
+ var target = this.props.target(this.props);
+ if (!target) {
+ // This is so we can just use === check below on all falsy targets.
+ return null;
+ }
+
+ return target;
+ };
+
+ Position.prototype.updatePosition = function updatePosition(placementChanged) {
+ var target = this.getTargetSafe();
+
+ if (target === this._lastTarget && !placementChanged) {
+ return;
+ }
+
+ this._lastTarget = target;
+
+ if (!target) {
+ this.setState({
+ positionLeft: null,
+ positionTop: null,
+ arrowOffsetLeft: null,
+ arrowOffsetTop: null
+ });
+
+ return;
+ }
+
+ var overlay = _react2['default'].findDOMNode(this);
+ var container = _utilsGetContainer2['default'](this.props.container, _utilsOwnerDocument2['default'](this).body);
+
+ this.setState(_utilsOverlayPositionUtils.calcOverlayPosition(this.props.placement, overlay, target, container, this.props.containerPadding));
+ };
+
+ return Position;
+ })(_react2['default'].Component);
+
+ Position.propTypes = {
+ /**
+ * Function mapping props to a DOM node the component is positioned next to
+ */
+ target: _react2['default'].PropTypes.func,
+ /**
+ * "offsetParent" of the component
+ */
+ container: _reactPropTypesLibMountable2['default'],
+ /**
+ * Minimum spacing in pixels between container border and component border
+ */
+ containerPadding: _react2['default'].PropTypes.number,
+ /**
+ * How to position the component relative to the target
+ */
+ placement: _react2['default'].PropTypes.oneOf(['top', 'right', 'bottom', 'left'])
+ };
+
+ Position.displayName = 'Position';
+
+ Position.defaultProps = {
+ containerPadding: 0,
+ placement: 'right'
+ };
+
+ exports['default'] = Position;
+ module.exports = exports['default'];
+
+/***/ },
+/* 207 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _ownerDocument = __webpack_require__(106);
+
+ var _ownerDocument2 = _interopRequireDefault(_ownerDocument);
+
+ var _domHelpersQueryOffset = __webpack_require__(39);
+
+ var _domHelpersQueryOffset2 = _interopRequireDefault(_domHelpersQueryOffset);
+
+ var _domHelpersQueryPosition = __webpack_require__(49);
+
+ var _domHelpersQueryPosition2 = _interopRequireDefault(_domHelpersQueryPosition);
+
+ var _domHelpersQueryScrollTop = __webpack_require__(50);
+
+ var _domHelpersQueryScrollTop2 = _interopRequireDefault(_domHelpersQueryScrollTop);
+
+ var utils = {
+
+ getContainerDimensions: function getContainerDimensions(containerNode) {
+ var width = undefined,
+ height = undefined,
+ scroll = undefined;
+
+ if (containerNode.tagName === 'BODY') {
+ width = window.innerWidth;
+ height = window.innerHeight;
+
+ scroll = _domHelpersQueryScrollTop2['default'](_ownerDocument2['default'](containerNode).documentElement) || _domHelpersQueryScrollTop2['default'](containerNode);
+ } else {
+ var _getOffset = _domHelpersQueryOffset2['default'](containerNode);
+
+ width = _getOffset.width;
+ height = _getOffset.height;
+
+ scroll = _domHelpersQueryScrollTop2['default'](containerNode);
+ }
+
+ return { width: width, height: height, scroll: scroll };
+ },
+
+ getPosition: function getPosition(target, container) {
+ var offset = container.tagName === 'BODY' ? _domHelpersQueryOffset2['default'](target) : _domHelpersQueryPosition2['default'](target, container);
+
+ return offset;
+ },
+
+ calcOverlayPosition: function calcOverlayPosition(placement, overlayNode, target, container, padding) {
+ var childOffset = utils.getPosition(target, container);
+
+ var _getOffset2 = _domHelpersQueryOffset2['default'](overlayNode);
+
+ var overlayHeight = _getOffset2.height;
+ var overlayWidth = _getOffset2.width;
+
+ var positionLeft = undefined,
+ positionTop = undefined,
+ arrowOffsetLeft = undefined,
+ arrowOffsetTop = undefined;
+
+ if (placement === 'left' || placement === 'right') {
+ positionTop = childOffset.top + (childOffset.height - overlayHeight) / 2;
+
+ if (placement === 'left') {
+ positionLeft = childOffset.left - overlayWidth;
+ } else {
+ positionLeft = childOffset.left + childOffset.width;
+ }
+
+ var topDelta = getTopDelta(positionTop, overlayHeight, container, padding);
+
+ positionTop += topDelta;
+ arrowOffsetTop = 50 * (1 - 2 * topDelta / overlayHeight) + '%';
+ arrowOffsetLeft = void 0;
+ } else if (placement === 'top' || placement === 'bottom') {
+ positionLeft = childOffset.left + (childOffset.width - overlayWidth) / 2;
+
+ if (placement === 'top') {
+ positionTop = childOffset.top - overlayHeight;
+ } else {
+ positionTop = childOffset.top + childOffset.height;
+ }
+
+ var leftDelta = getLeftDelta(positionLeft, overlayWidth, container, padding);
+ positionLeft += leftDelta;
+ arrowOffsetLeft = 50 * (1 - 2 * leftDelta / overlayWidth) + '%';
+ arrowOffsetTop = void 0;
+ } else {
+ throw new Error('calcOverlayPosition(): No such placement of "' + placement + '" found.');
+ }
+
+ return { positionLeft: positionLeft, positionTop: positionTop, arrowOffsetLeft: arrowOffsetLeft, arrowOffsetTop: arrowOffsetTop };
+ }
+ };
+
+ function getTopDelta(top, overlayHeight, container, padding) {
+ var containerDimensions = utils.getContainerDimensions(container);
+ var containerScroll = containerDimensions.scroll;
+ var containerHeight = containerDimensions.height;
+
+ var topEdgeOffset = top - padding - containerScroll;
+ var bottomEdgeOffset = top + padding - containerScroll + overlayHeight;
+
+ if (topEdgeOffset < 0) {
+ return -topEdgeOffset;
+ } else if (bottomEdgeOffset > containerHeight) {
+ return containerHeight - bottomEdgeOffset;
+ } else {
+ return 0;
+ }
+ }
+
+ function getLeftDelta(left, overlayWidth, container, padding) {
+ var containerDimensions = utils.getContainerDimensions(container);
+ var containerWidth = containerDimensions.width;
+
+ var leftEdgeOffset = left - padding;
+ var rightEdgeOffset = left + padding + overlayWidth;
+
+ if (leftEdgeOffset < 0) {
+ return -leftEdgeOffset;
+ } else if (rightEdgeOffset > containerWidth) {
+ return containerWidth - rightEdgeOffset;
+ } else {
+ return 0;
+ }
+ }
+ exports['default'] = utils;
+ module.exports = exports['default'];
+
+/***/ },
+/* 208 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _common = __webpack_require__(193);
+
+ /**
+ * Checks whether a prop provides a type of element.
+ *
+ * The type of element can be provided in two forms:
+ * - tag name (string)
+ * - a return value of React.createClass(...)
+ *
+ * @param props
+ * @param propName
+ * @param componentName
+ * @returns {Error|undefined}
+ */
+
+ function validate(props, propName, componentName) {
+ var errBeginning = _common.errMsg(props, propName, componentName, '. Expected an Element `type`');
+
+ if (typeof props[propName] !== 'function') {
+ if (_react2['default'].isValidElement(props[propName])) {
+ return new Error(errBeginning + ', not an actual Element');
+ }
+
+ if (typeof props[propName] !== 'string') {
+ return new Error(errBeginning + ' such as a tag name or return value of React.createClass(...)');
+ }
+ }
+ }
+
+ exports['default'] = _common.createChainableTypeChecker(validate);
+ module.exports = exports['default'];
+
+/***/ },
+/* 209 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /*eslint-disable react/prop-types */
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _Object$keys = __webpack_require__(1)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var _utilsCreateContextWrapper = __webpack_require__(210);
+
+ var _utilsCreateContextWrapper2 = _interopRequireDefault(_utilsCreateContextWrapper);
+
+ var _Overlay = __webpack_require__(204);
+
+ var _Overlay2 = _interopRequireDefault(_Overlay);
+
+ var _reactLibWarning = __webpack_require__(29);
+
+ var _reactLibWarning2 = _interopRequireDefault(_reactLibWarning);
+
+ var _lodashObjectPick = __webpack_require__(211);
+
+ var _lodashObjectPick2 = _interopRequireDefault(_lodashObjectPick);
+
+ /**
+ * Check if value one is inside or equal to the of value
+ *
+ * @param {string} one
+ * @param {string|array} of
+ * @returns {boolean}
+ */
+ function isOneOf(one, of) {
+ if (Array.isArray(of)) {
+ return of.indexOf(one) >= 0;
+ }
+ return one === of;
+ }
+
+ var OverlayTrigger = _react2['default'].createClass({
+ displayName: 'OverlayTrigger',
+
+ propTypes: _extends({}, _Overlay2['default'].propTypes, {
+
+ /**
+ * Specify which action or actions trigger Overlay visibility
+ */
+ trigger: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.oneOf(['click', 'hover', 'focus']), _react2['default'].PropTypes.arrayOf(_react2['default'].PropTypes.oneOf(['click', 'hover', 'focus']))]),
+
+ /**
+ * A millisecond delay amount to show and hide the Overlay once triggered
+ */
+ delay: _react2['default'].PropTypes.number,
+ /**
+ * A millisecond delay amount before showing the Overlay once triggered.
+ */
+ delayShow: _react2['default'].PropTypes.number,
+ /**
+ * A millisecond delay amount before hiding the Overlay once triggered.
+ */
+ delayHide: _react2['default'].PropTypes.number,
+
+ /**
+ * The initial visibility state of the Overlay, for more nuanced visibility controll consider
+ * using the Overlay component directly.
+ */
+ defaultOverlayShown: _react2['default'].PropTypes.bool,
+
+ /**
+ * An element or text to overlay next to the target.
+ */
+ overlay: _react2['default'].PropTypes.node.isRequired,
+
+ /**
+ * @private
+ */
+ onBlur: _react2['default'].PropTypes.func,
+ /**
+ * @private
+ */
+ onClick: _react2['default'].PropTypes.func,
+ /**
+ * @private
+ */
+ onFocus: _react2['default'].PropTypes.func,
+ /**
+ * @private
+ */
+ onMouseEnter: _react2['default'].PropTypes.func,
+ /**
+ * @private
+ */
+ onMouseLeave: _react2['default'].PropTypes.func,
+
+ //override specific overlay props
+ /**
+ * @private
+ */
+ target: function target() {},
+ /**
+ * @private
+ */
+ onHide: function onHide() {},
+ /**
+ * @private
+ */
+ show: function show() {}
+ }),
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ defaultOverlayShown: false,
+ trigger: ['hover', 'focus']
+ };
+ },
+
+ getInitialState: function getInitialState() {
+ return {
+ isOverlayShown: this.props.defaultOverlayShown
+ };
+ },
+
+ show: function show() {
+ this.setState({
+ isOverlayShown: true
+ });
+ },
+
+ hide: function hide() {
+ this.setState({
+ isOverlayShown: false
+ });
+ },
+
+ toggle: function toggle() {
+ if (this.state.isOverlayShown) {
+ this.hide();
+ } else {
+ this.show();
+ }
+ },
+
+ componentDidMount: function componentDidMount() {
+ this._mountNode = document.createElement('div');
+ _react2['default'].render(this._overlay, this._mountNode);
+ },
+
+ componentWillUnmount: function componentWillUnmount() {
+ _react2['default'].unmountComponentAtNode(this._mountNode);
+ this._mountNode = null;
+ clearTimeout(this._hoverDelay);
+ },
+
+ componentDidUpdate: function componentDidUpdate() {
+ if (this._mountNode) {
+ _react2['default'].render(this._overlay, this._mountNode);
+ }
+ },
+
+ getOverlayTarget: function getOverlayTarget() {
+ return _react2['default'].findDOMNode(this);
+ },
+
+ getOverlay: function getOverlay() {
+ var overlayProps = _extends({}, _lodashObjectPick2['default'](this.props, _Object$keys(_Overlay2['default'].propTypes)), {
+ show: this.state.isOverlayShown,
+ onHide: this.hide,
+ target: this.getOverlayTarget,
+ onExit: this.props.onExit,
+ onExiting: this.props.onExiting,
+ onExited: this.props.onExited,
+ onEnter: this.props.onEnter,
+ onEntering: this.props.onEntering,
+ onEntered: this.props.onEntered
+ });
+
+ var overlay = _react.cloneElement(this.props.overlay, {
+ placement: overlayProps.placement,
+ container: overlayProps.container
+ });
+
+ return _react2['default'].createElement(
+ _Overlay2['default'],
+ overlayProps,
+ overlay
+ );
+ },
+
+ render: function render() {
+ var trigger = _react2['default'].Children.only(this.props.children);
+
+ var props = {
+ 'aria-describedby': this.props.overlay.props.id
+ };
+
+ // create in render otherwise owner is lost...
+ this._overlay = this.getOverlay();
+
+ props.onClick = _utilsCreateChainedFunction2['default'](trigger.props.onClick, this.props.onClick);
+
+ if (isOneOf('click', this.props.trigger)) {
+ props.onClick = _utilsCreateChainedFunction2['default'](this.toggle, props.onClick);
+ }
+
+ if (isOneOf('hover', this.props.trigger)) {
+ _reactLibWarning2['default'](!(this.props.trigger === 'hover'), '[react-bootstrap] Specifying only the `"hover"` trigger limits the visibilty of the overlay to just mouse users. ' + 'Consider also including the `"focus"` trigger so that touch and keyboard only users can see the overlay as well.');
+
+ props.onMouseOver = _utilsCreateChainedFunction2['default'](this.handleDelayedShow, this.props.onMouseOver);
+ props.onMouseOut = _utilsCreateChainedFunction2['default'](this.handleDelayedHide, this.props.onMouseOut);
+ }
+
+ if (isOneOf('focus', this.props.trigger)) {
+ props.onFocus = _utilsCreateChainedFunction2['default'](this.handleDelayedShow, this.props.onFocus);
+ props.onBlur = _utilsCreateChainedFunction2['default'](this.handleDelayedHide, this.props.onBlur);
+ }
+
+ return _react.cloneElement(trigger, props);
+ },
+
+ handleDelayedShow: function handleDelayedShow() {
+ var _this = this;
+
+ if (this._hoverDelay != null) {
+ clearTimeout(this._hoverDelay);
+ this._hoverDelay = null;
+ return;
+ }
+
+ var delay = this.props.delayShow != null ? this.props.delayShow : this.props.delay;
+
+ if (!delay) {
+ this.show();
+ return;
+ }
+
+ this._hoverDelay = setTimeout(function () {
+ _this._hoverDelay = null;
+ _this.show();
+ }, delay);
+ },
+
+ handleDelayedHide: function handleDelayedHide() {
+ var _this2 = this;
+
+ if (this._hoverDelay != null) {
+ clearTimeout(this._hoverDelay);
+ this._hoverDelay = null;
+ return;
+ }
+
+ var delay = this.props.delayHide != null ? this.props.delayHide : this.props.delay;
+
+ if (!delay) {
+ this.hide();
+ return;
+ }
+
+ this._hoverDelay = setTimeout(function () {
+ _this2._hoverDelay = null;
+ _this2.hide();
+ }, delay);
+ }
+
+ });
+
+ /**
+ * Creates a new OverlayTrigger class that forwards the relevant context
+ *
+ * This static method should only be called at the module level, instead of in
+ * e.g. a render() method, because it's expensive to create new classes.
+ *
+ * For example, you would want to have:
+ *
+ * > export default OverlayTrigger.withContext({
+ * > myContextKey: React.PropTypes.object
+ * > });
+ *
+ * and import this when needed.
+ */
+ OverlayTrigger.withContext = _utilsCreateContextWrapper2['default'](OverlayTrigger, 'overlay');
+
+ exports['default'] = OverlayTrigger;
+ module.exports = exports['default'];
+
+/***/ },
+/* 210 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _inherits = __webpack_require__(17)['default'];
+
+ var _classCallCheck = __webpack_require__(28)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+ exports['default'] = createContextWrapper;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ /**
+ * Creates new trigger class that injects context into overlay.
+ */
+
+ function createContextWrapper(Trigger, propName) {
+ return function (contextTypes) {
+ var ContextWrapper = (function (_React$Component) {
+ _inherits(ContextWrapper, _React$Component);
+
+ function ContextWrapper() {
+ _classCallCheck(this, ContextWrapper);
+
+ _React$Component.apply(this, arguments);
+ }
+
+ ContextWrapper.prototype.getChildContext = function getChildContext() {
+ return this.props.context;
+ };
+
+ ContextWrapper.prototype.render = function render() {
+ // Strip injected props from below.
+ var _props = this.props;
+ var wrapped = _props.wrapped;
+ var context = _props.context;
+
+ var props = _objectWithoutProperties(_props, ['wrapped', 'context']);
+
+ return _react2['default'].cloneElement(wrapped, props);
+ };
+
+ return ContextWrapper;
+ })(_react2['default'].Component);
+
+ ContextWrapper.childContextTypes = contextTypes;
+
+ var TriggerWithContext = (function () {
+ function TriggerWithContext() {
+ _classCallCheck(this, TriggerWithContext);
+ }
+
+ TriggerWithContext.prototype.render = function render() {
+ var props = _extends({}, this.props);
+ props[propName] = this.getWrappedOverlay();
+
+ return _react2['default'].createElement(
+ Trigger,
+ props,
+ this.props.children
+ );
+ };
+
+ TriggerWithContext.prototype.getWrappedOverlay = function getWrappedOverlay() {
+ return _react2['default'].createElement(ContextWrapper, {
+ context: this.context,
+ wrapped: this.props[propName]
+ });
+ };
+
+ return TriggerWithContext;
+ })();
+
+ TriggerWithContext.contextTypes = contextTypes;
+
+ return TriggerWithContext;
+ };
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 211 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseFlatten = __webpack_require__(165),
+ bindCallback = __webpack_require__(150),
+ pickByArray = __webpack_require__(167),
+ pickByCallback = __webpack_require__(168),
+ restParam = __webpack_require__(170);
+
+ /**
+ * Creates an object composed of the picked `object` properties. Property
+ * names may be specified as individual arguments or as arrays of property
+ * names. If `predicate` is provided it's invoked for each property of `object`
+ * picking the properties `predicate` returns truthy for. The predicate is
+ * bound to `thisArg` and invoked with three arguments: (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {Function|...(string|string[])} [predicate] The function invoked per
+ * iteration or property names to pick, specified as individual property
+ * names or arrays of property names.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'user': 'fred', 'age': 40 };
+ *
+ * _.pick(object, 'user');
+ * // => { 'user': 'fred' }
+ *
+ * _.pick(object, _.isString);
+ * // => { 'user': 'fred' }
+ */
+ var pick = restParam(function(object, props) {
+ if (object == null) {
+ return {};
+ }
+ return typeof props[0] == 'function'
+ ? pickByCallback(object, bindCallback(props[0], props[1], 3))
+ : pickByArray(object, baseFlatten(props));
+ });
+
+ module.exports = pick;
+
+
+/***/ },
+/* 212 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var PageHeader = _react2['default'].createClass({
+ displayName: 'PageHeader',
+
+ render: function render() {
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'page-header') }),
+ _react2['default'].createElement(
+ 'h1',
+ null,
+ this.props.children
+ )
+ );
+ }
+ });
+
+ exports['default'] = PageHeader;
+ module.exports = exports['default'];
+
+/***/ },
+/* 213 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _SafeAnchor = __webpack_require__(100);
+
+ var _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);
+
+ var PageItem = _react2['default'].createClass({
+ displayName: 'PageItem',
+
+ propTypes: {
+ href: _react2['default'].PropTypes.string,
+ target: _react2['default'].PropTypes.string,
+ title: _react2['default'].PropTypes.string,
+ disabled: _react2['default'].PropTypes.bool,
+ previous: _react2['default'].PropTypes.bool,
+ next: _react2['default'].PropTypes.bool,
+ onSelect: _react2['default'].PropTypes.func,
+ eventKey: _react2['default'].PropTypes.any
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ disabled: false,
+ previous: false,
+ next: false
+ };
+ },
+
+ render: function render() {
+ var classes = {
+ 'disabled': this.props.disabled,
+ 'previous': this.props.previous,
+ 'next': this.props.next
+ };
+
+ return _react2['default'].createElement(
+ 'li',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, classes) }),
+ _react2['default'].createElement(
+ _SafeAnchor2['default'],
+ {
+ href: this.props.href,
+ title: this.props.title,
+ target: this.props.target,
+ onClick: this.handleSelect },
+ this.props.children
+ )
+ );
+ },
+
+ handleSelect: function handleSelect(e) {
+ if (this.props.onSelect || this.props.disabled) {
+ e.preventDefault();
+
+ if (!this.props.disabled) {
+ this.props.onSelect(this.props.eventKey, this.props.href, this.props.target);
+ }
+ }
+ }
+ });
+
+ exports['default'] = PageItem;
+ module.exports = exports['default'];
+
+/***/ },
+/* 214 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var Pager = _react2['default'].createClass({
+ displayName: 'Pager',
+
+ propTypes: {
+ onSelect: _react2['default'].PropTypes.func
+ },
+
+ render: function render() {
+ return _react2['default'].createElement(
+ 'ul',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, 'pager') }),
+ _utilsValidComponentChildren2['default'].map(this.props.children, this.renderPageItem)
+ );
+ },
+
+ renderPageItem: function renderPageItem(child, index) {
+ return _react.cloneElement(child, {
+ onSelect: _utilsCreateChainedFunction2['default'](child.props.onSelect, this.props.onSelect),
+ key: child.key ? child.key : index
+ });
+ }
+ });
+
+ exports['default'] = Pager;
+ module.exports = exports['default'];
+
+/***/ },
+/* 215 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _PaginationButton = __webpack_require__(216);
+
+ var _PaginationButton2 = _interopRequireDefault(_PaginationButton);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var _SafeAnchor = __webpack_require__(100);
+
+ var _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);
+
+ var Pagination = _react2['default'].createClass({
+ displayName: 'Pagination',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ activePage: _react2['default'].PropTypes.number,
+ items: _react2['default'].PropTypes.number,
+ maxButtons: _react2['default'].PropTypes.number,
+ ellipsis: _react2['default'].PropTypes.bool,
+ first: _react2['default'].PropTypes.bool,
+ last: _react2['default'].PropTypes.bool,
+ prev: _react2['default'].PropTypes.bool,
+ next: _react2['default'].PropTypes.bool,
+ onSelect: _react2['default'].PropTypes.func,
+ /**
+ * You can use a custom element for the buttons
+ */
+ buttonComponentClass: _utilsCustomPropTypes2['default'].elementType
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ activePage: 1,
+ items: 1,
+ maxButtons: 0,
+ first: false,
+ last: false,
+ prev: false,
+ next: false,
+ ellipsis: true,
+ buttonComponentClass: _SafeAnchor2['default'],
+ bsClass: 'pagination'
+ };
+ },
+
+ renderPageButtons: function renderPageButtons() {
+ var pageButtons = [];
+ var startPage = undefined,
+ endPage = undefined,
+ hasHiddenPagesAfter = undefined;
+ var _props = this.props;
+ var maxButtons = _props.maxButtons;
+ var activePage = _props.activePage;
+ var items = _props.items;
+ var onSelect = _props.onSelect;
+ var ellipsis = _props.ellipsis;
+ var buttonComponentClass = _props.buttonComponentClass;
+
+ if (maxButtons) {
+ var hiddenPagesBefore = activePage - parseInt(maxButtons / 2, 10);
+ startPage = hiddenPagesBefore > 1 ? hiddenPagesBefore : 1;
+ hasHiddenPagesAfter = startPage + maxButtons <= items;
+
+ if (!hasHiddenPagesAfter) {
+ endPage = items;
+ startPage = items - maxButtons + 1;
+ if (startPage < 1) {
+ startPage = 1;
+ }
+ } else {
+ endPage = startPage + maxButtons - 1;
+ }
+ } else {
+ startPage = 1;
+ endPage = items;
+ }
+
+ for (var pagenumber = startPage; pagenumber <= endPage; pagenumber++) {
+ pageButtons.push(_react2['default'].createElement(
+ _PaginationButton2['default'],
+ {
+ key: pagenumber,
+ eventKey: pagenumber,
+ active: pagenumber === activePage,
+ onSelect: onSelect,
+ buttonComponentClass: buttonComponentClass },
+ pagenumber
+ ));
+ }
+
+ if (maxButtons && hasHiddenPagesAfter && ellipsis) {
+ pageButtons.push(_react2['default'].createElement(
+ _PaginationButton2['default'],
+ {
+ key: 'ellipsis',
+ disabled: true,
+ buttonComponentClass: buttonComponentClass },
+ _react2['default'].createElement(
+ 'span',
+ { 'aria-label': 'More' },
+ '...'
+ )
+ ));
+ }
+
+ return pageButtons;
+ },
+
+ renderPrev: function renderPrev() {
+ if (!this.props.prev) {
+ return null;
+ }
+
+ return _react2['default'].createElement(
+ _PaginationButton2['default'],
+ {
+ key: 'prev',
+ eventKey: this.props.activePage - 1,
+ disabled: this.props.activePage === 1,
+ onSelect: this.props.onSelect,
+ buttonComponentClass: this.props.buttonComponentClass },
+ _react2['default'].createElement(
+ 'span',
+ { 'aria-label': 'Previous' },
+ '‹'
+ )
+ );
+ },
+
+ renderNext: function renderNext() {
+ if (!this.props.next) {
+ return null;
+ }
+
+ return _react2['default'].createElement(
+ _PaginationButton2['default'],
+ {
+ key: 'next',
+ eventKey: this.props.activePage + 1,
+ disabled: this.props.activePage >= this.props.items,
+ onSelect: this.props.onSelect,
+ buttonComponentClass: this.props.buttonComponentClass },
+ _react2['default'].createElement(
+ 'span',
+ { 'aria-label': 'Next' },
+ '›'
+ )
+ );
+ },
+
+ renderFirst: function renderFirst() {
+ if (!this.props.first) {
+ return null;
+ }
+
+ return _react2['default'].createElement(
+ _PaginationButton2['default'],
+ {
+ key: 'first',
+ eventKey: 1,
+ disabled: this.props.activePage === 1,
+ onSelect: this.props.onSelect,
+ buttonComponentClass: this.props.buttonComponentClass },
+ _react2['default'].createElement(
+ 'span',
+ { 'aria-label': 'First' },
+ '«'
+ )
+ );
+ },
+
+ renderLast: function renderLast() {
+ if (!this.props.last) {
+ return null;
+ }
+
+ return _react2['default'].createElement(
+ _PaginationButton2['default'],
+ {
+ key: 'last',
+ eventKey: this.props.items,
+ disabled: this.props.activePage >= this.props.items,
+ onSelect: this.props.onSelect,
+ buttonComponentClass: this.props.buttonComponentClass },
+ _react2['default'].createElement(
+ 'span',
+ { 'aria-label': 'Last' },
+ '»'
+ )
+ );
+ },
+
+ render: function render() {
+ return _react2['default'].createElement(
+ 'ul',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, this.getBsClassSet()) }),
+ this.renderFirst(),
+ this.renderPrev(),
+ this.renderPageButtons(),
+ this.renderNext(),
+ this.renderLast()
+ );
+ }
+ });
+
+ exports['default'] = Pagination;
+ module.exports = exports['default'];
+
+/***/ },
+/* 216 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _utilsCreateSelectedEvent = __webpack_require__(217);
+
+ var _utilsCreateSelectedEvent2 = _interopRequireDefault(_utilsCreateSelectedEvent);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var PaginationButton = _react2['default'].createClass({
+ displayName: 'PaginationButton',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ className: _react2['default'].PropTypes.string,
+ eventKey: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number]),
+ onSelect: _react2['default'].PropTypes.func,
+ disabled: _react2['default'].PropTypes.bool,
+ active: _react2['default'].PropTypes.bool,
+ /**
+ * You can use a custom element for this component
+ */
+ buttonComponentClass: _utilsCustomPropTypes2['default'].elementType
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ active: false,
+ disabled: false
+ };
+ },
+
+ handleClick: function handleClick(event) {
+ if (this.props.disabled) {
+ return;
+ }
+
+ if (this.props.onSelect) {
+ var selectedEvent = _utilsCreateSelectedEvent2['default'](this.props.eventKey);
+ this.props.onSelect(event, selectedEvent);
+ }
+ },
+
+ render: function render() {
+ var classes = _extends({
+ active: this.props.active,
+ disabled: this.props.disabled
+ }, this.getBsClassSet());
+
+ var _props = this.props;
+ var className = _props.className;
+
+ var anchorProps = _objectWithoutProperties(_props, ['className']);
+
+ var ButtonComponentClass = this.props.buttonComponentClass;
+
+ return _react2['default'].createElement(
+ 'li',
+ { className: _classnames2['default'](className, classes) },
+ _react2['default'].createElement(ButtonComponentClass, _extends({}, anchorProps, {
+ onClick: this.handleClick }))
+ );
+ }
+ });
+
+ exports['default'] = PaginationButton;
+ module.exports = exports['default'];
+
+/***/ },
+/* 217 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ exports["default"] = createSelectedEvent;
+
+ function createSelectedEvent(eventKey) {
+ var selectionPrevented = false;
+
+ return {
+ eventKey: eventKey,
+
+ preventSelection: function preventSelection() {
+ selectionPrevented = true;
+ },
+
+ isSelectionPrevented: function isSelectionPrevented() {
+ return selectionPrevented;
+ }
+ };
+ }
+
+ module.exports = exports["default"];
+
+/***/ },
+/* 218 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _Collapse = __webpack_require__(89);
+
+ var _Collapse2 = _interopRequireDefault(_Collapse);
+
+ var Panel = _react2['default'].createClass({
+ displayName: 'Panel',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ collapsible: _react2['default'].PropTypes.bool,
+ onSelect: _react2['default'].PropTypes.func,
+ header: _react2['default'].PropTypes.node,
+ id: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number]),
+ footer: _react2['default'].PropTypes.node,
+ defaultExpanded: _react2['default'].PropTypes.bool,
+ expanded: _react2['default'].PropTypes.bool,
+ eventKey: _react2['default'].PropTypes.any,
+ headerRole: _react2['default'].PropTypes.string,
+ panelRole: _react2['default'].PropTypes.string
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'panel',
+ bsStyle: 'default',
+ defaultExpanded: false
+ };
+ },
+
+ getInitialState: function getInitialState() {
+ return {
+ expanded: this.props.defaultExpanded
+ };
+ },
+
+ handleSelect: function handleSelect(e) {
+ e.selected = true;
+
+ if (this.props.onSelect) {
+ this.props.onSelect(e, this.props.eventKey);
+ } else {
+ e.preventDefault();
+ }
+
+ if (e.selected) {
+ this.handleToggle();
+ }
+ },
+
+ handleToggle: function handleToggle() {
+ this.setState({ expanded: !this.state.expanded });
+ },
+
+ isExpanded: function isExpanded() {
+ return this.props.expanded != null ? this.props.expanded : this.state.expanded;
+ },
+
+ render: function render() {
+ var _props = this.props;
+ var headerRole = _props.headerRole;
+ var panelRole = _props.panelRole;
+
+ var props = _objectWithoutProperties(_props, ['headerRole', 'panelRole']);
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, props, {
+ className: _classnames2['default'](this.props.className, this.getBsClassSet()),
+ id: this.props.collapsible ? null : this.props.id, onSelect: null }),
+ this.renderHeading(headerRole),
+ this.props.collapsible ? this.renderCollapsibleBody(panelRole) : this.renderBody(),
+ this.renderFooter()
+ );
+ },
+
+ renderCollapsibleBody: function renderCollapsibleBody(panelRole) {
+ var props = {
+ className: this.prefixClass('collapse'),
+ id: this.props.id,
+ ref: 'panel',
+ 'aria-hidden': !this.isExpanded()
+ };
+ if (panelRole) {
+ props.role = panelRole;
+ }
+
+ return _react2['default'].createElement(
+ _Collapse2['default'],
+ { 'in': this.isExpanded() },
+ _react2['default'].createElement(
+ 'div',
+ props,
+ this.renderBody()
+ )
+ );
+ },
+
+ renderBody: function renderBody() {
+ var allChildren = this.props.children;
+ var bodyElements = [];
+ var panelBodyChildren = [];
+ var bodyClass = this.prefixClass('body');
+
+ function getProps() {
+ return { key: bodyElements.length };
+ }
+
+ function addPanelChild(child) {
+ bodyElements.push(_react.cloneElement(child, getProps()));
+ }
+
+ function addPanelBody(children) {
+ bodyElements.push(_react2['default'].createElement(
+ 'div',
+ _extends({ className: bodyClass }, getProps()),
+ children
+ ));
+ }
+
+ function maybeRenderPanelBody() {
+ if (panelBodyChildren.length === 0) {
+ return;
+ }
+
+ addPanelBody(panelBodyChildren);
+ panelBodyChildren = [];
+ }
+
+ // Handle edge cases where we should not iterate through children.
+ if (!Array.isArray(allChildren) || allChildren.length === 0) {
+ if (this.shouldRenderFill(allChildren)) {
+ addPanelChild(allChildren);
+ } else {
+ addPanelBody(allChildren);
+ }
+ } else {
+
+ allChildren.forEach((function (child) {
+ if (this.shouldRenderFill(child)) {
+ maybeRenderPanelBody();
+
+ // Separately add the filled element.
+ addPanelChild(child);
+ } else {
+ panelBodyChildren.push(child);
+ }
+ }).bind(this));
+
+ maybeRenderPanelBody();
+ }
+
+ return bodyElements;
+ },
+
+ shouldRenderFill: function shouldRenderFill(child) {
+ return _react2['default'].isValidElement(child) && child.props.fill != null;
+ },
+
+ renderHeading: function renderHeading(headerRole) {
+ var header = this.props.header;
+
+ if (!header) {
+ return null;
+ }
+
+ if (!_react2['default'].isValidElement(header) || Array.isArray(header)) {
+ header = this.props.collapsible ? this.renderCollapsibleTitle(header, headerRole) : header;
+ } else {
+ var className = _classnames2['default'](this.prefixClass('title'), header.props.className);
+
+ if (this.props.collapsible) {
+ header = _react.cloneElement(header, {
+ className: className,
+ children: this.renderAnchor(header.props.children, headerRole)
+ });
+ } else {
+ header = _react.cloneElement(header, { className: className });
+ }
+ }
+
+ return _react2['default'].createElement(
+ 'div',
+ { className: this.prefixClass('heading') },
+ header
+ );
+ },
+
+ renderAnchor: function renderAnchor(header, headerRole) {
+ return _react2['default'].createElement(
+ 'a',
+ {
+ href: '#' + (this.props.id || ''),
+ 'aria-controls': this.props.collapsible ? this.props.id : null,
+ className: this.isExpanded() ? null : 'collapsed',
+ 'aria-expanded': this.isExpanded(),
+ 'aria-selected': this.isExpanded(),
+ onClick: this.handleSelect,
+ role: headerRole },
+ header
+ );
+ },
+
+ renderCollapsibleTitle: function renderCollapsibleTitle(header, headerRole) {
+ return _react2['default'].createElement(
+ 'h4',
+ { className: this.prefixClass('title'), role: 'presentation' },
+ this.renderAnchor(header, headerRole)
+ );
+ },
+
+ renderFooter: function renderFooter() {
+ if (!this.props.footer) {
+ return null;
+ }
+
+ return _react2['default'].createElement(
+ 'div',
+ { className: this.prefixClass('footer') },
+ this.props.footer
+ );
+ }
+ });
+
+ exports['default'] = Panel;
+ module.exports = exports['default'];
+
+/***/ },
+/* 219 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var Popover = _react2['default'].createClass({
+ displayName: 'Popover',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ /**
+ * An html id attribute, necessary for accessibility
+ * @type {string}
+ * @required
+ */
+ id: _utilsCustomPropTypes2['default'].isRequiredForA11y(_react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number])),
+
+ /**
+ * Sets the direction the Popover is positioned towards.
+ */
+ placement: _react2['default'].PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
+
+ /**
+ * The "left" position value for the Popover.
+ */
+ positionLeft: _react2['default'].PropTypes.number,
+ /**
+ * The "top" position value for the Popover.
+ */
+ positionTop: _react2['default'].PropTypes.number,
+ /**
+ * The "left" position value for the Popover arrow.
+ */
+ arrowOffsetLeft: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),
+ /**
+ * The "top" position value for the Popover arrow.
+ */
+ arrowOffsetTop: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),
+ /**
+ * Title text
+ */
+ title: _react2['default'].PropTypes.node
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ placement: 'right'
+ };
+ },
+
+ render: function render() {
+ var _classes;
+
+ var classes = (_classes = {
+ 'popover': true
+ }, _classes[this.props.placement] = true, _classes);
+
+ var style = _extends({
+ 'left': this.props.positionLeft,
+ 'top': this.props.positionTop,
+ 'display': 'block'
+ }, this.props.style);
+
+ // eslint-disable-line react/prop-types
+ var arrowStyle = {
+ 'left': this.props.arrowOffsetLeft,
+ 'top': this.props.arrowOffsetTop
+ };
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({ role: 'tooltip' }, this.props, { className: _classnames2['default'](this.props.className, classes), style: style, title: null }),
+ _react2['default'].createElement('div', { className: 'arrow', style: arrowStyle }),
+ this.props.title ? this.renderTitle() : null,
+ _react2['default'].createElement(
+ 'div',
+ { className: 'popover-content' },
+ this.props.children
+ )
+ );
+ },
+
+ renderTitle: function renderTitle() {
+ return _react2['default'].createElement(
+ 'h3',
+ { className: 'popover-title' },
+ this.props.title
+ );
+ }
+ });
+
+ exports['default'] = Popover;
+ module.exports = exports['default'];
+ // we don't want to expose the `style` property
+
+/***/ },
+/* 220 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* eslint react/prop-types: [2, {ignore: "bsStyle"}] */
+ /* BootstrapMixin contains `bsStyle` type validation */
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _Interpolate = __webpack_require__(180);
+
+ var _Interpolate2 = _interopRequireDefault(_Interpolate);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var ProgressBar = _react2['default'].createClass({
+ displayName: 'ProgressBar',
+
+ propTypes: {
+ min: _react.PropTypes.number,
+ now: _react.PropTypes.number,
+ max: _react.PropTypes.number,
+ label: _react.PropTypes.node,
+ srOnly: _react.PropTypes.bool,
+ striped: _react.PropTypes.bool,
+ active: _react.PropTypes.bool,
+ children: onlyProgressBar,
+ className: _react2['default'].PropTypes.string,
+ interpolateClass: _react.PropTypes.node,
+ /**
+ * @private
+ */
+ isChild: _react.PropTypes.bool
+ },
+
+ mixins: [_BootstrapMixin2['default']],
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'progress-bar',
+ min: 0,
+ max: 100,
+ active: false,
+ isChild: false,
+ srOnly: false,
+ striped: false
+ };
+ },
+
+ getPercentage: function getPercentage(now, min, max) {
+ var roundPrecision = 1000;
+ return Math.round((now - min) / (max - min) * 100 * roundPrecision) / roundPrecision;
+ },
+
+ render: function render() {
+ if (this.props.isChild) {
+ return this.renderProgressBar();
+ }
+
+ var content = undefined;
+
+ if (this.props.children) {
+ content = _utilsValidComponentChildren2['default'].map(this.props.children, this.renderChildBar);
+ } else {
+ content = this.renderProgressBar();
+ }
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ className: _classnames2['default'](this.props.className, 'progress'),
+ min: null,
+ max: null,
+ label: null,
+ 'aria-valuetext': null
+ }),
+ content
+ );
+ },
+
+ renderChildBar: function renderChildBar(child, index) {
+ return _react.cloneElement(child, {
+ isChild: true,
+ key: child.key ? child.key : index
+ });
+ },
+
+ renderProgressBar: function renderProgressBar() {
+ var _props = this.props;
+ var className = _props.className;
+ var label = _props.label;
+ var now = _props.now;
+ var min = _props.min;
+ var max = _props.max;
+
+ var props = _objectWithoutProperties(_props, ['className', 'label', 'now', 'min', 'max']);
+
+ var percentage = this.getPercentage(now, min, max);
+
+ if (typeof label === 'string') {
+ label = this.renderLabel(percentage);
+ }
+
+ if (this.props.srOnly) {
+ label = _react2['default'].createElement(
+ 'span',
+ { className: 'sr-only' },
+ label
+ );
+ }
+
+ var classes = _classnames2['default'](className, this.getBsClassSet(), {
+ active: this.props.active,
+ 'progress-bar-striped': this.props.active || this.props.striped
+ });
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, props, {
+ className: classes,
+ role: 'progressbar',
+ style: { width: percentage + '%' },
+ 'aria-valuenow': this.props.now,
+ 'aria-valuemin': this.props.min,
+ 'aria-valuemax': this.props.max }),
+ label
+ );
+ },
+
+ renderLabel: function renderLabel(percentage) {
+ var InterpolateClass = this.props.interpolateClass || _Interpolate2['default'];
+
+ return _react2['default'].createElement(
+ InterpolateClass,
+ {
+ now: this.props.now,
+ min: this.props.min,
+ max: this.props.max,
+ percent: percentage,
+ bsStyle: this.props.bsStyle },
+ this.props.label
+ );
+ }
+ });
+
+ /**
+ * Custom propTypes checker
+ */
+ function onlyProgressBar(props, propName, componentName) {
+ if (props[propName]) {
+ var _ret = (function () {
+ var error = undefined,
+ childIdentifier = undefined;
+
+ _react2['default'].Children.forEach(props[propName], function (child) {
+ if (child.type !== ProgressBar) {
+ childIdentifier = child.type.displayName ? child.type.displayName : child.type;
+ error = new Error('Children of ' + componentName + ' can contain only ProgressBar components. Found ' + childIdentifier);
+ }
+ });
+
+ return {
+ v: error
+ };
+ })();
+
+ if (typeof _ret === 'object') return _ret.v;
+ }
+ }
+
+ exports['default'] = ProgressBar;
+ module.exports = exports['default'];
+
+/***/ },
+/* 221 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var Row = _react2['default'].createClass({
+ displayName: 'Row',
+
+ propTypes: {
+ /**
+ * You can use a custom element for this component
+ */
+ componentClass: _utilsCustomPropTypes2['default'].elementType
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ componentClass: 'div'
+ };
+ },
+
+ render: function render() {
+ var ComponentClass = this.props.componentClass;
+
+ return _react2['default'].createElement(
+ ComponentClass,
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'row') }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Row;
+ module.exports = exports['default'];
+
+/***/ },
+/* 222 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var _utilsCreateChainedFunction = __webpack_require__(56);
+
+ var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _SafeAnchor = __webpack_require__(100);
+
+ var _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);
+
+ var SubNav = _react2['default'].createClass({
+ displayName: 'SubNav',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ onSelect: _react2['default'].PropTypes.func,
+ active: _react2['default'].PropTypes.bool,
+ activeHref: _react2['default'].PropTypes.string,
+ activeKey: _react2['default'].PropTypes.any,
+ disabled: _react2['default'].PropTypes.bool,
+ eventKey: _react2['default'].PropTypes.any,
+ href: _react2['default'].PropTypes.string,
+ title: _react2['default'].PropTypes.string,
+ text: _react2['default'].PropTypes.node,
+ target: _react2['default'].PropTypes.string
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'nav',
+ active: false,
+ disabled: false
+ };
+ },
+
+ handleClick: function handleClick(e) {
+ if (this.props.onSelect) {
+ e.preventDefault();
+
+ if (!this.props.disabled) {
+ this.props.onSelect(this.props.eventKey, this.props.href, this.props.target);
+ }
+ }
+ },
+
+ isActive: function isActive() {
+ return this.isChildActive(this);
+ },
+
+ isChildActive: function isChildActive(child) {
+ if (child.props.active) {
+ return true;
+ }
+
+ if (this.props.activeKey != null && this.props.activeKey === child.props.eventKey) {
+ return true;
+ }
+
+ if (this.props.activeHref != null && this.props.activeHref === child.props.href) {
+ return true;
+ }
+
+ if (child.props.children) {
+ var isActive = false;
+
+ _utilsValidComponentChildren2['default'].forEach(child.props.children, function (grandchild) {
+ if (this.isChildActive(grandchild)) {
+ isActive = true;
+ }
+ }, this);
+
+ return isActive;
+ }
+
+ return false;
+ },
+
+ getChildActiveProp: function getChildActiveProp(child) {
+ if (child.props.active) {
+ return true;
+ }
+ if (this.props.activeKey != null) {
+ if (child.props.eventKey === this.props.activeKey) {
+ return true;
+ }
+ }
+ if (this.props.activeHref != null) {
+ if (child.props.href === this.props.activeHref) {
+ return true;
+ }
+ }
+
+ return child.props.active;
+ },
+
+ render: function render() {
+ var classes = {
+ 'active': this.isActive(),
+ 'disabled': this.props.disabled
+ };
+
+ return _react2['default'].createElement(
+ 'li',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ _react2['default'].createElement(
+ _SafeAnchor2['default'],
+ {
+ href: this.props.href,
+ title: this.props.title,
+ target: this.props.target,
+ onClick: this.handleClick },
+ this.props.text
+ ),
+ _react2['default'].createElement(
+ 'ul',
+ { className: 'nav' },
+ _utilsValidComponentChildren2['default'].map(this.props.children, this.renderNavItem)
+ )
+ );
+ },
+
+ renderNavItem: function renderNavItem(child, index) {
+ return _react.cloneElement(child, {
+ active: this.getChildActiveProp(child),
+ onSelect: _utilsCreateChainedFunction2['default'](child.props.onSelect, this.props.onSelect),
+ key: child.key ? child.key : index
+ });
+ }
+ });
+
+ exports['default'] = SubNav;
+ module.exports = exports['default'];
+
+/***/ },
+/* 223 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _utilsTransitionEvents = __webpack_require__(85);
+
+ var _utilsTransitionEvents2 = _interopRequireDefault(_utilsTransitionEvents);
+
+ var Tab = _react2['default'].createClass({
+ displayName: 'Tab',
+
+ propTypes: {
+ /**
+ * @private
+ */
+ active: _react2['default'].PropTypes.bool,
+ animation: _react2['default'].PropTypes.bool,
+ /**
+ * It is used by 'Tabs' - parent component
+ * @private
+ */
+ onAnimateOutEnd: _react2['default'].PropTypes.func,
+ disabled: _react2['default'].PropTypes.bool,
+ title: _react2['default'].PropTypes.node
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ animation: true
+ };
+ },
+
+ getInitialState: function getInitialState() {
+ return {
+ animateIn: false,
+ animateOut: false
+ };
+ },
+
+ componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
+ if (this.props.animation) {
+ if (!this.state.animateIn && nextProps.active && !this.props.active) {
+ this.setState({
+ animateIn: true
+ });
+ } else if (!this.state.animateOut && !nextProps.active && this.props.active) {
+ this.setState({
+ animateOut: true
+ });
+ }
+ }
+ },
+
+ componentDidUpdate: function componentDidUpdate() {
+ if (this.state.animateIn) {
+ setTimeout(this.startAnimateIn, 0);
+ }
+ if (this.state.animateOut) {
+ _utilsTransitionEvents2['default'].addEndEventListener(_react2['default'].findDOMNode(this), this.stopAnimateOut);
+ }
+ },
+
+ startAnimateIn: function startAnimateIn() {
+ if (this.isMounted()) {
+ this.setState({
+ animateIn: false
+ });
+ }
+ },
+
+ stopAnimateOut: function stopAnimateOut() {
+ if (this.isMounted()) {
+ this.setState({
+ animateOut: false
+ });
+
+ if (this.props.onAnimateOutEnd) {
+ this.props.onAnimateOutEnd();
+ }
+ }
+ },
+
+ render: function render() {
+ var classes = {
+ 'tab-pane': true,
+ 'fade': true,
+ 'active': this.props.active || this.state.animateOut,
+ 'in': this.props.active && !this.state.animateIn
+ };
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, {
+ title: undefined,
+ role: 'tabpanel',
+ 'aria-hidden': !this.props.active,
+ className: _classnames2['default'](this.props.className, classes)
+ }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Tab;
+ module.exports = exports['default'];
+
+/***/ },
+/* 224 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _Tabs = __webpack_require__(225);
+
+ var _Tabs2 = _interopRequireDefault(_Tabs);
+
+ var _TabPane = __webpack_require__(226);
+
+ var _TabPane2 = _interopRequireDefault(_TabPane);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ var TabbedArea = _react2['default'].createClass({
+ displayName: 'TabbedArea',
+
+ componentWillMount: function componentWillMount() {
+ _utilsDeprecationWarning2['default']('TabbedArea', 'Tabs', 'https://github.com/react-bootstrap/react-bootstrap/pull/1091');
+ },
+
+ render: function render() {
+ var _props = this.props;
+ var children = _props.children;
+
+ var props = _objectWithoutProperties(_props, ['children']);
+
+ var tabs = _utilsValidComponentChildren2['default'].map(children, function (child) {
+ var _child$props = child.props;
+ var title = _child$props.tab;
+
+ var others = _objectWithoutProperties(_child$props, ['tab']);
+
+ return _react2['default'].createElement(_TabPane2['default'], _extends({ title: title }, others));
+ });
+
+ return _react2['default'].createElement(
+ _Tabs2['default'],
+ props,
+ tabs
+ );
+ }
+ });
+
+ exports['default'] = TabbedArea;
+ module.exports = exports['default'];
+
+/***/ },
+/* 225 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _objectWithoutProperties = __webpack_require__(67)['default'];
+
+ var _Object$keys = __webpack_require__(1)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _Col = __webpack_require__(86);
+
+ var _Col2 = _interopRequireDefault(_Col);
+
+ var _Grid = __webpack_require__(176);
+
+ var _Grid2 = _interopRequireDefault(_Grid);
+
+ var _Nav = __webpack_require__(201);
+
+ var _Nav2 = _interopRequireDefault(_Nav);
+
+ var _NavItem = __webpack_require__(203);
+
+ var _NavItem2 = _interopRequireDefault(_NavItem);
+
+ var _Row = __webpack_require__(221);
+
+ var _Row2 = _interopRequireDefault(_Row);
+
+ var _styleMaps = __webpack_require__(70);
+
+ var _styleMaps2 = _interopRequireDefault(_styleMaps);
+
+ var _utilsValidComponentChildren = __webpack_require__(55);
+
+ var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
+
+ var paneId = function paneId(props, child) {
+ return child.props.id ? child.props.id : props.id && props.id + '___pane___' + child.props.eventKey;
+ };
+ var tabId = function tabId(props, child) {
+ return child.props.id ? child.props.id + '___tab' : props.id && props.id + '___tab___' + child.props.eventKey;
+ };
+
+ function getDefaultActiveKeyFromChildren(children) {
+ var defaultActiveKey = undefined;
+
+ _utilsValidComponentChildren2['default'].forEach(children, function (child) {
+ if (defaultActiveKey == null) {
+ defaultActiveKey = child.props.eventKey;
+ }
+ });
+
+ return defaultActiveKey;
+ }
+
+ var Tabs = _react2['default'].createClass({
+ displayName: 'Tabs',
+
+ propTypes: {
+ activeKey: _react2['default'].PropTypes.any,
+ defaultActiveKey: _react2['default'].PropTypes.any,
+ /**
+ * Navigation style for tabs
+ *
+ * If not specified, it will be treated as `'tabs'` when vertically
+ * positioned and `'pills'` when horizontally positioned.
+ */
+ bsStyle: _react2['default'].PropTypes.oneOf(['tabs', 'pills']),
+ animation: _react2['default'].PropTypes.bool,
+ id: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number]),
+ onSelect: _react2['default'].PropTypes.func,
+ position: _react2['default'].PropTypes.oneOf(['top', 'left', 'right']),
+ /**
+ * Number of grid columns for the tabs if horizontally positioned
+ *
+ * This accepts either a single width or a mapping of size to width.
+ */
+ tabWidth: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.object]),
+ /**
+ * Number of grid columns for the panes if horizontally positioned
+ *
+ * This accepts either a single width or a mapping of size to width. If not
+ * specified, it will be treated as `styleMaps.GRID_COLUMNS` minus
+ * `tabWidth`.
+ */
+ paneWidth: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.object])
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ animation: true,
+ tabWidth: 2,
+ position: 'top'
+ };
+ },
+
+ getInitialState: function getInitialState() {
+ var defaultActiveKey = this.props.defaultActiveKey != null ? this.props.defaultActiveKey : getDefaultActiveKeyFromChildren(this.props.children);
+
+ return {
+ activeKey: defaultActiveKey,
+ previousActiveKey: null
+ };
+ },
+
+ componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
+ var _this = this;
+
+ if (nextProps.activeKey != null && nextProps.activeKey !== this.props.activeKey) {
+ (function () {
+ // check if the 'previousActiveKey' child still exists
+ var previousActiveKey = _this.props.activeKey;
+ _react2['default'].Children.forEach(nextProps.children, function (child) {
+ if (_react2['default'].isValidElement(child)) {
+ if (child.props.eventKey === previousActiveKey) {
+ _this.setState({
+ previousActiveKey: previousActiveKey
+ });
+ return;
+ }
+ }
+ });
+ })();
+ }
+ },
+
+ handlePaneAnimateOutEnd: function handlePaneAnimateOutEnd() {
+ this.setState({
+ previousActiveKey: null
+ });
+ },
+
+ render: function render() {
+ var _props = this.props;
+ var id = _props.id;
+ var className = _props.className;
+ var style = _props.style;
+ var position = _props.position;
+ var bsStyle = _props.bsStyle;
+ var tabWidth = _props.tabWidth;
+ var paneWidth = _props.paneWidth;
+ var children = _props.children;
+
+ var props = _objectWithoutProperties(_props, ['id', 'className', 'style', 'position', 'bsStyle', 'tabWidth', 'paneWidth', 'children']);
+
+ var isHorizontal = position === 'left' || position === 'right';
+
+ if (bsStyle == null) {
+ bsStyle = isHorizontal ? 'pills' : 'tabs';
+ }
+
+ var containerProps = { id: id, className: className, style: style };
+
+ var tabsProps = _extends({}, props, {
+ bsStyle: bsStyle,
+ stacked: isHorizontal,
+ activeKey: this.getActiveKey(),
+ onSelect: this.handleSelect,
+ ref: 'tabs',
+ role: 'tablist'
+ });
+ var childTabs = _utilsValidComponentChildren2['default'].map(children, this.renderTab);
+
+ var panesProps = {
+ className: 'tab-content',
+ ref: 'panes'
+ };
+ var childPanes = _utilsValidComponentChildren2['default'].map(children, this.renderPane);
+
+ if (isHorizontal) {
+ var _getColProps = this.getColProps({ tabWidth: tabWidth, paneWidth: paneWidth });
+
+ var tabsColProps = _getColProps.tabsColProps;
+ var panesColProps = _getColProps.panesColProps;
+
+ var tabs = _react2['default'].createElement(
+ _Col2['default'],
+ _extends({ componentClass: _Nav2['default'] }, tabsProps, tabsColProps),
+ childTabs
+ );
+ var panes = _react2['default'].createElement(
+ _Col2['default'],
+ _extends({}, panesProps, panesColProps),
+ childPanes
+ );
+
+ var body = undefined;
+ if (position === 'left') {
+ body = _react2['default'].createElement(
+ _Row2['default'],
+ containerProps,
+ tabs,
+ panes
+ );
+ } else {
+ body = _react2['default'].createElement(
+ _Row2['default'],
+ containerProps,
+ panes,
+ tabs
+ );
+ }
+
+ return _react2['default'].createElement(
+ _Grid2['default'],
+ null,
+ body
+ );
+ } else {
+ return _react2['default'].createElement(
+ 'div',
+ containerProps,
+ _react2['default'].createElement(
+ _Nav2['default'],
+ tabsProps,
+ childTabs
+ ),
+ _react2['default'].createElement(
+ 'div',
+ panesProps,
+ childPanes
+ )
+ );
+ }
+ },
+
+ getActiveKey: function getActiveKey() {
+ return this.props.activeKey !== undefined ? this.props.activeKey : this.state.activeKey;
+ },
+
+ renderPane: function renderPane(child, index) {
+ var previousActiveKey = this.state.previousActiveKey;
+
+ var shouldPaneBeSetActive = child.props.eventKey === this.getActiveKey();
+ var thereIsNoActivePane = previousActiveKey == null;
+
+ var paneIsAlreadyActive = previousActiveKey != null && child.props.eventKey === previousActiveKey;
+
+ return _react.cloneElement(child, {
+ active: shouldPaneBeSetActive && (thereIsNoActivePane || !this.props.animation),
+ id: paneId(this.props, child),
+ 'aria-labelledby': tabId(this.props, child),
+ key: child.key ? child.key : index,
+ animation: this.props.animation,
+ onAnimateOutEnd: paneIsAlreadyActive ? this.handlePaneAnimateOutEnd : null
+ });
+ },
+
+ renderTab: function renderTab(child) {
+ if (child.props.title == null) {
+ return null;
+ }
+
+ var _child$props = child.props;
+ var eventKey = _child$props.eventKey;
+ var title = _child$props.title;
+ var disabled = _child$props.disabled;
+
+ return _react2['default'].createElement(
+ _NavItem2['default'],
+ {
+ linkId: tabId(this.props, child),
+ ref: 'tab' + eventKey,
+ 'aria-controls': paneId(this.props, child),
+ eventKey: eventKey,
+ disabled: disabled },
+ title
+ );
+ },
+
+ getColProps: function getColProps(_ref) {
+ var tabWidth = _ref.tabWidth;
+ var paneWidth = _ref.paneWidth;
+
+ var tabsColProps = undefined;
+ if (tabWidth instanceof Object) {
+ tabsColProps = tabWidth;
+ } else {
+ tabsColProps = { xs: tabWidth };
+ }
+
+ var panesColProps = undefined;
+ if (paneWidth == null) {
+ panesColProps = {};
+ _Object$keys(tabsColProps).forEach(function (size) {
+ panesColProps[size] = _styleMaps2['default'].GRID_COLUMNS - tabsColProps[size];
+ });
+ } else if (paneWidth instanceof Object) {
+ panesColProps = paneWidth;
+ } else {
+ panesColProps = { xs: paneWidth };
+ }
+
+ return { tabsColProps: tabsColProps, panesColProps: panesColProps };
+ },
+
+ shouldComponentUpdate: function shouldComponentUpdate() {
+ // Defer any updates to this component during the `onSelect` handler.
+ return !this._isChanging;
+ },
+
+ handleSelect: function handleSelect(selectedKey) {
+ if (this.props.onSelect) {
+ this._isChanging = true;
+ this.props.onSelect(selectedKey);
+ this._isChanging = false;
+ return;
+ }
+
+ // if there is no external handler, then use embedded one
+ var previousActiveKey = this.getActiveKey();
+ if (selectedKey !== previousActiveKey) {
+ this.setState({
+ activeKey: selectedKey,
+ previousActiveKey: previousActiveKey
+ });
+ }
+ }
+ });
+
+ exports['default'] = Tabs;
+ module.exports = exports['default'];
+
+/***/ },
+/* 226 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ var _Tab = __webpack_require__(223);
+
+ var _Tab2 = _interopRequireDefault(_Tab);
+
+ var TabPane = _react2['default'].createClass({
+ displayName: 'TabPane',
+
+ componentWillMount: function componentWillMount() {
+ _utilsDeprecationWarning2['default']('TabPane', 'Tab', 'https://github.com/react-bootstrap/react-bootstrap/pull/1091');
+ },
+
+ render: function render() {
+ return _react2['default'].createElement(_Tab2['default'], this.props);
+ }
+ });
+
+ exports['default'] = TabPane;
+ module.exports = exports['default'];
+
+/***/ },
+/* 227 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var Table = _react2['default'].createClass({
+ displayName: 'Table',
+
+ propTypes: {
+ striped: _react2['default'].PropTypes.bool,
+ bordered: _react2['default'].PropTypes.bool,
+ condensed: _react2['default'].PropTypes.bool,
+ hover: _react2['default'].PropTypes.bool,
+ responsive: _react2['default'].PropTypes.bool
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bordered: false,
+ condensed: false,
+ hover: false,
+ responsive: false,
+ striped: false
+ };
+ },
+
+ render: function render() {
+ var classes = {
+ 'table': true,
+ 'table-striped': this.props.striped,
+ 'table-bordered': this.props.bordered,
+ 'table-condensed': this.props.condensed,
+ 'table-hover': this.props.hover
+ };
+ var table = _react2['default'].createElement(
+ 'table',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ this.props.children
+ );
+
+ return this.props.responsive ? _react2['default'].createElement(
+ 'div',
+ { className: 'table-responsive' },
+ table
+ ) : table;
+ }
+ });
+
+ exports['default'] = Table;
+ module.exports = exports['default'];
+
+/***/ },
+/* 228 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _SafeAnchor = __webpack_require__(100);
+
+ var _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);
+
+ var Thumbnail = _react2['default'].createClass({
+ displayName: 'Thumbnail',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ alt: _react2['default'].PropTypes.string,
+ href: _react2['default'].PropTypes.string,
+ src: _react2['default'].PropTypes.string
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'thumbnail'
+ };
+ },
+
+ render: function render() {
+ var classes = this.getBsClassSet();
+
+ if (this.props.href) {
+ return _react2['default'].createElement(
+ _SafeAnchor2['default'],
+ _extends({}, this.props, { href: this.props.href, className: _classnames2['default'](this.props.className, classes) }),
+ _react2['default'].createElement('img', { src: this.props.src, alt: this.props.alt })
+ );
+ } else {
+ if (this.props.children) {
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ _react2['default'].createElement('img', { src: this.props.src, alt: this.props.alt }),
+ _react2['default'].createElement(
+ 'div',
+ { className: 'caption' },
+ this.props.children
+ )
+ );
+ } else {
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ _react2['default'].createElement('img', { src: this.props.src, alt: this.props.alt })
+ );
+ }
+ }
+ }
+ });
+
+ exports['default'] = Thumbnail;
+ module.exports = exports['default'];
+
+/***/ },
+/* 229 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var _utilsCustomPropTypes = __webpack_require__(53);
+
+ var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes);
+
+ var Tooltip = _react2['default'].createClass({
+ displayName: 'Tooltip',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ propTypes: {
+ /**
+ * An html id attribute, necessary for accessibility
+ * @type {string}
+ * @required
+ */
+ id: _utilsCustomPropTypes2['default'].isRequiredForA11y(_react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number])),
+
+ /**
+ * Sets the direction the Tooltip is positioned towards.
+ */
+ placement: _react2['default'].PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
+
+ /**
+ * The "left" position value for the Tooltip.
+ */
+ positionLeft: _react2['default'].PropTypes.number,
+ /**
+ * The "top" position value for the Tooltip.
+ */
+ positionTop: _react2['default'].PropTypes.number,
+ /**
+ * The "left" position value for the Tooltip arrow.
+ */
+ arrowOffsetLeft: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),
+ /**
+ * The "top" position value for the Tooltip arrow.
+ */
+ arrowOffsetTop: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),
+ /**
+ * Title text
+ */
+ title: _react2['default'].PropTypes.node
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ placement: 'right'
+ };
+ },
+
+ render: function render() {
+ var _classes;
+
+ var classes = (_classes = {
+ 'tooltip': true
+ }, _classes[this.props.placement] = true, _classes);
+
+ var style = _extends({
+ 'left': this.props.positionLeft,
+ 'top': this.props.positionTop
+ }, this.props.style);
+
+ var arrowStyle = {
+ 'left': this.props.arrowOffsetLeft,
+ 'top': this.props.arrowOffsetTop
+ };
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({ role: 'tooltip' }, this.props, { className: _classnames2['default'](this.props.className, classes), style: style }),
+ _react2['default'].createElement('div', { className: 'tooltip-arrow', style: arrowStyle }),
+ _react2['default'].createElement(
+ 'div',
+ { className: 'tooltip-inner' },
+ this.props.children
+ )
+ );
+ }
+ });
+
+ exports['default'] = Tooltip;
+ module.exports = exports['default'];
+
+/***/ },
+/* 230 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _extends = __webpack_require__(58)['default'];
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(32);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _classnames = __webpack_require__(68);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _BootstrapMixin = __webpack_require__(69);
+
+ var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
+
+ var Well = _react2['default'].createClass({
+ displayName: 'Well',
+
+ mixins: [_BootstrapMixin2['default']],
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ bsClass: 'well'
+ };
+ },
+
+ render: function render() {
+ var classes = this.getBsClassSet();
+
+ return _react2['default'].createElement(
+ 'div',
+ _extends({}, this.props, { className: _classnames2['default'](this.props.className, classes) }),
+ this.props.children
+ );
+ }
+ });
+
+ exports['default'] = Well;
+ module.exports = exports['default'];
+
+/***/ },
+/* 231 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ var _reactOverlaysLibPortal = __webpack_require__(191);
+
+ var _reactOverlaysLibPortal2 = _interopRequireDefault(_reactOverlaysLibPortal);
+
+ exports['default'] = _utilsDeprecationWarning2['default'].wrapper(_reactOverlaysLibPortal2['default'], {
+ message: 'The Portal component is deprecated in react-bootstrap. It has been moved to a more generic library: react-overlays. ' + 'You can read more at: ' + 'http://react-bootstrap.github.io/react-overlays/examples/#portal and ' + 'https://github.com/react-bootstrap/react-bootstrap/issues/1084'
+ });
+ module.exports = exports['default'];
+
+/***/ },
+/* 232 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(14)['default'];
+
+ exports.__esModule = true;
+
+ var _utilsDeprecationWarning = __webpack_require__(16);
+
+ var _utilsDeprecationWarning2 = _interopRequireDefault(_utilsDeprecationWarning);
+
+ var _reactOverlaysLibPosition = __webpack_require__(206);
+
+ var _reactOverlaysLibPosition2 = _interopRequireDefault(_reactOverlaysLibPosition);
+
+ exports['default'] = _utilsDeprecationWarning2['default'].wrapper(_reactOverlaysLibPosition2['default'], {
+ message: 'The Position component is deprecated in react-bootstrap. It has been moved to a more generic library: react-overlays. ' + 'You can read more at: ' + 'http://react-bootstrap.github.io/react-overlays/examples/#position and ' + 'https://github.com/react-bootstrap/react-bootstrap/issues/1084'
+ });
+ module.exports = exports['default'];
+
+/***/ }
+/******/ ])
+});
+; \ No newline at end of file
diff --git a/web/static/js/react-bootstrap-0.25.1.min.js b/web/static/js/react-bootstrap-0.25.1.min.js
new file mode 100644
index 000000000..7c8c52a79
--- /dev/null
+++ b/web/static/js/react-bootstrap-0.25.1.min.js
@@ -0,0 +1,13 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrap=t(require("react")):e.ReactBootstrap=t(e.React)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e,t,n,r){return e}var o=(n(17)["default"],n(149)["default"],n(2)["default"]),s=n(72)["default"];t.__esModule=!0;var a=n(12),i=(o(a),n(23)),l=o(i),u=n(36),p=o(u),d=n(11),f=o(d),c=n(9),h=o(c),m=n(8),v=o(m),y=n(103),g=o(y);t.Accordion=g["default"];var b=n(104),T=o(b);t.Affix=T["default"];var P=n(49),x=o(P);t.AffixMixin=x["default"];var E=n(105),C=o(E);t.Alert=C["default"];var _=n(106),N=o(_);t.Badge=N["default"];var O=n(5),w=o(O);t.BootstrapMixin=w["default"];var S=n(25),k=o(S);t.Button=k["default"];var M=n(50),D=o(M);t.ButtonGroup=D["default"];var A=n(51),I=o(A);t.ButtonInput=I["default"];var R=n(107),L=o(R);t.ButtonToolbar=L["default"];var j=n(108),K=o(j);t.Carousel=K["default"];var B=n(109),F=o(B);t.CarouselItem=F["default"];var W=n(52),H=o(W);t.Col=H["default"];var U=n(110),V=o(U);t.CollapsibleMixin=V["default"];var q=n(111),z=o(q);t.CollapsibleNav=z["default"];var G=n(27),Y=o(G);t.Dropdown=Y["default"];var $=n(112),X=o($);t.DropdownButton=X["default"];var Z=n(63),J=o(Z);t.NavDropdown=J["default"];var Q=n(136),ee=o(Q);t.SplitButton=ee["default"];var te=n(114),ne=o(te);t.FadeMixin=ne["default"];var re=n(33),oe=o(re);t.Glyphicon=oe["default"];var se=n(56),ae=o(se);t.Grid=ae["default"];var ie=n(116),le=o(ie);t.Input=le["default"];var ue=n(57),pe=o(ue);t.Interpolate=pe["default"];var de=n(117),fe=o(de);t.Jumbotron=fe["default"];var ce=n(118),he=o(ce);t.Label=he["default"];var me=n(119),ve=o(me);t.ListGroup=ve["default"];var ye=n(120),ge=o(ye);t.ListGroupItem=ge["default"];var be=n(121),Te=o(be);t.MenuItem=Te["default"];var Pe=n(122),xe=o(Pe);t.Modal=xe["default"];var Ee=n(60),Ce=o(Ee);t.ModalHeader=Ce["default"];var _e=n(61),Ne=o(_e);t.ModalTitle=Ne["default"];var Oe=n(58),we=o(Oe);t.ModalBody=we["default"];var Se=n(59),ke=o(Se);t.ModalFooter=ke["default"];var Me=n(62),De=o(Me);t.Nav=De["default"];var Ae=n(124),Ie=o(Ae);t.Navbar=Ie["default"];var Re=n(64),Le=o(Re);t.NavItem=Le["default"];var je=n(65),Ke=o(je);t.Overlay=Ke["default"];var Be=n(125),Fe=o(Be);t.OverlayTrigger=Fe["default"];var We=n(126),He=o(We);t.PageHeader=He["default"];var Ue=n(127),Ve=o(Ue);t.PageItem=Ve["default"];var qe=n(128),ze=o(qe);t.Pager=ze["default"];var Ge=n(129),Ye=o(Ge);t.Pagination=Ye["default"];var $e=n(131),Xe=o($e);t.Panel=Xe["default"];var Ze=n(66),Je=o(Ze);t.PanelGroup=Je["default"];var Qe=n(132),et=o(Qe);t.Popover=et["default"];var tt=n(135),nt=o(tt);t.ProgressBar=nt["default"];var rt=n(67),ot=o(rt);t.Row=ot["default"];var st=n(14),at=o(st);t.SafeAnchor=at["default"];var it=o(Q);t.SplitButton=it["default"];var lt=n(28),ut=o(lt);t.styleMaps=ut["default"];var pt=n(138),dt=o(pt);t.SubNav=dt["default"];var ft=n(68),ct=o(ft);t.Tab=ct["default"];var ht=n(139),mt=o(ht);t.TabbedArea=mt["default"];var vt=n(140),yt=o(vt);t.Table=yt["default"];var gt=n(69),bt=o(gt);t.TabPane=bt["default"];var Tt=n(70),Pt=o(Tt);t.Tabs=Pt["default"];var xt=n(141),Et=o(xt);t.Thumbnail=Et["default"];var Ct=n(142),_t=o(Ct);t.Tooltip=_t["default"];var Nt=n(143),Ot=o(Nt);t.Well=Ot["default"];var wt=n(133),St=o(wt);t.Portal=St["default"];var kt=n(134),Mt=o(kt);t.Position=Mt["default"];var Dt=n(26),At=o(Dt);t.Collapse=At["default"];var It=n(32),Rt=o(It);t.Fade=Rt["default"];var Lt=n(54),jt=s(Lt);t.FormControls=jt;var Kt={childrenValueInputValidation:p["default"],createChainedFunction:f["default"],ValidComponentChildren:h["default"],CustomPropTypes:v["default"],domUtils:r(l["default"],"utils/domUtils","npm install dom-helpers")};t.utils=Kt},function(t,n){t.exports=e},function(e,t){"use strict";t["default"]=function(e){return e&&e.__esModule?e:{"default":e}},t.__esModule=!0},function(e,t,n){"use strict";var r=n(147)["default"];t["default"]=r||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},t.__esModule=!0},function(e,t,n){var r;/*!
+ Copyright (c) 2015 Jed Watson.
+ Licensed under the MIT License (MIT), see
+ http://jedwatson.github.io/classnames
+ */
+!function(){"use strict";function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];if(n){var r=typeof n;if("string"===r||"number"===r)e+=" "+n;else if(Array.isArray(n))e+=" "+o.apply(null,n);else if("object"===r)for(var s in n)n.hasOwnProperty(s)&&n[s]&&(e+=" "+s)}}return e.substr(1)}"undefined"!=typeof e&&e.exports?e.exports=o:(r=function(){return o}.call(t,n,t,e),!(void 0!==r&&(e.exports=r)))}()},function(e,t,n){"use strict";var r=n(2)["default"];t.__esModule=!0;var o=n(1),s=r(o),a=n(28),i=r(a),l=n(8),u=r(l),p={propTypes:{bsClass:u["default"].keyOf(i["default"].CLASSES),bsStyle:s["default"].PropTypes.oneOf(i["default"].STYLES),bsSize:u["default"].keyOf(i["default"].SIZES)},getBsClassSet:function(){var e={},t=this.props.bsClass&&i["default"].CLASSES[this.props.bsClass];if(t){e[t]=!0;var n=t+"-",r=this.props.bsSize&&i["default"].SIZES[this.props.bsSize];r&&(e[n+r]=!0),this.props.bsStyle&&(i["default"].STYLES.indexOf(this.props.bsStyle)>=0?e[n+this.props.bsStyle]=!0:e[this.props.bsStyle]=!0)}return e},prefixClass:function(e){return i["default"].CLASSES[this.props.bsClass]+"-"+e}};t["default"]=p,e.exports=t["default"]},function(e,t){"use strict";t["default"]=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t.__esModule=!0},function(e,t,n){"use strict";var r=n(148)["default"],o=n(151)["default"];t["default"]=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=r(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(o?o(e,t):e.__proto__=t)},t.__esModule=!0},function(e,t,n){"use strict";function r(e){function t(t,n,r,o){return o=o||g,null!=n[r]?e(n,r,o):t?new Error("Required prop '"+r+"' was not specified in '"+o+"'."):void 0}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function o(e,t,n,r){return"Invalid prop '"+t+"' of value '"+e[t]+"'"+(" supplied to '"+n+"'"+r)}function s(){function e(e,t,n){return"object"!=typeof e[t]||"function"!=typeof e[t].render&&1!==e[t].nodeType?new Error(o(e,t,n,", expected a DOM element or an object that has a `render` method")):void 0}return r(e)}function a(e){function t(t,n,r){var s=t[n];if(!e.hasOwnProperty(s)){var a=JSON.stringify(p(e));return new Error(o(t,n,r,", expected one of "+a+"."))}}return r(t)}function i(e){function t(t,n,r){var o=e.map(function(e){return t[e]}).reduce(function(e,t){return e+(void 0!==t?1:0)},0);if(o>1){var s=e[0],a=e.slice(1),i=a.join(", ")+" and "+s;return new Error("Invalid prop '"+n+"', only one of the following may be provided: "+i)}}return t}function l(e){if(void 0===e)throw new Error("No validations provided");if(!(e instanceof Array))throw new Error("Invalid argument must be an array");if(0===e.length)throw new Error("No validations provided");return function(t,n,r){for(var o=0;o<e.length;o++){var s=e[o](t,n,r);if(void 0!==s&&null!==s)return s}}}function u(){function e(e,t,n){var r=o(e,t,n,". Expected an Element `type`");if("function"!=typeof e[t]){if(c["default"].isValidElement(e[t]))return new Error(r+", not an actual Element");if("string"!=typeof e[t])return new Error(r+" such as a tag name or return value of React.createClass(...)")}}return r(e)}var p=n(17)["default"],d=n(2)["default"];t.__esModule=!0;var f=n(1),c=d(f),h=n(48),m=d(h),v=n(144),y=d(v),g="<<anonymous>>",b={deprecated:function(e,t){return function(n,r,o){return null!=n[r]&&m["default"](!1,'"'+r+'" property of "'+o+'" has been deprecated.\n'+t),e(n,r,o)}},isRequiredForA11y:function(e){return function(t,n,r){return null==t[n]?new Error("The prop `"+n+"` is required to make "+r+" accessible for users using assistive technologies such as screen readers `"):e(t,n,r)}},requiredRoles:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];return r(function(e,n,r){var o=void 0,s=y["default"](e.children),a=function(e,t){return e===t.props.bsRole};return t.every(function(e){return s.some(function(t){return a(e,t)})?!0:(o=e,!1)}),o?new Error("(children) "+r+" - Missing a required child with bsRole: "+o+". "+(r+" must have at least one child of each of the following bsRoles: "+t.join(", "))):void 0})},exclusiveRoles:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];return r(function(e,n,r){var o=y["default"](e.children),s=void 0;return t.every(function(e){var t=o.filter(function(t){return t.props.bsRole===e});return t.length>1?(s=e,!1):!0}),s?new Error("(children) "+r+" - Duplicate children detected of bsRole: "+s+". Only one child each allowed with the following bsRoles: "+t.join(", ")):void 0})},mountable:s(),elementType:u(),keyOf:a,singlePropFrom:i,all:l};t["default"]=b,e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t,n){var r=0;return u["default"].Children.map(e,function(e){if(u["default"].isValidElement(e)){var o=r;return r++,t.call(n,e,o)}return e})}function o(e,t,n){var r=0;return u["default"].Children.forEach(e,function(e){u["default"].isValidElement(e)&&(t.call(n,e,r),r++)})}function s(e){var t=0;return u["default"].Children.forEach(e,function(e){u["default"].isValidElement(e)&&t++}),t}function a(e){var t=!1;return u["default"].Children.forEach(e,function(e){!t&&u["default"].isValidElement(e)&&(t=!0)}),t}var i=n(2)["default"];t.__esModule=!0;var l=n(1),u=i(l);t["default"]={map:r,forEach:o,numberOf:s,hasValidComponent:a},e.exports=t["default"]},function(e,t){"use strict";t["default"]=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},t.__esModule=!0},function(e,t){"use strict";function n(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];return t.filter(function(e){return null!=e}).reduce(function(e,t){if("function"!=typeof t)throw new Error("Invalid Argument Type, must only provide functions, undefined, or null.");return null===e?t:function(){for(var n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];e.apply(this,r),t.apply(this,r)}},null)}t.__esModule=!0,t["default"]=n,e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t,n){var r=void 0;"object"==typeof e?r=e.message:(r=e+" is deprecated. Use "+t+" instead.",n&&(r+="\nYou can read more about it at "+n)),u[r]||(l["default"](!1,r),u[r]=!0)}var o=n(7)["default"],s=n(6)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(48),l=a(i),u={};r.wrapper=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),a=1;t>a;a++)n[a-1]=arguments[a];return function(e){function t(){s(this,t),e.apply(this,arguments)}return o(t,e),t.prototype.componentWillMount=function(){if(r.apply(void 0,n),e.prototype.componentWillMount){for(var t,o=arguments.length,s=Array(o),a=0;o>a;a++)s[a]=arguments[a];(t=e.prototype.componentWillMount).call.apply(t,[this].concat(s))}},t}(e)},t["default"]=r,e.exports=t["default"]},function(e,t,n){function r(e){return o(e)?e:Object(e)}var o=n(16);e.exports=r},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(11),p=a(u),d=function(e){function t(n){o(this,t),e.call(this,n),this.handleClick=this.handleClick.bind(this)}return r(t,e),t.prototype.handleClick=function(e){void 0===this.props.href&&e.preventDefault()},t.prototype.render=function(){return l["default"].createElement("a",s({role:this.props.href?void 0:"button"},this.props,{onClick:p["default"](this.props.onClick,this.handleClick),href:this.props.href||""}))},t}(l["default"].Component);t["default"]=d,d.propTypes={href:l["default"].PropTypes.string,onClick:l["default"].PropTypes.func},e.exports=t["default"]},function(e,t,n){var r=n(30),o=n(21),s=n(22),a="[object Array]",i=Object.prototype,l=i.toString,u=r(Array,"isArray"),p=u||function(e){return s(e)&&o(e.length)&&l.call(e)==a};e.exports=p},function(e,t){function n(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}e.exports=n},function(e,t,n){e.exports={"default":n(156),__esModule:!0}},function(e,t){var n=e.exports={};"number"==typeof __e&&(__e=n)},function(e,t){"use strict";function n(e){return e&&e.ownerDocument||document}t.__esModule=!0,t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";e.exports=!("undefined"==typeof window||!window.document||!window.document.createElement)},function(e,t){function n(e){return"number"==typeof e&&e>-1&&e%1==0&&r>=e}var r=9007199254740991;e.exports=n},function(e,t){function n(e){return!!e&&"object"==typeof e}e.exports=n},function(e,t,n){"use strict";function r(e){var t=p["default"].findDOMNode(e);return h["default"](t&&t.ownerDocument||document)}function o(e){var t=r(e);return v["default"](t)}function s(e){return r(e).defaultView.getComputedStyle(e,null)}function a(){return Math.max(document.documentElement.offsetHeight,document.height,document.body.scrollHeight,document.body.offsetHeight)}function i(e){var t={width:e.offsetWidth||0,height:e.offsetHeight||0};if("undefined"!=typeof e.getBoundingClientRect){var n=e.getBoundingClientRect(),r=n.width,o=n.height;t.width=r||t.width,t.height=o||t.height}return t}var l=n(2)["default"];t.__esModule=!0;var u=n(1),p=l(u),d=n(20),f=l(d),c=n(19),h=l(c),m=n(175),v=l(m),y=n(76),g=l(y),b=n(173),T=l(b),P=n(40),x=l(P),E=n(77),C=l(E),_=n(78),N=l(_),O=n(41),w=l(O);t["default"]={canUseDom:f["default"],css:w["default"],getComputedStyles:s,contains:g["default"],ownerWindow:o,ownerDocument:r,getOffset:x["default"],getDocumentHeight:a,getPosition:N["default"],getSize:i,activeElement:T["default"],offsetParent:C["default"]},e.exports=t["default"]},function(e,t,n){var r,o,s;!function(n,a){o=[t],r=a,s="function"==typeof r?r.apply(t,o):r,!(void 0!==s&&(e.exports=s))}(this,function(e){var t=e;t.interopRequireDefault=function(e){return e&&e.__esModule?e:{"default":e}},t._extends=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}})},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=n(8),f=o(d),c=n(51),h=o(c),m=a["default"].createClass({displayName:"Button",mixins:[p["default"]],propTypes:{active:a["default"].PropTypes.bool,disabled:a["default"].PropTypes.bool,block:a["default"].PropTypes.bool,navItem:a["default"].PropTypes.bool,navDropdown:a["default"].PropTypes.bool,componentClass:f["default"].elementType,href:a["default"].PropTypes.string,target:a["default"].PropTypes.string,type:a["default"].PropTypes.oneOf(h["default"].types)},getDefaultProps:function(){return{active:!1,block:!1,bsClass:"button",bsStyle:"default",disabled:!1,navItem:!1,navDropdown:!1}},render:function(){var e=this.props.navDropdown?{}:this.getBsClassSet(),t=void 0;return e=r({active:this.props.active,"btn-block":this.props.block},e),this.props.navItem?this.renderNavItem(e):(t=this.props.href||this.props.target||this.props.navDropdown?"renderAnchor":"renderButton",this[t](e))},renderAnchor:function(e){var t=this.props.componentClass||"a",n=this.props.href||"#";return e.disabled=this.props.disabled,a["default"].createElement(t,r({},this.props,{href:n,className:l["default"](this.props.className,e),role:"button"}),this.props.children)},renderButton:function(e){var t=this.props.componentClass||"button";return a["default"].createElement(t,r({},this.props,{type:this.props.type||"button",className:l["default"](this.props.className,e)}),this.props.children)},renderNavItem:function(e){var t={active:this.props.active};return a["default"].createElement("li",{className:l["default"](t)},this.renderAnchor(e))}});t["default"]=m,e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t){var n=t["offset"+T(e)],r=x[e];return n+parseInt(c["default"].css(t,r[0]),10)+parseInt(c["default"].css(t,r[1]),10)}var o=n(7)["default"],s=n(6)["default"],a=n(3)["default"],i=n(2)["default"];t.__esModule=!0;var l=n(1),u=i(l),p=n(99),d=i(p),f=n(23),c=i(f),h=n(8),m=i(h),v=n(12),y=i(v),g=n(11),b=i(g),T=function(e){return e[0].toUpperCase()+e.substr(1)},P=function(e){return e.offsetHeight},x={height:["marginTop","marginBottom"],width:["marginLeft","marginRight"]},E=function(e){function t(n,r){s(this,t),e.call(this,n,r),this.onEnterListener=this.handleEnter.bind(this),this.onEnteringListener=this.handleEntering.bind(this),this.onEnteredListener=this.handleEntered.bind(this),this.onExitListener=this.handleExit.bind(this),this.onExitingListener=this.handleExiting.bind(this)}return o(t,e),t.prototype.render=function(){var e=b["default"](this.onEnterListener,this.props.onEnter),t=b["default"](this.onEnteringListener,this.props.onEntering),n=b["default"](this.onEnteredListener,this.props.onEntered),r=b["default"](this.onExitListener,this.props.onExit),o=b["default"](this.onExitingListener,this.props.onExiting);return u["default"].createElement(d["default"],a({ref:"transition"},this.props,{"aria-expanded":this.props.role?this.props["in"]:null,className:"width"===this._dimension()?"width":"",exitedClassName:"collapse",exitingClassName:"collapsing",enteredClassName:"collapse in",enteringClassName:"collapsing",onEnter:e,onEntering:t,onEntered:n,onExit:r,onExiting:o,onExited:this.props.onExited}),this.props.children)},t.prototype.handleEnter=function(e){var t=this._dimension();e.style[t]="0"},t.prototype.handleEntering=function(e){var t=this._dimension();e.style[t]=this._getScrollDimensionValue(e,t)},t.prototype.handleEntered=function(e){var t=this._dimension();e.style[t]=null},t.prototype.handleExit=function(e){var t=this._dimension();e.style[t]=this.props.getDimensionValue(t,e)+"px"},t.prototype.handleExiting=function(e){var t=this._dimension();P(e),e.style[t]="0"},t.prototype._dimension=function(){return"function"==typeof this.props.dimension?this.props.dimension():this.props.dimension},t.prototype._getTransitionInstance=function(){return this.refs.transition},t.prototype._getScrollDimensionValue=function(e,t){return e["scroll"+T(t)]+"px"},t}(u["default"].Component);E.propTypes={"in":u["default"].PropTypes.bool,unmountOnExit:u["default"].PropTypes.bool,transitionAppear:u["default"].PropTypes.bool,timeout:u["default"].PropTypes.number,duration:m["default"].all([u["default"].PropTypes.number,function(e){return null!=e.duration&&y["default"]("Collapse `duration`","the `timeout` prop"),null}]),onEnter:u["default"].PropTypes.func,onEntering:u["default"].PropTypes.func,onEntered:u["default"].PropTypes.func,onExit:u["default"].PropTypes.func,onExiting:u["default"].PropTypes.func,onExited:u["default"].PropTypes.func,dimension:u["default"].PropTypes.oneOfType([u["default"].PropTypes.oneOf(["height","width"]),u["default"].PropTypes.func]),getDimensionValue:u["default"].PropTypes.func,role:u["default"].PropTypes.string},E.defaultProps={"in":!1,timeout:300,unmountOnExit:!1,transitionAppear:!1,dimension:"height",getDimensionValue:r},t["default"]=E,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(81),p=a(u),d=n(4),f=a(d),c=n(230),h=a(c),m=n(50),v=a(m),y=n(53),g=a(y),b=n(113),T=a(b),P=n(8),x=a(P),E=n(11),C=a(E),_=n(185),N=a(_),O=n(95),w=a(O),S="toggle-btn",k=g["default"].defaultProps.bsRole;t.TOGGLE_ROLE=k;var M=T["default"].defaultProps.bsRole;t.MENU_ROLE=M;var D=function(e){function t(n){o(this,t),e.call(this,n),this.Toggle=g["default"],this.toggleOpen=this.toggleOpen.bind(this),this.handleClick=this.handleClick.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleClose=this.handleClose.bind(this),this.extractChildren=this.extractChildren.bind(this),this.refineMenu=this.refineMenu.bind(this),this.refineToggle=this.refineToggle.bind(this),this.childExtractors=[{key:"toggle",matches:function(e){return e.props.bsRole===k},refine:this.refineToggle},{key:"menu",exclusive:!0,matches:function(e){return e.props.bsRole===M},refine:this.refineMenu}],this.state={}}return r(t,e),t.prototype.componentDidMount=function(){var e=this.refs.menu;this.props.open&&e.focusNext&&e.focusNext()},t.prototype.componentDidUpdate=function(e,t){var n=this.refs.menu;this.props.open&&!e.open&&n.focusNext&&n.focusNext()},t.prototype.render=function(){var e=this.extractChildren(),t=this.props.componentClass,n=w["default"](this.props,["id"]),r={open:this.props.open,dropdown:!this.props.dropup,dropup:this.props.dropup};return l["default"].createElement(t,s({},n,{className:f["default"](this.props.className,r)}),e)},t.prototype.toggleOpen=function(){var e=!this.props.open;this.props.onToggle&&this.props.onToggle(e)},t.prototype.handleClick=function(e){this.props.disabled||this.toggleOpen()},t.prototype.handleKeyDown=function(e){var t=this,n=function(){t.refs.menu.focusNext&&t.refs.menu.focusNext()};switch(e.keyCode){case p["default"].codes.down:this.props.open?n():this.toggleOpen(),e.preventDefault();break;case p["default"].codes.esc:case p["default"].codes.tab:this.props.open&&this.handleClose(e)}},t.prototype.handleClose=function(e){if(this.props.open&&(e&&e.keyCode===p["default"].codes.tab?setTimeout(this.toggleOpen):this.toggleOpen(),e&&"keydown"===e.type&&e.keyCode===p["default"].codes.esc)){var t=l["default"].findDOMNode(this.refs[S]);e.preventDefault(),e.stopPropagation(),t.focus()}},t.prototype.extractChildren=function(){var e=this,t=!!this.props.open,n={};return l["default"].Children.map(this.props.children,function(r){var o=N["default"](e.childExtractors,function(e){return e.matches(r)});if(o){if(n[o.key])return!1;n[o.key]=o.exclusive,r=o.refine(r,t)}return r})},t.prototype.refineMenu=function(e,t){var n={ref:"menu",open:t,labelledBy:this.props.id,pullRight:this.props.pullRight};return n.onClose=C["default"](e.props.onClose,this.props.onClose,this.handleClose),n.onSelect=C["default"](e.props.onSelect,this.props.onSelect,this.handleClose),i.cloneElement(e,n,e.props.children)},t.prototype.refineToggle=function(e,t){var n={open:t,id:this.props.id,ref:S};return n.onClick=C["default"](e.props.onClick,this.handleClick),n.onKeyDown=C["default"](e.props.onKeyDown,this.handleKeyDown),i.cloneElement(e,n,e.props.children)},t}(l["default"].Component);D.Toggle=g["default"],D.TOGGLE_REF=S,D.defaultProps={componentClass:v["default"]},D.propTypes={dropup:l["default"].PropTypes.bool,id:x["default"].isRequiredForA11y(l["default"].PropTypes.oneOfType([l["default"].PropTypes.string,l["default"].PropTypes.number])),componentClass:x["default"].elementType,children:x["default"].all([x["default"].requiredRoles(k,M),x["default"].exclusiveRoles(M)]),disabled:l["default"].PropTypes.bool,pullRight:l["default"].PropTypes.bool,open:l["default"].PropTypes.bool,onClose:l["default"].PropTypes.func,onToggle:l["default"].PropTypes.func,onSelect:l["default"].PropTypes.func},D=h["default"](D,{open:"onToggle"}),D.Toggle=g["default"],D.Menu=T["default"],t["default"]=D},function(e,t){"use strict";t.__esModule=!0;var n={CLASSES:{alert:"alert",button:"btn","button-group":"btn-group","button-toolbar":"btn-toolbar",column:"col","input-group":"input-group",form:"form",glyphicon:"glyphicon",label:"label",thumbnail:"thumbnail","list-group-item":"list-group-item",panel:"panel","panel-group":"panel-group",pagination:"pagination","progress-bar":"progress-bar",nav:"nav",navbar:"navbar",modal:"modal",row:"row",well:"well"},STYLES:["default","primary","success","info","warning","danger","link","inline","tabs","pills"],addStyle:function(e){n.STYLES.push(e)},SIZES:{large:"lg",medium:"md",small:"sm",xsmall:"xs",lg:"lg",md:"md",sm:"sm",xs:"xs"},GRID_COLUMNS:12};t["default"]=n,e.exports=t["default"]},function(e,t){var n=Object;e.exports={create:n.create,getProto:n.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:n.getOwnPropertyDescriptor,setDesc:n.defineProperty,setDescs:n.defineProperties,getKeys:n.keys,getNames:n.getOwnPropertyNames,getSymbols:n.getOwnPropertySymbols,each:[].forEach}},function(e,t,n){function r(e,t){var n=null==e?void 0:e[t];return o(n)?n:void 0}var o=n(218);e.exports=r},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0;var o=n(1),s=r(o),a=n(19),i=r(a);t["default"]=function(e){return i["default"](s["default"].findDOMNode(e))},e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(99),p=a(u),d=n(8),f=a(d),c=n(12),h=a(c),m=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){var e=this.props.timeout||this.props.duration;return l["default"].createElement(p["default"],s({},this.props,{timeout:e,className:"fade",enteredClassName:"in",enteringClassName:"in"}),this.props.children)},t}(l["default"].Component);m.propTypes={"in":l["default"].PropTypes.bool,unmountOnExit:l["default"].PropTypes.bool,transitionAppear:l["default"].PropTypes.bool,timeout:l["default"].PropTypes.number,duration:f["default"].all([l["default"].PropTypes.number,function(e){return null!=e.duration&&h["default"]("Fade `duration`","the `timeout` prop"),null}]),onEnter:l["default"].PropTypes.func,onEntering:l["default"].PropTypes.func,onEntered:l["default"].PropTypes.func,onExit:l["default"].PropTypes.func,onExiting:l["default"].PropTypes.func,onExited:l["default"].PropTypes.func},m.defaultProps={"in":!1,timeout:300,unmountOnExit:!1,transitionAppear:!1},t["default"]=m,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=a["default"].createClass({displayName:"Glyphicon",propTypes:{bsClass:a["default"].PropTypes.string,glyph:a["default"].PropTypes.string.isRequired,formControlFeedback:a["default"].PropTypes.bool},getDefaultProps:function(){return{bsClass:"glyphicon",formControlFeedback:!1}},render:function(){var e,t=l["default"](this.props.className,(e={},e[this.props.bsClass]=!0,e["glyphicon-"+this.props.glyph]=!0,e["form-control-feedback"]=this.props.formControlFeedback,e));return a["default"].createElement("span",r({},this.props,{className:t}),this.props.children)}});t["default"]=u,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(4),p=a(u),d=n(55),f=a(d),c=n(33),h=a(c),m=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.getInputDOMNode=function(){return l["default"].findDOMNode(this.refs.input)},t.prototype.getValue=function(){if("static"===this.props.type)return this.props.value;if(this.props.type)return"select"===this.props.type&&this.props.multiple?this.getSelectedOptions():this.getInputDOMNode().value;throw"Cannot use getValue without specifying input type."},t.prototype.getChecked=function(){return this.getInputDOMNode().checked},t.prototype.getSelectedOptions=function(){var e=[];return Array.prototype.forEach.call(this.getInputDOMNode().getElementsByTagName("option"),function(t){if(t.selected){var n=t.getAttribute("value")||t.innerHtml;e.push(n)}}),e},t.prototype.isCheckboxOrRadio=function(){return"checkbox"===this.props.type||"radio"===this.props.type},t.prototype.isFile=function(){return"file"===this.props.type},t.prototype.renderInputGroup=function(e){var t=this.props.addonBefore?l["default"].createElement("span",{className:"input-group-addon",key:"addonBefore"},this.props.addonBefore):null,n=this.props.addonAfter?l["default"].createElement("span",{className:"input-group-addon",key:"addonAfter"},this.props.addonAfter):null,r=this.props.buttonBefore?l["default"].createElement("span",{className:"input-group-btn"},this.props.buttonBefore):null,o=this.props.buttonAfter?l["default"].createElement("span",{className:"input-group-btn"},this.props.buttonAfter):null,s=void 0;switch(this.props.bsSize){case"small":s="input-group-sm";break;case"large":s="input-group-lg"}return t||n||r||o?l["default"].createElement("div",{className:p["default"](s,"input-group"),key:"input-group"},t,r,e,n,o):e},t.prototype.renderIcon=function(){if(!this.props.hasFeedback)return null;if(this.props.feedbackIcon)return l["default"].cloneElement(this.props.feedbackIcon,{formControlFeedback:!0});switch(this.props.bsStyle){case"success":return l["default"].createElement(h["default"],{formControlFeedback:!0,glyph:"ok",key:"icon"});case"warning":return l["default"].createElement(h["default"],{formControlFeedback:!0,glyph:"warning-sign",key:"icon"});case"error":return l["default"].createElement(h["default"],{formControlFeedback:!0,glyph:"remove",key:"icon"});default:return l["default"].createElement("span",{className:"form-control-feedback",key:"icon"})}},t.prototype.renderHelp=function(){return this.props.help?l["default"].createElement("span",{className:"help-block",key:"help"},this.props.help):null},t.prototype.renderCheckboxAndRadioWrapper=function(e){var t={checkbox:"checkbox"===this.props.type,radio:"radio"===this.props.type};return l["default"].createElement("div",{className:p["default"](t),key:"checkboxRadioWrapper"},e)},t.prototype.renderWrapper=function(e){return this.props.wrapperClassName?l["default"].createElement("div",{className:this.props.wrapperClassName,key:"wrapper"},e):e},t.prototype.renderLabel=function(e){var t={"control-label":!this.isCheckboxOrRadio()};return t[this.props.labelClassName]=this.props.labelClassName,this.props.label?l["default"].createElement("label",{htmlFor:this.props.id,className:p["default"](t),key:"label"},e,this.props.label):e},t.prototype.renderInput=function(){if(!this.props.type)return this.props.children;switch(this.props.type){case"select":return l["default"].createElement("select",s({},this.props,{className:p["default"](this.props.className,"form-control"),ref:"input",key:"input"}),this.props.children);case"textarea":return l["default"].createElement("textarea",s({},this.props,{className:p["default"](this.props.className,"form-control"),ref:"input",key:"input"}));case"static":return l["default"].createElement("p",s({},this.props,{className:p["default"](this.props.className,"form-control-static"),ref:"input",key:"input"}),this.props.value);default:var e=this.isCheckboxOrRadio()||this.isFile()?"":"form-control";return l["default"].createElement("input",s({},this.props,{className:p["default"](this.props.className,e),ref:"input",key:"input"}))}},t.prototype.renderFormGroup=function(e){return l["default"].createElement(f["default"],this.props,e)},t.prototype.renderChildren=function(){return this.isCheckboxOrRadio()?this.renderWrapper([this.renderCheckboxAndRadioWrapper(this.renderLabel(this.renderInput())),this.renderHelp()]):[this.renderLabel(),this.renderWrapper([this.renderInputGroup(this.renderInput()),this.renderIcon(),this.renderHelp()])]},t.prototype.render=function(){var e=this.renderChildren();return this.renderFormGroup(e)},t}(l["default"].Component);m.propTypes={type:l["default"].PropTypes.string,label:l["default"].PropTypes.node,help:l["default"].PropTypes.node,addonBefore:l["default"].PropTypes.node,addonAfter:l["default"].PropTypes.node,buttonBefore:l["default"].PropTypes.node,buttonAfter:l["default"].PropTypes.node,bsSize:l["default"].PropTypes.oneOf(["small","medium","large"]),bsStyle:l["default"].PropTypes.oneOf(["success","warning","error"]),hasFeedback:l["default"].PropTypes.bool,feedbackIcon:l["default"].PropTypes.node,id:l["default"].PropTypes.oneOfType([l["default"].PropTypes.string,l["default"].PropTypes.number]),groupClassName:l["default"].PropTypes.string,wrapperClassName:l["default"].PropTypes.string,labelClassName:l["default"].PropTypes.string,multiple:l["default"].PropTypes.bool,disabled:l["default"].PropTypes.bool,value:l["default"].PropTypes.any},m.defaultProps={disabled:!1,hasFeedback:!1,multiple:!1},t["default"]=m,e.exports=t["default"]},function(e,t){"use strict";function n(){var e=document.createElement("div"),t=e.style;"AnimationEvent"in window||delete a.animationend.animation,"TransitionEvent"in window||delete a.transitionend.transition;for(var n in a){var r=a[n];for(var o in r)if(o in t){i.push(r[o]);break}}}function r(e,t,n){e.addEventListener(t,n,!1)}function o(e,t,n){e.removeEventListener(t,n,!1)}t.__esModule=!0;var s=!("undefined"==typeof window||!window.document||!window.document.createElement),a={transitionend:{transition:"transitionend",WebkitTransition:"webkitTransitionEnd",MozTransition:"mozTransitionEnd",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd"},animationend:{animation:"animationend",WebkitAnimation:"webkitAnimationEnd",MozAnimation:"mozAnimationEnd",OAnimation:"oAnimationEnd",msAnimation:"MSAnimationEnd"}},i=[];s&&n();var l={addEndEventListener:function(e,t){return 0===i.length?void window.setTimeout(t,0):void i.forEach(function(n){r(e,n,t)})},removeEndEventListener:function(e,t){0!==i.length&&i.forEach(function(n){o(e,n,t)})}};t["default"]=l,e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t,n){var r=i.singlePropFrom(l)(e,t,n);if(!r){var o=a["default"].PropTypes.oneOfType(u);r=o(e,t,n)}return r}var o=n(2)["default"];t.__esModule=!0,t["default"]=r;var s=n(1),a=o(s),i=n(8),l=["children","value"],u=[a["default"].PropTypes.number,a["default"].PropTypes.string];e.exports=t["default"]},function(e,t,n){var r=n(166),o=n(18),s="prototype",a=function(e,t){return function(){return e.apply(t,arguments)}},i=function(e,t,n){var l,u,p,d,f=e&i.G,c=e&i.P,h=f?r:e&i.S?r[t]:(r[t]||{})[s],m=f?o:o[t]||(o[t]={});f&&(n=t);for(l in n)u=!(e&i.F)&&h&&l in h,u&&l in m||(p=u?h[l]:n[l],f&&"function"!=typeof h[l]?d=n[l]:e&i.B&&u?d=a(p,r):e&i.W&&h[l]==p?!function(e){d=function(t){return this instanceof e?new e(t):e(t)},d[s]=e[s]}(p):d=c&&"function"==typeof p?a(Function.call,p):p,m[l]=d,c&&((m[s]||(m[s]={}))[l]=p))};i.F=1,i.G=2,i.S=4,i.P=8,i.B=16,i.W=32,e.exports=i},function(e,t){e.exports=function(e){return null!==e&&("object"==typeof e||"function"==typeof e)}},function(e,t){"use strict";e.exports=function(e){return e===e.window?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}},function(e,t,n){"use strict";var r=n(76),o=n(39),s=n(19);e.exports=function(e){var t=s(e),n=o(t),a=t&&t.documentElement,i={top:0,left:0,height:0,width:0};if(t)return r(a,e)?(void 0!==e.getBoundingClientRect&&(i=e.getBoundingClientRect()),(i.width||i.height)&&(i={top:i.top+(n.pageYOffset||a.scrollTop)-(a.clientTop||0),left:i.left+(n.pageXOffset||a.scrollLeft)-(a.clientLeft||0),width:(null==i.width?e.offsetWidth:i.width)||0,height:(null==i.height?e.offsetHeight:i.height)||0}),i):i}},function(e,t,n){"use strict";var r=n(80),o=n(182),s=n(177),a=n(178),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var l="",u=t;if("string"==typeof t){if(void 0===n)return e.style[r(t)]||s(e).getPropertyValue(o(t));(u={})[t]=n}for(var p in u)i.call(u,p)&&(u[p]||0===u[p]?l+=o(p)+":"+u[p]+";":a(e,o(p)));e.style.cssText+=";"+l}},function(e,t,n){function r(e,t,n){if("function"!=typeof e)return o;if(void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,o){return e.call(t,n,r,o)};case 4:return function(n,r,o,s){return e.call(t,n,r,o,s)};case 5:return function(n,r,o,s,a){return e.call(t,n,r,o,s,a)}}return function(){return e.apply(t,arguments)}}var o=n(96);e.exports=r},function(e,t,n){function r(e){return null!=e&&s(o(e))}var o=n(88),s=n(21);e.exports=r},function(e,t,n){function r(e){return s(e)&&o(e)&&i.call(e,"callee")&&!l.call(e,"callee")}var o=n(43),s=n(22),a=Object.prototype,i=a.hasOwnProperty,l=a.propertyIsEnumerable;e.exports=r},function(e,t,n){var r=n(30),o=n(43),s=n(16),a=n(216),i=r(Object,"keys"),l=i?function(e){var t=null==e?void 0:e.constructor;return"function"==typeof t&&t.prototype===e||"function"!=typeof e&&o(e)?a(e):s(e)?i(e):[]}:a;e.exports=l},function(e,t,n){function r(e){if(null==e)return[];l(e)||(e=Object(e));var t=e.length;t=t&&i(t)&&(s(e)||o(e))&&t||0;for(var n=e.constructor,r=-1,u="function"==typeof n&&n.prototype===e,d=Array(t),f=t>0;++r<t;)d[r]=r+"";for(var c in e)f&&a(c,t)||"constructor"==c&&(u||!p.call(e,c))||d.push(c);return d}var o=n(44),s=n(15),a=n(89),i=n(21),l=n(16),u=Object.prototype,p=u.hasOwnProperty;
+e.exports=r},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0;var o=n(1),s=r(o),a=n(102),i=r(a),l=n(31),u=r(l),p=n(100),d=r(p),f=s["default"].createClass({displayName:"Portal",propTypes:{container:s["default"].PropTypes.oneOfType([i["default"],s["default"].PropTypes.func])},componentDidMount:function(){this._renderOverlay()},componentDidUpdate:function(){this._renderOverlay()},componentWillUnmount:function(){this._unrenderOverlay(),this._unmountOverlayTarget()},_mountOverlayTarget:function(){this._overlayTarget||(this._overlayTarget=document.createElement("div"),this.getContainerDOMNode().appendChild(this._overlayTarget))},_unmountOverlayTarget:function(){this._overlayTarget&&(this.getContainerDOMNode().removeChild(this._overlayTarget),this._overlayTarget=null)},_renderOverlay:function(){var e=this.props.children?s["default"].Children.only(this.props.children):null;null!==e?(this._mountOverlayTarget(),this._overlayInstance=s["default"].render(e,this._overlayTarget)):(this._unrenderOverlay(),this._unmountOverlayTarget())},_unrenderOverlay:function(){this._overlayTarget&&(s["default"].unmountComponentAtNode(this._overlayTarget),this._overlayInstance=null)},render:function(){return null},getOverlayDOMNode:function(){if(!this.isMounted())throw new Error("getOverlayDOMNode(): A component must be mounted to have a DOM node.");return this._overlayInstance?this._overlayInstance.getWrappedDOMNode?this._overlayInstance.getWrappedDOMNode():s["default"].findDOMNode(this._overlayInstance):null},getContainerDOMNode:function(){return d["default"](this.props.container,u["default"](this).body)}});t["default"]=f,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(228),o=r;e.exports=o},function(e,t,n){"use strict";var r=n(2)["default"];t.__esModule=!0;var o=n(1),s=r(o),a=n(23),i=r(a),l=n(71),u=r(l),p={propTypes:{offset:s["default"].PropTypes.number,offsetTop:s["default"].PropTypes.number,offsetBottom:s["default"].PropTypes.number},getInitialState:function(){return{affixClass:"affix-top"}},getPinnedOffset:function(e){return this.pinnedOffset?this.pinnedOffset:(e.className=e.className.replace(/affix-top|affix-bottom|affix/,""),e.className+=e.className.length?" affix":"affix",this.pinnedOffset=i["default"].getOffset(e).top-window.pageYOffset,this.pinnedOffset)},checkPosition:function(){var e=void 0,t=void 0,n=void 0,r=void 0,o=void 0,a=void 0,l=void 0,u=void 0,p=void 0;this.isMounted()&&(e=s["default"].findDOMNode(this),t=i["default"].getDocumentHeight(),n=window.pageYOffset,r=i["default"].getOffset(e),"top"===this.affixed&&(r.top+=n),o=null!=this.props.offsetTop?this.props.offsetTop:this.props.offset,a=null!=this.props.offsetBottom?this.props.offsetBottom:this.props.offset,(null!=o||null!=a)&&(null==o&&(o=0),null==a&&(a=0),l=null!=this.unpin&&n+this.unpin<=r.top?!1:null!=a&&r.top+e.offsetHeight>=t-a?"bottom":null!=o&&o>=n?"top":!1,this.affixed!==l&&(null!=this.unpin&&(e.style.top=""),u="affix"+(l?"-"+l:""),this.affixed=l,this.unpin="bottom"===l?this.getPinnedOffset(e):null,"bottom"===l&&(e.className=e.className.replace(/affix-top|affix-bottom|affix/,"affix-bottom"),p=t-a-e.offsetHeight-i["default"].getOffset(e).top),this.setState({affixClass:u,affixPositionTop:p}))))},checkPositionWithEventLoop:function(){setTimeout(this.checkPosition,0)},componentDidMount:function(){this._onWindowScrollListener=u["default"].listen(window,"scroll",this.checkPosition),this._onDocumentClickListener=u["default"].listen(i["default"].ownerDocument(this),"click",this.checkPositionWithEventLoop)},componentWillUnmount:function(){this._onWindowScrollListener&&this._onWindowScrollListener.remove(),this._onDocumentClickListener&&this._onDocumentClickListener.remove()},componentDidUpdate:function(e,t){t.affixClass===this.state.affixClass&&this.checkPositionWithEventLoop()}};t["default"]=p,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=n(8),f=o(d),c=a["default"].createClass({displayName:"ButtonGroup",mixins:[p["default"]],propTypes:{vertical:a["default"].PropTypes.bool,justified:a["default"].PropTypes.bool,block:f["default"].all([a["default"].PropTypes.bool,function(e,t,n){return e.block&&!e.vertical?new Error("The block property requires the vertical property to be set to have any effect"):void 0}])},getDefaultProps:function(){return{block:!1,bsClass:"button-group",justified:!1,vertical:!1}},render:function(){var e=this.getBsClassSet();return e["btn-group"]=!this.props.vertical,e["btn-group-vertical"]=this.props.vertical,e["btn-group-justified"]=this.props.justified,e["btn-block"]=this.props.block,a["default"].createElement("div",r({},this.props,{className:l["default"](this.props.className,e)}),this.props.children)}});t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(10)["default"],a=n(3)["default"],i=n(2)["default"];t.__esModule=!0;var l=n(1),u=i(l),p=n(25),d=i(p),f=n(55),c=i(f),h=n(34),m=i(h),v=n(36),y=i(v),g=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.renderFormGroup=function(e){var t=this.props,n=(t.bsStyle,t.value,s(t,["bsStyle","value"]));return u["default"].createElement(c["default"],n,e)},t.prototype.renderInput=function(){var e=this.props,t=e.children,n=e.value,r=s(e,["children","value"]),o=t?t:n;return u["default"].createElement(d["default"],a({},r,{componentClass:"input",ref:"input",key:"input",value:o}))},t}(m["default"]);g.types=["button","reset","submit"],g.defaultProps={type:"button"},g.propTypes={type:u["default"].PropTypes.oneOf(g.types),bsStyle:function(e){return null},children:y["default"],value:y["default"]},t["default"]=g,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(17)["default"],s=n(2)["default"];t.__esModule=!0;var a=n(1),i=s(a),l=n(4),u=s(l),p=n(28),d=s(p),f=n(8),c=s(f),h=i["default"].createClass({displayName:"Col",propTypes:{xs:i["default"].PropTypes.number,sm:i["default"].PropTypes.number,md:i["default"].PropTypes.number,lg:i["default"].PropTypes.number,xsOffset:i["default"].PropTypes.number,smOffset:i["default"].PropTypes.number,mdOffset:i["default"].PropTypes.number,lgOffset:i["default"].PropTypes.number,xsPush:i["default"].PropTypes.number,smPush:i["default"].PropTypes.number,mdPush:i["default"].PropTypes.number,lgPush:i["default"].PropTypes.number,xsPull:i["default"].PropTypes.number,smPull:i["default"].PropTypes.number,mdPull:i["default"].PropTypes.number,lgPull:i["default"].PropTypes.number,componentClass:c["default"].elementType},getDefaultProps:function(){return{componentClass:"div"}},render:function(){var e=this.props.componentClass,t={};return o(d["default"].SIZES).forEach(function(e){var n=d["default"].SIZES[e],r=n,o=n+"-";this.props[r]&&(t["col-"+o+this.props[r]]=!0),r=n+"Offset",o=n+"-offset-",this.props[r]>=0&&(t["col-"+o+this.props[r]]=!0),r=n+"Push",o=n+"-push-",this.props[r]>=0&&(t["col-"+o+this.props[r]]=!0),r=n+"Pull",o=n+"-pull-",this.props[r]>=0&&(t["col-"+o+this.props[r]]=!0)},this),i["default"].createElement(e,r({},this.props,{className:u["default"](this.props.className,t)}),this.props.children)}});t["default"]=h,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(4),p=a(u),d=n(25),f=a(d),c=n(8),h=a(c),m=n(14),v=a(m),y=l["default"].createElement("span",null," ",l["default"].createElement("span",{className:"caret"})),g=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){var e=this.props.noCaret?null:y,t={"dropdown-toggle":!0},n=this.props.useAnchor?v["default"]:f["default"];return l["default"].createElement(n,s({},this.props,{className:p["default"](t,this.props.className),type:"button","aria-haspopup":!0,"aria-expanded":this.props.open}),this.props.title||this.props.children,e)},t}(l["default"].Component);t["default"]=g;var b=h["default"].singlePropFrom(["title","children"]);g.defaultProps={open:!1,useAnchor:!1,bsRole:"toggle"},g.propTypes={bsRole:l["default"].PropTypes.string,children:b,noCaret:l["default"].PropTypes.bool,open:l["default"].PropTypes.bool,title:b,useAnchor:l["default"].PropTypes.bool},g.isToggle=!0,g.titleProp="title",g.onClickProp="onClick",e.exports=t["default"]},function(e,t,n){"use strict";var r=n(2)["default"];t.__esModule=!0;var o=n(115),s=r(o);t.Static=s["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(2)["default"];t.__esModule=!0;var a=n(1),i=s(a),l=n(4),u=s(l),p=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){var e={"form-group":!this.props.standalone,"form-group-lg":!this.props.standalone&&"large"===this.props.bsSize,"form-group-sm":!this.props.standalone&&"small"===this.props.bsSize,"has-feedback":this.props.hasFeedback,"has-success":"success"===this.props.bsStyle,"has-warning":"warning"===this.props.bsStyle,"has-error":"error"===this.props.bsStyle};return i["default"].createElement("div",{className:u["default"](e,this.props.groupClassName)},this.props.children)},t}(i["default"].Component);p.defaultProps={hasFeedback:!1,standalone:!1},p.propTypes={standalone:i["default"].PropTypes.bool,hasFeedback:i["default"].PropTypes.bool,bsSize:function(e){return e.standalone&&void 0!==e.bsSize?new Error("bsSize will not be used when `standalone` is set."):i["default"].PropTypes.oneOf(["small","medium","large"]).apply(null,arguments)},bsStyle:i["default"].PropTypes.oneOf(["success","warning","error"]),groupClassName:i["default"].PropTypes.string},t["default"]=p,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(8),p=o(u),d=a["default"].createClass({displayName:"Grid",propTypes:{fluid:a["default"].PropTypes.bool,componentClass:p["default"].elementType},getDefaultProps:function(){return{componentClass:"div",fluid:!1}},render:function(){var e=this.props.componentClass,t=this.props.fluid?"container-fluid":"container";return a["default"].createElement(e,r({},this.props,{className:l["default"](this.props.className,t)}),this.props.children)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(9),l=o(i),u=/\%\((.+?)\)s/,p=a["default"].createClass({displayName:"Interpolate",propTypes:{component:a["default"].PropTypes.node,format:a["default"].PropTypes.string,unsafe:a["default"].PropTypes.bool},getDefaultProps:function(){return{component:"span",unsafe:!1}},render:function(){var e=l["default"].hasValidComponent(this.props.children)||"string"==typeof this.props.children?this.props.children:this.props.format,t=this.props.component,n=this.props.unsafe===!0,o=r({},this.props);if(delete o.children,delete o.format,delete o.component,delete o.unsafe,n){var s=e.split(u).reduce(function(e,t,n){var r=void 0;if(n%2===0?r=t:(r=o[t],delete o[t]),a["default"].isValidElement(r))throw new Error("cannot interpolate a React component into unsafe text");return e+=r},"");return o.dangerouslySetInnerHTML={__html:s},a["default"].createElement(t,o)}var i=e.split(u).reduce(function(e,t,n){var r=void 0;if(n%2===0){if(0===t.length)return e;r=t}else r=o[t],delete o[t];return e.push(r),e},[]);return a["default"].createElement(t,o,i)}});t["default"]=p,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(4),p=a(u),d=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){return l["default"].createElement("div",s({},this.props,{className:p["default"](this.props.className,this.props.modalClassName)}),this.props.children)},t}(l["default"].Component);d.propTypes={modalClassName:l["default"].PropTypes.string},d.defaultProps={modalClassName:"modal-body"},t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(4),p=a(u),d=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){return l["default"].createElement("div",s({},this.props,{className:p["default"](this.props.className,this.props.modalClassName)}),this.props.children)},t}(l["default"].Component);d.propTypes={modalClassName:l["default"].PropTypes.string},d.defaultProps={modalClassName:"modal-footer"},t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(4),p=a(u),d=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){return l["default"].createElement("div",s({},this.props,{className:p["default"](this.props.className,this.props.modalClassName)}),this.props.closeButton&&l["default"].createElement("button",{className:"close",onClick:this.props.onHide},l["default"].createElement("span",{"aria-hidden":"true"},"×")),this.props.children)},t}(l["default"].Component);d.__isModalHeader=!0,d.propTypes={"aria-label":l["default"].PropTypes.string,modalClassName:l["default"].PropTypes.string,closeButton:l["default"].PropTypes.bool,onHide:l["default"].PropTypes.func},d.defaultProps={"aria-label":"Close",modalClassName:"modal-header",closeButton:!1},t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(4),p=a(u),d=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){return l["default"].createElement("h4",s({},this.props,{className:p["default"](this.props.className,this.props.modalClassName)}),this.props.children)},t}(l["default"].Component);d.propTypes={modalClassName:l["default"].PropTypes.string},d.defaultProps={modalClassName:"modal-title"},t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(5),l=o(i),u=n(26),p=o(u),d=n(4),f=o(d),c=n(9),h=o(c),m=n(11),v=o(m),y=a["default"].createClass({displayName:"Nav",mixins:[l["default"]],propTypes:{activeHref:a["default"].PropTypes.string,activeKey:a["default"].PropTypes.any,bsStyle:a["default"].PropTypes.oneOf(["tabs","pills"]),stacked:a["default"].PropTypes.bool,justified:a["default"].PropTypes.bool,onSelect:a["default"].PropTypes.func,collapsible:a["default"].PropTypes.bool,className:a["default"].PropTypes.string,id:a["default"].PropTypes.oneOfType([a["default"].PropTypes.string,a["default"].PropTypes.number]),ulClassName:a["default"].PropTypes.string,ulId:a["default"].PropTypes.string,expanded:a["default"].PropTypes.bool,navbar:a["default"].PropTypes.bool,eventKey:a["default"].PropTypes.any,pullRight:a["default"].PropTypes.bool,right:a["default"].PropTypes.bool},getDefaultProps:function(){return{bsClass:"nav",collapsible:!1,expanded:!0,justified:!1,navbar:!1,pullRight:!1,right:!1,stacked:!1}},render:function(){var e=this.props.collapsible?"navbar-collapse":null;return this.props.navbar&&!this.props.collapsible?this.renderUl():a["default"].createElement(p["default"],{"in":this.props.expanded},a["default"].createElement("nav",r({},this.props,{className:f["default"](this.props.className,e)}),this.renderUl()))},renderUl:function(){var e=this.getBsClassSet();return e["nav-stacked"]=this.props.stacked,e["nav-justified"]=this.props.justified,e["navbar-nav"]=this.props.navbar,e["pull-right"]=this.props.pullRight,e["navbar-right"]=this.props.right,a["default"].createElement("ul",r({},this.props,{role:"tabs"===this.props.bsStyle?"tablist":null,className:f["default"](this.props.ulClassName,e),id:this.props.ulId,ref:"ul"}),h["default"].map(this.props.children,this.renderNavItem))},getChildActiveProp:function(e){return e.props.active?!0:null!=this.props.activeKey&&e.props.eventKey===this.props.activeKey?!0:null!=this.props.activeHref&&e.props.href===this.props.activeHref?!0:e.props.active},renderNavItem:function(e,t){return s.cloneElement(e,{role:"tabs"===this.props.bsStyle?"tab":null,active:this.getChildActiveProp(e),activeKey:this.props.activeKey,activeHref:this.props.activeHref,onSelect:v["default"](e.props.onSelect,this.props.onSelect),key:e.key?e.key:t,navItem:!0})}});t["default"]=y,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(10)["default"],i=n(2)["default"];t.__esModule=!0;var l=n(1),u=i(l),p=n(27),d=i(p),f=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){var e=this.props,t=e.children,n=e.title,r=e.noCaret,o=a(e,["children","title","noCaret"]);return u["default"].createElement(d["default"],s({},o,{componentClass:"li"}),u["default"].createElement(d["default"].Toggle,{useAnchor:!0,disabled:o.disabled,noCaret:r},n),u["default"].createElement(d["default"].Menu,null,t))},t}(u["default"].Component);f.propTypes=s({noCaret:u["default"].PropTypes.bool,title:u["default"].PropTypes.node.isRequired},d["default"].propTypes),t["default"]=f,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(10)["default"],o=n(3)["default"],s=n(2)["default"];t.__esModule=!0;var a=n(1),i=s(a),l=n(4),u=s(l),p=n(5),d=s(p),f=n(14),c=s(f),h=i["default"].createClass({displayName:"NavItem",mixins:[d["default"]],propTypes:{linkId:i["default"].PropTypes.string,onSelect:i["default"].PropTypes.func,active:i["default"].PropTypes.bool,disabled:i["default"].PropTypes.bool,href:i["default"].PropTypes.string,role:i["default"].PropTypes.string,title:i["default"].PropTypes.node,eventKey:i["default"].PropTypes.any,target:i["default"].PropTypes.string,"aria-controls":i["default"].PropTypes.string},getDefaultProps:function(){return{active:!1,disabled:!1}},render:function(){var e=this.props,t=e.role,n=e.linkId,s=e.disabled,a=e.active,l=e.href,p=e.title,d=e.target,f=e.children,h=e["aria-controls"],m=r(e,["role","linkId","disabled","active","href","title","target","children","aria-controls"]),v={active:a,disabled:s},y={role:t,href:l,title:p,target:d,id:n,onClick:this.handleClick};return t||"#"!==l||(y.role="button"),i["default"].createElement("li",o({},m,{role:"presentation",className:u["default"](m.className,v)}),i["default"].createElement(c["default"],o({},y,{"aria-selected":a,"aria-controls":h}),f))},handleClick:function(e){this.props.onSelect&&(e.preventDefault(),this.props.disabled||this.props.onSelect(this.props.eventKey,this.props.href,this.props.target))}});t["default"]=h,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(10)["default"],i=n(2)["default"];t.__esModule=!0;var l=n(1),u=i(l),p=n(223),d=i(p),f=n(8),c=i(f),h=n(32),m=i(h),v=n(4),y=i(v),g=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){var e=this.props,t=e.children,n=e.animation,r=a(e,["children","animation"]);return n===!0&&(n=m["default"]),n||(t=l.cloneElement(t,{className:y["default"]("in",t.props.className)})),u["default"].createElement(d["default"],s({},r,{transition:n}),t)},t}(u["default"].Component);g.propTypes=s({},d["default"].propTypes,{show:u["default"].PropTypes.bool,rootClose:u["default"].PropTypes.bool,onHide:u["default"].PropTypes.func,animation:u["default"].PropTypes.oneOfType([u["default"].PropTypes.bool,c["default"].elementType]),onEnter:u["default"].PropTypes.func,onEntering:u["default"].PropTypes.func,onEntered:u["default"].PropTypes.func,onExit:u["default"].PropTypes.func,onExiting:u["default"].PropTypes.func,onExited:u["default"].PropTypes.func}),g.defaultProps={animation:m["default"],rootClose:!1,show:!1},t["default"]=g,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(10)["default"],o=n(3)["default"],s=n(2)["default"];t.__esModule=!0;var a=n(1),i=s(a),l=n(4),u=s(l),p=n(5),d=s(p),f=n(9),c=s(f),h=i["default"].createClass({displayName:"PanelGroup",mixins:[d["default"]],propTypes:{accordion:i["default"].PropTypes.bool,activeKey:i["default"].PropTypes.any,className:i["default"].PropTypes.string,children:i["default"].PropTypes.node,defaultActiveKey:i["default"].PropTypes.any,onSelect:i["default"].PropTypes.func},getDefaultProps:function(){return{accordion:!1,bsClass:"panel-group"}},getInitialState:function(){var e=this.props.defaultActiveKey;return{activeKey:e}},render:function(){var e=this.getBsClassSet(),t=this.props,n=t.className,s=r(t,["className"]);return this.props.accordion&&(s.role="tablist"),i["default"].createElement("div",o({},s,{className:u["default"](n,e),onSelect:null}),c["default"].map(s.children,this.renderPanel))},renderPanel:function(e,t){var n=null!=this.props.activeKey?this.props.activeKey:this.state.activeKey,r={bsStyle:e.props.bsStyle||this.props.bsStyle,key:e.key?e.key:t,ref:e.ref};return this.props.accordion&&(r.headerRole="tab",r.panelRole="tabpanel",r.collapsible=!0,r.expanded=e.props.eventKey===n,r.onSelect=this.handleSelect),a.cloneElement(e,r)},shouldComponentUpdate:function(){return!this._isChanging},handleSelect:function(e,t){e.preventDefault(),this.props.onSelect&&(this._isChanging=!0,this.props.onSelect(t),this._isChanging=!1),this.state.activeKey===t&&(t=null),this.setState({activeKey:t})}});t["default"]=h,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(8),p=o(u),d=a["default"].createClass({displayName:"Row",propTypes:{componentClass:p["default"].elementType},getDefaultProps:function(){return{componentClass:"div"}},render:function(){var e=this.props.componentClass;return a["default"].createElement(e,r({},this.props,{className:l["default"](this.props.className,"row")}),this.props.children)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(35),p=o(u),d=a["default"].createClass({displayName:"Tab",propTypes:{active:a["default"].PropTypes.bool,animation:a["default"].PropTypes.bool,onAnimateOutEnd:a["default"].PropTypes.func,disabled:a["default"].PropTypes.bool,title:a["default"].PropTypes.node},getDefaultProps:function(){return{animation:!0}},getInitialState:function(){return{animateIn:!1,animateOut:!1}},componentWillReceiveProps:function(e){this.props.animation&&(this.state.animateIn||!e.active||this.props.active?this.state.animateOut||e.active||!this.props.active||this.setState({animateOut:!0}):this.setState({animateIn:!0}))},componentDidUpdate:function(){this.state.animateIn&&setTimeout(this.startAnimateIn,0),this.state.animateOut&&p["default"].addEndEventListener(a["default"].findDOMNode(this),this.stopAnimateOut)},startAnimateIn:function(){this.isMounted()&&this.setState({animateIn:!1})},stopAnimateOut:function(){this.isMounted()&&(this.setState({animateOut:!1}),this.props.onAnimateOutEnd&&this.props.onAnimateOutEnd())},render:function(){var e={"tab-pane":!0,fade:!0,active:this.props.active||this.state.animateOut,"in":this.props.active&&!this.state.animateIn};return a["default"].createElement("div",r({},this.props,{title:void 0,role:"tabpanel","aria-hidden":!this.props.active,className:l["default"](this.props.className,e)}),this.props.children)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(2)["default"];t.__esModule=!0;var o=n(1),s=r(o),a=n(12),i=r(a),l=n(68),u=r(l),p=s["default"].createClass({displayName:"TabPane",componentWillMount:function(){i["default"]("TabPane","Tab","https://github.com/react-bootstrap/react-bootstrap/pull/1091")},render:function(){return s["default"].createElement(u["default"],this.props)}});t["default"]=p,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){var t=void 0;return E["default"].forEach(e,function(e){null==t&&(t=e.props.eventKey)}),t}var o=n(3)["default"],s=n(10)["default"],a=n(17)["default"],i=n(2)["default"];t.__esModule=!0;var l=n(1),u=i(l),p=n(52),d=i(p),f=n(56),c=i(f),h=n(62),m=i(h),v=n(64),y=i(v),g=n(67),b=i(g),T=n(28),P=i(T),x=n(9),E=i(x),C=function(e,t){return t.props.id?t.props.id:e.id&&e.id+"___pane___"+t.props.eventKey},_=function(e,t){return t.props.id?t.props.id+"___tab":e.id&&e.id+"___tab___"+t.props.eventKey},N=u["default"].createClass({displayName:"Tabs",propTypes:{activeKey:u["default"].PropTypes.any,defaultActiveKey:u["default"].PropTypes.any,bsStyle:u["default"].PropTypes.oneOf(["tabs","pills"]),animation:u["default"].PropTypes.bool,id:u["default"].PropTypes.oneOfType([u["default"].PropTypes.string,u["default"].PropTypes.number]),onSelect:u["default"].PropTypes.func,position:u["default"].PropTypes.oneOf(["top","left","right"]),tabWidth:u["default"].PropTypes.oneOfType([u["default"].PropTypes.number,u["default"].PropTypes.object]),paneWidth:u["default"].PropTypes.oneOfType([u["default"].PropTypes.number,u["default"].PropTypes.object])},getDefaultProps:function(){return{animation:!0,tabWidth:2,position:"top"}},getInitialState:function(){var e=null!=this.props.defaultActiveKey?this.props.defaultActiveKey:r(this.props.children);return{activeKey:e,previousActiveKey:null}},componentWillReceiveProps:function(e){var t=this;null!=e.activeKey&&e.activeKey!==this.props.activeKey&&!function(){var n=t.props.activeKey;u["default"].Children.forEach(e.children,function(e){return u["default"].isValidElement(e)&&e.props.eventKey===n?void t.setState({previousActiveKey:n}):void 0})}()},handlePaneAnimateOutEnd:function(){this.setState({previousActiveKey:null})},render:function(){var e=this.props,t=e.id,n=e.className,r=e.style,a=e.position,i=e.bsStyle,l=e.tabWidth,p=e.paneWidth,f=e.children,h=s(e,["id","className","style","position","bsStyle","tabWidth","paneWidth","children"]),v="left"===a||"right"===a;null==i&&(i=v?"pills":"tabs");var y={id:t,className:n,style:r},g=o({},h,{bsStyle:i,stacked:v,activeKey:this.getActiveKey(),onSelect:this.handleSelect,ref:"tabs",role:"tablist"}),T=E["default"].map(f,this.renderTab),P={className:"tab-content",ref:"panes"},x=E["default"].map(f,this.renderPane);if(v){var C=this.getColProps({tabWidth:l,paneWidth:p}),_=C.tabsColProps,N=C.panesColProps,O=u["default"].createElement(d["default"],o({componentClass:m["default"]},g,_),T),w=u["default"].createElement(d["default"],o({},P,N),x),S=void 0;return S="left"===a?u["default"].createElement(b["default"],y,O,w):u["default"].createElement(b["default"],y,w,O),u["default"].createElement(c["default"],null,S)}return u["default"].createElement("div",y,u["default"].createElement(m["default"],g,T),u["default"].createElement("div",P,x))},getActiveKey:function(){return void 0!==this.props.activeKey?this.props.activeKey:this.state.activeKey},renderPane:function(e,t){var n=this.state.previousActiveKey,r=e.props.eventKey===this.getActiveKey(),o=null==n,s=null!=n&&e.props.eventKey===n;return l.cloneElement(e,{active:r&&(o||!this.props.animation),id:C(this.props,e),"aria-labelledby":_(this.props,e),key:e.key?e.key:t,animation:this.props.animation,onAnimateOutEnd:s?this.handlePaneAnimateOutEnd:null})},renderTab:function(e){if(null==e.props.title)return null;var t=e.props,n=t.eventKey,r=t.title,o=t.disabled;return u["default"].createElement(y["default"],{linkId:_(this.props,e),ref:"tab"+n,"aria-controls":C(this.props,e),eventKey:n,disabled:o},r)},getColProps:function(e){var t=e.tabWidth,n=e.paneWidth,r=void 0;r=t instanceof Object?t:{xs:t};var o=void 0;return null==n?(o={},a(r).forEach(function(e){o[e]=P["default"].GRID_COLUMNS-r[e]})):o=n instanceof Object?n:{xs:n},{tabsColProps:r,panesColProps:o}},shouldComponentUpdate:function(){return!this._isChanging},handleSelect:function(e){if(this.props.onSelect)return this._isChanging=!0,this.props.onSelect(e),void(this._isChanging=!1);var t=this.getActiveKey();e!==t&&this.setState({activeKey:e,previousActiveKey:t})}});t["default"]=N,e.exports=t["default"]},function(e,t){"use strict";t.__esModule=!0;var n={listen:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!1),{remove:function(){e.removeEventListener(t,n,!1)}}):e.attachEvent?(e.attachEvent("on"+t,n),{remove:function(){e.detachEvent("on"+t,n)}}):void 0}};t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";t["default"]=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t},t.__esModule=!0},function(e,t,n){e.exports=function(e,t){var r=n(37),o=(n(18).Object||{})[e]||Object[e],s={};s[e]=t(o),r(r.S+r.F*n(165)(function(){o(1)}),"Object",s)}},function(e,t,n){var r=n(163);e.exports=function(e){return Object(r(e))}},function(e,t,n){"use strict";var r=n(20),o=function(){};r&&(o=function(){return document.addEventListener?function(e,t,n,r){return e.addEventListener(t,n,r||!1)}:document.attachEvent?function(e,t,n){return e.attachEvent("on"+t,n)}:void 0}()),e.exports=o},function(e,t,n){"use strict";var r=n(20),o=function(){var e=r&&document.documentElement;return e&&e.contains?function(e,t){return e.contains(t)}:e&&e.compareDocumentPosition?function(e,t){return e===t||!!(16&e.compareDocumentPosition(t))}:function(e,t){if(t)do if(t===e)return!0;while(t=t.parentNode);return!1}}();e.exports=o},function(e,t,n){"use strict";function r(e){return e.nodeName&&e.nodeName.toLowerCase()}function o(e){for(var t=i["default"](e),n=e&&e.offsetParent;n&&"html"!==r(e)&&"static"===u["default"](n,"position");)n=n.offsetParent;return n||t.documentElement}var s=n(24);t.__esModule=!0,t["default"]=o;var a=n(19),i=s.interopRequireDefault(a),l=n(41),u=s.interopRequireDefault(l);e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e.nodeName&&e.nodeName.toLowerCase()}function o(e,t){var n,o={top:0,left:0};return"fixed"===m["default"](e,"position")?n=e.getBoundingClientRect():(t=t||u["default"](e),n=i["default"](e),"html"!==r(t)&&(o=i["default"](t)),o.top+=parseInt(m["default"](t,"borderTopWidth"),10)-d["default"](t)||0,o.left+=parseInt(m["default"](t,"borderLeftWidth"),10)-c["default"](t)||0),s._extends({},n,{top:n.top-o.top-(parseInt(m["default"](e,"marginTop"),10)||0),left:n.left-o.left-(parseInt(m["default"](e,"marginLeft"),10)||0)})}var s=n(24);t.__esModule=!0,t["default"]=o;var a=n(40),i=s.interopRequireDefault(a),l=n(77),u=s.interopRequireDefault(l),p=n(79),d=s.interopRequireDefault(p),f=n(176),c=s.interopRequireDefault(f),h=n(41),m=s.interopRequireDefault(h);e.exports=t["default"]},function(e,t,n){"use strict";var r=n(39);e.exports=function(e,t){var n=r(e);return void 0===t?n?"pageYOffset"in n?n.pageYOffset:n.document.documentElement.scrollTop:e.scrollTop:void(n?n.scrollTo("pageXOffset"in n?n.pageXOffset:n.document.documentElement.scrollLeft,t):e.scrollTop=t)}},function(e,t,n){"use strict";var r=n(180),o=/^-ms-/;e.exports=function(e){return r(e.replace(o,"ms-"))}},function(e,t){t=e.exports=function(e){if(e&&"object"==typeof e){var t=e.which||e.keyCode||e.charCode;t&&(e=t)}if("number"==typeof e)return s[e];var o=String(e),a=n[o.toLowerCase()];if(a)return a;var a=r[o.toLowerCase()];return a?a:1===o.length?o.charCodeAt(0):void 0};var n=t.code=t.codes={backspace:8,tab:9,enter:13,shift:16,ctrl:17,alt:18,"pause/break":19,"caps lock":20,esc:27,space:32,"page up":33,"page down":34,end:35,home:36,left:37,up:38,right:39,down:40,insert:45,"delete":46,command:91,"right click":93,"numpad *":106,"numpad +":107,"numpad -":109,"numpad .":110,"numpad /":111,"num lock":144,"scroll lock":145,"my computer":182,"my calculator":183,";":186,"=":187,",":188,"-":189,".":190,"/":191,"`":192,"[":219,"\\":220,"]":221,"'":222},r=t.aliases={windows:91,"⇧":16,"⌥":18,"⌃":17,"⌘":91,ctl:17,control:17,option:18,pause:19,"break":19,caps:20,"return":13,escape:27,spc:32,pgup:33,pgdn:33,ins:45,del:46,cmd:91};/*!
+ * Programatically add the following
+ */
+for(o=97;123>o;o++)n[String.fromCharCode(o)]=o-32;for(var o=48;58>o;o++)n[o-48]=o;for(o=1;13>o;o++)n["f"+o]=o+111;for(o=0;10>o;o++)n["numpad "+o]=o+96;var s=t.names=t.title={};for(o in n)s[n[o]]=o;for(var a in r)n[a]=r[a]},function(e,t){function n(e,t){if("function"!=typeof e)throw new TypeError(r);return t=o(void 0===t?e.length-1:+t||0,0),function(){for(var n=arguments,r=-1,s=o(n.length-t,0),a=Array(s);++r<s;)a[r]=n[t+r];switch(t){case 0:return e.call(this,a);case 1:return e.call(this,n[0],a);case 2:return e.call(this,n[0],n[1],a)}var i=Array(t+1);for(r=-1;++r<t;)i[r]=n[r];return i[t]=a,e.apply(this,i)}}var r="Expected a function",o=Math.max;e.exports=n},function(e,t,n){function r(e,t,n,u){u||(u=[]);for(var p=-1,d=e.length;++p<d;){var f=e[p];l(f)&&i(f)&&(n||a(f)||s(f))?t?r(f,t,n,u):o(u,f):n||(u[u.length]=f)}return u}var o=n(188),s=n(44),a=n(15),i=n(43),l=n(22);e.exports=r},function(e,t,n){var r=n(208),o=r();e.exports=o},function(e,t,n){function r(e,t,n){if(null!=e){void 0!==n&&n in o(e)&&(t=[n]);for(var r=0,s=t.length;null!=e&&s>r;)e=e[t[r++]];return r&&r==s?e:void 0}}var o=n(13);e.exports=r},function(e,t,n){function r(e,t,n,i,l,u){return e===t?!0:null==e||null==t||!s(e)&&!a(t)?e!==e&&t!==t:o(e,t,r,n,i,l,u)}var o=n(198),s=n(16),a=n(22);e.exports=r},function(e,t){function n(e){return function(t){return null==t?void 0:t[e]}}e.exports=n},function(e,t,n){var r=n(87),o=r("length");e.exports=o},function(e,t){function n(e,t){return e="number"==typeof e||r.test(e)?+e:-1,t=null==t?o:t,e>-1&&e%1==0&&t>e}var r=/^\d+$/,o=9007199254740991;e.exports=n},function(e,t,n){function r(e,t){var n=typeof e;if("string"==n&&i.test(e)||"number"==n)return!0;if(o(e))return!1;var r=!a.test(e);return r||null!=t&&e in s(t)}var o=n(15),s=n(13),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,i=/^\w*$/;e.exports=r},function(e,t,n){function r(e){return e===e&&!o(e)}var o=n(16);e.exports=r},function(e,t,n){function r(e,t){e=o(e);for(var n=-1,r=t.length,s={};++n<r;){var a=t[n];a in e&&(s[a]=e[a])}return s}var o=n(13);e.exports=r},function(e,t,n){function r(e,t){var n={};return o(e,function(e,r,o){t(e,r,o)&&(n[r]=e)}),n}var o=n(195);e.exports=r},function(e,t,n){function r(e){if(s(e))return e;var t=[];return o(e).replace(a,function(e,n,r,o){t.push(r?o.replace(i,"$1"):n||e)}),t}var o=n(204),s=n(15),a=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,i=/\\(\\)?/g;e.exports=r},function(e,t,n){var r=n(187),o=n(191),s=n(83),a=n(42),i=n(46),l=n(92),u=n(93),p=n(82),d=p(function(e,t){if(null==e)return{};if("function"!=typeof t[0]){var t=r(s(t),String);return l(e,o(i(e),t))}var n=a(t[0],t[1],3);return u(e,function(e,t,r){return!n(e,t,r)})});e.exports=d},function(e,t){function n(e){return e}e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}t.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l=n(1),u=r(l),p=n(4),d=r(p),f=n(31),c=r(f),h=n(100),m=r(h),v=n(226),y=n(102),g=r(y),b=function(e){function t(n,r){s(this,t),e.call(this,n,r),this.state={positionLeft:null,positionTop:null,arrowOffsetLeft:null,arrowOffsetTop:null},this._needsFlush=!1,this._lastTarget=null}return a(t,e),t.prototype.componentDidMount=function(){this.updatePosition()},t.prototype.componentWillReceiveProps=function(){this._needsFlush=!0},t.prototype.componentDidUpdate=function(e){this._needsFlush&&(this._needsFlush=!1,this.updatePosition(e.placement!==this.props.placement))},t.prototype.componentWillUnmount=function(){this._lastTarget=null},t.prototype.render=function(){var e=this.props,t=e.children,n=e.className,r=o(e,["children","className"]),s=this.state,a=s.positionLeft,p=s.positionTop,f=o(s,["positionLeft","positionTop"]),c=u["default"].Children.only(t);return l.cloneElement(c,i({},r,f,{positionLeft:a,positionTop:p,className:d["default"](n,c.props.className),style:i({},c.props.style,{left:a,top:p})}))},t.prototype.getTargetSafe=function(){if(!this.props.target)return null;var e=this.props.target(this.props);return e?e:null},t.prototype.updatePosition=function(e){var t=this.getTargetSafe();if(t!==this._lastTarget||e){if(this._lastTarget=t,!t)return void this.setState({positionLeft:null,positionTop:null,arrowOffsetLeft:null,arrowOffsetTop:null});var n=u["default"].findDOMNode(this),r=m["default"](this.props.container,c["default"](this).body);this.setState(v.calcOverlayPosition(this.props.placement,n,t,r,this.props.containerPadding))}},t}(u["default"].Component);b.propTypes={target:u["default"].PropTypes.func,container:g["default"],containerPadding:u["default"].PropTypes.number,placement:u["default"].PropTypes.oneOf(["top","right","bottom","left"])},b.displayName="Position",b.defaultProps={containerPadding:0,placement:"right"},t["default"]=b,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}function a(e){e.nativeEvent[m]=!0}t.__esModule=!0;var i=n(1),l=r(i),u=n(224),p=r(u),d=n(225),f=r(d),c=n(31),h=r(c),m="__click_was_inside",v=function(e){function t(n){o(this,t),e.call(this,n),this.handleDocumentClick=this.handleDocumentClick.bind(this),this.handleDocumentKeyUp=this.handleDocumentKeyUp.bind(this)}return s(t,e),t.prototype.bindRootCloseHandlers=function(){var e=h["default"](this);this._onDocumentClickListener=p["default"](e,"click",this.handleDocumentClick),this._onDocumentKeyupListener=p["default"](e,"keyup",this.handleDocumentKeyUp)},t.prototype.handleDocumentClick=function(e){e[m]||this.props.onRootClose()},t.prototype.handleDocumentKeyUp=function(e){27===e.keyCode&&this.props.onRootClose()},t.prototype.unbindRootCloseHandlers=function(){this._onDocumentClickListener&&this._onDocumentClickListener.remove(),this._onDocumentKeyupListener&&this._onDocumentKeyupListener.remove()},t.prototype.componentDidMount=function(){this.bindRootCloseHandlers()},t.prototype.render=function(){var e=this.props,t=e.noWrap,n=e.children,r=l["default"].Children.only(n);return t?l["default"].cloneElement(r,{onClick:f["default"](a,r.props.onClick)}):l["default"].createElement("div",{onClick:a},r)},t.prototype.getWrappedDOMNode=function(){var e=l["default"].findDOMNode(this);return this.props.noWrap?e:e.firstChild},t.prototype.componentWillUnmount=function(){this.unbindRootCloseHandlers()},t}(l["default"].Component);t["default"]=v,v.displayName="RootCloseWrapper",v.propTypes={onRootClose:l["default"].PropTypes.func.isRequired,noWrap:l["default"].PropTypes.bool},e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}function i(){}t.__esModule=!0;var l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u=n(1),p=r(u),d=n(179),f=r(d),c=n(75),h=r(c),m=n(4),v=r(m),y=f["default"].end,g=0;t.UNMOUNTED=g;var b=1;t.EXITED=b;var T=2;t.ENTERING=T;var P=3;t.ENTERED=P;var x=4;t.EXITING=x;var E=function(e){function t(n,r){s(this,t),e.call(this,n,r);var o=void 0;o=n["in"]?n.transitionAppear?b:P:n.unmountOnExit?g:b,this.state={status:o},this.nextCallback=null}return a(t,e),t.prototype.componentDidMount=function(){this.props.transitionAppear&&this.props["in"]&&this.performEnter(this.props)},t.prototype.componentWillReceiveProps=function(e){var t=this.state.status;e["in"]?t===x?this.performEnter(e):this.props.unmountOnExit?t===g&&this.setState({status:b}):t===b&&this.performEnter(e):(t===T||t===P)&&this.performExit(e)},t.prototype.componentDidUpdate=function(){this.props.unmountOnExit&&this.state.status===b&&(this.props["in"]?this.performEnter(this.props):this.setState({status:g}))},t.prototype.componentWillUnmount=function(){this.cancelNextCallback()},t.prototype.performEnter=function(e){var t=this;this.cancelNextCallback();var n=p["default"].findDOMNode(this);e.onEnter(n),this.safeSetState({status:T},function(){t.props.onEntering(n),t.onTransitionEnd(n,function(){t.safeSetState({status:P},function(){t.props.onEntered(n)})})})},t.prototype.performExit=function(e){var t=this;this.cancelNextCallback();var n=p["default"].findDOMNode(this);e.onExit(n),this.safeSetState({status:x},function(){t.props.onExiting(n),t.onTransitionEnd(n,function(){t.safeSetState({status:b},function(){t.props.onExited(n)})})})},t.prototype.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},t.prototype.safeSetState=function(e,t){this.setState(e,this.setNextCallback(t))},t.prototype.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},t.prototype.onTransitionEnd=function(e,t){this.setNextCallback(t),e?(h["default"](e,y,this.nextCallback),setTimeout(this.nextCallback,this.props.timeout)):setTimeout(this.nextCallback,0)},t.prototype.render=function(){var e=this.state.status;if(e===g)return null;var n=this.props,r=n.children,s=n.className,a=o(n,["children","className"]);Object.keys(t.propTypes).forEach(function(e){return delete a[e]});var i=void 0;e===b?i=this.props.exitedClassName:e===T?i=this.props.enteringClassName:e===P?i=this.props.enteredClassName:e===x&&(i=this.props.exitingClassName);var u=p["default"].Children.only(r);return p["default"].cloneElement(u,l({},a,{className:v["default"](u.props.className,s,i)}))},t}(p["default"].Component);E.propTypes={"in":p["default"].PropTypes.bool,unmountOnExit:p["default"].PropTypes.bool,transitionAppear:p["default"].PropTypes.bool,timeout:p["default"].PropTypes.number,exitedClassName:p["default"].PropTypes.string,exitingClassName:p["default"].PropTypes.string,enteredClassName:p["default"].PropTypes.string,enteringClassName:p["default"].PropTypes.string,onEnter:p["default"].PropTypes.func,onEntering:p["default"].PropTypes.func,onEntered:p["default"].PropTypes.func,onExit:p["default"].PropTypes.func,onExiting:p["default"].PropTypes.func,onExited:p["default"].PropTypes.func},E.displayName="Transition",E.defaultProps={"in":!1,unmountOnExit:!1,transitionAppear:!1,timeout:5e3,onEnter:i,onEntering:i,onEntered:i,onExit:i,onExiting:i,onExited:i},t["default"]=E},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){return e="function"==typeof e?e():e,a["default"].findDOMNode(e)||t}t.__esModule=!0,t["default"]=o;var s=n(1),a=r(s);e.exports=t["default"]},function(e,t){"use strict";function n(e,t,n,r){return"Invalid prop '"+t+"' of value '"+e[t]+"'"+(" supplied to '"+n+"'"+r)}function r(e){function t(t,n,r,o){return o=o||"<<anonymous>>",null!=n[r]?e(n,r,o):t?new Error("Required prop '"+r+"' was not specified in '"+o+"'."):void 0}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}t.__esModule=!0,t.errMsg=n,t.createChainableTypeChecker=r},function(e,t,n){"use strict";function r(e,t,n){return"object"!=typeof e[t]||"function"!=typeof e[t].render&&1!==e[t].nodeType?new Error(o.errMsg(e,t,n,", expected a DOM element or an object that has a `render` method")):void 0}t.__esModule=!0;var o=n(101);t["default"]=o.createChainableTypeChecker(r),e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(66),l=o(i),u=a["default"].createClass({displayName:"Accordion",render:function(){return a["default"].createElement(l["default"],r({},this.props,{accordion:!0}),this.props.children)}});t["default"]=u,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(49),p=o(u),d=a["default"].createClass({displayName:"Affix",mixins:[p["default"]],render:function(){var e=r({top:this.state.affixPositionTop},this.props.style);return a["default"].createElement("div",r({},this.props,{className:l["default"](this.props.className,this.state.affixClass),style:e}),this.props.children)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=a["default"].createClass({displayName:"Alert",mixins:[p["default"]],propTypes:{onDismiss:a["default"].PropTypes.func,dismissAfter:a["default"].PropTypes.number,closeLabel:a["default"].PropTypes.string},getDefaultProps:function(){return{bsClass:"alert",bsStyle:"info",closeLabel:"Close Alert"}},renderDismissButton:function(){return a["default"].createElement("button",{type:"button",className:"close","aria-label":this.props.closeLabel,onClick:this.props.onDismiss},a["default"].createElement("span",{"aria-hidden":"true"},"×"))},render:function(){var e=this.getBsClassSet(),t=!!this.props.onDismiss;return e["alert-dismissable"]=t,a["default"].createElement("div",r({},this.props,{role:"alert",className:l["default"](this.props.className,e)}),t?this.renderDismissButton():null,this.props.children)},componentDidMount:function(){this.props.dismissAfter&&this.props.onDismiss&&(this.dismissTimer=setTimeout(this.props.onDismiss,this.props.dismissAfter))},componentWillUnmount:function(){clearTimeout(this.dismissTimer)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(9),l=o(i),u=n(4),p=o(u),d=a["default"].createClass({displayName:"Badge",propTypes:{pullRight:a["default"].PropTypes.bool},getDefaultProps:function(){return{pullRight:!1}},hasContent:function(){return l["default"].hasValidComponent(this.props.children)||a["default"].Children.count(this.props.children)>1||"string"==typeof this.props.children||"number"==typeof this.props.children},render:function(){var e={"pull-right":this.props.pullRight,badge:this.hasContent()};return a["default"].createElement("span",r({},this.props,{className:p["default"](this.props.className,e)}),this.props.children)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=a["default"].createClass({displayName:"ButtonToolbar",mixins:[p["default"]],getDefaultProps:function(){return{bsClass:"button-toolbar"}},render:function(){var e=this.getBsClassSet();return a["default"].createElement("div",r({},this.props,{role:"toolbar",className:l["default"](this.props.className,e)}),this.props.children)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=n(9),f=o(d),c=n(33),h=o(c),m=a["default"].createClass({displayName:"Carousel",mixins:[p["default"]],propTypes:{slide:a["default"].PropTypes.bool,indicators:a["default"].PropTypes.bool,interval:a["default"].PropTypes.number,controls:a["default"].PropTypes.bool,pauseOnHover:a["default"].PropTypes.bool,wrap:a["default"].PropTypes.bool,onSelect:a["default"].PropTypes.func,onSlideEnd:a["default"].PropTypes.func,activeIndex:a["default"].PropTypes.number,defaultActiveIndex:a["default"].PropTypes.number,direction:a["default"].PropTypes.oneOf(["prev","next"]),prevIcon:a["default"].PropTypes.node,nextIcon:a["default"].PropTypes.node},getDefaultProps:function(){return{slide:!0,interval:5e3,pauseOnHover:!0,wrap:!0,indicators:!0,controls:!0,prevIcon:a["default"].createElement(h["default"],{glyph:"chevron-left"}),nextIcon:a["default"].createElement(h["default"],{glyph:"chevron-right"})}},getInitialState:function(){return{activeIndex:null==this.props.defaultActiveIndex?0:this.props.defaultActiveIndex,previousActiveIndex:null,direction:null}},getDirection:function(e,t){return e===t?null:e>t?"prev":"next"},componentWillReceiveProps:function(e){var t=this.getActiveIndex();null!=e.activeIndex&&e.activeIndex!==t&&(clearTimeout(this.timeout),this.setState({previousActiveIndex:t,direction:null!=e.direction?e.direction:this.getDirection(t,e.activeIndex)}))},componentDidMount:function(){this.waitForNext()},componentWillUnmount:function(){clearTimeout(this.timeout)},next:function(e){e&&e.preventDefault();var t=this.getActiveIndex()+1,n=f["default"].numberOf(this.props.children);if(t>n-1){if(!this.props.wrap)return;t=0}this.handleSelect(t,"next")},prev:function(e){e&&e.preventDefault();var t=this.getActiveIndex()-1;if(0>t){if(!this.props.wrap)return;t=f["default"].numberOf(this.props.children)-1}this.handleSelect(t,"prev")},pause:function(){this.isPaused=!0,clearTimeout(this.timeout)},play:function(){this.isPaused=!1,this.waitForNext()},waitForNext:function(){!this.isPaused&&this.props.slide&&this.props.interval&&null==this.props.activeIndex&&(this.timeout=setTimeout(this.next,this.props.interval))},handleMouseOver:function(){this.props.pauseOnHover&&this.pause()},handleMouseOut:function(){this.isPaused&&this.play()},render:function(){var e={carousel:!0,slide:this.props.slide};return a["default"].createElement("div",r({},this.props,{className:l["default"](this.props.className,e),onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut}),this.props.indicators?this.renderIndicators():null,a["default"].createElement("div",{className:"carousel-inner",ref:"inner"},f["default"].map(this.props.children,this.renderItem)),this.props.controls?this.renderControls():null)},renderPrev:function(){return a["default"].createElement("a",{className:"left carousel-control",href:"#prev",key:0,onClick:this.prev},this.props.prevIcon)},renderNext:function(){return a["default"].createElement("a",{className:"right carousel-control",href:"#next",key:1,onClick:this.next},this.props.nextIcon)},renderControls:function(){if(!this.props.wrap){var e=this.getActiveIndex(),t=f["default"].numberOf(this.props.children);return[0!==e?this.renderPrev():null,e!==t-1?this.renderNext():null]}return[this.renderPrev(),this.renderNext()]},renderIndicator:function(e,t){var n=t===this.getActiveIndex()?"active":null;return a["default"].createElement("li",{key:t,className:n,onClick:this.handleSelect.bind(this,t,null)})},renderIndicators:function(){var e=[];return f["default"].forEach(this.props.children,function(t,n){e.push(this.renderIndicator(t,n)," ")},this),a["default"].createElement("ol",{className:"carousel-indicators"},e)},getActiveIndex:function(){return null!=this.props.activeIndex?this.props.activeIndex:this.state.activeIndex},handleItemAnimateOutEnd:function(){this.setState({previousActiveIndex:null,direction:null},function(){this.waitForNext(),this.props.onSlideEnd&&this.props.onSlideEnd()})},renderItem:function(e,t){var n=this.getActiveIndex(),r=t===n,o=null!=this.state.previousActiveIndex&&this.state.previousActiveIndex===t&&this.props.slide;return s.cloneElement(e,{active:r,ref:e.ref,key:e.key?e.key:t,index:t,animateOut:o,animateIn:r&&null!=this.state.previousActiveIndex&&this.props.slide,direction:this.state.direction,onAnimateOutEnd:o?this.handleItemAnimateOutEnd:null})},handleSelect:function(e,t){if(clearTimeout(this.timeout),this.isMounted()){var n=this.getActiveIndex();if(t=t||this.getDirection(n,e),this.props.onSelect&&this.props.onSelect(e,t),null==this.props.activeIndex&&e!==n){if(null!=this.state.previousActiveIndex)return;this.setState({activeIndex:e,previousActiveIndex:n,direction:t})}}}});t["default"]=m,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(35),p=o(u),d=a["default"].createClass({displayName:"CarouselItem",propTypes:{direction:a["default"].PropTypes.oneOf(["prev","next"]),onAnimateOutEnd:a["default"].PropTypes.func,active:a["default"].PropTypes.bool,animateIn:a["default"].PropTypes.bool,animateOut:a["default"].PropTypes.bool,caption:a["default"].PropTypes.node,index:a["default"].PropTypes.number},getInitialState:function(){return{direction:null}},getDefaultProps:function(){return{active:!1,animateIn:!1,animateOut:!1}},handleAnimateOutEnd:function(){this.props.onAnimateOutEnd&&this.isMounted()&&this.props.onAnimateOutEnd(this.props.index)},componentWillReceiveProps:function(e){this.props.active!==e.active&&this.setState({direction:null})},componentDidUpdate:function(e){!this.props.active&&e.active&&p["default"].addEndEventListener(a["default"].findDOMNode(this),this.handleAnimateOutEnd),this.props.active!==e.active&&setTimeout(this.startAnimation,20)},startAnimation:function(){this.isMounted()&&this.setState({direction:"prev"===this.props.direction?"right":"left"})},render:function(){var e={item:!0,active:this.props.active&&!this.props.animateIn||this.props.animateOut,next:this.props.active&&this.props.animateIn&&"next"===this.props.direction,prev:this.props.active&&this.props.animateIn&&"prev"===this.props.direction};return this.state.direction&&(this.props.animateIn||this.props.animateOut)&&(e[this.state.direction]=!0),a["default"].createElement("div",r({},this.props,{className:l["default"](this.props.className,e)}),this.props.children,this.props.caption?this.renderCaption():null)},renderCaption:function(){return a["default"].createElement("div",{className:"carousel-caption"},this.props.caption)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(2)["default"];t.__esModule=!0;var o=n(1),s=r(o),a=n(35),i=r(a),l=n(12),u=r(l),p={propTypes:{defaultExpanded:s["default"].PropTypes.bool,expanded:s["default"].PropTypes.bool},getInitialState:function(){var e=null!=this.props.defaultExpanded?this.props.defaultExpanded:null!=this.props.expanded?this.props.expanded:!1;return{expanded:e,collapsing:!1}},componentWillMount:function(){u["default"]("CollapsibleMixin","Collapse Component")},componentWillUpdate:function(e,t){var n=null!=e.expanded?e.expanded:t.expanded;if(n!==this.isExpanded()){var r=this.getCollapsibleDOMNode(),o=this.dimension(),s="0";n||(s=this.getCollapsibleDimensionValue()),r.style[o]=s+"px",this._afterWillUpdate()}},componentDidUpdate:function(e,t){this._checkToggleCollapsing(e,t),this._checkStartAnimation()},_afterWillUpdate:function(){},_checkStartAnimation:function(){if(this.state.collapsing){var e=this.getCollapsibleDOMNode(),t=this.dimension(),n=this.getCollapsibleDimensionValue(),r=void 0;r=this.isExpanded()?n+"px":"0px",e.style[t]=r}},_checkToggleCollapsing:function(e,t){var n=null!=e.expanded?e.expanded:t.expanded,r=this.isExpanded();n!==r&&(n?this._handleCollapse():this._handleExpand())},_handleExpand:function(){var e=this,t=this.getCollapsibleDOMNode(),n=this.dimension(),r=function o(){e._removeEndEventListener(t,o),t.style[n]="",e.setState({collapsing:!1})};this._addEndEventListener(t,r),this.setState({collapsing:!0})},_handleCollapse:function(){var e=this,t=this.getCollapsibleDOMNode(),n=function r(){e._removeEndEventListener(t,r),e.setState({collapsing:!1})};this._addEndEventListener(t,n),this.setState({collapsing:!0})},_addEndEventListener:function(e,t){i["default"].addEndEventListener(e,t)},_removeEndEventListener:function(e,t){i["default"].removeEndEventListener(e,t)},dimension:function(){return"function"==typeof this.getCollapsibleDimension?this.getCollapsibleDimension():"height"},isExpanded:function(){return null!=this.props.expanded?this.props.expanded:this.state.expanded},getCollapsibleClassSet:function(e){var t={};return"string"==typeof e&&e.split(" ").forEach(function(e){e&&(t[e]=!0)}),t.collapsing=this.state.collapsing,t.collapse=!this.state.collapsing,t["in"]=this.isExpanded()&&!this.state.collapsing,t}};t["default"]=p,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(2)["default"];t.__esModule=!0;var o=n(1),s=r(o),a=n(5),i=r(a),l=n(26),u=r(l),p=n(4),d=r(p),f=n(9),c=r(f),h=n(11),m=r(h),v=s["default"].createClass({displayName:"CollapsibleNav",mixins:[i["default"]],propTypes:{onSelect:s["default"].PropTypes.func,activeHref:s["default"].PropTypes.string,activeKey:s["default"].PropTypes.any,collapsible:s["default"].PropTypes.bool,expanded:s["default"].PropTypes.bool,eventKey:s["default"].PropTypes.any},getDefaultProps:function(){return{collapsible:!1,expanded:!1}},render:function(){var e=this.props.collapsible?"navbar-collapse":null,t=this.props.collapsible?this.renderCollapsibleNavChildren:this.renderChildren,n=s["default"].createElement("div",{eventKey:this.props.eventKey,className:d["default"](this.props.className,e)},c["default"].map(this.props.children,t));return this.props.collapsible?s["default"].createElement(u["default"],{"in":this.props.expanded},n):n},getChildActiveProp:function(e){return e.props.active?!0:null!=this.props.activeKey&&e.props.eventKey===this.props.activeKey?!0:null!=this.props.activeHref&&e.props.href===this.props.activeHref?!0:e.props.active},renderChildren:function(e,t){var n=e.key?e.key:t;return o.cloneElement(e,{activeKey:this.props.activeKey,activeHref:this.props.activeHref,ref:"nocollapse_"+n,key:n,navItem:!0})},renderCollapsibleNavChildren:function(e,t){var n=e.key?e.key:t;return o.cloneElement(e,{active:this.getChildActiveProp(e),activeKey:this.props.activeKey,activeHref:this.props.activeHref,onSelect:m["default"](e.props.onSelect,this.props.onSelect),ref:"collapsible_"+n,key:n,navItem:!0})}});t["default"]=v,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(10)["default"],i=n(2)["default"];t.__esModule=!0;var l=n(1),u=i(l),p=n(5),d=i(p),f=n(27),c=i(f),h=n(63),m=i(h),v=n(8),y=i(v),g=n(12),b=i(g),T=n(95),P=i(T),x=function(e){function t(n){o(this,t),e.call(this,n)}return r(t,e),t.prototype.render=function(){var e=this.props,t=e.title,n=e.navItem,r=a(e,["title","navItem"]),o=P["default"](r,c["default"].ControlledComponent.propTypes);return n?u["default"].createElement(m["default"],this.props):u["default"].createElement(c["default"],r,u["default"].createElement(c["default"].Toggle,o,t),u["default"].createElement(c["default"].Menu,null,this.props.children))},t}(u["default"].Component);x.propTypes=s({noCaret:u["default"].PropTypes.bool,navItem:y["default"].all([u["default"].PropTypes.bool,function(e,t,n){e.navItem&&b["default"]("navItem","NavDropdown component","https://github.com/react-bootstrap/react-bootstrap/issues/526")}]),title:u["default"].PropTypes.node.isRequired},c["default"].propTypes,d["default"].propTypes),x.defaultProps={pullRight:!1,dropup:!1,navItem:!1,noCaret:!1},t["default"]=x,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(2)["default"];t.__esModule=!0;var a=n(1),i=s(a),l=n(81),u=s(l),p=n(4),d=s(p),f=n(98),c=s(f),h=n(9),m=s(h),v=n(11),y=s(v),g=function(e){function t(n){o(this,t),e.call(this,n),this.focusNext=this.focusNext.bind(this),this.focusPrevious=this.focusPrevious.bind(this),this.getFocusableMenuItems=this.getFocusableMenuItems.bind(this),this.getItemsAndActiveIndex=this.getItemsAndActiveIndex.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}return r(t,e),t.prototype.handleKeyDown=function(e){switch(e.keyCode){case u["default"].codes.down:this.focusNext(),e.preventDefault();break;case u["default"].codes.up:this.focusPrevious(),e.preventDefault();break;case u["default"].codes.esc:case u["default"].codes.tab:this.props.onClose(e)}},t.prototype.focusNext=function(){var e=this.getItemsAndActiveIndex(),t=e.items,n=e.activeItemIndex;return n===t.length-1?void t[0].focus():void t[n+1].focus()},t.prototype.focusPrevious=function(){var e=this.getItemsAndActiveIndex(),t=e.items,n=e.activeItemIndex;return 0===n?void t[t.length-1].focus():void t[n-1].focus()},t.prototype.getItemsAndActiveIndex=function(){var e=this.getFocusableMenuItems(),t=document.activeElement,n=e.indexOf(t);return{items:e,activeItemIndex:n}},t.prototype.getFocusableMenuItems=function(){var e=i["default"].findDOMNode(this);return void 0===e?[]:[].slice.call(e.querySelectorAll('[tabIndex="-1"]'),0)},t.prototype.render=function(){var e=this,t=m["default"].map(this.props.children,function(t){var n=t.props||{},r=n.children,o=n.onKeyDown,s=n.onSelect;return i["default"].cloneElement(t,{onKeyDown:y["default"](o,e.handleKeyDown),onSelect:y["default"](s,e.props.onSelect)},r)}),n={"dropdown-menu":!0,"dropdown-menu-right":this.props.pullRight},r=i["default"].createElement("ul",{className:d["default"](this.props.className,n),role:"menu","aria-labelledby":this.props.labelledBy},t);return this.props.open&&(r=i["default"].createElement(c["default"],{noWrap:!0,onRootClose:this.props.onClose},r)),r},t}(i["default"].Component);g.defaultProps={bsRole:"menu",pullRight:!1},g.propTypes={open:i["default"].PropTypes.bool,pullRight:i["default"].PropTypes.bool,onClose:i["default"].PropTypes.func,labelledBy:i["default"].PropTypes.oneOfType([i["default"].PropTypes.string,i["default"].PropTypes.number]),onSelect:i["default"].PropTypes.func},t["default"]=g,e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t){var n=e.querySelectorAll("."+t.join("."));n=[].map.call(n,function(e){return e});for(var r=0;r<t.length;r++)if(!e.className.match(new RegExp("\\b"+t[r]+"\\b")))return n;return n.unshift(e),n}var o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(23),l=o(i),u=n(12),p=o(u);t["default"]={componentWillMount:function(){p["default"]("FadeMixin","Fade Component")},_fadeIn:function(){var e=void 0;this.isMounted()&&(e=r(a["default"].findDOMNode(this),["fade"]),e.length&&e.forEach(function(e){e.className+=" in"}))},_fadeOut:function(){var e=r(this._fadeOutEl,["fade","in"]);e.length&&e.forEach(function(e){e.className=e.className.replace(/\bin\b/,"")}),setTimeout(this._handleFadeOutEnd,300)},_handleFadeOutEnd:function(){this._fadeOutEl&&this._fadeOutEl.parentNode&&this._fadeOutEl.parentNode.removeChild(this._fadeOutEl)},componentDidMount:function(){document.querySelectorAll&&setTimeout(this._fadeIn,20)},componentWillUnmount:function(){var e=r(a["default"].findDOMNode(this),["fade"]),t=this.props.container&&a["default"].findDOMNode(this.props.container)||l["default"].ownerDocument(this).body;e.length&&(this._fadeOutEl=document.createElement("div"),t.appendChild(this._fadeOutEl),this._fadeOutEl.appendChild(a["default"].findDOMNode(this).cloneNode(!0)),setTimeout(this._fadeOut,20))}},e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(4),p=a(u),d=n(34),f=a(d),c=n(36),h=a(c),m=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.getValue=function(){var e=this.props,t=e.children,n=e.value;return t?t:n},t.prototype.renderInput=function(){return l["default"].createElement("p",s({},this.props,{className:p["default"](this.props.className,"form-control-static"),ref:"input",key:"input"}),this.getValue())},t}(f["default"]);m.propTypes={value:h["default"],children:h["default"]},t["default"]=m,e.exports=t["default"]},function(e,t,n){
+"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(2)["default"],a=n(72)["default"];t.__esModule=!0;var i=n(1),l=s(i),u=n(34),p=s(u),d=n(54),f=a(d),c=n(12),h=s(c),m=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){return"static"===this.props.type?(h["default"]("Input type=static","StaticText"),l["default"].createElement(f.Static,this.props)):e.prototype.render.call(this)},t}(p["default"]);m.propTypes={type:l["default"].PropTypes.string},t["default"]=m,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(8),p=o(u),d=a["default"].createClass({displayName:"Jumbotron",propTypes:{componentClass:p["default"].elementType},getDefaultProps:function(){return{componentClass:"div"}},render:function(){var e=this.props.componentClass;return a["default"].createElement(e,r({},this.props,{className:l["default"](this.props.className,"jumbotron")}),this.props.children)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=a["default"].createClass({displayName:"Label",mixins:[p["default"]],getDefaultProps:function(){return{bsClass:"label",bsStyle:"default"}},render:function(){var e=this.getBsClassSet();return a["default"].createElement("span",r({},this.props,{className:l["default"](this.props.className,e)}),this.props.children)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(4),p=a(u),d=n(9),f=a(d),c=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){var e=this,t=f["default"].map(this.props.children,function(e,t){return i.cloneElement(e,{key:e.key?e.key:t})}),n=!1;return this.props.children?l["default"].Children.forEach(this.props.children,function(t){e.isAnchorOrButton(t.props)&&(n=!0)}):n=!0,n?this.renderDiv(t):this.renderUL(t)},t.prototype.isAnchorOrButton=function(e){return e.href||e.onClick},t.prototype.renderUL=function(e){var t=f["default"].map(e,function(e,t){return i.cloneElement(e,{listItem:!0})});return l["default"].createElement("ul",s({},this.props,{className:p["default"](this.props.className,"list-group")}),t)},t.prototype.renderDiv=function(e){return l["default"].createElement("div",s({},this.props,{className:p["default"](this.props.className,"list-group")}),e)},t}(l["default"].Component);c.propTypes={className:l["default"].PropTypes.string,id:l["default"].PropTypes.oneOfType([l["default"].PropTypes.string,l["default"].PropTypes.number])},t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(5),l=o(i),u=n(4),p=o(u),d=a["default"].createClass({displayName:"ListGroupItem",mixins:[l["default"]],propTypes:{bsStyle:a["default"].PropTypes.oneOf(["danger","info","success","warning"]),className:a["default"].PropTypes.string,active:a["default"].PropTypes.any,disabled:a["default"].PropTypes.any,header:a["default"].PropTypes.node,listItem:a["default"].PropTypes.bool,onClick:a["default"].PropTypes.func,eventKey:a["default"].PropTypes.any,href:a["default"].PropTypes.string,target:a["default"].PropTypes.string},getDefaultProps:function(){return{bsClass:"list-group-item",listItem:!1}},render:function(){var e=this.getBsClassSet();return e.active=this.props.active,e.disabled=this.props.disabled,this.props.href?this.renderAnchor(e):this.props.onClick?this.renderButton(e):this.props.listItem?this.renderLi(e):this.renderSpan(e)},renderLi:function(e){return a["default"].createElement("li",r({},this.props,{className:p["default"](this.props.className,e)}),this.props.header?this.renderStructuredContent():this.props.children)},renderAnchor:function(e){return a["default"].createElement("a",r({},this.props,{className:p["default"](this.props.className,e)}),this.props.header?this.renderStructuredContent():this.props.children)},renderButton:function(e){return a["default"].createElement("button",r({type:"button"},this.props,{className:p["default"](this.props.className,e)}),this.props.children)},renderSpan:function(e){return a["default"].createElement("span",r({},this.props,{className:p["default"](this.props.className,e)}),this.props.header?this.renderStructuredContent():this.props.children)},renderStructuredContent:function(){var e=void 0;e=a["default"].isValidElement(this.props.header)?s.cloneElement(this.props.header,{key:"header",className:p["default"](this.props.header.props.className,"list-group-item-heading")}):a["default"].createElement("h4",{key:"header",className:"list-group-item-heading"},this.props.header);var t=a["default"].createElement("p",{key:"content",className:"list-group-item-text"},this.props.children);return[e,t]}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(2)["default"];t.__esModule=!0;var a=n(1),i=s(a),l=n(4),u=s(l),p=n(8),d=s(p),f=n(14),c=s(f),h=function(e){function t(n){o(this,t),e.call(this,n),this.handleClick=this.handleClick.bind(this)}return r(t,e),t.prototype.handleClick=function(e){(!this.props.href||this.props.disabled)&&e.preventDefault(),this.props.disabled||this.props.onSelect&&this.props.onSelect(e,this.props.eventKey)},t.prototype.render=function(){if(this.props.divider)return i["default"].createElement("li",{role:"separator",className:"divider"});if(this.props.header)return i["default"].createElement("li",{role:"heading",className:"dropdown-header"},this.props.children);var e={disabled:this.props.disabled};return i["default"].createElement("li",{role:"presentation",className:u["default"](this.props.className,e),style:this.props.style},i["default"].createElement(c["default"],{role:"menuitem",tabIndex:"-1",id:this.props.id,target:this.props.target,title:this.props.title,href:this.props.href||"",onKeyDown:this.props.onKeyDown,onClick:this.handleClick},this.props.children))},t}(i["default"].Component);t["default"]=h,h.propTypes={disabled:i["default"].PropTypes.bool,divider:d["default"].all([i["default"].PropTypes.bool,function(e,t,n){return e.divider&&e.children?new Error("Children will not be rendered for dividers"):void 0}]),eventKey:i["default"].PropTypes.oneOfType([i["default"].PropTypes.number,i["default"].PropTypes.string]),header:i["default"].PropTypes.bool,href:i["default"].PropTypes.string,target:i["default"].PropTypes.string,title:i["default"].PropTypes.string,onKeyDown:i["default"].PropTypes.func,onSelect:i["default"].PropTypes.func,id:i["default"].PropTypes.oneOfType([i["default"].PropTypes.string,i["default"].PropTypes.number])},h.defaultProps={divider:!1,disabled:!1,header:!1},e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t){var n=v["default"].ownerDocument(t);return e===n.body||e===n.documentElement?n.documentElement.clientHeight:e.clientHeight}function o(e){return e.props.container&&f["default"].findDOMNode(e.props.container)||v["default"].ownerDocument(e).body}function s(e,t){var n=v["default"].ownerDocument(e),r=!n.addEventListener,o=void 0;return B&&B.remove(),r?(document.attachEvent("onfocusin",t),o=function(){return document.detachEvent("onfocusin",t)}):(document.addEventListener("focus",t,!0),o=function(){return document.removeEventListener("focus",t,!0)}),B={remove:o}}var a=n(3)["default"],i=n(10)["default"],l=n(150)["default"],u=n(17)["default"],p=n(2)["default"];t.__esModule=!0;var d=n(1),f=p(d),c=n(4),h=p(c),m=n(23),v=p(m),y=n(183),g=p(y),b=n(71),T=p(b),P=n(11),x=p(P),E=n(8),C=p(E),_=n(47),N=p(_),O=n(32),w=p(O),S=n(123),k=p(S),M=n(58),D=p(M),A=n(60),I=p(A),R=n(61),L=p(R),j=n(59),K=p(j),B=void 0,F=f["default"].createClass({displayName:"Modal",propTypes:a({},N["default"].propTypes,k["default"].propTypes,{backdrop:f["default"].PropTypes.oneOf(["static",!0,!1]),keyboard:f["default"].PropTypes.bool,animation:f["default"].PropTypes.bool,dialogComponent:C["default"].elementType,autoFocus:f["default"].PropTypes.bool,enforceFocus:f["default"].PropTypes.bool,bsStyle:f["default"].PropTypes.string,show:f["default"].PropTypes.bool}),getDefaultProps:function(){return{bsClass:"modal",dialogComponent:k["default"],show:!1,animation:!0,backdrop:!0,keyboard:!0,autoFocus:!0,enforceFocus:!0}},getInitialState:function(){return{exited:!this.props.show}},render:function(){var e=this.props,t=(e.children,e.animation),n=e.backdrop,r=i(e,["children","animation","backdrop"]),o=r.onExit,s=r.onExiting,l=r.onEnter,u=r.onEntering,p=r.onEntered,d=!!r.show,c=r.dialogComponent,m=d||t&&!this.state.exited;if(!m)return null;var v=f["default"].createElement(c,a({},r,{ref:this._setDialogRef,className:h["default"](this.props.className,{"in":d&&!t}),onClick:n===!0?this.handleBackdropClick:null}),this.renderContent());return t&&(v=f["default"].createElement(w["default"],{transitionAppear:!0,unmountOnExit:!0,"in":d,timeout:F.TRANSITION_DURATION,onExit:o,onExiting:s,onExited:this.handleHidden,onEnter:l,onEntering:u,onEntered:p},v)),n&&(v=this.renderBackdrop(v)),f["default"].createElement(N["default"],{container:r.container},v)},renderContent:function(){var e=this;return f["default"].Children.map(this.props.children,function(t){return t&&t.type&&t.type.__isModalHeader?d.cloneElement(t,{onHide:x["default"](e.props.onHide,t.props.onHide)}):t})},renderBackdrop:function(e){var t=this.props,n=t.animation,r=t.bsClass,o=F.BACKDROP_TRANSITION_DURATION,s=this.props.backdrop===!0?this.handleBackdropClick:null,a=f["default"].createElement("div",{ref:"backdrop",className:h["default"](r+"-backdrop",{"in":this.props.show&&!n}),onClick:s});return f["default"].createElement("div",{ref:"modal"},n?f["default"].createElement(w["default"],{transitionAppear:!0,"in":this.props.show,timeout:o},a):a,e)},_setDialogRef:function(e){l(this.refs)&&!u(this.refs).length&&(this.refs={}),this.refs.dialog=e,this.props.backdrop||(this.refs.modal=e)},componentWillReceiveProps:function(e){e.show?this.setState({exited:!1}):e.animation||this.setState({exited:!0})},componentWillUpdate:function(e){e.show&&this.checkForFocus()},componentDidMount:function(){this.props.show&&this.onShow()},componentDidUpdate:function(e){var t=this.props.animation;!e.show||this.props.show||t?!e.show&&this.props.show&&this.onShow():this.onHide()},componentWillUnmount:function(){this.props.show&&this.onHide()},onShow:function(){var e=this,t=v["default"].ownerDocument(this),n=v["default"].ownerWindow(this);this._onDocumentKeyupListener=T["default"].listen(t,"keyup",this.handleDocumentKeyUp),this._onWindowResizeListener=T["default"].listen(n,"resize",this.handleWindowResize),this.props.enforceFocus&&(this._onFocusinListener=s(this,this.enforceFocus));var a=o(this);a.className+=a.className.length?" modal-open":"modal-open",this._containerIsOverflowing=a.scrollHeight>r(a,this),this._originalPadding=a.style.paddingRight,this._containerIsOverflowing&&(a.style.paddingRight=parseInt(this._originalPadding||0,10)+g["default"]()+"px"),this.props.backdrop&&this.iosClickHack(),this.setState(this._getStyles(),function(){return e.focusModalContent()})},onHide:function(){this._onDocumentKeyupListener.remove(),this._onWindowResizeListener.remove(),this._onFocusinListener&&this._onFocusinListener.remove();var e=o(this);e.style.paddingRight=this._originalPadding,e.className=e.className.replace(/ ?modal-open/,""),this.restoreLastFocus()},handleHidden:function(){if(this.setState({exited:!0}),this.onHide(),this.props.onExited){var e;(e=this.props).onExited.apply(e,arguments)}},handleBackdropClick:function(e){e.target===e.currentTarget&&this.props.onHide()},handleDocumentKeyUp:function(e){this.props.keyboard&&27===e.keyCode&&this.props.onHide()},handleWindowResize:function(){this.setState(this._getStyles())},checkForFocus:function(){v["default"].canUseDom&&(this.lastFocus=v["default"].activeElement(document))},focusModalContent:function(){var e=f["default"].findDOMNode(this.refs.dialog),t=v["default"].activeElement(v["default"].ownerDocument(this)),n=t&&v["default"].contains(e,t);e&&this.props.autoFocus&&!n&&(this.lastFocus=t,e.focus())},restoreLastFocus:function(){this.lastFocus&&this.lastFocus.focus&&(this.lastFocus.focus(),this.lastFocus=null)},enforceFocus:function(){if(this.isMounted()){var e=v["default"].activeElement(v["default"].ownerDocument(this)),t=f["default"].findDOMNode(this.refs.dialog);t&&t!==e&&!v["default"].contains(t,e)&&t.focus()}},iosClickHack:function(){f["default"].findDOMNode(this.refs.modal).onclick=function(){},f["default"].findDOMNode(this.refs.backdrop).onclick=function(){}},_getStyles:function(){if(!v["default"].canUseDom)return{};var e=f["default"].findDOMNode(this.refs.modal),t=e.scrollHeight,n=o(this),s=this._containerIsOverflowing,a=t>r(n,this);return{dialogStyles:{paddingRight:s&&!a?g["default"]():void 0,paddingLeft:!s&&a?g["default"]():void 0}}}});F.Body=D["default"],F.Header=I["default"],F.Title=L["default"],F.Footer=K["default"],F.Dialog=k["default"],F.TRANSITION_DURATION=300,F.BACKDROP_TRANSITION_DURATION=150,t["default"]=F,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=a["default"].createClass({displayName:"ModalDialog",mixins:[p["default"]],propTypes:{onHide:a["default"].PropTypes.func.isRequired,dialogClassName:a["default"].PropTypes.string},getDefaultProps:function(){return{bsClass:"modal",closeButton:!0}},render:function(){var e=r({display:"block"},this.props.style),t=this.props.bsClass,n=this.getBsClassSet();return delete n.modal,n[t+"-dialog"]=!0,a["default"].createElement("div",r({},this.props,{title:null,tabIndex:"-1",role:"dialog",style:e,className:l["default"](this.props.className,t)}),a["default"].createElement("div",{className:l["default"](this.props.dialogClassName,n)},a["default"].createElement("div",{className:t+"-content",role:"document"},this.props.children)))}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(5),l=o(i),u=n(4),p=o(u),d=n(9),f=o(d),c=n(11),h=o(c),m=n(8),v=o(m),y=a["default"].createClass({displayName:"Navbar",mixins:[l["default"]],propTypes:{fixedTop:a["default"].PropTypes.bool,fixedBottom:a["default"].PropTypes.bool,staticTop:a["default"].PropTypes.bool,inverse:a["default"].PropTypes.bool,fluid:a["default"].PropTypes.bool,role:a["default"].PropTypes.string,componentClass:v["default"].elementType,brand:a["default"].PropTypes.node,toggleButton:a["default"].PropTypes.node,toggleNavKey:a["default"].PropTypes.oneOfType([a["default"].PropTypes.string,a["default"].PropTypes.number]),onToggle:a["default"].PropTypes.func,navExpanded:a["default"].PropTypes.bool,defaultNavExpanded:a["default"].PropTypes.bool},getDefaultProps:function(){return{bsClass:"navbar",bsStyle:"default",role:"navigation",componentClass:"nav",fixedTop:!1,fixedBottom:!1,staticTop:!1,inverse:!1,fluid:!1,defaultNavExpanded:!1}},getInitialState:function(){return{navExpanded:this.props.defaultNavExpanded}},shouldComponentUpdate:function(){return!this._isChanging},handleToggle:function(){this.props.onToggle&&(this._isChanging=!0,this.props.onToggle(),this._isChanging=!1),this.setState({navExpanded:!this.state.navExpanded})},isNavExpanded:function(){return null!=this.props.navExpanded?this.props.navExpanded:this.state.navExpanded},render:function(){var e=this.getBsClassSet(),t=this.props.componentClass;return e["navbar-fixed-top"]=this.props.fixedTop,e["navbar-fixed-bottom"]=this.props.fixedBottom,e["navbar-static-top"]=this.props.staticTop,e["navbar-inverse"]=this.props.inverse,a["default"].createElement(t,r({},this.props,{className:p["default"](this.props.className,e)}),a["default"].createElement("div",{className:this.props.fluid?"container-fluid":"container"},this.props.brand||this.props.toggleButton||null!=this.props.toggleNavKey?this.renderHeader():null,f["default"].map(this.props.children,this.renderChild)))},renderChild:function(e,t){return s.cloneElement(e,{navbar:!0,collapsible:null!=this.props.toggleNavKey&&this.props.toggleNavKey===e.props.eventKey,expanded:null!=this.props.toggleNavKey&&this.props.toggleNavKey===e.props.eventKey&&this.isNavExpanded(),key:e.key?e.key:t})},renderHeader:function(){var e=void 0;return this.props.brand&&(e=a["default"].isValidElement(this.props.brand)?s.cloneElement(this.props.brand,{className:p["default"](this.props.brand.props.className,"navbar-brand")}):a["default"].createElement("span",{className:"navbar-brand"},this.props.brand)),a["default"].createElement("div",{className:"navbar-header"},e,this.props.toggleButton||null!=this.props.toggleNavKey?this.renderToggleButton():null)},renderToggleButton:function(){var e=void 0;return a["default"].isValidElement(this.props.toggleButton)?s.cloneElement(this.props.toggleButton,{className:p["default"](this.props.toggleButton.props.className,"navbar-toggle"),onClick:h["default"](this.handleToggle,this.props.toggleButton.props.onClick)}):(e=null!=this.props.toggleButton?this.props.toggleButton:[a["default"].createElement("span",{className:"sr-only",key:0},"Toggle navigation"),a["default"].createElement("span",{className:"icon-bar",key:1}),a["default"].createElement("span",{className:"icon-bar",key:2}),a["default"].createElement("span",{className:"icon-bar",key:3})],a["default"].createElement("button",{className:"navbar-toggle",type:"button",onClick:this.handleToggle},e))}});t["default"]=y,e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t){return Array.isArray(t)?t.indexOf(e)>=0:e===t}var o=n(3)["default"],s=n(17)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(11),p=a(u),d=n(145),f=a(d),c=n(65),h=a(c),m=n(48),v=a(m),y=n(221),g=a(y),b=l["default"].createClass({displayName:"OverlayTrigger",propTypes:o({},h["default"].propTypes,{trigger:l["default"].PropTypes.oneOfType([l["default"].PropTypes.oneOf(["click","hover","focus"]),l["default"].PropTypes.arrayOf(l["default"].PropTypes.oneOf(["click","hover","focus"]))]),delay:l["default"].PropTypes.number,delayShow:l["default"].PropTypes.number,delayHide:l["default"].PropTypes.number,defaultOverlayShown:l["default"].PropTypes.bool,overlay:l["default"].PropTypes.node.isRequired,onBlur:l["default"].PropTypes.func,onClick:l["default"].PropTypes.func,onFocus:l["default"].PropTypes.func,onMouseEnter:l["default"].PropTypes.func,onMouseLeave:l["default"].PropTypes.func,target:function(){},onHide:function(){},show:function(){}}),getDefaultProps:function(){return{defaultOverlayShown:!1,trigger:["hover","focus"]}},getInitialState:function(){return{isOverlayShown:this.props.defaultOverlayShown}},show:function(){this.setState({isOverlayShown:!0})},hide:function(){this.setState({isOverlayShown:!1})},toggle:function(){this.state.isOverlayShown?this.hide():this.show()},componentDidMount:function(){this._mountNode=document.createElement("div"),l["default"].render(this._overlay,this._mountNode)},componentWillUnmount:function(){l["default"].unmountComponentAtNode(this._mountNode),this._mountNode=null,clearTimeout(this._hoverDelay)},componentDidUpdate:function(){this._mountNode&&l["default"].render(this._overlay,this._mountNode)},getOverlayTarget:function(){return l["default"].findDOMNode(this)},getOverlay:function(){var e=o({},g["default"](this.props,s(h["default"].propTypes)),{show:this.state.isOverlayShown,onHide:this.hide,target:this.getOverlayTarget,onExit:this.props.onExit,onExiting:this.props.onExiting,onExited:this.props.onExited,onEnter:this.props.onEnter,onEntering:this.props.onEntering,onEntered:this.props.onEntered}),t=i.cloneElement(this.props.overlay,{placement:e.placement,container:e.container});return l["default"].createElement(h["default"],e,t)},render:function(){var e=l["default"].Children.only(this.props.children),t={"aria-describedby":this.props.overlay.props.id};return this._overlay=this.getOverlay(),t.onClick=p["default"](e.props.onClick,this.props.onClick),r("click",this.props.trigger)&&(t.onClick=p["default"](this.toggle,t.onClick)),r("hover",this.props.trigger)&&(v["default"](!("hover"===this.props.trigger),'[react-bootstrap] Specifying only the `"hover"` trigger limits the visibilty of the overlay to just mouse users. Consider also including the `"focus"` trigger so that touch and keyboard only users can see the overlay as well.'),t.onMouseOver=p["default"](this.handleDelayedShow,this.props.onMouseOver),t.onMouseOut=p["default"](this.handleDelayedHide,this.props.onMouseOut)),r("focus",this.props.trigger)&&(t.onFocus=p["default"](this.handleDelayedShow,this.props.onFocus),t.onBlur=p["default"](this.handleDelayedHide,this.props.onBlur)),i.cloneElement(e,t)},handleDelayedShow:function(){var e=this;if(null!=this._hoverDelay)return clearTimeout(this._hoverDelay),void(this._hoverDelay=null);var t=null!=this.props.delayShow?this.props.delayShow:this.props.delay;return t?void(this._hoverDelay=setTimeout(function(){e._hoverDelay=null,e.show()},t)):void this.show()},handleDelayedHide:function(){var e=this;if(null!=this._hoverDelay)return clearTimeout(this._hoverDelay),void(this._hoverDelay=null);var t=null!=this.props.delayHide?this.props.delayHide:this.props.delay;return t?void(this._hoverDelay=setTimeout(function(){e._hoverDelay=null,e.hide()},t)):void this.hide()}});b.withContext=f["default"](b,"overlay"),t["default"]=b,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=a["default"].createClass({displayName:"PageHeader",render:function(){return a["default"].createElement("div",r({},this.props,{className:l["default"](this.props.className,"page-header")}),a["default"].createElement("h1",null,this.props.children))}});t["default"]=u,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(14),p=o(u),d=a["default"].createClass({displayName:"PageItem",propTypes:{href:a["default"].PropTypes.string,target:a["default"].PropTypes.string,title:a["default"].PropTypes.string,disabled:a["default"].PropTypes.bool,previous:a["default"].PropTypes.bool,next:a["default"].PropTypes.bool,onSelect:a["default"].PropTypes.func,eventKey:a["default"].PropTypes.any},getDefaultProps:function(){return{disabled:!1,previous:!1,next:!1}},render:function(){var e={disabled:this.props.disabled,previous:this.props.previous,next:this.props.next};return a["default"].createElement("li",r({},this.props,{className:l["default"](this.props.className,e)}),a["default"].createElement(p["default"],{href:this.props.href,title:this.props.title,target:this.props.target,onClick:this.handleSelect},this.props.children))},handleSelect:function(e){(this.props.onSelect||this.props.disabled)&&(e.preventDefault(),this.props.disabled||this.props.onSelect(this.props.eventKey,this.props.href,this.props.target))}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(9),p=o(u),d=n(11),f=o(d),c=a["default"].createClass({displayName:"Pager",propTypes:{onSelect:a["default"].PropTypes.func},render:function(){return a["default"].createElement("ul",r({},this.props,{className:l["default"](this.props.className,"pager")}),p["default"].map(this.props.children,this.renderPageItem))},renderPageItem:function(e,t){return s.cloneElement(e,{onSelect:f["default"](e.props.onSelect,this.props.onSelect),key:e.key?e.key:t})}});t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=n(130),f=o(d),c=n(8),h=o(c),m=n(14),v=o(m),y=a["default"].createClass({displayName:"Pagination",mixins:[p["default"]],propTypes:{activePage:a["default"].PropTypes.number,items:a["default"].PropTypes.number,maxButtons:a["default"].PropTypes.number,ellipsis:a["default"].PropTypes.bool,first:a["default"].PropTypes.bool,last:a["default"].PropTypes.bool,prev:a["default"].PropTypes.bool,next:a["default"].PropTypes.bool,onSelect:a["default"].PropTypes.func,buttonComponentClass:h["default"].elementType},getDefaultProps:function(){return{activePage:1,items:1,maxButtons:0,first:!1,last:!1,prev:!1,next:!1,ellipsis:!0,buttonComponentClass:v["default"],bsClass:"pagination"}},renderPageButtons:function(){var e=[],t=void 0,n=void 0,r=void 0,o=this.props,s=o.maxButtons,i=o.activePage,l=o.items,u=o.onSelect,p=o.ellipsis,d=o.buttonComponentClass;if(s){var c=i-parseInt(s/2,10);t=c>1?c:1,r=l>=t+s,r?n=t+s-1:(n=l,t=l-s+1,1>t&&(t=1))}else t=1,n=l;for(var h=t;n>=h;h++)e.push(a["default"].createElement(f["default"],{key:h,eventKey:h,active:h===i,onSelect:u,buttonComponentClass:d},h));return s&&r&&p&&e.push(a["default"].createElement(f["default"],{key:"ellipsis",disabled:!0,buttonComponentClass:d},a["default"].createElement("span",{"aria-label":"More"},"..."))),e},renderPrev:function(){return this.props.prev?a["default"].createElement(f["default"],{key:"prev",eventKey:this.props.activePage-1,disabled:1===this.props.activePage,onSelect:this.props.onSelect,buttonComponentClass:this.props.buttonComponentClass},a["default"].createElement("span",{"aria-label":"Previous"},"‹")):null},renderNext:function(){return this.props.next?a["default"].createElement(f["default"],{key:"next",eventKey:this.props.activePage+1,disabled:this.props.activePage>=this.props.items,onSelect:this.props.onSelect,buttonComponentClass:this.props.buttonComponentClass},a["default"].createElement("span",{"aria-label":"Next"},"›")):null},renderFirst:function(){return this.props.first?a["default"].createElement(f["default"],{key:"first",eventKey:1,disabled:1===this.props.activePage,onSelect:this.props.onSelect,buttonComponentClass:this.props.buttonComponentClass},a["default"].createElement("span",{"aria-label":"First"},"«")):null},renderLast:function(){return this.props.last?a["default"].createElement(f["default"],{key:"last",eventKey:this.props.items,disabled:this.props.activePage>=this.props.items,onSelect:this.props.onSelect,buttonComponentClass:this.props.buttonComponentClass},a["default"].createElement("span",{"aria-label":"Last"},"»")):null},render:function(){return a["default"].createElement("ul",r({},this.props,{className:l["default"](this.props.className,this.getBsClassSet())}),this.renderFirst(),this.renderPrev(),this.renderPageButtons(),this.renderNext(),this.renderLast())}});t["default"]=y,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(10)["default"],s=n(2)["default"];t.__esModule=!0;var a=n(1),i=s(a),l=n(4),u=s(l),p=n(5),d=s(p),f=n(146),c=s(f),h=n(8),m=s(h),v=i["default"].createClass({displayName:"PaginationButton",mixins:[d["default"]],propTypes:{className:i["default"].PropTypes.string,eventKey:i["default"].PropTypes.oneOfType([i["default"].PropTypes.string,i["default"].PropTypes.number]),onSelect:i["default"].PropTypes.func,disabled:i["default"].PropTypes.bool,active:i["default"].PropTypes.bool,buttonComponentClass:m["default"].elementType},getDefaultProps:function(){return{active:!1,disabled:!1}},handleClick:function(e){if(!this.props.disabled&&this.props.onSelect){var t=c["default"](this.props.eventKey);this.props.onSelect(e,t)}},render:function(){var e=r({active:this.props.active,disabled:this.props.disabled},this.getBsClassSet()),t=this.props,n=t.className,s=o(t,["className"]),a=this.props.buttonComponentClass;return i["default"].createElement("li",{className:u["default"](n,e)},i["default"].createElement(a,r({},s,{onClick:this.handleClick})))}});t["default"]=v,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(10)["default"],o=n(3)["default"],s=n(2)["default"];t.__esModule=!0;var a=n(1),i=s(a),l=n(4),u=s(l),p=n(5),d=s(p),f=n(26),c=s(f),h=i["default"].createClass({displayName:"Panel",mixins:[d["default"]],propTypes:{collapsible:i["default"].PropTypes.bool,onSelect:i["default"].PropTypes.func,header:i["default"].PropTypes.node,id:i["default"].PropTypes.oneOfType([i["default"].PropTypes.string,i["default"].PropTypes.number]),footer:i["default"].PropTypes.node,defaultExpanded:i["default"].PropTypes.bool,expanded:i["default"].PropTypes.bool,eventKey:i["default"].PropTypes.any,headerRole:i["default"].PropTypes.string,panelRole:i["default"].PropTypes.string},getDefaultProps:function(){return{bsClass:"panel",bsStyle:"default",defaultExpanded:!1}},getInitialState:function(){return{expanded:this.props.defaultExpanded}},handleSelect:function(e){e.selected=!0,this.props.onSelect?this.props.onSelect(e,this.props.eventKey):e.preventDefault(),e.selected&&this.handleToggle()},handleToggle:function(){this.setState({expanded:!this.state.expanded})},isExpanded:function(){return null!=this.props.expanded?this.props.expanded:this.state.expanded},render:function(){var e=this.props,t=e.headerRole,n=e.panelRole,s=r(e,["headerRole","panelRole"]);return i["default"].createElement("div",o({},s,{className:u["default"](this.props.className,this.getBsClassSet()),id:this.props.collapsible?null:this.props.id,onSelect:null}),this.renderHeading(t),this.props.collapsible?this.renderCollapsibleBody(n):this.renderBody(),this.renderFooter())},renderCollapsibleBody:function(e){var t={className:this.prefixClass("collapse"),id:this.props.id,ref:"panel","aria-hidden":!this.isExpanded()};return e&&(t.role=e),i["default"].createElement(c["default"],{"in":this.isExpanded()},i["default"].createElement("div",t,this.renderBody()))},renderBody:function(){function e(){return{key:l.length}}function t(t){l.push(a.cloneElement(t,e()))}function n(t){l.push(i["default"].createElement("div",o({className:p},e()),t))}function r(){0!==u.length&&(n(u),u=[])}var s=this.props.children,l=[],u=[],p=this.prefixClass("body");return Array.isArray(s)&&0!==s.length?(s.forEach(function(e){this.shouldRenderFill(e)?(r(),t(e)):u.push(e)}.bind(this)),r()):this.shouldRenderFill(s)?t(s):n(s),l},shouldRenderFill:function(e){return i["default"].isValidElement(e)&&null!=e.props.fill},renderHeading:function(e){var t=this.props.header;if(!t)return null;if(!i["default"].isValidElement(t)||Array.isArray(t))t=this.props.collapsible?this.renderCollapsibleTitle(t,e):t;else{var n=u["default"](this.prefixClass("title"),t.props.className);t=this.props.collapsible?a.cloneElement(t,{className:n,children:this.renderAnchor(t.props.children,e)}):a.cloneElement(t,{className:n})}return i["default"].createElement("div",{className:this.prefixClass("heading")},t)},renderAnchor:function(e,t){return i["default"].createElement("a",{href:"#"+(this.props.id||""),"aria-controls":this.props.collapsible?this.props.id:null,className:this.isExpanded()?null:"collapsed","aria-expanded":this.isExpanded(),"aria-selected":this.isExpanded(),onClick:this.handleSelect,role:t},e)},renderCollapsibleTitle:function(e,t){return i["default"].createElement("h4",{className:this.prefixClass("title"),role:"presentation"},this.renderAnchor(e,t))},renderFooter:function(){return this.props.footer?i["default"].createElement("div",{className:this.prefixClass("footer")},this.props.footer):null}});t["default"]=h,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=n(8),f=o(d),c=a["default"].createClass({displayName:"Popover",mixins:[p["default"]],propTypes:{id:f["default"].isRequiredForA11y(a["default"].PropTypes.oneOfType([a["default"].PropTypes.string,a["default"].PropTypes.number])),placement:a["default"].PropTypes.oneOf(["top","right","bottom","left"]),positionLeft:a["default"].PropTypes.number,positionTop:a["default"].PropTypes.number,arrowOffsetLeft:a["default"].PropTypes.oneOfType([a["default"].PropTypes.number,a["default"].PropTypes.string]),arrowOffsetTop:a["default"].PropTypes.oneOfType([a["default"].PropTypes.number,a["default"].PropTypes.string]),title:a["default"].PropTypes.node},getDefaultProps:function(){
+return{placement:"right"}},render:function(){var e,t=(e={popover:!0},e[this.props.placement]=!0,e),n=r({left:this.props.positionLeft,top:this.props.positionTop,display:"block"},this.props.style),o={left:this.props.arrowOffsetLeft,top:this.props.arrowOffsetTop};return a["default"].createElement("div",r({role:"tooltip"},this.props,{className:l["default"](this.props.className,t),style:n,title:null}),a["default"].createElement("div",{className:"arrow",style:o}),this.props.title?this.renderTitle():null,a["default"].createElement("div",{className:"popover-content"},this.props.children))},renderTitle:function(){return a["default"].createElement("h3",{className:"popover-title"},this.props.title)}});t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(2)["default"];t.__esModule=!0;var o=n(12),s=r(o),a=n(47),i=r(a);t["default"]=s["default"].wrapper(i["default"],{message:"The Portal component is deprecated in react-bootstrap. It has been moved to a more generic library: react-overlays. You can read more at: http://react-bootstrap.github.io/react-overlays/examples/#portal and https://github.com/react-bootstrap/react-bootstrap/issues/1084"}),e.exports=t["default"]},function(e,t,n){"use strict";var r=n(2)["default"];t.__esModule=!0;var o=n(12),s=r(o),a=n(97),i=r(a);t["default"]=s["default"].wrapper(i["default"],{message:"The Position component is deprecated in react-bootstrap. It has been moved to a more generic library: react-overlays. You can read more at: http://react-bootstrap.github.io/react-overlays/examples/#position and https://github.com/react-bootstrap/react-bootstrap/issues/1084"}),e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t,n){if(e[t]){var r=function(){var r=void 0,o=void 0;return l["default"].Children.forEach(e[t],function(e){e.type!==y&&(o=e.type.displayName?e.type.displayName:e.type,r=new Error("Children of "+n+" can contain only ProgressBar components. Found "+o))}),{v:r}}();if("object"==typeof r)return r.v}}var o=n(3)["default"],s=n(10)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(57),p=a(u),d=n(5),f=a(d),c=n(4),h=a(c),m=n(9),v=a(m),y=l["default"].createClass({displayName:"ProgressBar",propTypes:{min:i.PropTypes.number,now:i.PropTypes.number,max:i.PropTypes.number,label:i.PropTypes.node,srOnly:i.PropTypes.bool,striped:i.PropTypes.bool,active:i.PropTypes.bool,children:r,className:l["default"].PropTypes.string,interpolateClass:i.PropTypes.node,isChild:i.PropTypes.bool},mixins:[f["default"]],getDefaultProps:function(){return{bsClass:"progress-bar",min:0,max:100,active:!1,isChild:!1,srOnly:!1,striped:!1}},getPercentage:function(e,t,n){var r=1e3;return Math.round((e-t)/(n-t)*100*r)/r},render:function(){if(this.props.isChild)return this.renderProgressBar();var e=void 0;return e=this.props.children?v["default"].map(this.props.children,this.renderChildBar):this.renderProgressBar(),l["default"].createElement("div",o({},this.props,{className:h["default"](this.props.className,"progress"),min:null,max:null,label:null,"aria-valuetext":null}),e)},renderChildBar:function(e,t){return i.cloneElement(e,{isChild:!0,key:e.key?e.key:t})},renderProgressBar:function(){var e=this.props,t=e.className,n=e.label,r=e.now,a=e.min,i=e.max,u=s(e,["className","label","now","min","max"]),p=this.getPercentage(r,a,i);"string"==typeof n&&(n=this.renderLabel(p)),this.props.srOnly&&(n=l["default"].createElement("span",{className:"sr-only"},n));var d=h["default"](t,this.getBsClassSet(),{active:this.props.active,"progress-bar-striped":this.props.active||this.props.striped});return l["default"].createElement("div",o({},u,{className:d,role:"progressbar",style:{width:p+"%"},"aria-valuenow":this.props.now,"aria-valuemin":this.props.min,"aria-valuemax":this.props.max}),n)},renderLabel:function(e){var t=this.props.interpolateClass||p["default"];return l["default"].createElement(t,{now:this.props.now,min:this.props.min,max:this.props.max,percent:e,bsStyle:this.props.bsStyle},this.props.label)}});t["default"]=y,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(10)["default"],i=n(2)["default"];t.__esModule=!0;var l=n(1),u=i(l),p=n(5),d=i(p),f=n(25),c=i(f),h=n(27),m=i(h),v=n(137),y=i(v),g=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){var e=this.props,t=e.children,n=e.title,r=e.onClick,o=e.target,s=e.href,i=e.bsStyle,l=a(e,["children","title","onClick","target","href","bsStyle"]),p=l.disabled,d=u["default"].createElement(c["default"],{onClick:r,bsStyle:i,disabled:p,target:o,href:s},n);return u["default"].createElement(m["default"],l,d,u["default"].createElement(y["default"],{"aria-label":n,bsStyle:i,disabled:p}),u["default"].createElement(m["default"].Menu,null,t))},t}(u["default"].Component);g.propTypes=s({},m["default"].propTypes,d["default"].propTypes,{onClick:function(){},target:u["default"].PropTypes.string,href:u["default"].PropTypes.string,title:u["default"].PropTypes.node.isRequired}),g.defaultProps={disabled:!1,dropup:!1,pullRight:!1},g.Toggle=y["default"],t["default"]=g,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(7)["default"],o=n(6)["default"],s=n(3)["default"],a=n(2)["default"];t.__esModule=!0;var i=n(1),l=a(i),u=n(53),p=a(u),d=function(e){function t(){o(this,t),e.apply(this,arguments)}return r(t,e),t.prototype.render=function(){return l["default"].createElement(p["default"],s({},this.props,{useAnchor:!1,noCaret:!1}))},t}(l["default"].Component);t["default"]=d,d.defaultProps=p["default"].defaultProps,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(9),p=o(u),d=n(11),f=o(d),c=n(5),h=o(c),m=n(14),v=o(m),y=a["default"].createClass({displayName:"SubNav",mixins:[h["default"]],propTypes:{onSelect:a["default"].PropTypes.func,active:a["default"].PropTypes.bool,activeHref:a["default"].PropTypes.string,activeKey:a["default"].PropTypes.any,disabled:a["default"].PropTypes.bool,eventKey:a["default"].PropTypes.any,href:a["default"].PropTypes.string,title:a["default"].PropTypes.string,text:a["default"].PropTypes.node,target:a["default"].PropTypes.string},getDefaultProps:function(){return{bsClass:"nav",active:!1,disabled:!1}},handleClick:function(e){this.props.onSelect&&(e.preventDefault(),this.props.disabled||this.props.onSelect(this.props.eventKey,this.props.href,this.props.target))},isActive:function(){return this.isChildActive(this)},isChildActive:function(e){if(e.props.active)return!0;if(null!=this.props.activeKey&&this.props.activeKey===e.props.eventKey)return!0;if(null!=this.props.activeHref&&this.props.activeHref===e.props.href)return!0;if(e.props.children){var t=!1;return p["default"].forEach(e.props.children,function(e){this.isChildActive(e)&&(t=!0)},this),t}return!1},getChildActiveProp:function(e){return e.props.active?!0:null!=this.props.activeKey&&e.props.eventKey===this.props.activeKey?!0:null!=this.props.activeHref&&e.props.href===this.props.activeHref?!0:e.props.active},render:function(){var e={active:this.isActive(),disabled:this.props.disabled};return a["default"].createElement("li",r({},this.props,{className:l["default"](this.props.className,e)}),a["default"].createElement(v["default"],{href:this.props.href,title:this.props.title,target:this.props.target,onClick:this.handleClick},this.props.text),a["default"].createElement("ul",{className:"nav"},p["default"].map(this.props.children,this.renderNavItem)))},renderNavItem:function(e,t){return s.cloneElement(e,{active:this.getChildActiveProp(e),onSelect:f["default"](e.props.onSelect,this.props.onSelect),key:e.key?e.key:t})}});t["default"]=y,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(10)["default"],o=n(3)["default"],s=n(2)["default"];t.__esModule=!0;var a=n(1),i=s(a),l=n(70),u=s(l),p=n(69),d=s(p),f=n(9),c=s(f),h=n(12),m=s(h),v=i["default"].createClass({displayName:"TabbedArea",componentWillMount:function(){m["default"]("TabbedArea","Tabs","https://github.com/react-bootstrap/react-bootstrap/pull/1091")},render:function(){var e=this.props,t=e.children,n=r(e,["children"]),s=c["default"].map(t,function(e){var t=e.props,n=t.tab,s=r(t,["tab"]);return i["default"].createElement(d["default"],o({title:n},s))});return i["default"].createElement(u["default"],n,s)}});t["default"]=v,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=a["default"].createClass({displayName:"Table",propTypes:{striped:a["default"].PropTypes.bool,bordered:a["default"].PropTypes.bool,condensed:a["default"].PropTypes.bool,hover:a["default"].PropTypes.bool,responsive:a["default"].PropTypes.bool},getDefaultProps:function(){return{bordered:!1,condensed:!1,hover:!1,responsive:!1,striped:!1}},render:function(){var e={table:!0,"table-striped":this.props.striped,"table-bordered":this.props.bordered,"table-condensed":this.props.condensed,"table-hover":this.props.hover},t=a["default"].createElement("table",r({},this.props,{className:l["default"](this.props.className,e)}),this.props.children);return this.props.responsive?a["default"].createElement("div",{className:"table-responsive"},t):t}});t["default"]=u,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=n(14),f=o(d),c=a["default"].createClass({displayName:"Thumbnail",mixins:[p["default"]],propTypes:{alt:a["default"].PropTypes.string,href:a["default"].PropTypes.string,src:a["default"].PropTypes.string},getDefaultProps:function(){return{bsClass:"thumbnail"}},render:function(){var e=this.getBsClassSet();return this.props.href?a["default"].createElement(f["default"],r({},this.props,{href:this.props.href,className:l["default"](this.props.className,e)}),a["default"].createElement("img",{src:this.props.src,alt:this.props.alt})):this.props.children?a["default"].createElement("div",r({},this.props,{className:l["default"](this.props.className,e)}),a["default"].createElement("img",{src:this.props.src,alt:this.props.alt}),a["default"].createElement("div",{className:"caption"},this.props.children)):a["default"].createElement("div",r({},this.props,{className:l["default"](this.props.className,e)}),a["default"].createElement("img",{src:this.props.src,alt:this.props.alt}))}});t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=n(8),f=o(d),c=a["default"].createClass({displayName:"Tooltip",mixins:[p["default"]],propTypes:{id:f["default"].isRequiredForA11y(a["default"].PropTypes.oneOfType([a["default"].PropTypes.string,a["default"].PropTypes.number])),placement:a["default"].PropTypes.oneOf(["top","right","bottom","left"]),positionLeft:a["default"].PropTypes.number,positionTop:a["default"].PropTypes.number,arrowOffsetLeft:a["default"].PropTypes.oneOfType([a["default"].PropTypes.number,a["default"].PropTypes.string]),arrowOffsetTop:a["default"].PropTypes.oneOfType([a["default"].PropTypes.number,a["default"].PropTypes.string]),title:a["default"].PropTypes.node},getDefaultProps:function(){return{placement:"right"}},render:function(){var e,t=(e={tooltip:!0},e[this.props.placement]=!0,e),n=r({left:this.props.positionLeft,top:this.props.positionTop},this.props.style),o={left:this.props.arrowOffsetLeft,top:this.props.arrowOffsetTop};return a["default"].createElement("div",r({role:"tooltip"},this.props,{className:l["default"](this.props.className,t),style:n}),a["default"].createElement("div",{className:"tooltip-arrow",style:o}),a["default"].createElement("div",{className:"tooltip-inner"},this.props.children))}});t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";var r=n(3)["default"],o=n(2)["default"];t.__esModule=!0;var s=n(1),a=o(s),i=n(4),l=o(i),u=n(5),p=o(u),d=a["default"].createClass({displayName:"Well",mixins:[p["default"]],getDefaultProps:function(){return{bsClass:"well"}},render:function(){var e=this.getBsClassSet();return a["default"].createElement("div",r({},this.props,{className:l["default"](this.props.className,e)}),this.props.children)}});t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){var t=[];return void 0===e?t:(a["default"].forEach(e,function(e){t.push(e)}),t)}var o=n(2)["default"];t.__esModule=!0,t["default"]=r;var s=n(9),a=o(s);e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t){return function(n){var r=function(e){function t(){s(this,t),e.apply(this,arguments)}return o(t,e),t.prototype.getChildContext=function(){return this.props.context},t.prototype.render=function(){var e=this.props,t=e.wrapped,n=(e.context,i(e,["wrapped","context"]));return p["default"].cloneElement(t,n)},t}(p["default"].Component);r.childContextTypes=n;var l=function(){function n(){s(this,n)}return n.prototype.render=function(){var n=a({},this.props);return n[t]=this.getWrappedOverlay(),p["default"].createElement(e,n,this.props.children)},n.prototype.getWrappedOverlay=function(){return p["default"].createElement(r,{context:this.context,wrapped:this.props[t]})},n}();return l.contextTypes=n,l}}var o=n(7)["default"],s=n(6)["default"],a=n(3)["default"],i=n(10)["default"],l=n(2)["default"];t.__esModule=!0,t["default"]=r;var u=n(1),p=l(u);e.exports=t["default"]},function(e,t){"use strict";function n(e){var t=!1;return{eventKey:e,preventSelection:function(){t=!0},isSelectionPrevented:function(){return t}}}t.__esModule=!0,t["default"]=n,e.exports=t["default"]},function(e,t,n){e.exports={"default":n(152),__esModule:!0}},function(e,t,n){e.exports={"default":n(153),__esModule:!0}},function(e,t,n){e.exports={"default":n(154),__esModule:!0}},function(e,t,n){e.exports={"default":n(155),__esModule:!0}},function(e,t,n){e.exports={"default":n(157),__esModule:!0}},function(e,t,n){n(169),e.exports=n(18).Object.assign},function(e,t,n){var r=n(29);e.exports=function(e,t){return r.create(e,t)}},function(e,t,n){var r=n(29);e.exports=function(e,t,n){return r.setDesc(e,t,n)}},function(e,t,n){n(170),e.exports=n(18).Object.isFrozen},function(e,t,n){n(171),e.exports=n(18).Object.keys},function(e,t,n){n(172),e.exports=n(18).Object.setPrototypeOf},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var r=n(38);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t,n){var r=n(74),o=n(167),s=n(164);e.exports=Object.assign||function(e,t){for(var n=r(e),a=arguments.length,i=1;a>i;)for(var l,u=o(arguments[i++]),p=s(u),d=p.length,f=0;d>f;)n[l=p[f++]]=u[l];return n}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(158);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var r=n(29);e.exports=function(e){var t=r.getKeys(e),n=r.getSymbols;if(n)for(var o,s=n(e),a=r.isEnum,i=0;s.length>i;)a.call(e,o=s[i++])&&t.push(o);return t}},function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t){var n="undefined"!=typeof self&&self.Math==Math?self:Function("return this")();e.exports=n,"number"==typeof __g&&(__g=n)},function(e,t,n){var r=n(161);e.exports=0 in Object("z")?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){var r=n(29).getDesc,o=n(38),s=n(159),a=function(e,t){if(s(e),!o(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t){try{t=n(162)(Function.call,r(Object.prototype,"__proto__").set,2),t({},[])}catch(o){e=!0}return function(n,r){return a(n,r),e?n.__proto__=r:t(n,r),n}}():void 0),check:a}},function(e,t,n){var r=n(37);r(r.S,"Object",{assign:n(160)})},function(e,t,n){var r=n(38);n(73)("isFrozen",function(e){return function(t){return r(t)?e?e(t):!1:!0}})},function(e,t,n){var r=n(74);n(73)("keys",function(e){return function(t){return e(r(t))}})},function(e,t,n){var r=n(37);r(r.S,"Object",{setPrototypeOf:n(168).set})},function(e,t,n){"use strict";function r(){var e=void 0===arguments[0]?document:arguments[0];try{return e.activeElement}catch(t){}}var o=n(24);t.__esModule=!0,t["default"]=r;var s=n(19);o.interopRequireDefault(s);e.exports=t["default"]},function(e,t,n){"use strict";var r=n(20),o=function(){};r&&(o=function(){return document.addEventListener?function(e,t,n,r){return e.removeEventListener(t,n,r||!1)}:document.attachEvent?function(e,t,n){return e.detachEvent("on"+t,n)}:void 0}()),e.exports=o},function(e,t,n){"use strict";function r(e){var t=a["default"](e);return t&&t.defaultView||t.parentWindow}var o=n(24);t.__esModule=!0,t["default"]=r;var s=n(19),a=o.interopRequireDefault(s);e.exports=t["default"]},function(e,t,n){"use strict";var r=n(39);e.exports=function(e,t){var n=r(e);return void 0===t?n?"pageXOffset"in n?n.pageXOffset:n.document.documentElement.scrollLeft:e.scrollLeft:void(n?n.scrollTo(t,"pageYOffset"in n?n.pageYOffset:n.document.documentElement.scrollTop):e.scrollLeft=t)}},function(e,t,n){"use strict";var r=n(24),o=n(80),s=r.interopRequireDefault(o),a=/^(top|right|bottom|left)$/,i=/^([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/i;e.exports=function(e){if(!e)throw new TypeError("No Element passed to `getComputedStyle()`");var t=e.ownerDocument;return"defaultView"in t?t.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):window.getComputedStyle(e,null):{getPropertyValue:function(t){var n=e.style;t=s["default"](t),"float"==t&&(t="styleFloat");var r=e.currentStyle[t]||null;if(null==r&&n&&n[t]&&(r=n[t]),i.test(r)&&!a.test(t)){var o=n.left,l=e.runtimeStyle,u=l&&l.left;u&&(l.left=e.currentStyle.left),n.left="fontSize"===t?"1em":r,r=n.pixelLeft+"px",n.left=o,u&&(l.left=u)}return r}}}},function(e,t){"use strict";e.exports=function(e,t){return"removeProperty"in e.style?e.style.removeProperty(t):e.style.removeAttribute(t)}},function(e,t,n){"use strict";function r(){var e,t="",n={O:"otransitionend",Moz:"transitionend",Webkit:"webkitTransitionEnd",ms:"MSTransitionEnd"},r=document.createElement("div");for(var o in n)if(u.call(n,o)&&void 0!==r.style[o+"TransitionProperty"]){t="-"+o.toLowerCase()+"-",e=n[o];break}return e||void 0===r.style.transitionProperty||(e="transitionend"),{end:e,prefix:t}}var o,s,a,i,l=n(20),u=Object.prototype.hasOwnProperty,p="transform",d={};l&&(d=r(),p=d.prefix+p,a=d.prefix+"transition-property",s=d.prefix+"transition-duration",i=d.prefix+"transition-delay",o=d.prefix+"transition-timing-function"),e.exports={transform:p,end:d.end,property:a,timing:o,delay:i,duration:s}},function(e,t){"use strict";var n=/-(.)/g;e.exports=function(e){return e.replace(n,function(e,t){return t.toUpperCase()})}},function(e,t){"use strict";var n=/([A-Z])/g;e.exports=function(e){return e.replace(n,"-$1").toLowerCase()}},function(e,t,n){"use strict";var r=n(181),o=/^ms-/;e.exports=function(e){return r(e).replace(o,"-ms-")}},function(e,t,n){"use strict";var r,o=n(20);e.exports=function(e){if((!r||e)&&o){var t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="50px",t.style.height="50px",t.style.overflow="scroll",document.body.appendChild(t),r=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return r}},function(e,t){function n(e){var t=e?e.length:0;return t?e[t-1]:void 0}e.exports=n},function(e,t,n){var r=n(192),o=n(210),s=o(r);e.exports=s},function(e,t,n){(function(t){function r(e){var t=e?e.length:0;for(this.data={hash:i(null),set:new a};t--;)this.push(e[t])}var o=n(206),s=n(30),a=s(t,"Set"),i=s(Object,"create");r.prototype.push=o,e.exports=r}).call(t,function(){return this}())},function(e,t){function n(e,t){for(var n=-1,r=e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}e.exports=n},function(e,t){function n(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}e.exports=n},function(e,t){function n(e,t){for(var n=-1,r=e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}e.exports=n},function(e,t,n){function r(e,t,n){var r=typeof e;return"function"==r?void 0===t?e:a(e,t,n):null==e?i:"object"==r?o(e):void 0===t?l(e):s(e,t)}var o=n(200),s=n(201),a=n(42),i=n(96),l=n(222);e.exports=r},function(e,t,n){function r(e,t){var n=e?e.length:0,r=[];if(!n)return r;var l=-1,u=o,p=!0,d=p&&t.length>=i?a(t):null,f=t.length;d&&(u=s,p=!1,t=d);e:for(;++l<n;){var c=e[l];if(p&&c===c){for(var h=f;h--;)if(t[h]===c)continue e;r.push(c)}else u(t,c,0)<0&&r.push(c)}return r}var o=n(197),s=n(205),a=n(209),i=200;e.exports=r},function(e,t,n){var r=n(196),o=n(207),s=o(r);e.exports=s},function(e,t){function n(e,t,n,r){var o;return n(e,function(e,n,s){return t(e,n,s)?(o=r?n:e,!1):void 0}),o}e.exports=n},function(e,t){function n(e,t,n){for(var r=e.length,o=n?r:-1;n?o--:++o<r;)if(t(e[o],o,e))return o;return-1}e.exports=n},function(e,t,n){function r(e,t){return o(e,t,s)}var o=n(84),s=n(46);e.exports=r},function(e,t,n){function r(e,t){return o(e,t,s)}var o=n(84),s=n(45);e.exports=r},function(e,t,n){function r(e,t,n){if(t!==t)return o(e,n);for(var r=n-1,s=e.length;++r<s;)if(e[r]===t)return r;return-1}var o=n(215);e.exports=r},function(e,t,n){function r(e,t,n,r,f,m,v){var y=i(e),g=i(t),b=p,T=p;y||(b=h.call(e),b==u?b=d:b!=d&&(y=l(e))),g||(T=h.call(t),T==u?T=d:T!=d&&(g=l(t)));var P=b==d,x=T==d,E=b==T;if(E&&!y&&!P)return s(e,t,b);if(!f){var C=P&&c.call(e,"__wrapped__"),_=x&&c.call(t,"__wrapped__");if(C||_)return n(C?e.value():e,_?t.value():t,r,f,m,v)}if(!E)return!1;m||(m=[]),v||(v=[]);for(var N=m.length;N--;)if(m[N]==e)return v[N]==t;m.push(e),v.push(t);var O=(y?o:a)(e,t,n,r,f,m,v);return m.pop(),v.pop(),O}var o=n(211),s=n(212),a=n(213),i=n(15),l=n(219),u="[object Arguments]",p="[object Array]",d="[object Object]",f=Object.prototype,c=f.hasOwnProperty,h=f.toString;e.exports=r},function(e,t,n){function r(e,t,n){var r=t.length,a=r,i=!n;if(null==e)return!a;for(e=s(e);r--;){var l=t[r];if(i&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++r<a;){l=t[r];var u=l[0],p=e[u],d=l[1];if(i&&l[2]){if(void 0===p&&!(u in e))return!1}else{var f=n?n(p,d,u):void 0;if(!(void 0===f?o(d,p,n,!0):f))return!1}}return!0}var o=n(86),s=n(13);e.exports=r},function(e,t,n){function r(e){var t=s(e);if(1==t.length&&t[0][2]){var n=t[0][0],r=t[0][1];return function(e){return null==e?!1:e[n]===r&&(void 0!==r||n in a(e))}}return function(e){return o(e,t)}}var o=n(199),s=n(214),a=n(13);e.exports=r},function(e,t,n){function r(e,t){var n=i(e),r=l(e)&&u(t),c=e+"";return e=f(e),function(i){if(null==i)return!1;var l=c;if(i=d(i),(n||!r)&&!(l in i)){if(i=1==e.length?i:o(i,a(e,0,-1)),null==i)return!1;l=p(e),i=d(i)}return i[l]===t?void 0!==t||l in i:s(t,i[l],void 0,!0)}}var o=n(85),s=n(86),a=n(203),i=n(15),l=n(90),u=n(91),p=n(184),d=n(13),f=n(94);e.exports=r},function(e,t,n){function r(e){var t=e+"";return e=s(e),function(n){return o(n,e,t)}}var o=n(85),s=n(94);e.exports=r},function(e,t){function n(e,t,n){var r=-1,o=e.length;t=null==t?0:+t||0,0>t&&(t=-t>o?0:o+t),n=void 0===n||n>o?o:+n||0,0>n&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=Array(o);++r<o;)s[r]=e[r+t];return s}e.exports=n},function(e,t){function n(e){return null==e?"":e+""}e.exports=n},function(e,t,n){function r(e,t){var n=e.data,r="string"==typeof t||o(t)?n.set.has(t):n.hash[t];return r?0:-1}var o=n(16);e.exports=r},function(e,t,n){function r(e){var t=this.data;"string"==typeof e||o(e)?t.set.add(e):t.hash[e]=!0}var o=n(16);e.exports=r},function(e,t,n){function r(e,t){return function(n,r){var i=n?o(n):0;if(!s(i))return e(n,r);for(var l=t?i:-1,u=a(n);(t?l--:++l<i)&&r(u[l],l,u)!==!1;);return n}}var o=n(88),s=n(21),a=n(13);e.exports=r},function(e,t,n){function r(e){return function(t,n,r){for(var s=o(t),a=r(t),i=a.length,l=e?i:-1;e?l--:++l<i;){var u=a[l];if(n(s[u],u,s)===!1)break}return t}}var o=n(13);e.exports=r},function(e,t,n){(function(t){function r(e){return i&&a?new o(e):null}var o=n(186),s=n(30),a=s(t,"Set"),i=s(Object,"create");e.exports=r}).call(t,function(){return this}())},function(e,t,n){function r(e,t){return function(n,r,l){if(r=o(r,l,3),i(n)){var u=a(n,r,t);return u>-1?n[u]:void 0}return s(n,r,e)}}var o=n(190),s=n(193),a=n(194),i=n(15);e.exports=r},function(e,t,n){function r(e,t,n,r,s,a,i){var l=-1,u=e.length,p=t.length;if(u!=p&&!(s&&p>u))return!1;for(;++l<u;){var d=e[l],f=t[l],c=r?r(s?f:d,s?d:f,l):void 0;if(void 0!==c){if(c)continue;return!1}if(s){if(!o(t,function(e){return d===e||n(d,e,r,s,a,i)}))return!1}else if(d!==f&&!n(d,f,r,s,a,i))return!1}return!0}var o=n(189);e.exports=r},function(e,t){function n(e,t,n){switch(n){case r:case o:return+e==+t;case s:return e.name==t.name&&e.message==t.message;case a:return e!=+e?t!=+t:e==+t;case i:case l:return e==t+""}return!1}var r="[object Boolean]",o="[object Date]",s="[object Error]",a="[object Number]",i="[object RegExp]",l="[object String]";e.exports=n},function(e,t,n){function r(e,t,n,r,s,i,l){var u=o(e),p=u.length,d=o(t),f=d.length;if(p!=f&&!s)return!1;for(var c=p;c--;){var h=u[c];if(!(s?h in t:a.call(t,h)))return!1}for(var m=s;++c<p;){h=u[c];var v=e[h],y=t[h],g=r?r(s?y:v,s?v:y,h):void 0;if(!(void 0===g?n(v,y,r,s,i,l):g))return!1;m||(m="constructor"==h)}if(!m){var b=e.constructor,T=t.constructor;if(b!=T&&"constructor"in e&&"constructor"in t&&!("function"==typeof b&&b instanceof b&&"function"==typeof T&&T instanceof T))return!1}return!0}var o=n(45),s=Object.prototype,a=s.hasOwnProperty;e.exports=r},function(e,t,n){function r(e){for(var t=s(e),n=t.length;n--;)t[n][2]=o(t[n][1]);return t}var o=n(91),s=n(220);e.exports=r},function(e,t){function n(e,t,n){for(var r=e.length,o=t+(n?0:-1);n?o--:++o<r;){var s=e[o];if(s!==s)return o}return-1}e.exports=n},function(e,t,n){function r(e){for(var t=l(e),n=t.length,r=n&&e.length,u=!!r&&i(r)&&(s(e)||o(e)),d=-1,f=[];++d<n;){var c=t[d];(u&&a(c,r)||p.call(e,c))&&f.push(c)}return f}var o=n(44),s=n(15),a=n(89),i=n(21),l=n(46),u=Object.prototype,p=u.hasOwnProperty;e.exports=r},function(e,t,n){function r(e){return o(e)&&i.call(e)==s}var o=n(16),s="[object Function]",a=Object.prototype,i=a.toString;e.exports=r},function(e,t,n){function r(e){return null==e?!1:o(e)?p.test(l.call(e)):s(e)&&a.test(e)}var o=n(217),s=n(22),a=/^\[object .+?Constructor\]$/,i=Object.prototype,l=Function.prototype.toString,u=i.hasOwnProperty,p=RegExp("^"+l.call(u).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=r},function(e,t,n){function r(e){return s(e)&&o(e.length)&&!!S[M.call(e)]}var o=n(21),s=n(22),a="[object Arguments]",i="[object Array]",l="[object Boolean]",u="[object Date]",p="[object Error]",d="[object Function]",f="[object Map]",c="[object Number]",h="[object Object]",m="[object RegExp]",v="[object Set]",y="[object String]",g="[object WeakMap]",b="[object ArrayBuffer]",T="[object Float32Array]",P="[object Float64Array]",x="[object Int8Array]",E="[object Int16Array]",C="[object Int32Array]",_="[object Uint8Array]",N="[object Uint8ClampedArray]",O="[object Uint16Array]",w="[object Uint32Array]",S={};S[T]=S[P]=S[x]=S[E]=S[C]=S[_]=S[N]=S[O]=S[w]=!0,S[a]=S[i]=S[b]=S[l]=S[u]=S[p]=S[d]=S[f]=S[c]=S[h]=S[m]=S[v]=S[y]=S[g]=!1;var k=Object.prototype,M=k.toString;e.exports=r},function(e,t,n){function r(e){e=s(e);for(var t=-1,n=o(e),r=n.length,a=Array(r);++t<r;){var i=n[t];a[t]=[i,e[i]]}return a}var o=n(45),s=n(13);e.exports=r},function(e,t,n){var r=n(83),o=n(42),s=n(92),a=n(93),i=n(82),l=i(function(e,t){return null==e?{}:"function"==typeof t[0]?a(e,o(t[0],t[1],3)):s(e,r(t))});e.exports=l},function(e,t,n){function r(e){return a(e)?o(e):s(e)}var o=n(87),s=n(202),a=n(90);e.exports=r},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}t.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l=n(1),u=r(l),p=n(47),d=r(p),f=n(97),c=r(f),h=n(98),m=r(h),v=n(227),y=r(v),g=function(e){function t(n,r){s(this,t),e.call(this,n,r),this.state={exited:!n.show},this.onHiddenListener=this.handleHidden.bind(this)}return a(t,e),t.prototype.componentWillReceiveProps=function(e){e.show?this.setState({exited:!1}):e.transition||this.setState({exited:!0})},t.prototype.render=function(){var e=this.props,t=e.container,n=e.containerPadding,r=e.target,s=e.placement,a=e.rootClose,i=e.children,l=e.transition,p=o(e,["container","containerPadding","target","placement","rootClose","children","transition"]),f=p.show||l&&!this.state.exited;if(!f)return null;var h=i;if(h=u["default"].createElement(c["default"],{container:t,containerPadding:n,target:r,placement:s},h),l){var v=p.onExit,y=p.onExiting,g=p.onEnter,b=p.onEntering,T=p.onEntered;h=u["default"].createElement(l,{"in":p.show,transitionAppear:!0,onExit:v,onExiting:y,onExited:this.onHiddenListener,onEnter:g,onEntering:b,onEntered:T},h)}return a&&(h=u["default"].createElement(m["default"],{onRootClose:p.onHide},h)),u["default"].createElement(d["default"],{container:t},h)},t.prototype.handleHidden=function(){if(this.setState({exited:!0}),this.props.onExited){var e;(e=this.props).onExited.apply(e,arguments)}},t}(u["default"].Component);g.propTypes=i({},d["default"].propTypes,c["default"].propTypes,{show:u["default"].PropTypes.bool,rootClose:u["default"].PropTypes.bool,onHide:u["default"].PropTypes.func,transition:y["default"],onEnter:u["default"].PropTypes.func,onEntering:u["default"].PropTypes.func,onEntered:u["default"].PropTypes.func,onExit:u["default"].PropTypes.func,onExiting:u["default"].PropTypes.func,onExited:u["default"].PropTypes.func}),t["default"]=g,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0;var o=n(75),s=r(o),a=n(174),i=r(a);t["default"]=function(e,t,n){return s["default"](e,t,n),{remove:function(){i["default"](e,t,n)}}},e.exports=t["default"]},function(e,t){"use strict";function n(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];return t.filter(function(e){return null!=e}).reduce(function(e,t){if("function"!=typeof t)throw new Error("Invalid Argument Type, must only provide functions, undefined, or null.");return null===e?t:function(){for(var n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];e.apply(this,r),t.apply(this,r)}},null)}t.__esModule=!0,t["default"]=n,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n,r){var o=h.getContainerDimensions(n),s=o.scroll,a=o.height,i=e-r-s,l=e+r-s+t;return 0>i?-i:l>a?a-l:0}function s(e,t,n,r){var o=h.getContainerDimensions(n),s=o.width,a=e-r,i=e+r+t;return 0>a?-a:i>s?s-i:0}t.__esModule=!0;var a=n(31),i=r(a),l=n(40),u=r(l),p=n(78),d=r(p),f=n(79),c=r(f),h={getContainerDimensions:function(e){var t=void 0,n=void 0,r=void 0;if("BODY"===e.tagName)t=window.innerWidth,n=window.innerHeight,r=c["default"](i["default"](e).documentElement)||c["default"](e);else{var o=u["default"](e);t=o.width,n=o.height,r=c["default"](e)}return{width:t,height:n,scroll:r}},getPosition:function(e,t){var n="BODY"===t.tagName?u["default"](e):d["default"](e,t);return n},calcOverlayPosition:function(e,t,n,r,a){var i=h.getPosition(n,r),l=u["default"](t),p=l.height,d=l.width,f=void 0,c=void 0,m=void 0,v=void 0;
+if("left"===e||"right"===e){c=i.top+(i.height-p)/2,f="left"===e?i.left-d:i.left+i.width;var y=o(c,p,r,a);c+=y,v=50*(1-2*y/p)+"%",m=void 0}else{if("top"!==e&&"bottom"!==e)throw new Error('calcOverlayPosition(): No such placement of "'+e+'" found.');f=i.left+(i.width-d)/2,c="top"===e?i.top-p:i.top+i.height;var g=s(f,d,r,a);f+=g,m=50*(1-2*g/d)+"%",v=void 0}return{positionLeft:f,positionTop:c,arrowOffsetLeft:m,arrowOffsetTop:v}}};t["default"]=h,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n){var r=i.errMsg(e,t,n,". Expected an Element `type`");if("function"!=typeof e[t]){if(a["default"].isValidElement(e[t]))return new Error(r+", not an actual Element");if("string"!=typeof e[t])return new Error(r+" such as a tag name or return value of React.createClass(...)")}}t.__esModule=!0;var s=n(1),a=r(s),i=n(101);t["default"]=i.createChainableTypeChecker(o),e.exports=t["default"]},function(e,t){function n(e){return function(){return e}}function r(){}r.thatReturns=n,r.thatReturnsFalse=n(!1),r.thatReturnsTrue=n(!0),r.thatReturnsNull=n(null),r.thatReturnsThis=function(){return this},r.thatReturnsArgument=function(e){return e},e.exports=r},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function o(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e,t){function n(n,r){function o(e,n){var o=d.getLinkName(e),s=this.props[r[e]];o&&a(this.props,o)&&!s&&(s=this.props[o].requestChange);for(var i=arguments.length,l=Array(i>2?i-2:0),u=2;i>u;u++)l[u-2]=arguments[u];t(this,e,s,n,l)}function a(e,t){return void 0!==e[t]}var l,p=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],f=n.displayName||n.name||"Component",c=d.getType(n).propTypes;l=d.uncontrolledPropTypes(r,c,f);var h=d.transform(p,function(e,t){e[t]=function(){var e=this.refs.controlled;return e[t].apply(e,arguments)}},{}),m=u["default"].createClass(i({displayName:"Uncontrolled("+f+")",mixins:e,propTypes:l},h,{componentWillMount:function(){var e=this.props,t=Object.keys(r);this._values=d.transform(t,function(t,n){t[n]=e[d.defaultKey(n)]},{})},render:function(){var e=this,t={},l=this.props,p=(l.valueLink,l.checkedLink,s(l,["valueLink","checkedLink"]));return d.each(r,function(n,r){var s=d.getLinkName(r),i=e.props[r];s&&!a(e.props,r)&&a(e.props,s)&&(i=e.props[s].value),t[r]=void 0!==i?i:e._values[r],t[n]=o.bind(e,r)}),t=i({ref:"controlled"},p,t),u["default"].createElement(n,t)}}));return m.ControlledComponent=n,m}return n}t.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};t["default"]=a;var l=n(1),u=o(l),p=n(232),d=r(p);e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n,r,o){n&&(e._notifying=!0,n.call.apply(n,[e,r].concat(o)),e._notifying=!1),e._values[t]=r,e.forceUpdate()}t.__esModule=!0;var s=n(229),a=r(s),i={shouldComponentUpdate:function(){return!this._notifying}};t["default"]=a["default"]([i],o),e.exports=t["default"]},function(e,t,n){"use strict";var r=function(e,t,n,r,o,s,a,i){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,s,a,i],p=0;l=new Error("Invariant Violation: "+t.replace(/%s/g,function(){return u[p++]}))}throw l.framesToPop=1,l}};e.exports=r},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n){return function(r,o,s){return void 0!==r[o]?r[e]?t&&t(r,o,n):new Error("You have provided a `"+o+"` prop to `"+n+"` without an `"+e+"` handler. This will render a read-only field. If the field should be mutable use `"+l(o)+"`. Otherwise, set `"+e+"`"):void 0}}function s(e,t,n){var r={};return r}function a(e){return 0===v[0]&&v[1]>=13?e:e.type}function i(e){return"value"===e?"valueLink":"checked"===e?"checkedLink":null}function l(e){return"default"+e.charAt(0).toUpperCase()+e.substr(1)}function u(e,t,n){return function(){for(var r=arguments.length,o=Array(r),s=0;r>s;s++)o[s]=arguments[s];t&&t.call.apply(t,[e].concat(o)),n&&n.call.apply(n,[e].concat(o))}}function p(e,t,n){return d(e,t.bind(null,n=n||(Array.isArray(e)?[]:{}))),n}function d(e,t,n){if(Array.isArray(e))return e.forEach(t,n);for(var r in e)f(e,r)&&t.call(n,e[r],r,e)}function f(e,t){return e?Object.prototype.hasOwnProperty.call(e,t):!1}t.__esModule=!0,t.customPropType=o,t.uncontrolledPropTypes=s,t.getType=a,t.getLinkName=i,t.defaultKey=l,t.chain=u,t.transform=p,t.each=d,t.has=f;var c=n(1),h=r(c),m=n(231),v=(r(m),h["default"].version.split(".").map(parseFloat));t.version=v}])});
diff --git a/web/static/js/react-with-addons-0.13.1.min.js b/web/static/js/react-with-addons-0.13.1.min.js
deleted file mode 100644
index 63ac73133..000000000
--- a/web/static/js/react-with-addons-0.13.1.min.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * React (with addons) v0.13.1
- *
- * Copyright 2013-2015, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.React=e()}}(function(){return function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[a]={exports:{}};t[a][0].call(c.exports,function(e){var n=t[a][1][e];return o(n?n:e)},c,c.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a<r.length;a++)o(r[a]);return o}({1:[function(e,t){"use strict";var n=e(25),r=e(31),o=e(42),i=e(34),a=e(67),s=e(95),u=e(97),l=e(124),c=e(119),p=e(165);r.addons={CSSTransitionGroup:i,LinkedStateMixin:n,PureRenderMixin:o,TransitionGroup:s,batchedUpdates:u.batchedUpdates,classSet:l,cloneWithProps:c,createFragment:a.create,update:p},t.exports=r},{119:119,124:124,165:165,25:25,31:31,34:34,42:42,67:67,95:95,97:97}],2:[function(e,t){"use strict";var n=e(131),r={componentDidMount:function(){this.props.autoFocus&&n(this.getDOMNode())}};t.exports=r},{131:131}],3:[function(e,t){"use strict";function n(){var e=window.opera;return"object"==typeof e&&"function"==typeof e.version&&parseInt(e.version(),10)<=12}function r(e){return(e.ctrlKey||e.altKey||e.metaKey)&&!(e.ctrlKey&&e.altKey)}function o(e){switch(e){case N.topCompositionStart:return P.compositionStart;case N.topCompositionEnd:return P.compositionEnd;case N.topCompositionUpdate:return P.compositionUpdate}}function i(e,t){return e===N.topKeyDown&&t.keyCode===E}function a(e,t){switch(e){case N.topKeyUp:return-1!==C.indexOf(t.keyCode);case N.topKeyDown:return t.keyCode!==E;case N.topKeyPress:case N.topMouseDown:case N.topBlur:return!0;default:return!1}}function s(e){var t=e.detail;return"object"==typeof t&&"data"in t?t.data:null}function u(e,t,n,r){var u,l;if(b?u=o(e):R?a(e,r)&&(u=P.compositionEnd):i(e,r)&&(u=P.compositionStart),!u)return null;D&&(R||u!==P.compositionStart?u===P.compositionEnd&&R&&(l=R.getData()):R=m.getPooled(t));var c=v.getPooled(u,n,r);if(l)c.data=l;else{var p=s(r);null!==p&&(c.data=p)}return f.accumulateTwoPhaseDispatches(c),c}function l(e,t){switch(e){case N.topCompositionEnd:return s(t);case N.topKeyPress:var n=t.which;return n!==M?null:(I=!0,T);case N.topTextInput:var r=t.data;return r===T&&I?null:r;default:return null}}function c(e,t){if(R){if(e===N.topCompositionEnd||a(e,t)){var n=R.getData();return m.release(R),R=null,n}return null}switch(e){case N.topPaste:return null;case N.topKeyPress:return t.which&&!r(t)?String.fromCharCode(t.which):null;case N.topCompositionEnd:return D?null:t.data;default:return null}}function p(e,t,n,r){var o;if(o=x?l(e,r):c(e,r),!o)return null;var i=g.getPooled(P.beforeInput,n,r);return i.data=o,f.accumulateTwoPhaseDispatches(i),i}var d=e(16),f=e(21),h=e(22),m=e(23),v=e(103),g=e(107),y=e(154),C=[9,13,27,32],E=229,b=h.canUseDOM&&"CompositionEvent"in window,_=null;h.canUseDOM&&"documentMode"in document&&(_=document.documentMode);var x=h.canUseDOM&&"TextEvent"in window&&!_&&!n(),D=h.canUseDOM&&(!b||_&&_>8&&11>=_),M=32,T=String.fromCharCode(M),N=d.topLevelTypes,P={beforeInput:{phasedRegistrationNames:{bubbled:y({onBeforeInput:null}),captured:y({onBeforeInputCapture:null})},dependencies:[N.topCompositionEnd,N.topKeyPress,N.topTextInput,N.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:y({onCompositionEnd:null}),captured:y({onCompositionEndCapture:null})},dependencies:[N.topBlur,N.topCompositionEnd,N.topKeyDown,N.topKeyPress,N.topKeyUp,N.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:y({onCompositionStart:null}),captured:y({onCompositionStartCapture:null})},dependencies:[N.topBlur,N.topCompositionStart,N.topKeyDown,N.topKeyPress,N.topKeyUp,N.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:y({onCompositionUpdate:null}),captured:y({onCompositionUpdateCapture:null})},dependencies:[N.topBlur,N.topCompositionUpdate,N.topKeyDown,N.topKeyPress,N.topKeyUp,N.topMouseDown]}},I=!1,R=null,w={eventTypes:P,extractEvents:function(e,t,n,r){return[u(e,t,n,r),p(e,t,n,r)]}};t.exports=w},{103:103,107:107,154:154,16:16,21:21,22:22,23:23}],4:[function(e,t){var n=e(147),r={addClass:function(e,t){return n(!/\s/.test(t)),t&&(e.classList?e.classList.add(t):r.hasClass(e,t)||(e.className=e.className+" "+t)),e},removeClass:function(e,t){return n(!/\s/.test(t)),t&&(e.classList?e.classList.remove(t):r.hasClass(e,t)&&(e.className=e.className.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,""))),e},conditionClass:function(e,t,n){return(n?r.addClass:r.removeClass)(e,t)},hasClass:function(e,t){return n(!/\s/.test(t)),e.classList?!!t&&e.classList.contains(t):(" "+e.className+" ").indexOf(" "+t+" ")>-1}};t.exports=r},{147:147}],5:[function(e,t){"use strict";function n(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var r={boxFlex:!0,boxFlexGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,strokeOpacity:!0},o=["Webkit","ms","Moz","O"];Object.keys(r).forEach(function(e){o.forEach(function(t){r[n(t,e)]=r[e]})});var i={background:{backgroundImage:!0,backgroundPosition:!0,backgroundRepeat:!0,backgroundColor:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0}},a={isUnitlessNumber:r,shorthandPropertyExpansions:i};t.exports=a},{}],6:[function(e,t){"use strict";var n=e(5),r=e(22),o=(e(118),e(125)),i=e(145),a=e(156),s=(e(166),a(function(e){return i(e)})),u="cssFloat";r.canUseDOM&&void 0===document.documentElement.style.cssFloat&&(u="styleFloat");var l={createMarkupForStyles:function(e){var t="";for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];null!=r&&(t+=s(n)+":",t+=o(n,r)+";")}return t||null},setValueForStyles:function(e,t){var r=e.style;for(var i in t)if(t.hasOwnProperty(i)){var a=o(i,t[i]);if("float"===i&&(i=u),a)r[i]=a;else{var s=n.shorthandPropertyExpansions[i];if(s)for(var l in s)r[l]="";else r[i]=""}}}};t.exports=l},{118:118,125:125,145:145,156:156,166:166,22:22,5:5}],7:[function(e,t){"use strict";function n(){this._callbacks=null,this._contexts=null}var r=e(30),o=e(29),i=e(147);o(n.prototype,{enqueue:function(e,t){this._callbacks=this._callbacks||[],this._contexts=this._contexts||[],this._callbacks.push(e),this._contexts.push(t)},notifyAll:function(){var e=this._callbacks,t=this._contexts;if(e){i(e.length===t.length),this._callbacks=null,this._contexts=null;for(var n=0,r=e.length;r>n;n++)e[n].call(t[n]);e.length=0,t.length=0}},reset:function(){this._callbacks=null,this._contexts=null},destructor:function(){this.reset()}}),r.addPoolingTo(n),t.exports=n},{147:147,29:29,30:30}],8:[function(e,t){"use strict";function n(e){return"SELECT"===e.nodeName||"INPUT"===e.nodeName&&"file"===e.type}function r(e){var t=_.getPooled(N.change,I,e);C.accumulateTwoPhaseDispatches(t),b.batchedUpdates(o,t)}function o(e){y.enqueueEvents(e),y.processEventQueue()}function i(e,t){P=e,I=t,P.attachEvent("onchange",r)}function a(){P&&(P.detachEvent("onchange",r),P=null,I=null)}function s(e,t,n){return e===T.topChange?n:void 0}function u(e,t,n){e===T.topFocus?(a(),i(t,n)):e===T.topBlur&&a()}function l(e,t){P=e,I=t,R=e.value,w=Object.getOwnPropertyDescriptor(e.constructor.prototype,"value"),Object.defineProperty(P,"value",A),P.attachEvent("onpropertychange",p)}function c(){P&&(delete P.value,P.detachEvent("onpropertychange",p),P=null,I=null,R=null,w=null)}function p(e){if("value"===e.propertyName){var t=e.srcElement.value;t!==R&&(R=t,r(e))}}function d(e,t,n){return e===T.topInput?n:void 0}function f(e,t,n){e===T.topFocus?(c(),l(t,n)):e===T.topBlur&&c()}function h(e){return e!==T.topSelectionChange&&e!==T.topKeyUp&&e!==T.topKeyDown||!P||P.value===R?void 0:(R=P.value,I)}function m(e){return"INPUT"===e.nodeName&&("checkbox"===e.type||"radio"===e.type)}function v(e,t,n){return e===T.topClick?n:void 0}var g=e(16),y=e(18),C=e(21),E=e(22),b=e(97),_=e(105),x=e(148),D=e(150),M=e(154),T=g.topLevelTypes,N={change:{phasedRegistrationNames:{bubbled:M({onChange:null}),captured:M({onChangeCapture:null})},dependencies:[T.topBlur,T.topChange,T.topClick,T.topFocus,T.topInput,T.topKeyDown,T.topKeyUp,T.topSelectionChange]}},P=null,I=null,R=null,w=null,O=!1;E.canUseDOM&&(O=x("change")&&(!("documentMode"in document)||document.documentMode>8));var S=!1;E.canUseDOM&&(S=x("input")&&(!("documentMode"in document)||document.documentMode>9));var A={get:function(){return w.get.call(this)},set:function(e){R=""+e,w.set.call(this,e)}},k={eventTypes:N,extractEvents:function(e,t,r,o){var i,a;if(n(t)?O?i=s:a=u:D(t)?S?i=d:(i=h,a=f):m(t)&&(i=v),i){var l=i(e,t,r);if(l){var c=_.getPooled(N.change,l,o);return C.accumulateTwoPhaseDispatches(c),c}}a&&a(e,t,r)}};t.exports=k},{105:105,148:148,150:150,154:154,16:16,18:18,21:21,22:22,97:97}],9:[function(e,t){"use strict";var n=0,r={createReactRootIndex:function(){return n++}};t.exports=r},{}],10:[function(e,t){"use strict";function n(e,t,n){e.insertBefore(t,e.childNodes[n]||null)}var r=e(13),o=e(77),i=e(160),a=e(147),s={dangerouslyReplaceNodeWithMarkup:r.dangerouslyReplaceNodeWithMarkup,updateTextContent:i,processUpdates:function(e,t){for(var s,u=null,l=null,c=0;c<e.length;c++)if(s=e[c],s.type===o.MOVE_EXISTING||s.type===o.REMOVE_NODE){var p=s.fromIndex,d=s.parentNode.childNodes[p],f=s.parentID;a(d),u=u||{},u[f]=u[f]||[],u[f][p]=d,l=l||[],l.push(d)}var h=r.dangerouslyRenderMarkup(t);if(l)for(var m=0;m<l.length;m++)l[m].parentNode.removeChild(l[m]);for(var v=0;v<e.length;v++)switch(s=e[v],s.type){case o.INSERT_MARKUP:n(s.parentNode,h[s.markupIndex],s.toIndex);break;case o.MOVE_EXISTING:n(s.parentNode,u[s.parentID][s.fromIndex],s.toIndex);break;case o.TEXT_CONTENT:i(s.parentNode,s.textContent);break;case o.REMOVE_NODE:}}};t.exports=s},{13:13,147:147,160:160,77:77}],11:[function(e,t){"use strict";function n(e,t){return(e&t)===t}var r=e(147),o={MUST_USE_ATTRIBUTE:1,MUST_USE_PROPERTY:2,HAS_SIDE_EFFECTS:4,HAS_BOOLEAN_VALUE:8,HAS_NUMERIC_VALUE:16,HAS_POSITIVE_NUMERIC_VALUE:48,HAS_OVERLOADED_BOOLEAN_VALUE:64,injectDOMPropertyConfig:function(e){var t=e.Properties||{},i=e.DOMAttributeNames||{},s=e.DOMPropertyNames||{},u=e.DOMMutationMethods||{};e.isCustomAttribute&&a._isCustomAttributeFunctions.push(e.isCustomAttribute);for(var l in t){r(!a.isStandardName.hasOwnProperty(l)),a.isStandardName[l]=!0;var c=l.toLowerCase();if(a.getPossibleStandardName[c]=l,i.hasOwnProperty(l)){var p=i[l];a.getPossibleStandardName[p]=l,a.getAttributeName[l]=p}else a.getAttributeName[l]=c;a.getPropertyName[l]=s.hasOwnProperty(l)?s[l]:l,a.getMutationMethod[l]=u.hasOwnProperty(l)?u[l]:null;var d=t[l];a.mustUseAttribute[l]=n(d,o.MUST_USE_ATTRIBUTE),a.mustUseProperty[l]=n(d,o.MUST_USE_PROPERTY),a.hasSideEffects[l]=n(d,o.HAS_SIDE_EFFECTS),a.hasBooleanValue[l]=n(d,o.HAS_BOOLEAN_VALUE),a.hasNumericValue[l]=n(d,o.HAS_NUMERIC_VALUE),a.hasPositiveNumericValue[l]=n(d,o.HAS_POSITIVE_NUMERIC_VALUE),a.hasOverloadedBooleanValue[l]=n(d,o.HAS_OVERLOADED_BOOLEAN_VALUE),r(!a.mustUseAttribute[l]||!a.mustUseProperty[l]),r(a.mustUseProperty[l]||!a.hasSideEffects[l]),r(!!a.hasBooleanValue[l]+!!a.hasNumericValue[l]+!!a.hasOverloadedBooleanValue[l]<=1)}}},i={},a={ID_ATTRIBUTE_NAME:"data-reactid",isStandardName:{},getPossibleStandardName:{},getAttributeName:{},getPropertyName:{},getMutationMethod:{},mustUseAttribute:{},mustUseProperty:{},hasSideEffects:{},hasBooleanValue:{},hasNumericValue:{},hasPositiveNumericValue:{},hasOverloadedBooleanValue:{},_isCustomAttributeFunctions:[],isCustomAttribute:function(e){for(var t=0;t<a._isCustomAttributeFunctions.length;t++){var n=a._isCustomAttributeFunctions[t];if(n(e))return!0}return!1},getDefaultValueForProperty:function(e,t){var n,r=i[e];return r||(i[e]=r={}),t in r||(n=document.createElement(e),r[t]=n[t]),r[t]},injection:o};t.exports=a},{147:147}],12:[function(e,t){"use strict";function n(e,t){return null==t||r.hasBooleanValue[e]&&!t||r.hasNumericValue[e]&&isNaN(t)||r.hasPositiveNumericValue[e]&&1>t||r.hasOverloadedBooleanValue[e]&&t===!1}var r=e(11),o=e(158),i=(e(166),{createMarkupForID:function(e){return r.ID_ATTRIBUTE_NAME+"="+o(e)},createMarkupForProperty:function(e,t){if(r.isStandardName.hasOwnProperty(e)&&r.isStandardName[e]){if(n(e,t))return"";var i=r.getAttributeName[e];return r.hasBooleanValue[e]||r.hasOverloadedBooleanValue[e]&&t===!0?i:i+"="+o(t)}return r.isCustomAttribute(e)?null==t?"":e+"="+o(t):null},setValueForProperty:function(e,t,o){if(r.isStandardName.hasOwnProperty(t)&&r.isStandardName[t]){var i=r.getMutationMethod[t];if(i)i(e,o);else if(n(t,o))this.deleteValueForProperty(e,t);else if(r.mustUseAttribute[t])e.setAttribute(r.getAttributeName[t],""+o);else{var a=r.getPropertyName[t];r.hasSideEffects[t]&&""+e[a]==""+o||(e[a]=o)}}else r.isCustomAttribute(t)&&(null==o?e.removeAttribute(t):e.setAttribute(t,""+o))},deleteValueForProperty:function(e,t){if(r.isStandardName.hasOwnProperty(t)&&r.isStandardName[t]){var n=r.getMutationMethod[t];if(n)n(e,void 0);else if(r.mustUseAttribute[t])e.removeAttribute(r.getAttributeName[t]);else{var o=r.getPropertyName[t],i=r.getDefaultValueForProperty(e.nodeName,o);r.hasSideEffects[t]&&""+e[o]===i||(e[o]=i)}}else r.isCustomAttribute(t)&&e.removeAttribute(t)}});t.exports=i},{11:11,158:158,166:166}],13:[function(e,t){"use strict";function n(e){return e.substring(1,e.indexOf(" "))}var r=e(22),o=e(123),i=e(126),a=e(139),s=e(147),u=/^(<[^ \/>]+)/,l="data-danger-index",c={dangerouslyRenderMarkup:function(e){s(r.canUseDOM);for(var t,c={},p=0;p<e.length;p++)s(e[p]),t=n(e[p]),t=a(t)?t:"*",c[t]=c[t]||[],c[t][p]=e[p];var d=[],f=0;for(t in c)if(c.hasOwnProperty(t)){var h,m=c[t];for(h in m)if(m.hasOwnProperty(h)){var v=m[h];m[h]=v.replace(u,"$1 "+l+'="'+h+'" ')}for(var g=o(m.join(""),i),y=0;y<g.length;++y){var C=g[y];C.hasAttribute&&C.hasAttribute(l)&&(h=+C.getAttribute(l),C.removeAttribute(l),s(!d.hasOwnProperty(h)),d[h]=C,f+=1)}}return s(f===d.length),s(d.length===e.length),d},dangerouslyReplaceNodeWithMarkup:function(e,t){s(r.canUseDOM),s(t),s("html"!==e.tagName.toLowerCase());var n=o(t,i)[0];e.parentNode.replaceChild(n,e)}};t.exports=c},{123:123,126:126,139:139,147:147,22:22}],14:[function(e,t){"use strict";var n=e(154),r=[n({ResponderEventPlugin:null}),n({SimpleEventPlugin:null}),n({TapEventPlugin:null}),n({EnterLeaveEventPlugin:null}),n({ChangeEventPlugin:null}),n({SelectEventPlugin:null}),n({BeforeInputEventPlugin:null}),n({AnalyticsEventPlugin:null}),n({MobileSafariClickEventPlugin:null})];t.exports=r},{154:154}],15:[function(e,t){"use strict";var n=e(16),r=e(21),o=e(109),i=e(75),a=e(154),s=n.topLevelTypes,u=i.getFirstReactDOM,l={mouseEnter:{registrationName:a({onMouseEnter:null}),dependencies:[s.topMouseOut,s.topMouseOver]},mouseLeave:{registrationName:a({onMouseLeave:null}),dependencies:[s.topMouseOut,s.topMouseOver]}},c=[null,null],p={eventTypes:l,extractEvents:function(e,t,n,a){if(e===s.topMouseOver&&(a.relatedTarget||a.fromElement))return null;if(e!==s.topMouseOut&&e!==s.topMouseOver)return null;var p;if(t.window===t)p=t;else{var d=t.ownerDocument;p=d?d.defaultView||d.parentWindow:window}var f,h;if(e===s.topMouseOut?(f=t,h=u(a.relatedTarget||a.toElement)||p):(f=p,h=t),f===h)return null;var m=f?i.getID(f):"",v=h?i.getID(h):"",g=o.getPooled(l.mouseLeave,m,a);g.type="mouseleave",g.target=f,g.relatedTarget=h;var y=o.getPooled(l.mouseEnter,v,a);return y.type="mouseenter",y.target=h,y.relatedTarget=f,r.accumulateEnterLeaveDispatches(g,y,m,v),c[0]=g,c[1]=y,c}};t.exports=p},{109:109,154:154,16:16,21:21,75:75}],16:[function(e,t){"use strict";var n=e(153),r=n({bubbled:null,captured:null}),o=n({topBlur:null,topChange:null,topClick:null,topCompositionEnd:null,topCompositionStart:null,topCompositionUpdate:null,topContextMenu:null,topCopy:null,topCut:null,topDoubleClick:null,topDrag:null,topDragEnd:null,topDragEnter:null,topDragExit:null,topDragLeave:null,topDragOver:null,topDragStart:null,topDrop:null,topError:null,topFocus:null,topInput:null,topKeyDown:null,topKeyPress:null,topKeyUp:null,topLoad:null,topMouseDown:null,topMouseMove:null,topMouseOut:null,topMouseOver:null,topMouseUp:null,topPaste:null,topReset:null,topScroll:null,topSelectionChange:null,topSubmit:null,topTextInput:null,topTouchCancel:null,topTouchEnd:null,topTouchMove:null,topTouchStart:null,topWheel:null}),i={topLevelTypes:o,PropagationPhases:r};t.exports=i},{153:153}],17:[function(e,t){var n=e(126),r={listen:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!1),{remove:function(){e.removeEventListener(t,n,!1)}}):e.attachEvent?(e.attachEvent("on"+t,n),{remove:function(){e.detachEvent("on"+t,n)}}):void 0},capture:function(e,t,r){return e.addEventListener?(e.addEventListener(t,r,!0),{remove:function(){e.removeEventListener(t,r,!0)}}):{remove:n}},registerDefault:function(){}};t.exports=r},{126:126}],18:[function(e,t){"use strict";var n=e(19),r=e(20),o=e(115),i=e(132),a=e(147),s={},u=null,l=function(e){if(e){var t=r.executeDispatch,o=n.getPluginModuleForEvent(e);o&&o.executeDispatch&&(t=o.executeDispatch),r.executeDispatchesInOrder(e,t),e.isPersistent()||e.constructor.release(e)}},c=null,p={injection:{injectMount:r.injection.injectMount,injectInstanceHandle:function(e){c=e},getInstanceHandle:function(){return c},injectEventPluginOrder:n.injectEventPluginOrder,injectEventPluginsByName:n.injectEventPluginsByName},eventNameDispatchConfigs:n.eventNameDispatchConfigs,registrationNameModules:n.registrationNameModules,putListener:function(e,t,n){a(!n||"function"==typeof n);var r=s[t]||(s[t]={});r[e]=n},getListener:function(e,t){var n=s[t];return n&&n[e]},deleteListener:function(e,t){var n=s[t];n&&delete n[e]},deleteAllListeners:function(e){for(var t in s)delete s[t][e]},extractEvents:function(e,t,r,i){for(var a,s=n.plugins,u=0,l=s.length;l>u;u++){var c=s[u];if(c){var p=c.extractEvents(e,t,r,i);p&&(a=o(a,p))}}return a},enqueueEvents:function(e){e&&(u=o(u,e))},processEventQueue:function(){var e=u;u=null,i(e,l),a(!u)},__purge:function(){s={}},__getListenerBank:function(){return s}};t.exports=p},{115:115,132:132,147:147,19:19,20:20}],19:[function(e,t){"use strict";function n(){if(a)for(var e in s){var t=s[e],n=a.indexOf(e);if(i(n>-1),!u.plugins[n]){i(t.extractEvents),u.plugins[n]=t;var o=t.eventTypes;for(var l in o)i(r(o[l],t,l))}}}function r(e,t,n){i(!u.eventNameDispatchConfigs.hasOwnProperty(n)),u.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var a in r)if(r.hasOwnProperty(a)){var s=r[a];o(s,t,n)}return!0}return e.registrationName?(o(e.registrationName,t,n),!0):!1}function o(e,t,n){i(!u.registrationNameModules[e]),u.registrationNameModules[e]=t,u.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var i=e(147),a=null,s={},u={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},injectEventPluginOrder:function(e){i(!a),a=Array.prototype.slice.call(e),n()},injectEventPluginsByName:function(e){var t=!1;for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];s.hasOwnProperty(r)&&s[r]===o||(i(!s[r]),s[r]=o,t=!0)}t&&n()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return u.registrationNameModules[t.registrationName]||null;for(var n in t.phasedRegistrationNames)if(t.phasedRegistrationNames.hasOwnProperty(n)){var r=u.registrationNameModules[t.phasedRegistrationNames[n]];if(r)return r}return null},_resetEventPlugins:function(){a=null;for(var e in s)s.hasOwnProperty(e)&&delete s[e];u.plugins.length=0;var t=u.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=u.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};t.exports=u},{147:147}],20:[function(e,t){"use strict";function n(e){return e===m.topMouseUp||e===m.topTouchEnd||e===m.topTouchCancel}function r(e){return e===m.topMouseMove||e===m.topTouchMove}function o(e){return e===m.topMouseDown||e===m.topTouchStart}function i(e,t){var n=e._dispatchListeners,r=e._dispatchIDs;if(Array.isArray(n))for(var o=0;o<n.length&&!e.isPropagationStopped();o++)t(e,n[o],r[o]);else n&&t(e,n,r)}function a(e,t,n){e.currentTarget=h.Mount.getNode(n);var r=t(e,n);return e.currentTarget=null,r}function s(e,t){i(e,t),e._dispatchListeners=null,e._dispatchIDs=null}function u(e){var t=e._dispatchListeners,n=e._dispatchIDs;if(Array.isArray(t)){for(var r=0;r<t.length&&!e.isPropagationStopped();r++)if(t[r](e,n[r]))return n[r]}else if(t&&t(e,n))return n;return null}function l(e){var t=u(e);return e._dispatchIDs=null,e._dispatchListeners=null,t}function c(e){var t=e._dispatchListeners,n=e._dispatchIDs;f(!Array.isArray(t));var r=t?t(e,n):null;return e._dispatchListeners=null,e._dispatchIDs=null,r}function p(e){return!!e._dispatchListeners}var d=e(16),f=e(147),h={Mount:null,injectMount:function(e){h.Mount=e}},m=d.topLevelTypes,v={isEndish:n,isMoveish:r,isStartish:o,executeDirectDispatch:c,executeDispatch:a,executeDispatchesInOrder:s,executeDispatchesInOrderStopAtTrue:l,hasDispatches:p,injection:h,useTouchEvents:!1};t.exports=v},{147:147,16:16}],21:[function(e,t){"use strict";function n(e,t,n){var r=t.dispatchConfig.phasedRegistrationNames[n];return m(e,r)}function r(e,t,r){var o=t?h.bubbled:h.captured,i=n(e,r,o);i&&(r._dispatchListeners=d(r._dispatchListeners,i),r._dispatchIDs=d(r._dispatchIDs,e))}function o(e){e&&e.dispatchConfig.phasedRegistrationNames&&p.injection.getInstanceHandle().traverseTwoPhase(e.dispatchMarker,r,e)}function i(e,t,n){if(n&&n.dispatchConfig.registrationName){var r=n.dispatchConfig.registrationName,o=m(e,r);o&&(n._dispatchListeners=d(n._dispatchListeners,o),n._dispatchIDs=d(n._dispatchIDs,e))}}function a(e){e&&e.dispatchConfig.registrationName&&i(e.dispatchMarker,null,e)}function s(e){f(e,o)}function u(e,t,n,r){p.injection.getInstanceHandle().traverseEnterLeave(n,r,i,e,t)}function l(e){f(e,a)}var c=e(16),p=e(18),d=e(115),f=e(132),h=c.PropagationPhases,m=p.getListener,v={accumulateTwoPhaseDispatches:s,accumulateDirectDispatches:l,accumulateEnterLeaveDispatches:u};t.exports=v},{115:115,132:132,16:16,18:18}],22:[function(e,t){"use strict";var n=!("undefined"==typeof window||!window.document||!window.document.createElement),r={canUseDOM:n,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:n&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:n&&!!window.screen,isInWorker:!n};t.exports=r},{}],23:[function(e,t){"use strict";function n(e){this._root=e,this._startText=this.getText(),this._fallbackText=null}var r=e(30),o=e(29),i=e(142);o(n.prototype,{getText:function(){return"value"in this._root?this._root.value:this._root[i()]},getData:function(){if(this._fallbackText)return this._fallbackText;var e,t,n=this._startText,r=n.length,o=this.getText(),i=o.length;for(e=0;r>e&&n[e]===o[e];e++);var a=r-e;for(t=1;a>=t&&n[r-t]===o[i-t];t++);var s=t>1?1-t:void 0;return this._fallbackText=o.slice(e,s),this._fallbackText}}),r.addPoolingTo(n),t.exports=n},{142:142,29:29,30:30}],24:[function(e,t){"use strict";var n,r=e(11),o=e(22),i=r.injection.MUST_USE_ATTRIBUTE,a=r.injection.MUST_USE_PROPERTY,s=r.injection.HAS_BOOLEAN_VALUE,u=r.injection.HAS_SIDE_EFFECTS,l=r.injection.HAS_NUMERIC_VALUE,c=r.injection.HAS_POSITIVE_NUMERIC_VALUE,p=r.injection.HAS_OVERLOADED_BOOLEAN_VALUE;if(o.canUseDOM){var d=document.implementation;n=d&&d.hasFeature&&d.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")}var f={isCustomAttribute:RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),Properties:{accept:null,acceptCharset:null,accessKey:null,action:null,allowFullScreen:i|s,allowTransparency:i,alt:null,async:s,autoComplete:null,autoPlay:s,cellPadding:null,cellSpacing:null,charSet:i,checked:a|s,classID:i,className:n?i:a,cols:i|c,colSpan:null,content:null,contentEditable:null,contextMenu:i,controls:a|s,coords:null,crossOrigin:null,data:null,dateTime:i,defer:s,dir:null,disabled:i|s,download:p,draggable:null,encType:null,form:i,formAction:i,formEncType:i,formMethod:i,formNoValidate:s,formTarget:i,frameBorder:i,headers:null,height:i,hidden:i|s,href:null,hrefLang:null,htmlFor:null,httpEquiv:null,icon:null,id:a,label:null,lang:null,list:i,loop:a|s,manifest:i,marginHeight:null,marginWidth:null,max:null,maxLength:i,media:i,mediaGroup:null,method:null,min:null,multiple:a|s,muted:a|s,name:null,noValidate:s,open:s,pattern:null,placeholder:null,poster:null,preload:null,radioGroup:null,readOnly:a|s,rel:null,required:s,role:i,rows:i|c,rowSpan:null,sandbox:null,scope:null,scrolling:null,seamless:i|s,selected:a|s,shape:null,size:i|c,sizes:i,span:c,spellCheck:null,src:null,srcDoc:a,srcSet:i,start:l,step:null,style:null,tabIndex:null,target:null,title:null,type:null,useMap:null,value:a|u,width:i,wmode:i,autoCapitalize:null,autoCorrect:null,itemProp:i,itemScope:i|s,itemType:i,itemID:i,itemRef:i,property:null},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{autoCapitalize:"autocapitalize",autoComplete:"autocomplete",autoCorrect:"autocorrect",autoFocus:"autofocus",autoPlay:"autoplay",encType:"encoding",hrefLang:"hreflang",radioGroup:"radiogroup",spellCheck:"spellcheck",srcDoc:"srcdoc",srcSet:"srcset"}};t.exports=f},{11:11,22:22}],25:[function(e,t){"use strict";var n=e(73),r=e(92),o={linkState:function(e){return new n(this.state[e],r.createStateKeySetter(this,e))}};t.exports=o},{73:73,92:92}],26:[function(e,t){"use strict";function n(e){u(null==e.props.checkedLink||null==e.props.valueLink)}function r(e){n(e),u(null==e.props.value&&null==e.props.onChange)}function o(e){n(e),u(null==e.props.checked&&null==e.props.onChange)}function i(e){this.props.valueLink.requestChange(e.target.value)}function a(e){this.props.checkedLink.requestChange(e.target.checked)}var s=e(84),u=e(147),l={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0},c={Mixin:{propTypes:{value:function(e,t){return!e[t]||l[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t){return!e[t]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:s.func}},getValue:function(e){return e.props.valueLink?(r(e),e.props.valueLink.value):e.props.value},getChecked:function(e){return e.props.checkedLink?(o(e),e.props.checkedLink.value):e.props.checked},getOnChange:function(e){return e.props.valueLink?(r(e),i):e.props.checkedLink?(o(e),a):e.props.onChange}};t.exports=c},{147:147,84:84}],27:[function(e,t){"use strict";function n(e){e.remove()}var r=e(33),o=e(115),i=e(132),a=e(147),s={trapBubbledEvent:function(e,t){a(this.isMounted());var n=this.getDOMNode();a(n);var i=r.trapBubbledEvent(e,t,n);this._localEventListeners=o(this._localEventListeners,i)},componentWillUnmount:function(){this._localEventListeners&&i(this._localEventListeners,n)}};t.exports=s},{115:115,132:132,147:147,33:33}],28:[function(e,t){"use strict";var n=e(16),r=e(126),o=n.topLevelTypes,i={eventTypes:null,extractEvents:function(e,t,n,i){if(e===o.topTouchStart){var a=i.target;a&&!a.onclick&&(a.onclick=r)}}};t.exports=i},{126:126,16:16}],29:[function(e,t){"use strict";function n(e){if(null==e)throw new TypeError("Object.assign target cannot be null or undefined");for(var t=Object(e),n=Object.prototype.hasOwnProperty,r=1;r<arguments.length;r++){var o=arguments[r];if(null!=o){var i=Object(o);for(var a in i)n.call(i,a)&&(t[a]=i[a])}}return t}t.exports=n},{}],30:[function(e,t){"use strict";var n=e(147),r=function(e){var t=this;if(t.instancePool.length){var n=t.instancePool.pop();return t.call(n,e),n}return new t(e)},o=function(e,t){var n=this;if(n.instancePool.length){var r=n.instancePool.pop();return n.call(r,e,t),r}return new n(e,t)},i=function(e,t,n){var r=this;if(r.instancePool.length){var o=r.instancePool.pop();return r.call(o,e,t,n),o}return new r(e,t,n)},a=function(e,t,n,r,o){var i=this;if(i.instancePool.length){var a=i.instancePool.pop();return i.call(a,e,t,n,r,o),a}return new i(e,t,n,r,o)},s=function(e){var t=this;n(e instanceof t),e.destructor&&e.destructor(),t.instancePool.length<t.poolSize&&t.instancePool.push(e)},u=10,l=r,c=function(e,t){var n=e;return n.instancePool=[],n.getPooled=t||l,n.poolSize||(n.poolSize=u),n.release=s,n},p={addPoolingTo:c,oneArgumentPooler:r,twoArgumentPooler:o,threeArgumentPooler:i,fiveArgumentPooler:a};t.exports=p},{147:147}],31:[function(e,t){"use strict";var n=e(20),r=e(37),o=e(39),i=e(38),a=e(44),s=e(45),u=e(61),l=(e(62),e(46)),c=e(57),p=e(60),d=e(70),f=e(75),h=e(80),m=e(84),v=e(87),g=e(90),y=e(29),C=e(129),E=e(157);p.inject();var b=u.createElement,_=u.createFactory,x=u.cloneElement,D=h.measure("React","render",f.render),M={Children:{map:r.map,forEach:r.forEach,count:r.count,only:E},Component:o,DOM:l,PropTypes:m,initializeTouchEvents:function(e){n.useTouchEvents=e},createClass:i.createClass,createElement:b,cloneElement:x,createFactory:_,createMixin:function(e){return e},constructAndRenderComponent:f.constructAndRenderComponent,constructAndRenderComponentByID:f.constructAndRenderComponentByID,findDOMNode:C,render:D,renderToString:g.renderToString,renderToStaticMarkup:g.renderToStaticMarkup,unmountComponentAtNode:f.unmountComponentAtNode,isValidElement:u.isValidElement,withContext:a.withContext,__spread:y};"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({CurrentOwner:s,InstanceHandles:d,Mount:f,Reconciler:v,TextComponent:c});M.version="0.13.1",t.exports=M},{129:129,157:157,20:20,29:29,37:37,38:38,39:39,44:44,45:45,46:46,57:57,60:60,61:61,62:62,70:70,75:75,80:80,84:84,87:87,90:90}],32:[function(e,t){"use strict";var n=e(129),r={getDOMNode:function(){return n(this)}};t.exports=r},{129:129}],33:[function(e,t){"use strict";function n(e){return Object.prototype.hasOwnProperty.call(e,h)||(e[h]=d++,c[e[h]]={}),c[e[h]]}var r=e(16),o=e(18),i=e(19),a=e(65),s=e(114),u=e(29),l=e(148),c={},p=!1,d=0,f={topBlur:"blur",topChange:"change",topClick:"click",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topScroll:"scroll",topSelectionChange:"selectionchange",topTextInput:"textInput",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topWheel:"wheel"},h="_reactListenersID"+String(Math.random()).slice(2),m=u({},a,{ReactEventListener:null,injection:{injectReactEventListener:function(e){e.setHandleTopLevel(m.handleTopLevel),m.ReactEventListener=e}},setEnabled:function(e){m.ReactEventListener&&m.ReactEventListener.setEnabled(e)},isEnabled:function(){return!(!m.ReactEventListener||!m.ReactEventListener.isEnabled())},listenTo:function(e,t){for(var o=t,a=n(o),s=i.registrationNameDependencies[e],u=r.topLevelTypes,c=0,p=s.length;p>c;c++){var d=s[c];
-a.hasOwnProperty(d)&&a[d]||(d===u.topWheel?l("wheel")?m.ReactEventListener.trapBubbledEvent(u.topWheel,"wheel",o):l("mousewheel")?m.ReactEventListener.trapBubbledEvent(u.topWheel,"mousewheel",o):m.ReactEventListener.trapBubbledEvent(u.topWheel,"DOMMouseScroll",o):d===u.topScroll?l("scroll",!0)?m.ReactEventListener.trapCapturedEvent(u.topScroll,"scroll",o):m.ReactEventListener.trapBubbledEvent(u.topScroll,"scroll",m.ReactEventListener.WINDOW_HANDLE):d===u.topFocus||d===u.topBlur?(l("focus",!0)?(m.ReactEventListener.trapCapturedEvent(u.topFocus,"focus",o),m.ReactEventListener.trapCapturedEvent(u.topBlur,"blur",o)):l("focusin")&&(m.ReactEventListener.trapBubbledEvent(u.topFocus,"focusin",o),m.ReactEventListener.trapBubbledEvent(u.topBlur,"focusout",o)),a[u.topBlur]=!0,a[u.topFocus]=!0):f.hasOwnProperty(d)&&m.ReactEventListener.trapBubbledEvent(d,f[d],o),a[d]=!0)}},trapBubbledEvent:function(e,t,n){return m.ReactEventListener.trapBubbledEvent(e,t,n)},trapCapturedEvent:function(e,t,n){return m.ReactEventListener.trapCapturedEvent(e,t,n)},ensureScrollValueMonitoring:function(){if(!p){var e=s.refreshScrollValues;m.ReactEventListener.monitorScrollValue(e),p=!0}},eventNameDispatchConfigs:o.eventNameDispatchConfigs,registrationNameModules:o.registrationNameModules,putListener:o.putListener,getListener:o.getListener,deleteListener:o.deleteListener,deleteAllListeners:o.deleteAllListeners});t.exports=m},{114:114,148:148,16:16,18:18,19:19,29:29,65:65}],34:[function(e,t){"use strict";var n=e(31),r=e(29),o=n.createFactory(e(95)),i=n.createFactory(e(35)),a=n.createClass({displayName:"ReactCSSTransitionGroup",propTypes:{transitionName:n.PropTypes.string.isRequired,transitionAppear:n.PropTypes.bool,transitionEnter:n.PropTypes.bool,transitionLeave:n.PropTypes.bool},getDefaultProps:function(){return{transitionAppear:!1,transitionEnter:!0,transitionLeave:!0}},_wrapChild:function(e){return i({name:this.props.transitionName,appear:this.props.transitionAppear,enter:this.props.transitionEnter,leave:this.props.transitionLeave},e)},render:function(){return o(r({},this.props,{childFactory:this._wrapChild}))}});t.exports=a},{29:29,31:31,35:35,95:95}],35:[function(e,t){"use strict";var n=e(31),r=e(4),o=e(94),i=e(157),a=(e(166),17),s=n.createClass({displayName:"ReactCSSTransitionGroupChild",transition:function(e,t){var n=this.getDOMNode(),i=this.props.name+"-"+e,a=i+"-active",s=function(e){e&&e.target!==n||(r.removeClass(n,i),r.removeClass(n,a),o.removeEndEventListener(n,s),t&&t())};o.addEndEventListener(n,s),r.addClass(n,i),this.queueClass(a)},queueClass:function(e){this.classNameQueue.push(e),this.timeout||(this.timeout=setTimeout(this.flushClassNameQueue,a))},flushClassNameQueue:function(){this.isMounted()&&this.classNameQueue.forEach(r.addClass.bind(r,this.getDOMNode())),this.classNameQueue.length=0,this.timeout=null},componentWillMount:function(){this.classNameQueue=[]},componentWillUnmount:function(){this.timeout&&clearTimeout(this.timeout)},componentWillAppear:function(e){this.props.appear?this.transition("appear",e):e()},componentWillEnter:function(e){this.props.enter?this.transition("enter",e):e()},componentWillLeave:function(e){this.props.leave?this.transition("leave",e):e()},render:function(){return i(this.props.children)}});t.exports=s},{157:157,166:166,31:31,4:4,94:94}],36:[function(e,t){"use strict";var n=e(87),r=e(130),o=e(146),i=e(162),a={instantiateChildren:function(e){var t=r(e);for(var n in t)if(t.hasOwnProperty(n)){var i=t[n],a=o(i,null);t[n]=a}return t},updateChildren:function(e,t,a,s){var u=r(t);if(!u&&!e)return null;var l;for(l in u)if(u.hasOwnProperty(l)){var c=e&&e[l],p=c&&c._currentElement,d=u[l];if(i(p,d))n.receiveComponent(c,d,a,s),u[l]=c;else{c&&n.unmountComponent(c,l);var f=o(d,null);u[l]=f}}for(l in e)!e.hasOwnProperty(l)||u&&u.hasOwnProperty(l)||n.unmountComponent(e[l]);return u},unmountChildren:function(e){for(var t in e){var r=e[t];n.unmountComponent(r)}}};t.exports=a},{130:130,146:146,162:162,87:87}],37:[function(e,t){"use strict";function n(e,t){this.forEachFunction=e,this.forEachContext=t}function r(e,t,n,r){var o=e;o.forEachFunction.call(o.forEachContext,t,r)}function o(e,t,o){if(null==e)return e;var i=n.getPooled(t,o);d(e,r,i),n.release(i)}function i(e,t,n){this.mapResult=e,this.mapFunction=t,this.mapContext=n}function a(e,t,n,r){var o=e,i=o.mapResult,a=!i.hasOwnProperty(n);if(a){var s=o.mapFunction.call(o.mapContext,t,r);i[n]=s}}function s(e,t,n){if(null==e)return e;var r={},o=i.getPooled(r,t,n);return d(e,a,o),i.release(o),p.create(r)}function u(){return null}function l(e){return d(e,u,null)}var c=e(30),p=e(67),d=e(164),f=(e(166),c.twoArgumentPooler),h=c.threeArgumentPooler;c.addPoolingTo(n,f),c.addPoolingTo(i,h);var m={forEach:o,map:s,count:l};t.exports=m},{164:164,166:166,30:30,67:67}],38:[function(e,t){"use strict";function n(e,t){var n=x.hasOwnProperty(t)?x[t]:null;M.hasOwnProperty(t)&&g(n===b.OVERRIDE_BASE),e.hasOwnProperty(t)&&g(n===b.DEFINE_MANY||n===b.DEFINE_MANY_MERGED)}function r(e,t){if(t){g("function"!=typeof t),g(!p.isValidElement(t));var r=e.prototype;t.hasOwnProperty(E)&&D.mixins(e,t.mixins);for(var o in t)if(t.hasOwnProperty(o)&&o!==E){var i=t[o];if(n(r,o),D.hasOwnProperty(o))D[o](e,i);else{var u=x.hasOwnProperty(o),l=r.hasOwnProperty(o),c=i&&i.__reactDontBind,d="function"==typeof i,f=d&&!u&&!l&&!c;if(f)r.__reactAutoBindMap||(r.__reactAutoBindMap={}),r.__reactAutoBindMap[o]=i,r[o]=i;else if(l){var h=x[o];g(u&&(h===b.DEFINE_MANY_MERGED||h===b.DEFINE_MANY)),h===b.DEFINE_MANY_MERGED?r[o]=a(r[o],i):h===b.DEFINE_MANY&&(r[o]=s(r[o],i))}else r[o]=i}}}}function o(e,t){if(t)for(var n in t){var r=t[n];if(t.hasOwnProperty(n)){var o=n in D;g(!o);var i=n in e;g(!i),e[n]=r}}}function i(e,t){g(e&&t&&"object"==typeof e&&"object"==typeof t);for(var n in t)t.hasOwnProperty(n)&&(g(void 0===e[n]),e[n]=t[n]);return e}function a(e,t){return function(){var n=e.apply(this,arguments),r=t.apply(this,arguments);if(null==n)return r;if(null==r)return n;var o={};return i(o,n),i(o,r),o}}function s(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function u(e,t){var n=t.bind(e);return n}function l(e){for(var t in e.__reactAutoBindMap)if(e.__reactAutoBindMap.hasOwnProperty(t)){var n=e.__reactAutoBindMap[t];e[t]=u(e,d.guard(n,e.constructor.displayName+"."+t))}}var c=e(39),p=(e(45),e(61)),d=e(64),f=e(71),h=e(72),m=(e(83),e(82),e(96)),v=e(29),g=e(147),y=e(153),C=e(154),E=(e(166),C({mixins:null})),b=y({DEFINE_ONCE:null,DEFINE_MANY:null,OVERRIDE_BASE:null,DEFINE_MANY_MERGED:null}),_=[],x={mixins:b.DEFINE_MANY,statics:b.DEFINE_MANY,propTypes:b.DEFINE_MANY,contextTypes:b.DEFINE_MANY,childContextTypes:b.DEFINE_MANY,getDefaultProps:b.DEFINE_MANY_MERGED,getInitialState:b.DEFINE_MANY_MERGED,getChildContext:b.DEFINE_MANY_MERGED,render:b.DEFINE_ONCE,componentWillMount:b.DEFINE_MANY,componentDidMount:b.DEFINE_MANY,componentWillReceiveProps:b.DEFINE_MANY,shouldComponentUpdate:b.DEFINE_ONCE,componentWillUpdate:b.DEFINE_MANY,componentDidUpdate:b.DEFINE_MANY,componentWillUnmount:b.DEFINE_MANY,updateComponent:b.OVERRIDE_BASE},D={displayName:function(e,t){e.displayName=t},mixins:function(e,t){if(t)for(var n=0;n<t.length;n++)r(e,t[n])},childContextTypes:function(e,t){e.childContextTypes=v({},e.childContextTypes,t)},contextTypes:function(e,t){e.contextTypes=v({},e.contextTypes,t)},getDefaultProps:function(e,t){e.getDefaultProps=e.getDefaultProps?a(e.getDefaultProps,t):t},propTypes:function(e,t){e.propTypes=v({},e.propTypes,t)},statics:function(e,t){o(e,t)}},M={replaceState:function(e,t){m.enqueueReplaceState(this,e),t&&m.enqueueCallback(this,t)},isMounted:function(){var e=f.get(this);return e&&e!==h.currentlyMountingInstance},setProps:function(e,t){m.enqueueSetProps(this,e),t&&m.enqueueCallback(this,t)},replaceProps:function(e,t){m.enqueueReplaceProps(this,e),t&&m.enqueueCallback(this,t)}},T=function(){};v(T.prototype,c.prototype,M);var N={createClass:function(e){var t=function(e,t){this.__reactAutoBindMap&&l(this),this.props=e,this.context=t,this.state=null;var n=this.getInitialState?this.getInitialState():null;g("object"==typeof n&&!Array.isArray(n)),this.state=n};t.prototype=new T,t.prototype.constructor=t,_.forEach(r.bind(null,t)),r(t,e),t.getDefaultProps&&(t.defaultProps=t.getDefaultProps()),g(t.prototype.render);for(var n in x)t.prototype[n]||(t.prototype[n]=null);return t.type=t,t},injection:{injectMixin:function(e){_.push(e)}}};t.exports=N},{147:147,153:153,154:154,166:166,29:29,39:39,45:45,61:61,64:64,71:71,72:72,82:82,83:83,96:96}],39:[function(e,t){"use strict";function n(e,t){this.props=e,this.context=t}{var r=e(96),o=e(147);e(166)}n.prototype.setState=function(e,t){o("object"==typeof e||"function"==typeof e||null==e),r.enqueueSetState(this,e),t&&r.enqueueCallback(this,t)},n.prototype.forceUpdate=function(e){r.enqueueForceUpdate(this),e&&r.enqueueCallback(this,e)};t.exports=n},{147:147,166:166,96:96}],40:[function(e,t){"use strict";var n=e(50),r=e(75),o={processChildrenUpdates:n.dangerouslyProcessChildrenUpdates,replaceNodeWithMarkupByID:n.dangerouslyReplaceNodeWithMarkupByID,unmountIDFromEnvironment:function(e){r.purgeID(e)}};t.exports=o},{50:50,75:75}],41:[function(e,t){"use strict";var n=e(147),r=!1,o={unmountIDFromEnvironment:null,replaceNodeWithMarkupByID:null,processChildrenUpdates:null,injection:{injectEnvironment:function(e){n(!r),o.unmountIDFromEnvironment=e.unmountIDFromEnvironment,o.replaceNodeWithMarkupByID=e.replaceNodeWithMarkupByID,o.processChildrenUpdates=e.processChildrenUpdates,r=!0}}};t.exports=o},{147:147}],42:[function(e,t){"use strict";var n=e(161),r={shouldComponentUpdate:function(e,t){return!n(this.props,e)||!n(this.state,t)}};t.exports=r},{161:161}],43:[function(e,t){"use strict";function n(e){var t=e._currentElement._owner||null;if(t){var n=t.getName();if(n)return" Check the render method of `"+n+"`."}return""}var r=e(41),o=e(44),i=e(45),a=e(61),s=(e(62),e(71)),u=e(72),l=e(78),c=e(80),p=e(83),d=(e(82),e(87)),f=e(97),h=e(29),m=e(127),v=e(147),g=e(162),y=(e(166),1),C={construct:function(e){this._currentElement=e,this._rootNodeID=null,this._instance=null,this._pendingElement=null,this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._renderedComponent=null,this._context=null,this._mountOrder=0,this._isTopLevel=!1,this._pendingCallbacks=null},mountComponent:function(e,t,n){this._context=n,this._mountOrder=y++,this._rootNodeID=e;var r=this._processProps(this._currentElement.props),o=this._processContext(this._currentElement._context),i=l.getComponentClassForElement(this._currentElement),a=new i(r,o);a.props=r,a.context=o,a.refs=m,this._instance=a,s.set(a,this);var c=a.state;void 0===c&&(a.state=c=null),v("object"==typeof c&&!Array.isArray(c)),this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1;var p,f=u.currentlyMountingInstance;u.currentlyMountingInstance=this;try{a.componentWillMount&&(a.componentWillMount(),this._pendingStateQueue&&(a.state=this._processPendingState(a.props,a.context))),p=this._renderValidatedComponent()}finally{u.currentlyMountingInstance=f}this._renderedComponent=this._instantiateReactComponent(p,this._currentElement.type);var h=d.mountComponent(this._renderedComponent,e,t,this._processChildContext(n));return a.componentDidMount&&t.getReactMountReady().enqueue(a.componentDidMount,a),h},unmountComponent:function(){var e=this._instance;if(e.componentWillUnmount){var t=u.currentlyUnmountingInstance;u.currentlyUnmountingInstance=this;try{e.componentWillUnmount()}finally{u.currentlyUnmountingInstance=t}}d.unmountComponent(this._renderedComponent),this._renderedComponent=null,this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._pendingCallbacks=null,this._pendingElement=null,this._context=null,this._rootNodeID=null,s.remove(e)},_setPropsInternal:function(e,t){var n=this._pendingElement||this._currentElement;this._pendingElement=a.cloneAndReplaceProps(n,h({},n.props,e)),f.enqueueUpdate(this,t)},_maskContext:function(e){var t=null;if("string"==typeof this._currentElement.type)return m;var n=this._currentElement.type.contextTypes;if(!n)return m;t={};for(var r in n)t[r]=e[r];return t},_processContext:function(e){var t=this._maskContext(e);return t},_processChildContext:function(e){var t=this._instance,n=t.getChildContext&&t.getChildContext();if(n){v("object"==typeof t.constructor.childContextTypes);for(var r in n)v(r in t.constructor.childContextTypes);return h({},e,n)}return e},_processProps:function(e){return e},_checkPropTypes:function(e,t,r){var o=this.getName();for(var i in e)if(e.hasOwnProperty(i)){var a;try{v("function"==typeof e[i]),a=e[i](t,i,o,r)}catch(s){a=s}a instanceof Error&&(n(this),r===p.prop)}},receiveComponent:function(e,t,n){var r=this._currentElement,o=this._context;this._pendingElement=null,this.updateComponent(t,r,e,o,n)},performUpdateIfNecessary:function(e){null!=this._pendingElement&&d.receiveComponent(this,this._pendingElement||this._currentElement,e,this._context),(null!==this._pendingStateQueue||this._pendingForceUpdate)&&this.updateComponent(e,this._currentElement,this._currentElement,this._context,this._context)},_warnIfContextsDiffer:function(e,t){e=this._maskContext(e),t=this._maskContext(t);for(var n=Object.keys(t).sort(),r=(this.getName()||"ReactCompositeComponent",0);r<n.length;r++)n[r]},updateComponent:function(e,t,n,r,o){var i=this._instance,a=i.context,s=i.props;t!==n&&(a=this._processContext(n._context),s=this._processProps(n.props),i.componentWillReceiveProps&&i.componentWillReceiveProps(s,a));var u=this._processPendingState(s,a),l=this._pendingForceUpdate||!i.shouldComponentUpdate||i.shouldComponentUpdate(s,u,a);l?(this._pendingForceUpdate=!1,this._performComponentUpdate(n,s,u,a,e,o)):(this._currentElement=n,this._context=o,i.props=s,i.state=u,i.context=a)},_processPendingState:function(e,t){var n=this._instance,r=this._pendingStateQueue,o=this._pendingReplaceState;if(this._pendingReplaceState=!1,this._pendingStateQueue=null,!r)return n.state;for(var i=h({},o?r[0]:n.state),a=o?1:0;a<r.length;a++){var s=r[a];h(i,"function"==typeof s?s.call(n,i,e,t):s)}return i},_performComponentUpdate:function(e,t,n,r,o,i){var a=this._instance,s=a.props,u=a.state,l=a.context;a.componentWillUpdate&&a.componentWillUpdate(t,n,r),this._currentElement=e,this._context=i,a.props=t,a.state=n,a.context=r,this._updateRenderedComponent(o,i),a.componentDidUpdate&&o.getReactMountReady().enqueue(a.componentDidUpdate.bind(a,s,u,l),a)},_updateRenderedComponent:function(e,t){var n=this._renderedComponent,r=n._currentElement,o=this._renderValidatedComponent();if(g(r,o))d.receiveComponent(n,o,e,this._processChildContext(t));else{var i=this._rootNodeID,a=n._rootNodeID;d.unmountComponent(n),this._renderedComponent=this._instantiateReactComponent(o,this._currentElement.type);var s=d.mountComponent(this._renderedComponent,i,e,t);this._replaceNodeWithMarkupByID(a,s)}},_replaceNodeWithMarkupByID:function(e,t){r.replaceNodeWithMarkupByID(e,t)},_renderValidatedComponentWithoutOwnerOrContext:function(){var e=this._instance,t=e.render();return t},_renderValidatedComponent:function(){var e,t=o.current;o.current=this._processChildContext(this._currentElement._context),i.current=this;try{e=this._renderValidatedComponentWithoutOwnerOrContext()}finally{o.current=t,i.current=null}return v(null===e||e===!1||a.isValidElement(e)),e},attachRef:function(e,t){var n=this.getPublicInstance(),r=n.refs===m?n.refs={}:n.refs;r[e]=t.getPublicInstance()},detachRef:function(e){var t=this.getPublicInstance().refs;delete t[e]},getName:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displayName||e.name||t&&t.name||null},getPublicInstance:function(){return this._instance},_instantiateReactComponent:null};c.measureMethods(C,"ReactCompositeComponent",{mountComponent:"mountComponent",updateComponent:"updateComponent",_renderValidatedComponent:"_renderValidatedComponent"});var E={Mixin:C};t.exports=E},{127:127,147:147,162:162,166:166,29:29,41:41,44:44,45:45,61:61,62:62,71:71,72:72,78:78,80:80,82:82,83:83,87:87,97:97}],44:[function(e,t){"use strict";var n=e(29),r=e(127),o=(e(166),{current:r,withContext:function(e,t){var r,i=o.current;o.current=n({},i,e);try{r=t()}finally{o.current=i}return r}});t.exports=o},{127:127,166:166,29:29}],45:[function(e,t){"use strict";var n={current:null};t.exports=n},{}],46:[function(e,t){"use strict";function n(e){return r.createFactory(e)}var r=e(61),o=(e(62),e(155)),i=o({a:"a",abbr:"abbr",address:"address",area:"area",article:"article",aside:"aside",audio:"audio",b:"b",base:"base",bdi:"bdi",bdo:"bdo",big:"big",blockquote:"blockquote",body:"body",br:"br",button:"button",canvas:"canvas",caption:"caption",cite:"cite",code:"code",col:"col",colgroup:"colgroup",data:"data",datalist:"datalist",dd:"dd",del:"del",details:"details",dfn:"dfn",dialog:"dialog",div:"div",dl:"dl",dt:"dt",em:"em",embed:"embed",fieldset:"fieldset",figcaption:"figcaption",figure:"figure",footer:"footer",form:"form",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",head:"head",header:"header",hr:"hr",html:"html",i:"i",iframe:"iframe",img:"img",input:"input",ins:"ins",kbd:"kbd",keygen:"keygen",label:"label",legend:"legend",li:"li",link:"link",main:"main",map:"map",mark:"mark",menu:"menu",menuitem:"menuitem",meta:"meta",meter:"meter",nav:"nav",noscript:"noscript",object:"object",ol:"ol",optgroup:"optgroup",option:"option",output:"output",p:"p",param:"param",picture:"picture",pre:"pre",progress:"progress",q:"q",rp:"rp",rt:"rt",ruby:"ruby",s:"s",samp:"samp",script:"script",section:"section",select:"select",small:"small",source:"source",span:"span",strong:"strong",style:"style",sub:"sub",summary:"summary",sup:"sup",table:"table",tbody:"tbody",td:"td",textarea:"textarea",tfoot:"tfoot",th:"th",thead:"thead",time:"time",title:"title",tr:"tr",track:"track",u:"u",ul:"ul","var":"var",video:"video",wbr:"wbr",circle:"circle",defs:"defs",ellipse:"ellipse",g:"g",line:"line",linearGradient:"linearGradient",mask:"mask",path:"path",pattern:"pattern",polygon:"polygon",polyline:"polyline",radialGradient:"radialGradient",rect:"rect",stop:"stop",svg:"svg",text:"text",tspan:"tspan"},n);t.exports=i},{155:155,61:61,62:62}],47:[function(e,t){"use strict";var n=e(2),r=e(32),o=e(38),i=e(61),a=e(153),s=i.createFactory("button"),u=a({onClick:!0,onDoubleClick:!0,onMouseDown:!0,onMouseMove:!0,onMouseUp:!0,onClickCapture:!0,onDoubleClickCapture:!0,onMouseDownCapture:!0,onMouseMoveCapture:!0,onMouseUpCapture:!0}),l=o.createClass({displayName:"ReactDOMButton",tagName:"BUTTON",mixins:[n,r],render:function(){var e={};for(var t in this.props)!this.props.hasOwnProperty(t)||this.props.disabled&&u[t]||(e[t]=this.props[t]);return s(e,this.props.children)}});t.exports=l},{153:153,2:2,32:32,38:38,61:61}],48:[function(e,t){"use strict";function n(e){e&&(null!=e.dangerouslySetInnerHTML&&(v(null==e.children),v(null!=e.dangerouslySetInnerHTML.__html)),v(null==e.style||"object"==typeof e.style))}function r(e,t,n,r){var o=p.findReactContainerForID(e);if(o){var i=o.nodeType===x?o.ownerDocument:o;C(t,i)}r.getPutListenerQueue().enqueuePutListener(e,t,n)}function o(e){P.call(N,e)||(v(T.test(e)),N[e]=!0)}function i(e){o(e),this._tag=e,this._renderedChildren=null,this._previousStyleCopy=null,this._rootNodeID=null}var a=e(6),s=e(11),u=e(12),l=e(33),c=e(40),p=e(75),d=e(76),f=e(80),h=e(29),m=e(128),v=e(147),g=(e(148),e(154)),y=(e(166),l.deleteListener),C=l.listenTo,E=l.registrationNameModules,b={string:!0,number:!0},_=g({style:null}),x=1,D=null,M={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},T=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,N={},P={}.hasOwnProperty;i.displayName="ReactDOMComponent",i.Mixin={construct:function(e){this._currentElement=e},mountComponent:function(e,t,r){this._rootNodeID=e,n(this._currentElement.props);var o=M[this._tag]?"":"</"+this._tag+">";return this._createOpenTagMarkupAndPutListeners(t)+this._createContentMarkup(t,r)+o},_createOpenTagMarkupAndPutListeners:function(e){var t=this._currentElement.props,n="<"+this._tag;for(var o in t)if(t.hasOwnProperty(o)){var i=t[o];if(null!=i)if(E.hasOwnProperty(o))r(this._rootNodeID,o,i,e);else{o===_&&(i&&(i=this._previousStyleCopy=h({},t.style)),i=a.createMarkupForStyles(i));var s=u.createMarkupForProperty(o,i);s&&(n+=" "+s)}}if(e.renderToStaticMarkup)return n+">";var l=u.createMarkupForID(this._rootNodeID);return n+" "+l+">"},_createContentMarkup:function(e,t){var n="";("listing"===this._tag||"pre"===this._tag||"textarea"===this._tag)&&(n="\n");var r=this._currentElement.props,o=r.dangerouslySetInnerHTML;if(null!=o){if(null!=o.__html)return n+o.__html}else{var i=b[typeof r.children]?r.children:null,a=null!=i?null:r.children;if(null!=i)return n+m(i);if(null!=a){var s=this.mountChildren(a,e,t);return n+s.join("")}}return n},receiveComponent:function(e,t,n){var r=this._currentElement;this._currentElement=e,this.updateComponent(t,r,e,n)},updateComponent:function(e,t,r,o){n(this._currentElement.props),this._updateDOMProperties(t.props,e),this._updateDOMChildren(t.props,e,o)},_updateDOMProperties:function(e,t){var n,o,i,a=this._currentElement.props;for(n in e)if(!a.hasOwnProperty(n)&&e.hasOwnProperty(n))if(n===_){var u=this._previousStyleCopy;for(o in u)u.hasOwnProperty(o)&&(i=i||{},i[o]="");this._previousStyleCopy=null}else E.hasOwnProperty(n)?y(this._rootNodeID,n):(s.isStandardName[n]||s.isCustomAttribute(n))&&D.deletePropertyByID(this._rootNodeID,n);for(n in a){var l=a[n],c=n===_?this._previousStyleCopy:e[n];if(a.hasOwnProperty(n)&&l!==c)if(n===_)if(l&&(l=this._previousStyleCopy=h({},l)),c){for(o in c)!c.hasOwnProperty(o)||l&&l.hasOwnProperty(o)||(i=i||{},i[o]="");for(o in l)l.hasOwnProperty(o)&&c[o]!==l[o]&&(i=i||{},i[o]=l[o])}else i=l;else E.hasOwnProperty(n)?r(this._rootNodeID,n,l,t):(s.isStandardName[n]||s.isCustomAttribute(n))&&D.updatePropertyByID(this._rootNodeID,n,l)}i&&D.updateStylesByID(this._rootNodeID,i)},_updateDOMChildren:function(e,t,n){var r=this._currentElement.props,o=b[typeof e.children]?e.children:null,i=b[typeof r.children]?r.children:null,a=e.dangerouslySetInnerHTML&&e.dangerouslySetInnerHTML.__html,s=r.dangerouslySetInnerHTML&&r.dangerouslySetInnerHTML.__html,u=null!=o?null:e.children,l=null!=i?null:r.children,c=null!=o||null!=a,p=null!=i||null!=s;null!=u&&null==l?this.updateChildren(null,t,n):c&&!p&&this.updateTextContent(""),null!=i?o!==i&&this.updateTextContent(""+i):null!=s?a!==s&&D.updateInnerHTMLByID(this._rootNodeID,s):null!=l&&this.updateChildren(l,t,n)},unmountComponent:function(){this.unmountChildren(),l.deleteAllListeners(this._rootNodeID),c.unmountIDFromEnvironment(this._rootNodeID),this._rootNodeID=null}},f.measureMethods(i,"ReactDOMComponent",{mountComponent:"mountComponent",updateComponent:"updateComponent"}),h(i.prototype,i.Mixin,d.Mixin),i.injection={injectIDOperations:function(e){i.BackendIDOperations=D=e}},t.exports=i},{11:11,12:12,128:128,147:147,148:148,154:154,166:166,29:29,33:33,40:40,6:6,75:75,76:76,80:80}],49:[function(e,t){"use strict";var n=e(16),r=e(27),o=e(32),i=e(38),a=e(61),s=a.createFactory("form"),u=i.createClass({displayName:"ReactDOMForm",tagName:"FORM",mixins:[o,r],render:function(){return s(this.props)},componentDidMount:function(){this.trapBubbledEvent(n.topLevelTypes.topReset,"reset"),this.trapBubbledEvent(n.topLevelTypes.topSubmit,"submit")}});t.exports=u},{16:16,27:27,32:32,38:38,61:61}],50:[function(e,t){"use strict";var n=e(6),r=e(10),o=e(12),i=e(75),a=e(80),s=e(147),u=e(159),l={dangerouslySetInnerHTML:"`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.",style:"`style` must be set using `updateStylesByID()`."},c={updatePropertyByID:function(e,t,n){var r=i.getNode(e);s(!l.hasOwnProperty(t)),null!=n?o.setValueForProperty(r,t,n):o.deleteValueForProperty(r,t)},deletePropertyByID:function(e,t,n){var r=i.getNode(e);s(!l.hasOwnProperty(t)),o.deleteValueForProperty(r,t,n)},updateStylesByID:function(e,t){var r=i.getNode(e);n.setValueForStyles(r,t)},updateInnerHTMLByID:function(e,t){var n=i.getNode(e);u(n,t)},updateTextContentByID:function(e,t){var n=i.getNode(e);r.updateTextContent(n,t)},dangerouslyReplaceNodeWithMarkupByID:function(e,t){var n=i.getNode(e);r.dangerouslyReplaceNodeWithMarkup(n,t)},dangerouslyProcessChildrenUpdates:function(e,t){for(var n=0;n<e.length;n++)e[n].parentNode=i.getNode(e[n].parentID);r.processUpdates(e,t)}};a.measureMethods(c,"ReactDOMIDOperations",{updatePropertyByID:"updatePropertyByID",deletePropertyByID:"deletePropertyByID",updateStylesByID:"updateStylesByID",updateInnerHTMLByID:"updateInnerHTMLByID",updateTextContentByID:"updateTextContentByID",dangerouslyReplaceNodeWithMarkupByID:"dangerouslyReplaceNodeWithMarkupByID",dangerouslyProcessChildrenUpdates:"dangerouslyProcessChildrenUpdates"}),t.exports=c},{10:10,12:12,147:147,159:159,6:6,75:75,80:80}],51:[function(e,t){"use strict";var n=e(16),r=e(27),o=e(32),i=e(38),a=e(61),s=a.createFactory("iframe"),u=i.createClass({displayName:"ReactDOMIframe",tagName:"IFRAME",mixins:[o,r],render:function(){return s(this.props)},componentDidMount:function(){this.trapBubbledEvent(n.topLevelTypes.topLoad,"load")}});t.exports=u},{16:16,27:27,32:32,38:38,61:61}],52:[function(e,t){"use strict";var n=e(16),r=e(27),o=e(32),i=e(38),a=e(61),s=a.createFactory("img"),u=i.createClass({displayName:"ReactDOMImg",tagName:"IMG",mixins:[o,r],render:function(){return s(this.props)},componentDidMount:function(){this.trapBubbledEvent(n.topLevelTypes.topLoad,"load"),this.trapBubbledEvent(n.topLevelTypes.topError,"error")}});t.exports=u},{16:16,27:27,32:32,38:38,61:61}],53:[function(e,t){"use strict";function n(){this.isMounted()&&this.forceUpdate()}var r=e(2),o=e(12),i=e(26),a=e(32),s=e(38),u=e(61),l=e(75),c=e(97),p=e(29),d=e(147),f=u.createFactory("input"),h={},m=s.createClass({displayName:"ReactDOMInput",tagName:"INPUT",mixins:[r,i.Mixin,a],getInitialState:function(){var e=this.props.defaultValue;return{initialChecked:this.props.defaultChecked||!1,initialValue:null!=e?e:null}},render:function(){var e=p({},this.props);e.defaultChecked=null,e.defaultValue=null;var t=i.getValue(this);e.value=null!=t?t:this.state.initialValue;var n=i.getChecked(this);return e.checked=null!=n?n:this.state.initialChecked,e.onChange=this._handleChange,f(e,this.props.children)},componentDidMount:function(){var e=l.getID(this.getDOMNode());h[e]=this},componentWillUnmount:function(){var e=this.getDOMNode(),t=l.getID(e);delete h[t]},componentDidUpdate:function(){var e=this.getDOMNode();null!=this.props.checked&&o.setValueForProperty(e,"checked",this.props.checked||!1);var t=i.getValue(this);null!=t&&o.setValueForProperty(e,"value",""+t)},_handleChange:function(e){var t,r=i.getOnChange(this);r&&(t=r.call(this,e)),c.asap(n,this);var o=this.props.name;if("radio"===this.props.type&&null!=o){for(var a=this.getDOMNode(),s=a;s.parentNode;)s=s.parentNode;for(var u=s.querySelectorAll("input[name="+JSON.stringify(""+o)+'][type="radio"]'),p=0,f=u.length;f>p;p++){var m=u[p];if(m!==a&&m.form===a.form){var v=l.getID(m);d(v);var g=h[v];d(g),c.asap(n,g)}}}return t}});t.exports=m},{12:12,147:147,2:2,26:26,29:29,32:32,38:38,61:61,75:75,97:97}],54:[function(e,t){"use strict";var n=e(32),r=e(38),o=e(61),i=(e(166),o.createFactory("option")),a=r.createClass({displayName:"ReactDOMOption",tagName:"OPTION",mixins:[n],componentWillMount:function(){},render:function(){return i(this.props,this.props.children)}});t.exports=a},{166:166,32:32,38:38,61:61}],55:[function(e,t){"use strict";function n(){if(this._pendingUpdate){this._pendingUpdate=!1;var e=a.getValue(this);null!=e&&this.isMounted()&&o(this,e)}}function r(e,t){if(null==e[t])return null;if(e.multiple){if(!Array.isArray(e[t]))return new Error("The `"+t+"` prop supplied to <select> must be an array if `multiple` is true.")}else if(Array.isArray(e[t]))return new Error("The `"+t+"` prop supplied to <select> must be a scalar value if `multiple` is false.")}function o(e,t){var n,r,o,i=e.getDOMNode().options;if(e.props.multiple){for(n={},r=0,o=t.length;o>r;r++)n[""+t[r]]=!0;for(r=0,o=i.length;o>r;r++){var a=n.hasOwnProperty(i[r].value);i[r].selected!==a&&(i[r].selected=a)}}else{for(n=""+t,r=0,o=i.length;o>r;r++)if(i[r].value===n)return void(i[r].selected=!0);i.length&&(i[0].selected=!0)}}var i=e(2),a=e(26),s=e(32),u=e(38),l=e(61),c=e(97),p=e(29),d=l.createFactory("select"),f=u.createClass({displayName:"ReactDOMSelect",tagName:"SELECT",mixins:[i,a.Mixin,s],propTypes:{defaultValue:r,value:r},render:function(){var e=p({},this.props);return e.onChange=this._handleChange,e.value=null,d(e,this.props.children)},componentWillMount:function(){this._pendingUpdate=!1},componentDidMount:function(){var e=a.getValue(this);null!=e?o(this,e):null!=this.props.defaultValue&&o(this,this.props.defaultValue)},componentDidUpdate:function(e){var t=a.getValue(this);null!=t?(this._pendingUpdate=!1,o(this,t)):!e.multiple!=!this.props.multiple&&(null!=this.props.defaultValue?o(this,this.props.defaultValue):o(this,this.props.multiple?[]:""))},_handleChange:function(e){var t,r=a.getOnChange(this);return r&&(t=r.call(this,e)),this._pendingUpdate=!0,c.asap(n,this),t}});t.exports=f},{2:2,26:26,29:29,32:32,38:38,61:61,97:97}],56:[function(e,t){"use strict";function n(e,t,n,r){return e===n&&t===r}function r(e){var t=document.selection,n=t.createRange(),r=n.text.length,o=n.duplicate();o.moveToElementText(e),o.setEndPoint("EndToStart",n);var i=o.text.length,a=i+r;return{start:i,end:a}}function o(e){var t=window.getSelection&&window.getSelection();if(!t||0===t.rangeCount)return null;var r=t.anchorNode,o=t.anchorOffset,i=t.focusNode,a=t.focusOffset,s=t.getRangeAt(0),u=n(t.anchorNode,t.anchorOffset,t.focusNode,t.focusOffset),l=u?0:s.toString().length,c=s.cloneRange();c.selectNodeContents(e),c.setEnd(s.startContainer,s.startOffset);var p=n(c.startContainer,c.startOffset,c.endContainer,c.endOffset),d=p?0:c.toString().length,f=d+l,h=document.createRange();h.setStart(r,o),h.setEnd(i,a);var m=h.collapsed;return{start:m?f:d,end:m?d:f}}function i(e,t){var n,r,o=document.selection.createRange().duplicate();"undefined"==typeof t.end?(n=t.start,r=n):t.start>t.end?(n=t.end,r=t.start):(n=t.start,r=t.end),o.moveToElementText(e),o.moveStart("character",n),o.setEndPoint("EndToStart",o),o.moveEnd("character",r-n),o.select()}function a(e,t){if(window.getSelection){var n=window.getSelection(),r=e[l()].length,o=Math.min(t.start,r),i="undefined"==typeof t.end?o:Math.min(t.end,r);if(!n.extend&&o>i){var a=i;i=o,o=a}var s=u(e,o),c=u(e,i);if(s&&c){var p=document.createRange();p.setStart(s.node,s.offset),n.removeAllRanges(),o>i?(n.addRange(p),n.extend(c.node,c.offset)):(p.setEnd(c.node,c.offset),n.addRange(p))}}}var s=e(22),u=e(140),l=e(142),c=s.canUseDOM&&"selection"in document&&!("getSelection"in window),p={getOffsets:c?r:o,setOffsets:c?i:a};t.exports=p},{140:140,142:142,22:22}],57:[function(e,t){"use strict";var n=e(12),r=e(40),o=e(48),i=e(29),a=e(128),s=function(){};i(s.prototype,{construct:function(e){this._currentElement=e,this._stringText=""+e,this._rootNodeID=null,this._mountIndex=0},mountComponent:function(e,t){this._rootNodeID=e;var r=a(this._stringText);return t.renderToStaticMarkup?r:"<span "+n.createMarkupForID(e)+">"+r+"</span>"},receiveComponent:function(e){if(e!==this._currentElement){this._currentElement=e;var t=""+e;t!==this._stringText&&(this._stringText=t,o.BackendIDOperations.updateTextContentByID(this._rootNodeID,t))}},unmountComponent:function(){r.unmountIDFromEnvironment(this._rootNodeID)}}),t.exports=s},{12:12,128:128,29:29,40:40,48:48}],58:[function(e,t){"use strict";function n(){this.isMounted()&&this.forceUpdate()}var r=e(2),o=e(12),i=e(26),a=e(32),s=e(38),u=e(61),l=e(97),c=e(29),p=e(147),d=(e(166),u.createFactory("textarea")),f=s.createClass({displayName:"ReactDOMTextarea",tagName:"TEXTAREA",mixins:[r,i.Mixin,a],getInitialState:function(){var e=this.props.defaultValue,t=this.props.children;null!=t&&(p(null==e),Array.isArray(t)&&(p(t.length<=1),t=t[0]),e=""+t),null==e&&(e="");
-var n=i.getValue(this);return{initialValue:""+(null!=n?n:e)}},render:function(){var e=c({},this.props);return p(null==e.dangerouslySetInnerHTML),e.defaultValue=null,e.value=null,e.onChange=this._handleChange,d(e,this.state.initialValue)},componentDidUpdate:function(){var e=i.getValue(this);if(null!=e){var t=this.getDOMNode();o.setValueForProperty(t,"value",""+e)}},_handleChange:function(e){var t,r=i.getOnChange(this);return r&&(t=r.call(this,e)),l.asap(n,this),t}});t.exports=f},{12:12,147:147,166:166,2:2,26:26,29:29,32:32,38:38,61:61,97:97}],59:[function(e,t){"use strict";function n(){this.reinitializeTransaction()}var r=e(97),o=e(113),i=e(29),a=e(126),s={initialize:a,close:function(){p.isBatchingUpdates=!1}},u={initialize:a,close:r.flushBatchedUpdates.bind(r)},l=[u,s];i(n.prototype,o.Mixin,{getTransactionWrappers:function(){return l}});var c=new n,p={isBatchingUpdates:!1,batchedUpdates:function(e,t,n,r,o){var i=p.isBatchingUpdates;p.isBatchingUpdates=!0,i?e(t,n,r,o):c.perform(e,null,t,n,r,o)}};t.exports=p},{113:113,126:126,29:29,97:97}],60:[function(e,t){"use strict";function n(e){return f.createClass({tagName:e.toUpperCase(),render:function(){return new N(e,null,null,null,null,this.props)}})}function r(){I.EventEmitter.injectReactEventListener(P),I.EventPluginHub.injectEventPluginOrder(s),I.EventPluginHub.injectInstanceHandle(R),I.EventPluginHub.injectMount(w),I.EventPluginHub.injectEventPluginsByName({SimpleEventPlugin:k,EnterLeaveEventPlugin:u,ChangeEventPlugin:i,MobileSafariClickEventPlugin:p,SelectEventPlugin:S,BeforeInputEventPlugin:o}),I.NativeComponent.injectGenericComponentClass(v),I.NativeComponent.injectTextComponentClass(T),I.NativeComponent.injectAutoWrapper(n),I.Class.injectMixin(d),I.NativeComponent.injectComponentClasses({button:g,form:y,iframe:b,img:C,input:_,option:x,select:D,textarea:M,html:U("html"),head:U("head"),body:U("body")}),I.DOMProperty.injectDOMPropertyConfig(c),I.DOMProperty.injectDOMPropertyConfig(L),I.EmptyComponent.injectEmptyComponent("noscript"),I.Updates.injectReconcileTransaction(O),I.Updates.injectBatchingStrategy(m),I.RootIndex.injectCreateReactRootIndex(l.canUseDOM?a.createReactRootIndex:A.createReactRootIndex),I.Component.injectEnvironment(h),I.DOMComponent.injectIDOperations(E)}var o=e(3),i=e(8),a=e(9),s=e(14),u=e(15),l=e(22),c=e(24),p=e(28),d=e(32),f=e(38),h=e(40),m=e(59),v=e(48),g=e(47),y=e(49),C=e(52),E=e(50),b=e(51),_=e(53),x=e(54),D=e(55),M=e(58),T=e(57),N=e(61),P=e(66),I=e(68),R=e(70),w=e(75),O=e(86),S=e(99),A=e(100),k=e(101),L=e(98),U=e(122);t.exports={inject:r}},{100:100,101:101,122:122,14:14,15:15,22:22,24:24,28:28,3:3,32:32,38:38,40:40,47:47,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,57:57,58:58,59:59,61:61,66:66,68:68,70:70,75:75,8:8,86:86,9:9,98:98,99:99}],61:[function(e,t){"use strict";var n=e(44),r=e(45),o=e(29),i=(e(166),{key:!0,ref:!0}),a=function(e,t,n,r,o,i){this.type=e,this.key=t,this.ref=n,this._owner=r,this._context=o,this.props=i};a.prototype={_isReactElement:!0},a.createElement=function(e,t,o){var s,u={},l=null,c=null;if(null!=t){c=void 0===t.ref?null:t.ref,l=void 0===t.key?null:""+t.key;for(s in t)t.hasOwnProperty(s)&&!i.hasOwnProperty(s)&&(u[s]=t[s])}var p=arguments.length-2;if(1===p)u.children=o;else if(p>1){for(var d=Array(p),f=0;p>f;f++)d[f]=arguments[f+2];u.children=d}if(e&&e.defaultProps){var h=e.defaultProps;for(s in h)"undefined"==typeof u[s]&&(u[s]=h[s])}return new a(e,l,c,r.current,n.current,u)},a.createFactory=function(e){var t=a.createElement.bind(null,e);return t.type=e,t},a.cloneAndReplaceProps=function(e,t){var n=new a(e.type,e.key,e.ref,e._owner,e._context,t);return n},a.cloneElement=function(e,t,n){var s,u=o({},e.props),l=e.key,c=e.ref,p=e._owner;if(null!=t){void 0!==t.ref&&(c=t.ref,p=r.current),void 0!==t.key&&(l=""+t.key);for(s in t)t.hasOwnProperty(s)&&!i.hasOwnProperty(s)&&(u[s]=t[s])}var d=arguments.length-2;if(1===d)u.children=n;else if(d>1){for(var f=Array(d),h=0;d>h;h++)f[h]=arguments[h+2];u.children=f}return new a(e.type,l,c,p,e._context,u)},a.isValidElement=function(e){var t=!(!e||!e._isReactElement);return t},t.exports=a},{166:166,29:29,44:44,45:45}],62:[function(e,t){"use strict";function n(){if(g.current){var e=g.current.getName();if(e)return" Check the render method of `"+e+"`."}return""}function r(e){var t=e&&e.getPublicInstance();if(!t)return void 0;var n=t.constructor;return n?n.displayName||n.name||void 0:void 0}function o(){var e=g.current;return e&&r(e)||void 0}function i(e,t){e._store.validated||null!=e.key||(e._store.validated=!0,s('Each child in an array or iterator should have a unique "key" prop.',e,t))}function a(e,t,n){x.test(e)&&s("Child objects should have non-numeric keys so ordering is preserved.",t,n)}function s(e,t,n){var i=o(),a="string"==typeof n?n:n.displayName||n.name,s=i||a,u=b[e]||(b[e]={});if(!u.hasOwnProperty(s)){u[s]=!0;var l="";if(t&&t._owner&&t._owner!==g.current){var c=r(t._owner);l=" It was passed a child from "+c+"."}}}function u(e,t){if(Array.isArray(e))for(var n=0;n<e.length;n++){var r=e[n];h.isValidElement(r)&&i(r,t)}else if(h.isValidElement(e))e._store.validated=!0;else if(e){var o=C(e);if(o){if(o!==e.entries)for(var s,u=o.call(e);!(s=u.next()).done;)h.isValidElement(s.value)&&i(s.value,t)}else if("object"==typeof e){var l=m.extractIfFragment(e);for(var c in l)l.hasOwnProperty(c)&&a(c,l[c],t)}}}function l(e,t,r,o){for(var i in t)if(t.hasOwnProperty(i)){var a;try{E("function"==typeof t[i]),a=t[i](r,i,e,o)}catch(s){a=s}a instanceof Error&&!(a.message in _)&&(_[a.message]=!0,n(this))}}function c(e,t){var n=t.type,r="string"==typeof n?n:n.displayName,o=t._owner?t._owner.getPublicInstance().constructor.displayName:null,i=e+"|"+r+"|"+o;if(!D.hasOwnProperty(i)){D[i]=!0;var a="";r&&(a=" <"+r+" />");var s="";o&&(s=" The element was created by "+o+".")}}function p(e,t){return e!==e?t!==t:0===e&&0===t?1/e===1/t:e===t}function d(e){if(e._store){var t=e._store.originalProps,n=e.props;for(var r in n)n.hasOwnProperty(r)&&(t.hasOwnProperty(r)&&p(t[r],n[r])||(c(r,e),t[r]=n[r]))}}function f(e){if(null!=e.type){var t=y.getComponentClassForElement(e),n=t.displayName||t.name;t.propTypes&&l(n,t.propTypes,e.props,v.prop),"function"==typeof t.getDefaultProps}}var h=e(61),m=e(67),v=e(83),g=(e(82),e(45)),y=e(78),C=e(138),E=e(147),b=(e(166),{}),_={},x=/^\d+$/,D={},M={checkAndWarnForMutatedProps:d,createElement:function(e){var t=h.createElement.apply(this,arguments);if(null==t)return t;for(var n=2;n<arguments.length;n++)u(arguments[n],e);return f(t),t},createFactory:function(e){var t=M.createElement.bind(null,e);return t.type=e,t},cloneElement:function(){for(var e=h.cloneElement.apply(this,arguments),t=2;t<arguments.length;t++)u(arguments[t],e.type);return f(e),e}};t.exports=M},{138:138,147:147,166:166,45:45,61:61,67:67,78:78,82:82,83:83}],63:[function(e,t){"use strict";function n(e){l[e]=!0}function r(e){delete l[e]}function o(e){return!!l[e]}var i,a=e(61),s=e(71),u=e(147),l={},c={injectEmptyComponent:function(e){i=a.createFactory(e)}},p=function(){};p.prototype.componentDidMount=function(){var e=s.get(this);e&&n(e._rootNodeID)},p.prototype.componentWillUnmount=function(){var e=s.get(this);e&&r(e._rootNodeID)},p.prototype.render=function(){return u(i),i()};var d=a.createElement(p),f={emptyElement:d,injection:c,isNullComponentID:o};t.exports=f},{147:147,61:61,71:71}],64:[function(e,t){"use strict";var n={guard:function(e){return e}};t.exports=n},{}],65:[function(e,t){"use strict";function n(e){r.enqueueEvents(e),r.processEventQueue()}var r=e(18),o={handleTopLevel:function(e,t,o,i){var a=r.extractEvents(e,t,o,i);n(a)}};t.exports=o},{18:18}],66:[function(e,t){"use strict";function n(e){var t=c.getID(e),n=l.getReactRootIDFromNodeID(t),r=c.findReactContainerForID(n),o=c.getFirstReactDOM(r);return o}function r(e,t){this.topLevelType=e,this.nativeEvent=t,this.ancestors=[]}function o(e){for(var t=c.getFirstReactDOM(f(e.nativeEvent))||window,r=t;r;)e.ancestors.push(r),r=n(r);for(var o=0,i=e.ancestors.length;i>o;o++){t=e.ancestors[o];var a=c.getID(t)||"";m._handleTopLevel(e.topLevelType,t,a,e.nativeEvent)}}function i(e){var t=h(window);e(t)}var a=e(17),s=e(22),u=e(30),l=e(70),c=e(75),p=e(97),d=e(29),f=e(137),h=e(143);d(r.prototype,{destructor:function(){this.topLevelType=null,this.nativeEvent=null,this.ancestors.length=0}}),u.addPoolingTo(r,u.twoArgumentPooler);var m={_enabled:!0,_handleTopLevel:null,WINDOW_HANDLE:s.canUseDOM?window:null,setHandleTopLevel:function(e){m._handleTopLevel=e},setEnabled:function(e){m._enabled=!!e},isEnabled:function(){return m._enabled},trapBubbledEvent:function(e,t,n){var r=n;return r?a.listen(r,t,m.dispatchEvent.bind(null,e)):null},trapCapturedEvent:function(e,t,n){var r=n;return r?a.capture(r,t,m.dispatchEvent.bind(null,e)):null},monitorScrollValue:function(e){var t=i.bind(null,e);a.listen(window,"scroll",t)},dispatchEvent:function(e,t){if(m._enabled){var n=r.getPooled(e,t);try{p.batchedUpdates(o,n)}finally{r.release(n)}}}};t.exports=m},{137:137,143:143,17:17,22:22,29:29,30:30,70:70,75:75,97:97}],67:[function(e,t){"use strict";var n=(e(61),e(166),{create:function(e){return e},extract:function(e){return e},extractIfFragment:function(e){return e}});t.exports=n},{166:166,61:61}],68:[function(e,t){"use strict";var n=e(11),r=e(18),o=e(41),i=e(38),a=e(63),s=e(33),u=e(78),l=e(48),c=e(80),p=e(89),d=e(97),f={Component:o.injection,Class:i.injection,DOMComponent:l.injection,DOMProperty:n.injection,EmptyComponent:a.injection,EventPluginHub:r.injection,EventEmitter:s.injection,NativeComponent:u.injection,Perf:c.injection,RootIndex:p.injection,Updates:d.injection};t.exports=f},{11:11,18:18,33:33,38:38,41:41,48:48,63:63,78:78,80:80,89:89,97:97}],69:[function(e,t){"use strict";function n(e){return o(document.documentElement,e)}var r=e(56),o=e(120),i=e(131),a=e(133),s={hasSelectionCapabilities:function(e){return e&&("INPUT"===e.nodeName&&"text"===e.type||"TEXTAREA"===e.nodeName||"true"===e.contentEditable)},getSelectionInformation:function(){var e=a();return{focusedElem:e,selectionRange:s.hasSelectionCapabilities(e)?s.getSelection(e):null}},restoreSelection:function(e){var t=a(),r=e.focusedElem,o=e.selectionRange;t!==r&&n(r)&&(s.hasSelectionCapabilities(r)&&s.setSelection(r,o),i(r))},getSelection:function(e){var t;if("selectionStart"in e)t={start:e.selectionStart,end:e.selectionEnd};else if(document.selection&&"INPUT"===e.nodeName){var n=document.selection.createRange();n.parentElement()===e&&(t={start:-n.moveStart("character",-e.value.length),end:-n.moveEnd("character",-e.value.length)})}else t=r.getOffsets(e);return t||{start:0,end:0}},setSelection:function(e,t){var n=t.start,o=t.end;if("undefined"==typeof o&&(o=n),"selectionStart"in e)e.selectionStart=n,e.selectionEnd=Math.min(o,e.value.length);else if(document.selection&&"INPUT"===e.nodeName){var i=e.createTextRange();i.collapse(!0),i.moveStart("character",n),i.moveEnd("character",o-n),i.select()}else r.setOffsets(e,t)}};t.exports=s},{120:120,131:131,133:133,56:56}],70:[function(e,t){"use strict";function n(e){return d+e.toString(36)}function r(e,t){return e.charAt(t)===d||t===e.length}function o(e){return""===e||e.charAt(0)===d&&e.charAt(e.length-1)!==d}function i(e,t){return 0===t.indexOf(e)&&r(t,e.length)}function a(e){return e?e.substr(0,e.lastIndexOf(d)):""}function s(e,t){if(p(o(e)&&o(t)),p(i(e,t)),e===t)return e;var n,a=e.length+f;for(n=a;n<t.length&&!r(t,n);n++);return t.substr(0,n)}function u(e,t){var n=Math.min(e.length,t.length);if(0===n)return"";for(var i=0,a=0;n>=a;a++)if(r(e,a)&&r(t,a))i=a;else if(e.charAt(a)!==t.charAt(a))break;var s=e.substr(0,i);return p(o(s)),s}function l(e,t,n,r,o,u){e=e||"",t=t||"",p(e!==t);var l=i(t,e);p(l||i(e,t));for(var c=0,d=l?a:s,f=e;;f=d(f,t)){var m;if(o&&f===e||u&&f===t||(m=n(f,l,r)),m===!1||f===t)break;p(c++<h)}}var c=e(89),p=e(147),d=".",f=d.length,h=100,m={createReactRootID:function(){return n(c.createReactRootIndex())},createReactID:function(e,t){return e+t},getReactRootIDFromNodeID:function(e){if(e&&e.charAt(0)===d&&e.length>1){var t=e.indexOf(d,1);return t>-1?e.substr(0,t):e}return null},traverseEnterLeave:function(e,t,n,r,o){var i=u(e,t);i!==e&&l(e,i,n,r,!1,!0),i!==t&&l(i,t,n,o,!0,!1)},traverseTwoPhase:function(e,t,n){e&&(l("",e,t,n,!0,!1),l(e,"",t,n,!1,!0))},traverseAncestors:function(e,t,n){l("",e,t,n,!0,!1)},_getFirstCommonAncestorID:u,_getNextDescendantID:s,isAncestorIDOf:i,SEPARATOR:d};t.exports=m},{147:147,89:89}],71:[function(e,t){"use strict";var n={remove:function(e){e._reactInternalInstance=void 0},get:function(e){return e._reactInternalInstance},has:function(e){return void 0!==e._reactInternalInstance},set:function(e,t){e._reactInternalInstance=t}};t.exports=n},{}],72:[function(e,t){"use strict";var n={currentlyMountingInstance:null,currentlyUnmountingInstance:null};t.exports=n},{}],73:[function(e,t){"use strict";function n(e,t){this.value=e,this.requestChange=t}function r(e){var t={value:"undefined"==typeof e?o.PropTypes.any.isRequired:e.isRequired,requestChange:o.PropTypes.func.isRequired};return o.PropTypes.shape(t)}var o=e(31);n.PropTypes={link:r},t.exports=n},{31:31}],74:[function(e,t){"use strict";var n=e(116),r={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(e){var t=n(e);return e.replace(">"," "+r.CHECKSUM_ATTR_NAME+'="'+t+'">')},canReuseMarkup:function(e,t){var o=t.getAttribute(r.CHECKSUM_ATTR_NAME);o=o&&parseInt(o,10);var i=n(e);return i===o}};t.exports=r},{116:116}],75:[function(e,t){"use strict";function n(e,t){for(var n=Math.min(e.length,t.length),r=0;n>r;r++)if(e.charAt(r)!==t.charAt(r))return r;return e.length===t.length?-1:n}function r(e){var t=P(e);return t&&W.getID(t)}function o(e){var t=i(e);if(t)if(k.hasOwnProperty(t)){var n=k[t];n!==e&&(R(!l(n,t)),k[t]=e)}else k[t]=e;return t}function i(e){return e&&e.getAttribute&&e.getAttribute(A)||""}function a(e,t){var n=i(e);n!==t&&delete k[n],e.setAttribute(A,t),k[t]=e}function s(e){return k.hasOwnProperty(e)&&l(k[e],e)||(k[e]=W.findReactNodeByID(e)),k[e]}function u(e){var t=E.get(e)._rootNodeID;return y.isNullComponentID(t)?null:(k.hasOwnProperty(t)&&l(k[t],t)||(k[t]=W.findReactNodeByID(t)),k[t])}function l(e,t){if(e){R(i(e)===t);var n=W.findReactContainerForID(t);if(n&&N(n,e))return!0}return!1}function c(e){delete k[e]}function p(e){var t=k[e];return t&&l(t,e)?void(V=t):!1}function d(e){V=null,C.traverseAncestors(e,p);var t=V;return V=null,t}function f(e,t,n,r,o){var i=x.mountComponent(e,t,r,T);e._isTopLevel=!0,W._mountImageIntoNode(i,n,o)}function h(e,t,n,r){var o=M.ReactReconcileTransaction.getPooled();o.perform(f,null,e,t,n,o,r),M.ReactReconcileTransaction.release(o)}var m=e(11),v=e(33),g=(e(45),e(61)),y=(e(62),e(63)),C=e(70),E=e(71),b=e(74),_=e(80),x=e(87),D=e(96),M=e(97),T=e(127),N=e(120),P=e(141),I=e(146),R=e(147),w=e(159),O=e(162),S=(e(166),C.SEPARATOR),A=m.ID_ATTRIBUTE_NAME,k={},L=1,U=9,F={},B={},j=[],V=null,W={_instancesByReactRootID:F,scrollMonitor:function(e,t){t()},_updateRootComponent:function(e,t,n,r){return W.scrollMonitor(n,function(){D.enqueueElementInternal(e,t),r&&D.enqueueCallbackInternal(e,r)}),e},_registerComponent:function(e,t){R(t&&(t.nodeType===L||t.nodeType===U)),v.ensureScrollValueMonitoring();var n=W.registerContainer(t);return F[n]=e,n},_renderNewRootComponent:function(e,t,n){var r=I(e,null),o=W._registerComponent(r,t);return M.batchedUpdates(h,r,o,t,n),r},render:function(e,t,n){R(g.isValidElement(e));var o=F[r(t)];if(o){var i=o._currentElement;if(O(i,e))return W._updateRootComponent(o,e,t,n).getPublicInstance();W.unmountComponentAtNode(t)}var a=P(t),s=a&&W.isRenderedByReact(a),u=s&&!o,l=W._renderNewRootComponent(e,t,u).getPublicInstance();return n&&n.call(l),l},constructAndRenderComponent:function(e,t,n){var r=g.createElement(e,t);return W.render(r,n)},constructAndRenderComponentByID:function(e,t,n){var r=document.getElementById(n);return R(r),W.constructAndRenderComponent(e,t,r)},registerContainer:function(e){var t=r(e);return t&&(t=C.getReactRootIDFromNodeID(t)),t||(t=C.createReactRootID()),B[t]=e,t},unmountComponentAtNode:function(e){R(e&&(e.nodeType===L||e.nodeType===U));var t=r(e),n=F[t];return n?(W.unmountComponentFromNode(n,e),delete F[t],delete B[t],!0):!1},unmountComponentFromNode:function(e,t){for(x.unmountComponent(e),t.nodeType===U&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)},findReactContainerForID:function(e){var t=C.getReactRootIDFromNodeID(e),n=B[t];return n},findReactNodeByID:function(e){var t=W.findReactContainerForID(e);return W.findComponentRoot(t,e)},isRenderedByReact:function(e){if(1!==e.nodeType)return!1;var t=W.getID(e);return t?t.charAt(0)===S:!1},getFirstReactDOM:function(e){for(var t=e;t&&t.parentNode!==t;){if(W.isRenderedByReact(t))return t;t=t.parentNode}return null},findComponentRoot:function(e,t){var n=j,r=0,o=d(t)||e;for(n[0]=o.firstChild,n.length=1;r<n.length;){for(var i,a=n[r++];a;){var s=W.getID(a);s?t===s?i=a:C.isAncestorIDOf(s,t)&&(n.length=r=0,n.push(a.firstChild)):n.push(a.firstChild),a=a.nextSibling}if(i)return n.length=0,i}n.length=0,R(!1)},_mountImageIntoNode:function(e,t,r){if(R(t&&(t.nodeType===L||t.nodeType===U)),r){var o=P(t);if(b.canReuseMarkup(e,o))return;var i=o.getAttribute(b.CHECKSUM_ATTR_NAME);o.removeAttribute(b.CHECKSUM_ATTR_NAME);var a=o.outerHTML;o.setAttribute(b.CHECKSUM_ATTR_NAME,i);var s=n(e,a);" (client) "+e.substring(s-20,s+20)+"\n (server) "+a.substring(s-20,s+20),R(t.nodeType!==U)}R(t.nodeType!==U),w(t,e)},getReactRootID:r,getID:o,setID:a,getNode:s,getNodeFromInstance:u,purgeID:c};_.measureMethods(W,"ReactMount",{_renderNewRootComponent:"_renderNewRootComponent",_mountImageIntoNode:"_mountImageIntoNode"}),t.exports=W},{11:11,120:120,127:127,141:141,146:146,147:147,159:159,162:162,166:166,33:33,45:45,61:61,62:62,63:63,70:70,71:71,74:74,80:80,87:87,96:96,97:97}],76:[function(e,t){"use strict";function n(e,t,n){f.push({parentID:e,parentNode:null,type:l.INSERT_MARKUP,markupIndex:h.push(t)-1,textContent:null,fromIndex:null,toIndex:n})}function r(e,t,n){f.push({parentID:e,parentNode:null,type:l.MOVE_EXISTING,markupIndex:null,textContent:null,fromIndex:t,toIndex:n})}function o(e,t){f.push({parentID:e,parentNode:null,type:l.REMOVE_NODE,markupIndex:null,textContent:null,fromIndex:t,toIndex:null})}function i(e,t){f.push({parentID:e,parentNode:null,type:l.TEXT_CONTENT,markupIndex:null,textContent:t,fromIndex:null,toIndex:null})}function a(){f.length&&(u.processChildrenUpdates(f,h),s())}function s(){f.length=0,h.length=0}var u=e(41),l=e(77),c=e(87),p=e(36),d=0,f=[],h=[],m={Mixin:{mountChildren:function(e,t,n){var r=p.instantiateChildren(e,t,n);this._renderedChildren=r;var o=[],i=0;for(var a in r)if(r.hasOwnProperty(a)){var s=r[a],u=this._rootNodeID+a,l=c.mountComponent(s,u,t,n);s._mountIndex=i,o.push(l),i++}return o},updateTextContent:function(e){d++;var t=!0;try{var n=this._renderedChildren;p.unmountChildren(n);for(var r in n)n.hasOwnProperty(r)&&this._unmountChildByName(n[r],r);this.setTextContent(e),t=!1}finally{d--,d||(t?s():a())}},updateChildren:function(e,t,n){d++;var r=!0;try{this._updateChildren(e,t,n),r=!1}finally{d--,d||(r?s():a())}},_updateChildren:function(e,t,n){var r=this._renderedChildren,o=p.updateChildren(r,e,t,n);if(this._renderedChildren=o,o||r){var i,a=0,s=0;for(i in o)if(o.hasOwnProperty(i)){var u=r&&r[i],l=o[i];u===l?(this.moveChild(u,s,a),a=Math.max(u._mountIndex,a),u._mountIndex=s):(u&&(a=Math.max(u._mountIndex,a),this._unmountChildByName(u,i)),this._mountChildByNameAtIndex(l,i,s,t,n)),s++}for(i in r)!r.hasOwnProperty(i)||o&&o.hasOwnProperty(i)||this._unmountChildByName(r[i],i)}},unmountChildren:function(){var e=this._renderedChildren;p.unmountChildren(e),this._renderedChildren=null},moveChild:function(e,t,n){e._mountIndex<n&&r(this._rootNodeID,e._mountIndex,t)},createChild:function(e,t){n(this._rootNodeID,t,e._mountIndex)},removeChild:function(e){o(this._rootNodeID,e._mountIndex)},setTextContent:function(e){i(this._rootNodeID,e)},_mountChildByNameAtIndex:function(e,t,n,r,o){var i=this._rootNodeID+t,a=c.mountComponent(e,i,r,o);e._mountIndex=n,this.createChild(e,a)},_unmountChildByName:function(e){this.removeChild(e),e._mountIndex=null}}};t.exports=m},{36:36,41:41,77:77,87:87}],77:[function(e,t){"use strict";var n=e(153),r=n({INSERT_MARKUP:null,MOVE_EXISTING:null,REMOVE_NODE:null,TEXT_CONTENT:null});t.exports=r},{153:153}],78:[function(e,t){"use strict";function n(e){if("function"==typeof e.type)return e.type;var t=e.type,n=c[t];return null==n&&(c[t]=n=u(t)),n}function r(e){return s(l),new l(e.type,e.props)}function o(e){return new p(e)}function i(e){return e instanceof p}var a=e(29),s=e(147),u=null,l=null,c={},p=null,d={injectGenericComponentClass:function(e){l=e},injectTextComponentClass:function(e){p=e},injectComponentClasses:function(e){a(c,e)},injectAutoWrapper:function(e){u=e}},f={getComponentClassForElement:n,createInternalComponent:r,createInstanceForText:o,isTextComponent:i,injection:d};t.exports=f},{147:147,29:29}],79:[function(e,t){"use strict";var n=e(147),r={isValidOwner:function(e){return!(!e||"function"!=typeof e.attachRef||"function"!=typeof e.detachRef)},addComponentAsRefTo:function(e,t,o){n(r.isValidOwner(o)),o.attachRef(t,e)},removeComponentAsRefFrom:function(e,t,o){n(r.isValidOwner(o)),o.getPublicInstance().refs[t]===e.getPublicInstance()&&o.detachRef(t)}};t.exports=r},{147:147}],80:[function(e,t){"use strict";function n(e,t,n){return n}var r={enableMeasure:!1,storedMeasure:n,measureMethods:function(){},measure:function(e,t,n){return n},injection:{injectMeasure:function(e){r.storedMeasure=e}}};t.exports=r},{}],81:[function(e,t){"use strict";function n(e){return function(t,n,r){t[n]=t.hasOwnProperty(n)?e(t[n],r):r}}function r(e,t){for(var n in t)if(t.hasOwnProperty(n)){var r=u[n];r&&u.hasOwnProperty(n)?r(e,n,t[n]):e.hasOwnProperty(n)||(e[n]=t[n])}return e}var o=e(29),i=e(126),a=e(152),s=n(function(e,t){return o({},t,e)}),u={children:i,className:n(a),style:s},l={mergeProps:function(e,t){return r(o({},e),t)}};t.exports=l},{126:126,152:152,29:29}],82:[function(e,t){"use strict";var n={};t.exports=n},{}],83:[function(e,t){"use strict";var n=e(153),r=n({prop:null,context:null,childContext:null});t.exports=r},{153:153}],84:[function(e,t){"use strict";function n(e){function t(t,n,r,o,i){if(o=o||E,null==n[r]){var a=y[i];return t?new Error("Required "+a+" `"+r+"` was not specified in "+("`"+o+"`.")):null}return e(n,r,o,i)}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function r(e){function t(t,n,r,o){var i=t[n],a=h(i);if(a!==e){var s=y[o],u=m(i);return new Error("Invalid "+s+" `"+n+"` of type `"+u+"` "+("supplied to `"+r+"`, expected `"+e+"`."))}return null}return n(t)}function o(){return n(C.thatReturns(null))}function i(e){function t(t,n,r,o){var i=t[n];if(!Array.isArray(i)){var a=y[o],s=h(i);return new Error("Invalid "+a+" `"+n+"` of type "+("`"+s+"` supplied to `"+r+"`, expected an array."))}for(var u=0;u<i.length;u++){var l=e(i,u,r,o);if(l instanceof Error)return l}return null}return n(t)}function a(){function e(e,t,n,r){if(!v.isValidElement(e[t])){var o=y[r];return new Error("Invalid "+o+" `"+t+"` supplied to "+("`"+n+"`, expected a ReactElement."))}return null}return n(e)}function s(e){function t(t,n,r,o){if(!(t[n]instanceof e)){var i=y[o],a=e.name||E;return new Error("Invalid "+i+" `"+n+"` supplied to "+("`"+r+"`, expected instance of `"+a+"`."))}return null}return n(t)}function u(e){function t(t,n,r,o){for(var i=t[n],a=0;a<e.length;a++)if(i===e[a])return null;var s=y[o],u=JSON.stringify(e);return new Error("Invalid "+s+" `"+n+"` of value `"+i+"` "+("supplied to `"+r+"`, expected one of "+u+"."))}return n(t)}function l(e){function t(t,n,r,o){var i=t[n],a=h(i);if("object"!==a){var s=y[o];return new Error("Invalid "+s+" `"+n+"` of type "+("`"+a+"` supplied to `"+r+"`, expected an object."))}for(var u in i)if(i.hasOwnProperty(u)){var l=e(i,u,r,o);if(l instanceof Error)return l}return null}return n(t)}function c(e){function t(t,n,r,o){for(var i=0;i<e.length;i++){var a=e[i];if(null==a(t,n,r,o))return null}var s=y[o];return new Error("Invalid "+s+" `"+n+"` supplied to "+("`"+r+"`."))}return n(t)}function p(){function e(e,t,n,r){if(!f(e[t])){var o=y[r];return new Error("Invalid "+o+" `"+t+"` supplied to "+("`"+n+"`, expected a ReactNode."))}return null}return n(e)}function d(e){function t(t,n,r,o){var i=t[n],a=h(i);if("object"!==a){var s=y[o];return new Error("Invalid "+s+" `"+n+"` of type `"+a+"` "+("supplied to `"+r+"`, expected `object`."))}for(var u in e){var l=e[u];if(l){var c=l(i,u,r,o);if(c)return c}}return null}return n(t)}function f(e){switch(typeof e){case"number":case"string":case"undefined":return!0;case"boolean":return!e;case"object":if(Array.isArray(e))return e.every(f);if(null===e||v.isValidElement(e))return!0;e=g.extractIfFragment(e);for(var t in e)if(!f(e[t]))return!1;return!0;default:return!1}}function h(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":t}function m(e){var t=h(e);if("object"===t){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return t}var v=e(61),g=e(67),y=e(82),C=e(126),E="<<anonymous>>",b=a(),_=p(),x={array:r("array"),bool:r("boolean"),func:r("function"),number:r("number"),object:r("object"),string:r("string"),any:o(),arrayOf:i,element:b,instanceOf:s,node:_,objectOf:l,oneOf:u,oneOfType:c,shape:d};t.exports=x},{126:126,61:61,67:67,82:82}],85:[function(e,t){"use strict";function n(){this.listenersToPut=[]}var r=e(30),o=e(33),i=e(29);i(n.prototype,{enqueuePutListener:function(e,t,n){this.listenersToPut.push({rootNodeID:e,propKey:t,propValue:n})},putListeners:function(){for(var e=0;e<this.listenersToPut.length;e++){var t=this.listenersToPut[e];o.putListener(t.rootNodeID,t.propKey,t.propValue)}},reset:function(){this.listenersToPut.length=0},destructor:function(){this.reset()}}),r.addPoolingTo(n),t.exports=n},{29:29,30:30,33:33}],86:[function(e,t){"use strict";function n(){this.reinitializeTransaction(),this.renderToStaticMarkup=!1,this.reactMountReady=r.getPooled(null),this.putListenerQueue=s.getPooled()}var r=e(7),o=e(30),i=e(33),a=e(69),s=e(85),u=e(113),l=e(29),c={initialize:a.getSelectionInformation,close:a.restoreSelection},p={initialize:function(){var e=i.isEnabled();return i.setEnabled(!1),e},close:function(e){i.setEnabled(e)}},d={initialize:function(){this.reactMountReady.reset()},close:function(){this.reactMountReady.notifyAll()}},f={initialize:function(){this.putListenerQueue.reset()},close:function(){this.putListenerQueue.putListeners()}},h=[f,c,p,d],m={getTransactionWrappers:function(){return h},getReactMountReady:function(){return this.reactMountReady},getPutListenerQueue:function(){return this.putListenerQueue},destructor:function(){r.release(this.reactMountReady),this.reactMountReady=null,s.release(this.putListenerQueue),this.putListenerQueue=null}};l(n.prototype,u.Mixin,m),o.addPoolingTo(n),t.exports=n},{113:113,29:29,30:30,33:33,69:69,7:7,85:85}],87:[function(e,t){"use strict";function n(){r.attachRefs(this,this._currentElement)}var r=e(88),o=(e(62),{mountComponent:function(e,t,r,o){var i=e.mountComponent(t,r,o);return r.getReactMountReady().enqueue(n,e),i},unmountComponent:function(e){r.detachRefs(e,e._currentElement),e.unmountComponent()},receiveComponent:function(e,t,o,i){var a=e._currentElement;if(t!==a||null==t._owner){var s=r.shouldUpdateRefs(a,t);s&&r.detachRefs(e,a),e.receiveComponent(t,o,i),s&&o.getReactMountReady().enqueue(n,e)}},performUpdateIfNecessary:function(e,t){e.performUpdateIfNecessary(t)}});t.exports=o},{62:62,88:88}],88:[function(e,t){"use strict";function n(e,t,n){"function"==typeof e?e(t.getPublicInstance()):o.addComponentAsRefTo(t,e,n)}function r(e,t,n){"function"==typeof e?e(null):o.removeComponentAsRefFrom(t,e,n)}var o=e(79),i={};i.attachRefs=function(e,t){var r=t.ref;null!=r&&n(r,e,t._owner)},i.shouldUpdateRefs=function(e,t){return t._owner!==e._owner||t.ref!==e.ref},i.detachRefs=function(e,t){var n=t.ref;null!=n&&r(n,e,t._owner)},t.exports=i},{79:79}],89:[function(e,t){"use strict";var n={injectCreateReactRootIndex:function(e){r.createReactRootIndex=e}},r={createReactRootIndex:null,injection:n};t.exports=r},{}],90:[function(e,t){"use strict";function n(e){c(o.isValidElement(e));var t;try{var n=i.createReactRootID();return t=s.getPooled(!1),t.perform(function(){var r=l(e,null),o=r.mountComponent(n,t,u);return a.addChecksumToMarkup(o)},null)}finally{s.release(t)}}function r(e){c(o.isValidElement(e));var t;try{var n=i.createReactRootID();return t=s.getPooled(!0),t.perform(function(){var r=l(e,null);return r.mountComponent(n,t,u)},null)}finally{s.release(t)}}var o=e(61),i=e(70),a=e(74),s=e(91),u=e(127),l=e(146),c=e(147);t.exports={renderToString:n,renderToStaticMarkup:r}},{127:127,146:146,147:147,61:61,70:70,74:74,91:91}],91:[function(e,t){"use strict";function n(e){this.reinitializeTransaction(),this.renderToStaticMarkup=e,this.reactMountReady=o.getPooled(null),this.putListenerQueue=i.getPooled()}var r=e(30),o=e(7),i=e(85),a=e(113),s=e(29),u=e(126),l={initialize:function(){this.reactMountReady.reset()},close:u},c={initialize:function(){this.putListenerQueue.reset()},close:u},p=[c,l],d={getTransactionWrappers:function(){return p},getReactMountReady:function(){return this.reactMountReady},getPutListenerQueue:function(){return this.putListenerQueue},destructor:function(){o.release(this.reactMountReady),this.reactMountReady=null,i.release(this.putListenerQueue),this.putListenerQueue=null}};s(n.prototype,a.Mixin,d),r.addPoolingTo(n),t.exports=n},{113:113,126:126,29:29,30:30,7:7,85:85}],92:[function(e,t){"use strict";function n(e,t){var n={};return function(r){n[t]=r,e.setState(n)}}var r={createStateSetter:function(e,t){return function(n,r,o,i,a,s){var u=t.call(e,n,r,o,i,a,s);u&&e.setState(u)}},createStateKeySetter:function(e,t){var r=e.__keySetters||(e.__keySetters={});return r[t]||(r[t]=n(e,t))}};r.Mixin={createStateSetter:function(e){return r.createStateSetter(this,e)},createStateKeySetter:function(e){return r.createStateKeySetter(this,e)}},t.exports=r},{}],93:[function(e,t){"use strict";var n=e(37),r=e(67),o={getChildMapping:function(e){return e?r.extract(n.map(e,function(e){return e})):e},mergeChildMappings:function(e,t){function n(n){return t.hasOwnProperty(n)?t[n]:e[n]}e=e||{},t=t||{};var r={},o=[];for(var i in e)t.hasOwnProperty(i)?o.length&&(r[i]=o,o=[]):o.push(i);var a,s={};for(var u in t){if(r.hasOwnProperty(u))for(a=0;a<r[u].length;a++){var l=r[u][a];s[r[u][a]]=n(l)}s[u]=n(u)}for(a=0;a<o.length;a++)s[o[a]]=n(o[a]);return s}};t.exports=o},{37:37,67:67}],94:[function(e,t){"use strict";function n(){var e=document.createElement("div"),t=e.style;"AnimationEvent"in window||delete a.animationend.animation,"TransitionEvent"in window||delete a.transitionend.transition;for(var n in a){var r=a[n];for(var o in r)if(o in t){s.push(r[o]);break}}}function r(e,t,n){e.addEventListener(t,n,!1)}function o(e,t,n){e.removeEventListener(t,n,!1)}var i=e(22),a={transitionend:{transition:"transitionend",WebkitTransition:"webkitTransitionEnd",MozTransition:"mozTransitionEnd",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd"},animationend:{animation:"animationend",WebkitAnimation:"webkitAnimationEnd",MozAnimation:"mozAnimationEnd",OAnimation:"oAnimationEnd",msAnimation:"MSAnimationEnd"}},s=[];i.canUseDOM&&n();var u={addEndEventListener:function(e,t){return 0===s.length?void window.setTimeout(t,0):void s.forEach(function(n){r(e,n,t)})},removeEndEventListener:function(e,t){0!==s.length&&s.forEach(function(n){o(e,n,t)})}};t.exports=u},{22:22}],95:[function(e,t){"use strict";var n=e(31),r=e(93),o=e(29),i=e(119),a=e(126),s=n.createClass({displayName:"ReactTransitionGroup",propTypes:{component:n.PropTypes.any,childFactory:n.PropTypes.func},getDefaultProps:function(){return{component:"span",childFactory:a.thatReturnsArgument}},getInitialState:function(){return{children:r.getChildMapping(this.props.children)}},componentWillMount:function(){this.currentlyTransitioningKeys={},this.keysToEnter=[],this.keysToLeave=[]},componentDidMount:function(){var e=this.state.children;for(var t in e)e[t]&&this.performAppear(t)},componentWillReceiveProps:function(e){var t=r.getChildMapping(e.children),n=this.state.children;
-this.setState({children:r.mergeChildMappings(n,t)});var o;for(o in t){var i=n&&n.hasOwnProperty(o);!t[o]||i||this.currentlyTransitioningKeys[o]||this.keysToEnter.push(o)}for(o in n){var a=t&&t.hasOwnProperty(o);!n[o]||a||this.currentlyTransitioningKeys[o]||this.keysToLeave.push(o)}},componentDidUpdate:function(){var e=this.keysToEnter;this.keysToEnter=[],e.forEach(this.performEnter);var t=this.keysToLeave;this.keysToLeave=[],t.forEach(this.performLeave)},performAppear:function(e){this.currentlyTransitioningKeys[e]=!0;var t=this.refs[e];t.componentWillAppear?t.componentWillAppear(this._handleDoneAppearing.bind(this,e)):this._handleDoneAppearing(e)},_handleDoneAppearing:function(e){var t=this.refs[e];t.componentDidAppear&&t.componentDidAppear(),delete this.currentlyTransitioningKeys[e];var n=r.getChildMapping(this.props.children);n&&n.hasOwnProperty(e)||this.performLeave(e)},performEnter:function(e){this.currentlyTransitioningKeys[e]=!0;var t=this.refs[e];t.componentWillEnter?t.componentWillEnter(this._handleDoneEntering.bind(this,e)):this._handleDoneEntering(e)},_handleDoneEntering:function(e){var t=this.refs[e];t.componentDidEnter&&t.componentDidEnter(),delete this.currentlyTransitioningKeys[e];var n=r.getChildMapping(this.props.children);n&&n.hasOwnProperty(e)||this.performLeave(e)},performLeave:function(e){this.currentlyTransitioningKeys[e]=!0;var t=this.refs[e];t.componentWillLeave?t.componentWillLeave(this._handleDoneLeaving.bind(this,e)):this._handleDoneLeaving(e)},_handleDoneLeaving:function(e){var t=this.refs[e];t.componentDidLeave&&t.componentDidLeave(),delete this.currentlyTransitioningKeys[e];var n=r.getChildMapping(this.props.children);if(n&&n.hasOwnProperty(e))this.performEnter(e);else{var i=o({},this.state.children);delete i[e],this.setState({children:i})}},render:function(){var e=[];for(var t in this.state.children){var r=this.state.children[t];r&&e.push(i(this.props.childFactory(r),{ref:t,key:t}))}return n.createElement(this.props.component,this.props,e)}});t.exports=s},{119:119,126:126,29:29,31:31,93:93}],96:[function(e,t){"use strict";function n(e){e!==o.currentlyMountingInstance&&u.enqueueUpdate(e)}function r(e){c(null==i.current);var t=s.get(e);return t?t===o.currentlyUnmountingInstance?null:t:null}var o=e(72),i=e(45),a=e(61),s=e(71),u=e(97),l=e(29),c=e(147),p=(e(166),{enqueueCallback:function(e,t){c("function"==typeof t);var i=r(e);return i&&i!==o.currentlyMountingInstance?(i._pendingCallbacks?i._pendingCallbacks.push(t):i._pendingCallbacks=[t],void n(i)):null},enqueueCallbackInternal:function(e,t){c("function"==typeof t),e._pendingCallbacks?e._pendingCallbacks.push(t):e._pendingCallbacks=[t],n(e)},enqueueForceUpdate:function(e){var t=r(e,"forceUpdate");t&&(t._pendingForceUpdate=!0,n(t))},enqueueReplaceState:function(e,t){var o=r(e,"replaceState");o&&(o._pendingStateQueue=[t],o._pendingReplaceState=!0,n(o))},enqueueSetState:function(e,t){var o=r(e,"setState");if(o){var i=o._pendingStateQueue||(o._pendingStateQueue=[]);i.push(t),n(o)}},enqueueSetProps:function(e,t){var o=r(e,"setProps");if(o){c(o._isTopLevel);var i=o._pendingElement||o._currentElement,s=l({},i.props,t);o._pendingElement=a.cloneAndReplaceProps(i,s),n(o)}},enqueueReplaceProps:function(e,t){var o=r(e,"replaceProps");if(o){c(o._isTopLevel);var i=o._pendingElement||o._currentElement;o._pendingElement=a.cloneAndReplaceProps(i,t),n(o)}},enqueueElementInternal:function(e,t){e._pendingElement=t,n(e)}});t.exports=p},{147:147,166:166,29:29,45:45,61:61,71:71,72:72,97:97}],97:[function(e,t){"use strict";function n(){m(M.ReactReconcileTransaction&&C)}function r(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=l.getPooled(),this.reconcileTransaction=M.ReactReconcileTransaction.getPooled()}function o(e,t,r,o,i){n(),C.batchedUpdates(e,t,r,o,i)}function i(e,t){return e._mountOrder-t._mountOrder}function a(e){var t=e.dirtyComponentsLength;m(t===v.length),v.sort(i);for(var n=0;t>n;n++){var r=v[n],o=r._pendingCallbacks;if(r._pendingCallbacks=null,d.performUpdateIfNecessary(r,e.reconcileTransaction),o)for(var a=0;a<o.length;a++)e.callbackQueue.enqueue(o[a],r.getPublicInstance())}}function s(e){return n(),C.isBatchingUpdates?void v.push(e):void C.batchedUpdates(s,e)}function u(e,t){m(C.isBatchingUpdates),g.enqueue(e,t),y=!0}var l=e(7),c=e(30),p=(e(45),e(80)),d=e(87),f=e(113),h=e(29),m=e(147),v=(e(166),[]),g=l.getPooled(),y=!1,C=null,E={initialize:function(){this.dirtyComponentsLength=v.length},close:function(){this.dirtyComponentsLength!==v.length?(v.splice(0,this.dirtyComponentsLength),x()):v.length=0}},b={initialize:function(){this.callbackQueue.reset()},close:function(){this.callbackQueue.notifyAll()}},_=[E,b];h(r.prototype,f.Mixin,{getTransactionWrappers:function(){return _},destructor:function(){this.dirtyComponentsLength=null,l.release(this.callbackQueue),this.callbackQueue=null,M.ReactReconcileTransaction.release(this.reconcileTransaction),this.reconcileTransaction=null},perform:function(e,t,n){return f.Mixin.perform.call(this,this.reconcileTransaction.perform,this.reconcileTransaction,e,t,n)}}),c.addPoolingTo(r);var x=function(){for(;v.length||y;){if(v.length){var e=r.getPooled();e.perform(a,null,e),r.release(e)}if(y){y=!1;var t=g;g=l.getPooled(),t.notifyAll(),l.release(t)}}};x=p.measure("ReactUpdates","flushBatchedUpdates",x);var D={injectReconcileTransaction:function(e){m(e),M.ReactReconcileTransaction=e},injectBatchingStrategy:function(e){m(e),m("function"==typeof e.batchedUpdates),m("boolean"==typeof e.isBatchingUpdates),C=e}},M={ReactReconcileTransaction:null,batchedUpdates:o,enqueueUpdate:s,flushBatchedUpdates:x,injection:D,asap:u};t.exports=M},{113:113,147:147,166:166,29:29,30:30,45:45,7:7,80:80,87:87}],98:[function(e,t){"use strict";var n=e(11),r=n.injection.MUST_USE_ATTRIBUTE,o={Properties:{cx:r,cy:r,d:r,dx:r,dy:r,fill:r,fillOpacity:r,fontFamily:r,fontSize:r,fx:r,fy:r,gradientTransform:r,gradientUnits:r,markerEnd:r,markerMid:r,markerStart:r,offset:r,opacity:r,patternContentUnits:r,patternUnits:r,points:r,preserveAspectRatio:r,r:r,rx:r,ry:r,spreadMethod:r,stopColor:r,stopOpacity:r,stroke:r,strokeDasharray:r,strokeLinecap:r,strokeOpacity:r,strokeWidth:r,textAnchor:r,transform:r,version:r,viewBox:r,x1:r,x2:r,x:r,y1:r,y2:r,y:r},DOMAttributeNames:{fillOpacity:"fill-opacity",fontFamily:"font-family",fontSize:"font-size",gradientTransform:"gradientTransform",gradientUnits:"gradientUnits",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",patternContentUnits:"patternContentUnits",patternUnits:"patternUnits",preserveAspectRatio:"preserveAspectRatio",spreadMethod:"spreadMethod",stopColor:"stop-color",stopOpacity:"stop-opacity",strokeDasharray:"stroke-dasharray",strokeLinecap:"stroke-linecap",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",textAnchor:"text-anchor",viewBox:"viewBox"}};t.exports=o},{11:11}],99:[function(e,t){"use strict";function n(e){if("selectionStart"in e&&a.hasSelectionCapabilities(e))return{start:e.selectionStart,end:e.selectionEnd};if(window.getSelection){var t=window.getSelection();return{anchorNode:t.anchorNode,anchorOffset:t.anchorOffset,focusNode:t.focusNode,focusOffset:t.focusOffset}}if(document.selection){var n=document.selection.createRange();return{parentElement:n.parentElement(),text:n.text,top:n.boundingTop,left:n.boundingLeft}}}function r(e){if(g||null==h||h!==u())return null;var t=n(h);if(!v||!p(v,t)){v=t;var r=s.getPooled(f.select,m,e);return r.type="select",r.target=h,i.accumulateTwoPhaseDispatches(r),r}}var o=e(16),i=e(21),a=e(69),s=e(105),u=e(133),l=e(150),c=e(154),p=e(161),d=o.topLevelTypes,f={select:{phasedRegistrationNames:{bubbled:c({onSelect:null}),captured:c({onSelectCapture:null})},dependencies:[d.topBlur,d.topContextMenu,d.topFocus,d.topKeyDown,d.topMouseDown,d.topMouseUp,d.topSelectionChange]}},h=null,m=null,v=null,g=!1,y={eventTypes:f,extractEvents:function(e,t,n,o){switch(e){case d.topFocus:(l(t)||"true"===t.contentEditable)&&(h=t,m=n,v=null);break;case d.topBlur:h=null,m=null,v=null;break;case d.topMouseDown:g=!0;break;case d.topContextMenu:case d.topMouseUp:return g=!1,r(o);case d.topSelectionChange:case d.topKeyDown:case d.topKeyUp:return r(o)}}};t.exports=y},{105:105,133:133,150:150,154:154,16:16,161:161,21:21,69:69}],100:[function(e,t){"use strict";var n=Math.pow(2,53),r={createReactRootIndex:function(){return Math.ceil(Math.random()*n)}};t.exports=r},{}],101:[function(e,t){"use strict";var n=e(16),r=e(20),o=e(21),i=e(102),a=e(105),s=e(106),u=e(108),l=e(109),c=e(104),p=e(110),d=e(111),f=e(112),h=e(134),m=e(147),v=e(154),g=(e(166),n.topLevelTypes),y={blur:{phasedRegistrationNames:{bubbled:v({onBlur:!0}),captured:v({onBlurCapture:!0})}},click:{phasedRegistrationNames:{bubbled:v({onClick:!0}),captured:v({onClickCapture:!0})}},contextMenu:{phasedRegistrationNames:{bubbled:v({onContextMenu:!0}),captured:v({onContextMenuCapture:!0})}},copy:{phasedRegistrationNames:{bubbled:v({onCopy:!0}),captured:v({onCopyCapture:!0})}},cut:{phasedRegistrationNames:{bubbled:v({onCut:!0}),captured:v({onCutCapture:!0})}},doubleClick:{phasedRegistrationNames:{bubbled:v({onDoubleClick:!0}),captured:v({onDoubleClickCapture:!0})}},drag:{phasedRegistrationNames:{bubbled:v({onDrag:!0}),captured:v({onDragCapture:!0})}},dragEnd:{phasedRegistrationNames:{bubbled:v({onDragEnd:!0}),captured:v({onDragEndCapture:!0})}},dragEnter:{phasedRegistrationNames:{bubbled:v({onDragEnter:!0}),captured:v({onDragEnterCapture:!0})}},dragExit:{phasedRegistrationNames:{bubbled:v({onDragExit:!0}),captured:v({onDragExitCapture:!0})}},dragLeave:{phasedRegistrationNames:{bubbled:v({onDragLeave:!0}),captured:v({onDragLeaveCapture:!0})}},dragOver:{phasedRegistrationNames:{bubbled:v({onDragOver:!0}),captured:v({onDragOverCapture:!0})}},dragStart:{phasedRegistrationNames:{bubbled:v({onDragStart:!0}),captured:v({onDragStartCapture:!0})}},drop:{phasedRegistrationNames:{bubbled:v({onDrop:!0}),captured:v({onDropCapture:!0})}},focus:{phasedRegistrationNames:{bubbled:v({onFocus:!0}),captured:v({onFocusCapture:!0})}},input:{phasedRegistrationNames:{bubbled:v({onInput:!0}),captured:v({onInputCapture:!0})}},keyDown:{phasedRegistrationNames:{bubbled:v({onKeyDown:!0}),captured:v({onKeyDownCapture:!0})}},keyPress:{phasedRegistrationNames:{bubbled:v({onKeyPress:!0}),captured:v({onKeyPressCapture:!0})}},keyUp:{phasedRegistrationNames:{bubbled:v({onKeyUp:!0}),captured:v({onKeyUpCapture:!0})}},load:{phasedRegistrationNames:{bubbled:v({onLoad:!0}),captured:v({onLoadCapture:!0})}},error:{phasedRegistrationNames:{bubbled:v({onError:!0}),captured:v({onErrorCapture:!0})}},mouseDown:{phasedRegistrationNames:{bubbled:v({onMouseDown:!0}),captured:v({onMouseDownCapture:!0})}},mouseMove:{phasedRegistrationNames:{bubbled:v({onMouseMove:!0}),captured:v({onMouseMoveCapture:!0})}},mouseOut:{phasedRegistrationNames:{bubbled:v({onMouseOut:!0}),captured:v({onMouseOutCapture:!0})}},mouseOver:{phasedRegistrationNames:{bubbled:v({onMouseOver:!0}),captured:v({onMouseOverCapture:!0})}},mouseUp:{phasedRegistrationNames:{bubbled:v({onMouseUp:!0}),captured:v({onMouseUpCapture:!0})}},paste:{phasedRegistrationNames:{bubbled:v({onPaste:!0}),captured:v({onPasteCapture:!0})}},reset:{phasedRegistrationNames:{bubbled:v({onReset:!0}),captured:v({onResetCapture:!0})}},scroll:{phasedRegistrationNames:{bubbled:v({onScroll:!0}),captured:v({onScrollCapture:!0})}},submit:{phasedRegistrationNames:{bubbled:v({onSubmit:!0}),captured:v({onSubmitCapture:!0})}},touchCancel:{phasedRegistrationNames:{bubbled:v({onTouchCancel:!0}),captured:v({onTouchCancelCapture:!0})}},touchEnd:{phasedRegistrationNames:{bubbled:v({onTouchEnd:!0}),captured:v({onTouchEndCapture:!0})}},touchMove:{phasedRegistrationNames:{bubbled:v({onTouchMove:!0}),captured:v({onTouchMoveCapture:!0})}},touchStart:{phasedRegistrationNames:{bubbled:v({onTouchStart:!0}),captured:v({onTouchStartCapture:!0})}},wheel:{phasedRegistrationNames:{bubbled:v({onWheel:!0}),captured:v({onWheelCapture:!0})}}},C={topBlur:y.blur,topClick:y.click,topContextMenu:y.contextMenu,topCopy:y.copy,topCut:y.cut,topDoubleClick:y.doubleClick,topDrag:y.drag,topDragEnd:y.dragEnd,topDragEnter:y.dragEnter,topDragExit:y.dragExit,topDragLeave:y.dragLeave,topDragOver:y.dragOver,topDragStart:y.dragStart,topDrop:y.drop,topError:y.error,topFocus:y.focus,topInput:y.input,topKeyDown:y.keyDown,topKeyPress:y.keyPress,topKeyUp:y.keyUp,topLoad:y.load,topMouseDown:y.mouseDown,topMouseMove:y.mouseMove,topMouseOut:y.mouseOut,topMouseOver:y.mouseOver,topMouseUp:y.mouseUp,topPaste:y.paste,topReset:y.reset,topScroll:y.scroll,topSubmit:y.submit,topTouchCancel:y.touchCancel,topTouchEnd:y.touchEnd,topTouchMove:y.touchMove,topTouchStart:y.touchStart,topWheel:y.wheel};for(var E in C)C[E].dependencies=[E];var b={eventTypes:y,executeDispatch:function(e,t,n){var o=r.executeDispatch(e,t,n);o===!1&&(e.stopPropagation(),e.preventDefault())},extractEvents:function(e,t,n,r){var v=C[e];if(!v)return null;var y;switch(e){case g.topInput:case g.topLoad:case g.topError:case g.topReset:case g.topSubmit:y=a;break;case g.topKeyPress:if(0===h(r))return null;case g.topKeyDown:case g.topKeyUp:y=u;break;case g.topBlur:case g.topFocus:y=s;break;case g.topClick:if(2===r.button)return null;case g.topContextMenu:case g.topDoubleClick:case g.topMouseDown:case g.topMouseMove:case g.topMouseOut:case g.topMouseOver:case g.topMouseUp:y=l;break;case g.topDrag:case g.topDragEnd:case g.topDragEnter:case g.topDragExit:case g.topDragLeave:case g.topDragOver:case g.topDragStart:case g.topDrop:y=c;break;case g.topTouchCancel:case g.topTouchEnd:case g.topTouchMove:case g.topTouchStart:y=p;break;case g.topScroll:y=d;break;case g.topWheel:y=f;break;case g.topCopy:case g.topCut:case g.topPaste:y=i}m(y);var E=y.getPooled(v,n,r);return o.accumulateTwoPhaseDispatches(E),E}};t.exports=b},{102:102,104:104,105:105,106:106,108:108,109:109,110:110,111:111,112:112,134:134,147:147,154:154,16:16,166:166,20:20,21:21}],102:[function(e,t){"use strict";function n(e,t,n){r.call(this,e,t,n)}var r=e(105),o={clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}};r.augmentClass(n,o),t.exports=n},{105:105}],103:[function(e,t){"use strict";function n(e,t,n){r.call(this,e,t,n)}var r=e(105),o={data:null};r.augmentClass(n,o),t.exports=n},{105:105}],104:[function(e,t){"use strict";function n(e,t,n){r.call(this,e,t,n)}var r=e(109),o={dataTransfer:null};r.augmentClass(n,o),t.exports=n},{109:109}],105:[function(e,t){"use strict";function n(e,t,n){this.dispatchConfig=e,this.dispatchMarker=t,this.nativeEvent=n;var r=this.constructor.Interface;for(var o in r)if(r.hasOwnProperty(o)){var a=r[o];this[o]=a?a(n):n[o]}var s=null!=n.defaultPrevented?n.defaultPrevented:n.returnValue===!1;this.isDefaultPrevented=s?i.thatReturnsTrue:i.thatReturnsFalse,this.isPropagationStopped=i.thatReturnsFalse}var r=e(30),o=e(29),i=e(126),a=e(137),s={type:null,target:a,currentTarget:i.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};o(n.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e.preventDefault?e.preventDefault():e.returnValue=!1,this.isDefaultPrevented=i.thatReturnsTrue},stopPropagation:function(){var e=this.nativeEvent;e.stopPropagation?e.stopPropagation():e.cancelBubble=!0,this.isPropagationStopped=i.thatReturnsTrue},persist:function(){this.isPersistent=i.thatReturnsTrue},isPersistent:i.thatReturnsFalse,destructor:function(){var e=this.constructor.Interface;for(var t in e)this[t]=null;this.dispatchConfig=null,this.dispatchMarker=null,this.nativeEvent=null}}),n.Interface=s,n.augmentClass=function(e,t){var n=this,i=Object.create(n.prototype);o(i,e.prototype),e.prototype=i,e.prototype.constructor=e,e.Interface=o({},n.Interface,t),e.augmentClass=n.augmentClass,r.addPoolingTo(e,r.threeArgumentPooler)},r.addPoolingTo(n,r.threeArgumentPooler),t.exports=n},{126:126,137:137,29:29,30:30}],106:[function(e,t){"use strict";function n(e,t,n){r.call(this,e,t,n)}var r=e(111),o={relatedTarget:null};r.augmentClass(n,o),t.exports=n},{111:111}],107:[function(e,t){"use strict";function n(e,t,n){r.call(this,e,t,n)}var r=e(105),o={data:null};r.augmentClass(n,o),t.exports=n},{105:105}],108:[function(e,t){"use strict";function n(e,t,n){r.call(this,e,t,n)}var r=e(111),o=e(134),i=e(135),a=e(136),s={key:i,location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:a,charCode:function(e){return"keypress"===e.type?o(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?o(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}};r.augmentClass(n,s),t.exports=n},{111:111,134:134,135:135,136:136}],109:[function(e,t){"use strict";function n(e,t,n){r.call(this,e,t,n)}var r=e(111),o=e(114),i=e(136),a={screenX:null,screenY:null,clientX:null,clientY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:i,button:function(e){var t=e.button;return"which"in e?t:2===t?2:4===t?1:0},buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},pageX:function(e){return"pageX"in e?e.pageX:e.clientX+o.currentScrollLeft},pageY:function(e){return"pageY"in e?e.pageY:e.clientY+o.currentScrollTop}};r.augmentClass(n,a),t.exports=n},{111:111,114:114,136:136}],110:[function(e,t){"use strict";function n(e,t,n){r.call(this,e,t,n)}var r=e(111),o=e(136),i={touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:o};r.augmentClass(n,i),t.exports=n},{111:111,136:136}],111:[function(e,t){"use strict";function n(e,t,n){r.call(this,e,t,n)}var r=e(105),o=e(137),i={view:function(e){if(e.view)return e.view;var t=o(e);if(null!=t&&t.window===t)return t;var n=t.ownerDocument;return n?n.defaultView||n.parentWindow:window},detail:function(e){return e.detail||0}};r.augmentClass(n,i),t.exports=n},{105:105,137:137}],112:[function(e,t){"use strict";function n(e,t,n){r.call(this,e,t,n)}var r=e(109),o={deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null};r.augmentClass(n,o),t.exports=n},{109:109}],113:[function(e,t){"use strict";var n=e(147),r={reinitializeTransaction:function(){this.transactionWrappers=this.getTransactionWrappers(),this.wrapperInitData?this.wrapperInitData.length=0:this.wrapperInitData=[],this._isInTransaction=!1},_isInTransaction:!1,getTransactionWrappers:null,isInTransaction:function(){return!!this._isInTransaction},perform:function(e,t,r,o,i,a,s,u){n(!this.isInTransaction());var l,c;try{this._isInTransaction=!0,l=!0,this.initializeAll(0),c=e.call(t,r,o,i,a,s,u),l=!1}finally{try{if(l)try{this.closeAll(0)}catch(p){}else this.closeAll(0)}finally{this._isInTransaction=!1}}return c},initializeAll:function(e){for(var t=this.transactionWrappers,n=e;n<t.length;n++){var r=t[n];try{this.wrapperInitData[n]=o.OBSERVED_ERROR,this.wrapperInitData[n]=r.initialize?r.initialize.call(this):null}finally{if(this.wrapperInitData[n]===o.OBSERVED_ERROR)try{this.initializeAll(n+1)}catch(i){}}}},closeAll:function(e){n(this.isInTransaction());for(var t=this.transactionWrappers,r=e;r<t.length;r++){var i,a=t[r],s=this.wrapperInitData[r];try{i=!0,s!==o.OBSERVED_ERROR&&a.close&&a.close.call(this,s),i=!1}finally{if(i)try{this.closeAll(r+1)}catch(u){}}}this.wrapperInitData.length=0}},o={Mixin:r,OBSERVED_ERROR:{}};t.exports=o},{147:147}],114:[function(e,t){"use strict";var n={currentScrollLeft:0,currentScrollTop:0,refreshScrollValues:function(e){n.currentScrollLeft=e.x,n.currentScrollTop=e.y}};t.exports=n},{}],115:[function(e,t){"use strict";function n(e,t){if(r(null!=t),null==e)return t;var n=Array.isArray(e),o=Array.isArray(t);return n&&o?(e.push.apply(e,t),e):n?(e.push(t),e):o?[e].concat(t):[e,t]}var r=e(147);t.exports=n},{147:147}],116:[function(e,t){"use strict";function n(e){for(var t=1,n=0,o=0;o<e.length;o++)t=(t+e.charCodeAt(o))%r,n=(n+t)%r;return t|n<<16}var r=65521;t.exports=n},{}],117:[function(e,t){function n(e){return e.replace(r,function(e,t){return t.toUpperCase()})}var r=/-(.)/g;t.exports=n},{}],118:[function(e,t){"use strict";function n(e){return r(e.replace(o,"ms-"))}var r=e(117),o=/^-ms-/;t.exports=n},{117:117}],119:[function(e,t){"use strict";function n(e,t){var n=o.mergeProps(t,e.props);return!n.hasOwnProperty(a)&&e.props.hasOwnProperty(a)&&(n.children=e.props.children),r.createElement(e.type,n)}var r=e(61),o=e(81),i=e(154),a=(e(166),i({children:null}));t.exports=n},{154:154,166:166,61:61,81:81}],120:[function(e,t){function n(e,t){return e&&t?e===t?!0:r(e)?!1:r(t)?n(e,t.parentNode):e.contains?e.contains(t):e.compareDocumentPosition?!!(16&e.compareDocumentPosition(t)):!1:!1}var r=e(151);t.exports=n},{151:151}],121:[function(e,t){function n(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"length"in e&&!("setInterval"in e)&&"number"!=typeof e.nodeType&&(Array.isArray(e)||"callee"in e||"item"in e)}function r(e){return n(e)?Array.isArray(e)?e.slice():o(e):[e]}var o=e(163);t.exports=r},{163:163}],122:[function(e,t){"use strict";function n(e){var t=o.createFactory(e),n=r.createClass({tagName:e.toUpperCase(),displayName:"ReactFullPageComponent"+e,componentWillUnmount:function(){i(!1)},render:function(){return t(this.props)}});return n}var r=e(38),o=e(61),i=e(147);t.exports=n},{147:147,38:38,61:61}],123:[function(e,t){function n(e){var t=e.match(l);return t&&t[1].toLowerCase()}function r(e,t){var r=u;s(!!u);var o=n(e),l=o&&a(o);if(l){r.innerHTML=l[1]+e+l[2];for(var c=l[0];c--;)r=r.lastChild}else r.innerHTML=e;var p=r.getElementsByTagName("script");p.length&&(s(t),i(p).forEach(t));for(var d=i(r.childNodes);r.lastChild;)r.removeChild(r.lastChild);return d}var o=e(22),i=e(121),a=e(139),s=e(147),u=o.canUseDOM?document.createElement("div"):null,l=/^\s*<(\w+)/;t.exports=r},{121:121,139:139,147:147,22:22}],124:[function(e,t){"use strict";function n(e){return"object"==typeof e?Object.keys(e).filter(function(t){return e[t]}).join(" "):Array.prototype.join.call(arguments," ")}e(166);t.exports=n},{166:166}],125:[function(e,t){"use strict";function n(e,t){var n=null==t||"boolean"==typeof t||""===t;if(n)return"";var r=isNaN(t);return r||0===t||o.hasOwnProperty(e)&&o[e]?""+t:("string"==typeof t&&(t=t.trim()),t+"px")}var r=e(5),o=r.isUnitlessNumber;t.exports=n},{5:5}],126:[function(e,t){function n(e){return function(){return e}}function r(){}r.thatReturns=n,r.thatReturnsFalse=n(!1),r.thatReturnsTrue=n(!0),r.thatReturnsNull=n(null),r.thatReturnsThis=function(){return this},r.thatReturnsArgument=function(e){return e},t.exports=r},{}],127:[function(e,t){"use strict";var n={};t.exports=n},{}],128:[function(e,t){"use strict";function n(e){return o[e]}function r(e){return(""+e).replace(i,n)}var o={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},i=/[&><"']/g;t.exports=r},{}],129:[function(e,t){"use strict";function n(e){return null==e?null:a(e)?e:r.has(e)?o.getNodeFromInstance(e):(i(null==e.render||"function"!=typeof e.render),void i(!1))}{var r=(e(45),e(71)),o=e(75),i=e(147),a=e(149);e(166)}t.exports=n},{147:147,149:149,166:166,45:45,71:71,75:75}],130:[function(e,t){"use strict";function n(e,t,n){var r=e,o=!r.hasOwnProperty(n);o&&null!=t&&(r[n]=t)}function r(e){if(null==e)return e;var t={};return o(e,n,t),t}{var o=e(164);e(166)}t.exports=r},{164:164,166:166}],131:[function(e,t){"use strict";function n(e){try{e.focus()}catch(t){}}t.exports=n},{}],132:[function(e,t){"use strict";var n=function(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)};t.exports=n},{}],133:[function(e,t){function n(){try{return document.activeElement||document.body}catch(e){return document.body}}t.exports=n},{}],134:[function(e,t){"use strict";function n(e){var t,n=e.keyCode;return"charCode"in e?(t=e.charCode,0===t&&13===n&&(t=13)):t=n,t>=32||13===t?t:0}t.exports=n},{}],135:[function(e,t){"use strict";function n(e){if(e.key){var t=o[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n=r(e);return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?i[e.keyCode]||"Unidentified":""}var r=e(134),o={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},i={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};t.exports=n},{134:134}],136:[function(e,t){"use strict";function n(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var r=o[e];return r?!!n[r]:!1}function r(){return n}var o={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};t.exports=r},{}],137:[function(e,t){"use strict";function n(e){var t=e.target||e.srcElement||window;return 3===t.nodeType?t.parentNode:t}t.exports=n},{}],138:[function(e,t){"use strict";function n(e){var t=e&&(r&&e[r]||e[o]);return"function"==typeof t?t:void 0}var r="function"==typeof Symbol&&Symbol.iterator,o="@@iterator";t.exports=n},{}],139:[function(e,t){function n(e){return o(!!i),p.hasOwnProperty(e)||(e="*"),a.hasOwnProperty(e)||(i.innerHTML="*"===e?"<link />":"<"+e+"></"+e+">",a[e]=!i.firstChild),a[e]?p[e]:null}var r=e(22),o=e(147),i=r.canUseDOM?document.createElement("div"):null,a={circle:!0,defs:!0,ellipse:!0,g:!0,line:!0,linearGradient:!0,path:!0,polygon:!0,polyline:!0,radialGradient:!0,rect:!0,stop:!0,text:!0},s=[1,'<select multiple="true">',"</select>"],u=[1,"<table>","</table>"],l=[3,"<table><tbody><tr>","</tr></tbody></table>"],c=[1,"<svg>","</svg>"],p={"*":[1,"?<div>","</div>"],area:[1,"<map>","</map>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],legend:[1,"<fieldset>","</fieldset>"],param:[1,"<object>","</object>"],tr:[2,"<table><tbody>","</tbody></table>"],optgroup:s,option:s,caption:u,colgroup:u,tbody:u,tfoot:u,thead:u,td:l,th:l,circle:c,defs:c,ellipse:c,g:c,line:c,linearGradient:c,path:c,polygon:c,polyline:c,radialGradient:c,rect:c,stop:c,text:c};t.exports=n},{147:147,22:22}],140:[function(e,t){"use strict";function n(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function r(e){for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}function o(e,t){for(var o=n(e),i=0,a=0;o;){if(3===o.nodeType){if(a=i+o.textContent.length,t>=i&&a>=t)return{node:o,offset:t-i};i=a}o=n(r(o))}}t.exports=o},{}],141:[function(e,t){"use strict";function n(e){return e?e.nodeType===r?e.documentElement:e.firstChild:null}var r=9;t.exports=n},{}],142:[function(e,t){"use strict";function n(){return!o&&r.canUseDOM&&(o="textContent"in document.documentElement?"textContent":"innerText"),o}var r=e(22),o=null;t.exports=n},{22:22}],143:[function(e,t){"use strict";function n(e){return e===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffset||document.documentElement.scrollTop}:{x:e.scrollLeft,y:e.scrollTop}}t.exports=n},{}],144:[function(e,t){function n(e){return e.replace(r,"-$1").toLowerCase()}var r=/([A-Z])/g;t.exports=n},{}],145:[function(e,t){"use strict";function n(e){return r(e).replace(o,"-ms-")}var r=e(144),o=/^ms-/;t.exports=n},{144:144}],146:[function(e,t){"use strict";function n(e){return"function"==typeof e&&"function"==typeof e.prototype.mountComponent&&"function"==typeof e.prototype.receiveComponent}function r(e,t){var r;if((null===e||e===!1)&&(e=i.emptyElement),"object"==typeof e){var o=e;r=t===o.type&&"string"==typeof o.type?a.createInternalComponent(o):n(o.type)?new o.type(o):new l}else"string"==typeof e||"number"==typeof e?r=a.createInstanceForText(e):u(!1);return r.construct(e),r._mountIndex=0,r._mountImage=null,r}var o=e(43),i=e(63),a=e(78),s=e(29),u=e(147),l=(e(166),function(){});s(l.prototype,o.Mixin,{_instantiateReactComponent:r}),t.exports=r},{147:147,166:166,29:29,43:43,63:63,78:78}],147:[function(e,t){"use strict";var n=function(e,t,n,r,o,i,a,s){if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,o,i,a,s],c=0;u=new Error("Invariant Violation: "+t.replace(/%s/g,function(){return l[c++]}))}throw u.framesToPop=1,u}};t.exports=n},{}],148:[function(e,t){"use strict";function n(e,t){if(!o.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,i=n in document;if(!i){var a=document.createElement("div");a.setAttribute(n,"return;"),i="function"==typeof a[n]}return!i&&r&&"wheel"===e&&(i=document.implementation.hasFeature("Events.wheel","3.0")),i}var r,o=e(22);o.canUseDOM&&(r=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0),t.exports=n},{22:22}],149:[function(e,t){function n(e){return!(!e||!("function"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName))}t.exports=n},{}],150:[function(e,t){"use strict";function n(e){return e&&("INPUT"===e.nodeName&&r[e.type]||"TEXTAREA"===e.nodeName)}var r={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};t.exports=n},{}],151:[function(e,t){function n(e){return r(e)&&3==e.nodeType}var r=e(149);t.exports=n},{149:149}],152:[function(e,t){"use strict";function n(e){e||(e="");var t,n=arguments.length;if(n>1)for(var r=1;n>r;r++)t=arguments[r],t&&(e=(e?e+" ":"")+t);return e}t.exports=n},{}],153:[function(e,t){"use strict";var n=e(147),r=function(e){var t,r={};n(e instanceof Object&&!Array.isArray(e));for(t in e)e.hasOwnProperty(t)&&(r[t]=t);return r};t.exports=r},{147:147}],154:[function(e,t){var n=function(e){var t;for(t in e)if(e.hasOwnProperty(t))return t;return null};t.exports=n},{}],155:[function(e,t){"use strict";function n(e,t,n){if(!e)return null;var o={};for(var i in e)r.call(e,i)&&(o[i]=t.call(n,e[i],i,e));return o}var r=Object.prototype.hasOwnProperty;t.exports=n},{}],156:[function(e,t){"use strict";function n(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}t.exports=n},{}],157:[function(e,t){"use strict";function n(e){return o(r.isValidElement(e)),e}var r=e(61),o=e(147);t.exports=n},{147:147,61:61}],158:[function(e,t){"use strict";function n(e){return'"'+r(e)+'"'}var r=e(128);t.exports=n},{128:128}],159:[function(e,t){"use strict";var n=e(22),r=/^[ \r\n\t\f]/,o=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,i=function(e,t){e.innerHTML=t};if("undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction&&(i=function(e,t){MSApp.execUnsafeLocalFunction(function(){e.innerHTML=t})}),n.canUseDOM){var a=document.createElement("div");a.innerHTML=" ",""===a.innerHTML&&(i=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),r.test(t)||"<"===t[0]&&o.test(t)){e.innerHTML=""+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t})}t.exports=i},{22:22}],160:[function(e,t){"use strict";var n=e(22),r=e(128),o=e(159),i=function(e,t){e.textContent=t};n.canUseDOM&&("textContent"in document.documentElement||(i=function(e,t){o(e,r(t))})),t.exports=i},{128:128,159:159,22:22}],161:[function(e,t){"use strict";function n(e,t){if(e===t)return!0;var n;for(n in e)if(e.hasOwnProperty(n)&&(!t.hasOwnProperty(n)||e[n]!==t[n]))return!1;for(n in t)if(t.hasOwnProperty(n)&&!e.hasOwnProperty(n))return!1;return!0}t.exports=n},{}],162:[function(e,t){"use strict";function n(e,t){if(null!=e&&null!=t){var n=typeof e,r=typeof t;if("string"===n||"number"===n)return"string"===r||"number"===r;if("object"===r&&e.type===t.type&&e.key===t.key){var o=e._owner===t._owner;
-return o}}return!1}e(166);t.exports=n},{166:166}],163:[function(e,t){function n(e){var t=e.length;if(r(!Array.isArray(e)&&("object"==typeof e||"function"==typeof e)),r("number"==typeof t),r(0===t||t-1 in e),e.hasOwnProperty)try{return Array.prototype.slice.call(e)}catch(n){}for(var o=Array(t),i=0;t>i;i++)o[i]=e[i];return o}var r=e(147);t.exports=n},{147:147}],164:[function(e,t){"use strict";function n(e){return m[e]}function r(e,t){return e&&null!=e.key?i(e.key):t.toString(36)}function o(e){return(""+e).replace(v,n)}function i(e){return"$"+o(e)}function a(e,t,n,o,s){var c=typeof e;if(("undefined"===c||"boolean"===c)&&(e=null),null===e||"string"===c||"number"===c||u.isValidElement(e))return o(s,e,""===t?f+r(e,0):t,n),1;var m,v,g,y=0;if(Array.isArray(e))for(var C=0;C<e.length;C++)m=e[C],v=(""!==t?t+h:f)+r(m,C),g=n+y,y+=a(m,v,g,o,s);else{var E=p(e);if(E){var b,_=E.call(e);if(E!==e.entries)for(var x=0;!(b=_.next()).done;)m=b.value,v=(""!==t?t+h:f)+r(m,x++),g=n+y,y+=a(m,v,g,o,s);else for(;!(b=_.next()).done;){var D=b.value;D&&(m=D[1],v=(""!==t?t+h:f)+i(D[0])+h+r(m,0),g=n+y,y+=a(m,v,g,o,s))}}else if("object"===c){d(1!==e.nodeType);var M=l.extract(e);for(var T in M)M.hasOwnProperty(T)&&(m=M[T],v=(""!==t?t+h:f)+i(T)+h+r(m,0),g=n+y,y+=a(m,v,g,o,s))}}return y}function s(e,t,n){return null==e?0:a(e,"",0,t,n)}var u=e(61),l=e(67),c=e(70),p=e(138),d=e(147),f=(e(166),c.SEPARATOR),h=":",m={"=":"=0",".":"=1",":":"=2"},v=/[=.:]/g;t.exports=s},{138:138,147:147,166:166,61:61,67:67,70:70}],165:[function(e,t){"use strict";function n(e){return Array.isArray(e)?e.concat():e&&"object"==typeof e?i(new e.constructor,e):e}function r(e,t,n){s(Array.isArray(e));var r=t[n];s(Array.isArray(r))}function o(e,t){if(s("object"==typeof t),t.hasOwnProperty(p))return s(1===Object.keys(t).length),t[p];var a=n(e);if(t.hasOwnProperty(d)){var h=t[d];s(h&&"object"==typeof h),s(a&&"object"==typeof a),i(a,t[d])}t.hasOwnProperty(u)&&(r(e,t,u),t[u].forEach(function(e){a.push(e)})),t.hasOwnProperty(l)&&(r(e,t,l),t[l].forEach(function(e){a.unshift(e)})),t.hasOwnProperty(c)&&(s(Array.isArray(e)),s(Array.isArray(t[c])),t[c].forEach(function(e){s(Array.isArray(e)),a.splice.apply(a,e)})),t.hasOwnProperty(f)&&(s("function"==typeof t[f]),a=t[f](a));for(var v in t)m.hasOwnProperty(v)&&m[v]||(a[v]=o(e[v],t[v]));return a}var i=e(29),a=e(154),s=e(147),u=a({$push:null}),l=a({$unshift:null}),c=a({$splice:null}),p=a({$set:null}),d=a({$merge:null}),f=a({$apply:null}),h=[u,l,c,p,d,f],m={};h.forEach(function(e){m[e]=!0}),t.exports=o},{147:147,154:154,29:29}],166:[function(e,t){"use strict";var n=e(126),r=n;t.exports=r},{126:126}]},{},[1])(1)}); \ No newline at end of file
diff --git a/web/static/js/react-with-addons-0.13.1.js b/web/static/js/react-with-addons-0.13.3.js
index ceff91b31..c1578b776 100644
--- a/web/static/js/react-with-addons-0.13.1.js
+++ b/web/static/js/react-with-addons-0.13.3.js
@@ -1,5 +1,5 @@
/**
- * React (with addons) v0.13.1
+ * React (with addons) v0.13.3
*/
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.React = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
/**
@@ -710,7 +710,9 @@ var isUnitlessNumber = {
columnCount: true,
flex: true,
flexGrow: true,
+ flexPositive: true,
flexShrink: true,
+ flexNegative: true,
fontWeight: true,
lineClamp: true,
lineHeight: true,
@@ -723,7 +725,9 @@ var isUnitlessNumber = {
// SVG-related properties
fillOpacity: true,
- strokeOpacity: true
+ strokeDashoffset: true,
+ strokeOpacity: true,
+ strokeWidth: true
};
/**
@@ -3788,6 +3792,7 @@ var HTMLDOMPropertyConfig = {
headers: null,
height: MUST_USE_ATTRIBUTE,
hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
+ high: null,
href: null,
hrefLang: null,
htmlFor: null,
@@ -3798,6 +3803,7 @@ var HTMLDOMPropertyConfig = {
lang: null,
list: MUST_USE_ATTRIBUTE,
loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+ low: null,
manifest: MUST_USE_ATTRIBUTE,
marginHeight: null,
marginWidth: null,
@@ -3812,6 +3818,7 @@ var HTMLDOMPropertyConfig = {
name: null,
noValidate: HAS_BOOLEAN_VALUE,
open: HAS_BOOLEAN_VALUE,
+ optimum: null,
pattern: null,
placeholder: null,
poster: null,
@@ -3825,6 +3832,7 @@ var HTMLDOMPropertyConfig = {
rowSpan: null,
sandbox: null,
scope: null,
+ scoped: HAS_BOOLEAN_VALUE,
scrolling: null,
seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
@@ -3866,7 +3874,9 @@ var HTMLDOMPropertyConfig = {
itemID: MUST_USE_ATTRIBUTE,
itemRef: MUST_USE_ATTRIBUTE,
// property is supported for OpenGraph in meta tags.
- property: null
+ property: null,
+ // IE-only attribute that controls focus behavior
+ unselectable: MUST_USE_ATTRIBUTE
},
DOMAttributeNames: {
acceptCharset: 'accept-charset',
@@ -4475,7 +4485,7 @@ if ("production" !== "development") {
if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
console.debug(
'Download the React DevTools for a better development experience: ' +
- 'http://fb.me/react-devtools'
+ 'https://fb.me/react-devtools'
);
}
}
@@ -4502,7 +4512,7 @@ if ("production" !== "development") {
if (!expectedFeatures[i]) {
console.error(
'One or more ES5 shim/shams expected by React are not available: ' +
- 'http://fb.me/react-warning-polyfills'
+ 'https://fb.me/react-warning-polyfills'
);
break;
}
@@ -4510,7 +4520,7 @@ if ("production" !== "development") {
}
}
-React.version = '0.13.1';
+React.version = '0.13.3';
module.exports = React;
@@ -6229,7 +6239,7 @@ var ReactClass = {
("production" !== "development" ? warning(
this instanceof Constructor,
'Something is calling a React component directly. Use a factory or ' +
- 'JSX instead. See: http://fb.me/react-legacyfactory'
+ 'JSX instead. See: https://fb.me/react-legacyfactory'
) : null);
}
@@ -6439,20 +6449,38 @@ ReactComponent.prototype.forceUpdate = function(callback) {
*/
if ("production" !== "development") {
var deprecatedAPIs = {
- getDOMNode: 'getDOMNode',
- isMounted: 'isMounted',
- replaceProps: 'replaceProps',
- replaceState: 'replaceState',
- setProps: 'setProps'
+ getDOMNode: [
+ 'getDOMNode',
+ 'Use React.findDOMNode(component) instead.'
+ ],
+ isMounted: [
+ 'isMounted',
+ 'Instead, make sure to clean up subscriptions and pending requests in ' +
+ 'componentWillUnmount to prevent memory leaks.'
+ ],
+ replaceProps: [
+ 'replaceProps',
+ 'Instead call React.render again at the top level.'
+ ],
+ replaceState: [
+ 'replaceState',
+ 'Refactor your code to use setState instead (see ' +
+ 'https://github.com/facebook/react/issues/3236).'
+ ],
+ setProps: [
+ 'setProps',
+ 'Instead call React.render again at the top level.'
+ ]
};
- var defineDeprecationWarning = function(methodName, displayName) {
+ var defineDeprecationWarning = function(methodName, info) {
try {
Object.defineProperty(ReactComponent.prototype, methodName, {
get: function() {
("production" !== "development" ? warning(
false,
- '%s(...) is deprecated in plain JavaScript React classes.',
- displayName
+ '%s(...) is deprecated in plain JavaScript React classes. %s',
+ info[0],
+ info[1]
) : null);
return undefined;
}
@@ -6803,6 +6831,14 @@ var ReactCompositeComponentMixin = {
this.getName() || 'a component'
) : null);
("production" !== "development" ? warning(
+ !inst.getDefaultProps ||
+ inst.getDefaultProps.isReactClassApproved,
+ 'getDefaultProps was defined on %s, a plain JavaScript class. ' +
+ 'This is only supported for classes created using React.createClass. ' +
+ 'Use a static property to define defaultProps instead.',
+ this.getName() || 'a component'
+ ) : null);
+ ("production" !== "development" ? warning(
!inst.propTypes,
'propTypes was defined as an instance property on %s. Use a static ' +
'property to define propTypes instead.',
@@ -6838,6 +6874,7 @@ var ReactCompositeComponentMixin = {
this._pendingReplaceState = false;
this._pendingForceUpdate = false;
+ var childContext;
var renderedElement;
var previouslyMounting = ReactLifeCycle.currentlyMountingInstance;
@@ -6852,7 +6889,8 @@ var ReactCompositeComponentMixin = {
}
}
- renderedElement = this._renderValidatedComponent();
+ childContext = this._getValidatedChildContext(context);
+ renderedElement = this._renderValidatedComponent(childContext);
} finally {
ReactLifeCycle.currentlyMountingInstance = previouslyMounting;
}
@@ -6866,7 +6904,7 @@ var ReactCompositeComponentMixin = {
this._renderedComponent,
rootID,
transaction,
- this._processChildContext(context)
+ this._mergeChildContext(context, childContext)
);
if (inst.componentDidMount) {
transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);
@@ -6996,7 +7034,7 @@ var ReactCompositeComponentMixin = {
* @return {object}
* @private
*/
- _processChildContext: function(currentContext) {
+ _getValidatedChildContext: function(currentContext) {
var inst = this._instance;
var childContext = inst.getChildContext && inst.getChildContext();
if (childContext) {
@@ -7021,6 +7059,13 @@ var ReactCompositeComponentMixin = {
name
) : invariant(name in inst.constructor.childContextTypes));
}
+ return childContext;
+ }
+ return null;
+ },
+
+ _mergeChildContext: function(currentContext, childContext) {
+ if (childContext) {
return assign({}, currentContext, childContext);
}
return currentContext;
@@ -7280,6 +7325,10 @@ var ReactCompositeComponentMixin = {
return inst.state;
}
+ if (replace && queue.length === 1) {
+ return queue[0];
+ }
+
var nextState = assign({}, replace ? queue[0] : inst.state);
for (var i = replace ? 1 : 0; i < queue.length; i++) {
var partial = queue[i];
@@ -7349,13 +7398,14 @@ var ReactCompositeComponentMixin = {
_updateRenderedComponent: function(transaction, context) {
var prevComponentInstance = this._renderedComponent;
var prevRenderedElement = prevComponentInstance._currentElement;
- var nextRenderedElement = this._renderValidatedComponent();
+ var childContext = this._getValidatedChildContext();
+ var nextRenderedElement = this._renderValidatedComponent(childContext);
if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {
ReactReconciler.receiveComponent(
prevComponentInstance,
nextRenderedElement,
transaction,
- this._processChildContext(context)
+ this._mergeChildContext(context, childContext)
);
} else {
// These two IDs are actually the same! But nothing should rely on that.
@@ -7371,7 +7421,7 @@ var ReactCompositeComponentMixin = {
this._renderedComponent,
thisID,
transaction,
- context
+ this._mergeChildContext(context, childContext)
);
this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup);
}
@@ -7409,11 +7459,12 @@ var ReactCompositeComponentMixin = {
/**
* @private
*/
- _renderValidatedComponent: function() {
+ _renderValidatedComponent: function(childContext) {
var renderedComponent;
var previousContext = ReactContext.current;
- ReactContext.current = this._processChildContext(
- this._currentElement._context
+ ReactContext.current = this._mergeChildContext(
+ this._currentElement._context,
+ childContext
);
ReactCurrentOwner.current = this;
try {
@@ -7778,6 +7829,7 @@ var ReactDOM = mapObject({
// SVG
circle: 'circle',
+ clipPath: 'clipPath',
defs: 'defs',
ellipse: 'ellipse',
g: 'g',
@@ -7927,11 +7979,13 @@ function assertValidProps(props) {
'Can only set one of `children` or `props.dangerouslySetInnerHTML`.'
) : invariant(props.children == null));
("production" !== "development" ? invariant(
- props.dangerouslySetInnerHTML.__html != null,
+ typeof props.dangerouslySetInnerHTML === 'object' &&
+ '__html' in props.dangerouslySetInnerHTML,
'`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' +
- 'Please visit http://fb.me/react-invariant-dangerously-set-inner-html ' +
+ 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' +
'for more information.'
- ) : invariant(props.dangerouslySetInnerHTML.__html != null));
+ ) : invariant(typeof props.dangerouslySetInnerHTML === 'object' &&
+ '__html' in props.dangerouslySetInnerHTML));
}
if ("production" !== "development") {
("production" !== "development" ? warning(
@@ -8239,6 +8293,8 @@ ReactDOMComponent.Mixin = {
if (propKey === STYLE) {
if (nextProp) {
nextProp = this._previousStyleCopy = assign({}, nextProp);
+ } else {
+ this._previousStyleCopy = null;
}
if (lastProp) {
// Unset styles on `lastProp` but not on `nextProp`.
@@ -10721,7 +10777,7 @@ function warnAndMonitorForKeyUse(message, element, parentType) {
("production" !== "development" ? warning(
false,
- message + '%s%s See http://fb.me/react-warning-keys for more information.',
+ message + '%s%s See https://fb.me/react-warning-keys for more information.',
parentOrOwnerAddendum,
childOwnerAddendum
) : null);
@@ -10845,9 +10901,9 @@ function warnForPropsMutation(propName, element) {
("production" !== "development" ? warning(
false,
- 'Don\'t set .props.%s of the React component%s. ' +
- 'Instead, specify the correct value when ' +
- 'initially creating the element.%s',
+ 'Don\'t set .props.%s of the React component%s. Instead, specify the ' +
+ 'correct value when initially creating the element or use ' +
+ 'React.cloneElement to make a new element with updated props.%s',
propName,
elementInfo,
ownerInfo
@@ -15236,6 +15292,7 @@ var ReactUpdates = _dereq_(100);
var SyntheticEvent = _dereq_(108);
var assign = _dereq_(29);
+var emptyObject = _dereq_(130);
var topLevelTypes = EventConstants.topLevelTypes;
@@ -15577,6 +15634,9 @@ assign(
);
ReactShallowRenderer.prototype.render = function(element, context) {
+ if (!context) {
+ context = emptyObject;
+ }
var transaction = ReactUpdates.ReactReconcileTransaction.getPooled();
this._render(element, transaction, context);
ReactUpdates.ReactReconcileTransaction.release(transaction);
@@ -15717,7 +15777,7 @@ for (eventType in topLevelTypes) {
module.exports = ReactTestUtils;
-},{"100":100,"108":108,"16":16,"18":18,"21":21,"29":29,"31":31,"33":33,"43":43,"63":63,"65":65,"72":72,"73":73,"77":77}],96:[function(_dereq_,module,exports){
+},{"100":100,"108":108,"130":130,"16":16,"18":18,"21":21,"29":29,"31":31,"33":33,"43":43,"63":63,"65":65,"72":72,"73":73,"77":77}],96:[function(_dereq_,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -16762,6 +16822,7 @@ var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;
var SVGDOMPropertyConfig = {
Properties: {
+ clipPath: MUST_USE_ATTRIBUTE,
cx: MUST_USE_ATTRIBUTE,
cy: MUST_USE_ATTRIBUTE,
d: MUST_USE_ATTRIBUTE,
@@ -16807,6 +16868,7 @@ var SVGDOMPropertyConfig = {
y: MUST_USE_ATTRIBUTE
},
DOMAttributeNames: {
+ clipPath: 'clip-path',
fillOpacity: 'fill-opacity',
fontFamily: 'font-family',
fontSize: 'font-size',
@@ -19713,6 +19775,7 @@ var shouldWrap = {
// Force wrapping for SVG elements because if they get created inside a <div>,
// they will be initialized in the wrong namespace (and will not display).
'circle': true,
+ 'clipPath': true,
'defs': true,
'ellipse': true,
'g': true,
@@ -19755,6 +19818,7 @@ var markupWrap = {
'th': trWrap,
'circle': svgWrap,
+ 'clipPath': svgWrap,
'defs': svgWrap,
'ellipse': svgWrap,
'g': svgWrap,
@@ -20100,6 +20164,7 @@ assign(
function isInternalComponentType(type) {
return (
typeof type === 'function' &&
+ typeof type.prototype !== 'undefined' &&
typeof type.prototype.mountComponent === 'function' &&
typeof type.prototype.receiveComponent === 'function'
);
@@ -21355,11 +21420,14 @@ module.exports = traverseAllChildren;
* @providesModule update
*/
+ /* global hasOwnProperty:true */
+
'use strict';
var assign = _dereq_(29);
var keyOf = _dereq_(157);
var invariant = _dereq_(150);
+var hasOwnProperty = {}.hasOwnProperty;
function shallowCopy(x) {
if (Array.isArray(x)) {
@@ -21419,7 +21487,7 @@ function update(value, spec) {
COMMAND_SET
) : invariant(typeof spec === 'object'));
- if (spec.hasOwnProperty(COMMAND_SET)) {
+ if (hasOwnProperty.call(spec, COMMAND_SET)) {
("production" !== "development" ? invariant(
Object.keys(spec).length === 1,
'Cannot have more than one key in an object with %s',
@@ -21431,7 +21499,7 @@ function update(value, spec) {
var nextValue = shallowCopy(value);
- if (spec.hasOwnProperty(COMMAND_MERGE)) {
+ if (hasOwnProperty.call(spec, COMMAND_MERGE)) {
var mergeObj = spec[COMMAND_MERGE];
("production" !== "development" ? invariant(
mergeObj && typeof mergeObj === 'object',
@@ -21448,21 +21516,21 @@ function update(value, spec) {
assign(nextValue, spec[COMMAND_MERGE]);
}
- if (spec.hasOwnProperty(COMMAND_PUSH)) {
+ if (hasOwnProperty.call(spec, COMMAND_PUSH)) {
invariantArrayCase(value, spec, COMMAND_PUSH);
spec[COMMAND_PUSH].forEach(function(item) {
nextValue.push(item);
});
}
- if (spec.hasOwnProperty(COMMAND_UNSHIFT)) {
+ if (hasOwnProperty.call(spec, COMMAND_UNSHIFT)) {
invariantArrayCase(value, spec, COMMAND_UNSHIFT);
spec[COMMAND_UNSHIFT].forEach(function(item) {
nextValue.unshift(item);
});
}
- if (spec.hasOwnProperty(COMMAND_SPLICE)) {
+ if (hasOwnProperty.call(spec, COMMAND_SPLICE)) {
("production" !== "development" ? invariant(
Array.isArray(value),
'Expected %s target to be an array; got %s',
@@ -21488,7 +21556,7 @@ function update(value, spec) {
});
}
- if (spec.hasOwnProperty(COMMAND_APPLY)) {
+ if (hasOwnProperty.call(spec, COMMAND_APPLY)) {
("production" !== "development" ? invariant(
typeof spec[COMMAND_APPLY] === 'function',
'update(): expected spec of %s to be a function; got %s.',
diff --git a/web/static/js/react-with-addons-0.13.3.min.js b/web/static/js/react-with-addons-0.13.3.min.js
new file mode 100644
index 000000000..0e20d1ceb
--- /dev/null
+++ b/web/static/js/react-with-addons-0.13.3.min.js
@@ -0,0 +1,18 @@
+/**
+ * React (with addons) v0.13.3
+ *
+ * Copyright 2013-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.React=e()}}(function(){return function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[a]={exports:{}};t[a][0].call(c.exports,function(e){var n=t[a][1][e];return o(n?n:e)},c,c.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a<r.length;a++)o(r[a]);return o}({1:[function(e,t,n){"use strict";var r=e(25),o=e(31),i=e(42),a=e(34),s=e(67),u=e(95),l=e(97),c=e(124),p=e(119),d=e(165);o.addons={CSSTransitionGroup:a,LinkedStateMixin:r,PureRenderMixin:i,TransitionGroup:u,batchedUpdates:l.batchedUpdates,classSet:c,cloneWithProps:p,createFragment:s.create,update:d},t.exports=o},{119:119,124:124,165:165,25:25,31:31,34:34,42:42,67:67,95:95,97:97}],2:[function(e,t,n){"use strict";var r=e(131),o={componentDidMount:function(){this.props.autoFocus&&r(this.getDOMNode())}};t.exports=o},{131:131}],3:[function(e,t,n){"use strict";function r(){var e=window.opera;return"object"==typeof e&&"function"==typeof e.version&&parseInt(e.version(),10)<=12}function o(e){return(e.ctrlKey||e.altKey||e.metaKey)&&!(e.ctrlKey&&e.altKey)}function i(e){switch(e){case P.topCompositionStart:return I.compositionStart;case P.topCompositionEnd:return I.compositionEnd;case P.topCompositionUpdate:return I.compositionUpdate}}function a(e,t){return e===P.topKeyDown&&t.keyCode===b}function s(e,t){switch(e){case P.topKeyUp:return-1!==E.indexOf(t.keyCode);case P.topKeyDown:return t.keyCode!==b;case P.topKeyPress:case P.topMouseDown:case P.topBlur:return!0;default:return!1}}function u(e){var t=e.detail;return"object"==typeof t&&"data"in t?t.data:null}function l(e,t,n,r){var o,l;if(_?o=i(e):w?s(e,r)&&(o=I.compositionEnd):a(e,r)&&(o=I.compositionStart),!o)return null;M&&(w||o!==I.compositionStart?o===I.compositionEnd&&w&&(l=w.getData()):w=v.getPooled(t));var c=g.getPooled(o,n,r);if(l)c.data=l;else{var p=u(r);null!==p&&(c.data=p)}return h.accumulateTwoPhaseDispatches(c),c}function c(e,t){switch(e){case P.topCompositionEnd:return u(t);case P.topKeyPress:var n=t.which;return n!==T?null:(R=!0,N);case P.topTextInput:var r=t.data;return r===N&&R?null:r;default:return null}}function p(e,t){if(w){if(e===P.topCompositionEnd||s(e,t)){var n=w.getData();return v.release(w),w=null,n}return null}switch(e){case P.topPaste:return null;case P.topKeyPress:return t.which&&!o(t)?String.fromCharCode(t.which):null;case P.topCompositionEnd:return M?null:t.data;default:return null}}function d(e,t,n,r){var o;if(o=D?c(e,r):p(e,r),!o)return null;var i=y.getPooled(I.beforeInput,n,r);return i.data=o,h.accumulateTwoPhaseDispatches(i),i}var f=e(16),h=e(21),m=e(22),v=e(23),g=e(103),y=e(107),C=e(154),E=[9,13,27,32],b=229,_=m.canUseDOM&&"CompositionEvent"in window,x=null;m.canUseDOM&&"documentMode"in document&&(x=document.documentMode);var D=m.canUseDOM&&"TextEvent"in window&&!x&&!r(),M=m.canUseDOM&&(!_||x&&x>8&&11>=x),T=32,N=String.fromCharCode(T),P=f.topLevelTypes,I={beforeInput:{phasedRegistrationNames:{bubbled:C({onBeforeInput:null}),captured:C({onBeforeInputCapture:null})},dependencies:[P.topCompositionEnd,P.topKeyPress,P.topTextInput,P.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:C({onCompositionEnd:null}),captured:C({onCompositionEndCapture:null})},dependencies:[P.topBlur,P.topCompositionEnd,P.topKeyDown,P.topKeyPress,P.topKeyUp,P.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:C({onCompositionStart:null}),captured:C({onCompositionStartCapture:null})},dependencies:[P.topBlur,P.topCompositionStart,P.topKeyDown,P.topKeyPress,P.topKeyUp,P.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:C({onCompositionUpdate:null}),captured:C({onCompositionUpdateCapture:null})},dependencies:[P.topBlur,P.topCompositionUpdate,P.topKeyDown,P.topKeyPress,P.topKeyUp,P.topMouseDown]}},R=!1,w=null,O={eventTypes:I,extractEvents:function(e,t,n,r){return[l(e,t,n,r),d(e,t,n,r)]}};t.exports=O},{103:103,107:107,154:154,16:16,21:21,22:22,23:23}],4:[function(e,t,n){var r=e(147),o={addClass:function(e,t){return r(!/\s/.test(t)),t&&(e.classList?e.classList.add(t):o.hasClass(e,t)||(e.className=e.className+" "+t)),e},removeClass:function(e,t){return r(!/\s/.test(t)),t&&(e.classList?e.classList.remove(t):o.hasClass(e,t)&&(e.className=e.className.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,""))),e},conditionClass:function(e,t,n){return(n?o.addClass:o.removeClass)(e,t)},hasClass:function(e,t){return r(!/\s/.test(t)),e.classList?!!t&&e.classList.contains(t):(" "+e.className+" ").indexOf(" "+t+" ")>-1}};t.exports=o},{147:147}],5:[function(e,t,n){"use strict";function r(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var o={boxFlex:!0,boxFlexGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,strokeDashoffset:!0,strokeOpacity:!0,strokeWidth:!0},i=["Webkit","ms","Moz","O"];Object.keys(o).forEach(function(e){i.forEach(function(t){o[r(t,e)]=o[e]})});var a={background:{backgroundImage:!0,backgroundPosition:!0,backgroundRepeat:!0,backgroundColor:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0}},s={isUnitlessNumber:o,shorthandPropertyExpansions:a};t.exports=s},{}],6:[function(e,t,n){"use strict";var r=e(5),o=e(22),i=(e(118),e(125)),a=e(145),s=e(156),u=(e(166),s(function(e){return a(e)})),l="cssFloat";o.canUseDOM&&void 0===document.documentElement.style.cssFloat&&(l="styleFloat");var c={createMarkupForStyles:function(e){var t="";for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];null!=r&&(t+=u(n)+":",t+=i(n,r)+";")}return t||null},setValueForStyles:function(e,t){var n=e.style;for(var o in t)if(t.hasOwnProperty(o)){var a=i(o,t[o]);if("float"===o&&(o=l),a)n[o]=a;else{var s=r.shorthandPropertyExpansions[o];if(s)for(var u in s)n[u]="";else n[o]=""}}}};t.exports=c},{118:118,125:125,145:145,156:156,166:166,22:22,5:5}],7:[function(e,t,n){"use strict";function r(){this._callbacks=null,this._contexts=null}var o=e(30),i=e(29),a=e(147);i(r.prototype,{enqueue:function(e,t){this._callbacks=this._callbacks||[],this._contexts=this._contexts||[],this._callbacks.push(e),this._contexts.push(t)},notifyAll:function(){var e=this._callbacks,t=this._contexts;if(e){a(e.length===t.length),this._callbacks=null,this._contexts=null;for(var n=0,r=e.length;r>n;n++)e[n].call(t[n]);e.length=0,t.length=0}},reset:function(){this._callbacks=null,this._contexts=null},destructor:function(){this.reset()}}),o.addPoolingTo(r),t.exports=r},{147:147,29:29,30:30}],8:[function(e,t,n){"use strict";function r(e){return"SELECT"===e.nodeName||"INPUT"===e.nodeName&&"file"===e.type}function o(e){var t=x.getPooled(P.change,R,e);E.accumulateTwoPhaseDispatches(t),_.batchedUpdates(i,t)}function i(e){C.enqueueEvents(e),C.processEventQueue()}function a(e,t){I=e,R=t,I.attachEvent("onchange",o)}function s(){I&&(I.detachEvent("onchange",o),I=null,R=null)}function u(e,t,n){return e===N.topChange?n:void 0}function l(e,t,n){e===N.topFocus?(s(),a(t,n)):e===N.topBlur&&s()}function c(e,t){I=e,R=t,w=e.value,O=Object.getOwnPropertyDescriptor(e.constructor.prototype,"value"),Object.defineProperty(I,"value",k),I.attachEvent("onpropertychange",d)}function p(){I&&(delete I.value,I.detachEvent("onpropertychange",d),I=null,R=null,w=null,O=null)}function d(e){if("value"===e.propertyName){var t=e.srcElement.value;t!==w&&(w=t,o(e))}}function f(e,t,n){return e===N.topInput?n:void 0}function h(e,t,n){e===N.topFocus?(p(),c(t,n)):e===N.topBlur&&p()}function m(e,t,n){return e!==N.topSelectionChange&&e!==N.topKeyUp&&e!==N.topKeyDown||!I||I.value===w?void 0:(w=I.value,R)}function v(e){return"INPUT"===e.nodeName&&("checkbox"===e.type||"radio"===e.type)}function g(e,t,n){return e===N.topClick?n:void 0}var y=e(16),C=e(18),E=e(21),b=e(22),_=e(97),x=e(105),D=e(148),M=e(150),T=e(154),N=y.topLevelTypes,P={change:{phasedRegistrationNames:{bubbled:T({onChange:null}),captured:T({onChangeCapture:null})},dependencies:[N.topBlur,N.topChange,N.topClick,N.topFocus,N.topInput,N.topKeyDown,N.topKeyUp,N.topSelectionChange]}},I=null,R=null,w=null,O=null,S=!1;b.canUseDOM&&(S=D("change")&&(!("documentMode"in document)||document.documentMode>8));var A=!1;b.canUseDOM&&(A=D("input")&&(!("documentMode"in document)||document.documentMode>9));var k={get:function(){return O.get.call(this)},set:function(e){w=""+e,O.set.call(this,e)}},L={eventTypes:P,extractEvents:function(e,t,n,o){var i,a;if(r(t)?S?i=u:a=l:M(t)?A?i=f:(i=m,a=h):v(t)&&(i=g),i){var s=i(e,t,n);if(s){var c=x.getPooled(P.change,s,o);return E.accumulateTwoPhaseDispatches(c),c}}a&&a(e,t,n)}};t.exports=L},{105:105,148:148,150:150,154:154,16:16,18:18,21:21,22:22,97:97}],9:[function(e,t,n){"use strict";var r=0,o={createReactRootIndex:function(){return r++}};t.exports=o},{}],10:[function(e,t,n){"use strict";function r(e,t,n){e.insertBefore(t,e.childNodes[n]||null)}var o=e(13),i=e(77),a=e(160),s=e(147),u={dangerouslyReplaceNodeWithMarkup:o.dangerouslyReplaceNodeWithMarkup,updateTextContent:a,processUpdates:function(e,t){for(var n,u=null,l=null,c=0;c<e.length;c++)if(n=e[c],n.type===i.MOVE_EXISTING||n.type===i.REMOVE_NODE){var p=n.fromIndex,d=n.parentNode.childNodes[p],f=n.parentID;s(d),u=u||{},u[f]=u[f]||[],u[f][p]=d,l=l||[],l.push(d)}var h=o.dangerouslyRenderMarkup(t);if(l)for(var m=0;m<l.length;m++)l[m].parentNode.removeChild(l[m]);for(var v=0;v<e.length;v++)switch(n=e[v],n.type){case i.INSERT_MARKUP:r(n.parentNode,h[n.markupIndex],n.toIndex);break;case i.MOVE_EXISTING:r(n.parentNode,u[n.parentID][n.fromIndex],n.toIndex);break;case i.TEXT_CONTENT:a(n.parentNode,n.textContent);break;case i.REMOVE_NODE:}}};t.exports=u},{13:13,147:147,160:160,77:77}],11:[function(e,t,n){"use strict";function r(e,t){return(e&t)===t}var o=e(147),i={MUST_USE_ATTRIBUTE:1,MUST_USE_PROPERTY:2,HAS_SIDE_EFFECTS:4,HAS_BOOLEAN_VALUE:8,HAS_NUMERIC_VALUE:16,HAS_POSITIVE_NUMERIC_VALUE:48,HAS_OVERLOADED_BOOLEAN_VALUE:64,injectDOMPropertyConfig:function(e){var t=e.Properties||{},n=e.DOMAttributeNames||{},a=e.DOMPropertyNames||{},u=e.DOMMutationMethods||{};e.isCustomAttribute&&s._isCustomAttributeFunctions.push(e.isCustomAttribute);for(var l in t){o(!s.isStandardName.hasOwnProperty(l)),s.isStandardName[l]=!0;var c=l.toLowerCase();if(s.getPossibleStandardName[c]=l,n.hasOwnProperty(l)){var p=n[l];s.getPossibleStandardName[p]=l,s.getAttributeName[l]=p}else s.getAttributeName[l]=c;s.getPropertyName[l]=a.hasOwnProperty(l)?a[l]:l,u.hasOwnProperty(l)?s.getMutationMethod[l]=u[l]:s.getMutationMethod[l]=null;var d=t[l];s.mustUseAttribute[l]=r(d,i.MUST_USE_ATTRIBUTE),s.mustUseProperty[l]=r(d,i.MUST_USE_PROPERTY),s.hasSideEffects[l]=r(d,i.HAS_SIDE_EFFECTS),s.hasBooleanValue[l]=r(d,i.HAS_BOOLEAN_VALUE),s.hasNumericValue[l]=r(d,i.HAS_NUMERIC_VALUE),s.hasPositiveNumericValue[l]=r(d,i.HAS_POSITIVE_NUMERIC_VALUE),s.hasOverloadedBooleanValue[l]=r(d,i.HAS_OVERLOADED_BOOLEAN_VALUE),o(!s.mustUseAttribute[l]||!s.mustUseProperty[l]),o(s.mustUseProperty[l]||!s.hasSideEffects[l]),o(!!s.hasBooleanValue[l]+!!s.hasNumericValue[l]+!!s.hasOverloadedBooleanValue[l]<=1)}}},a={},s={ID_ATTRIBUTE_NAME:"data-reactid",isStandardName:{},getPossibleStandardName:{},getAttributeName:{},getPropertyName:{},getMutationMethod:{},mustUseAttribute:{},mustUseProperty:{},hasSideEffects:{},hasBooleanValue:{},hasNumericValue:{},hasPositiveNumericValue:{},hasOverloadedBooleanValue:{},_isCustomAttributeFunctions:[],isCustomAttribute:function(e){for(var t=0;t<s._isCustomAttributeFunctions.length;t++){var n=s._isCustomAttributeFunctions[t];if(n(e))return!0}return!1},getDefaultValueForProperty:function(e,t){var n,r=a[e];return r||(a[e]=r={}),t in r||(n=document.createElement(e),r[t]=n[t]),r[t]},injection:i};t.exports=s},{147:147}],12:[function(e,t,n){"use strict";function r(e,t){return null==t||o.hasBooleanValue[e]&&!t||o.hasNumericValue[e]&&isNaN(t)||o.hasPositiveNumericValue[e]&&1>t||o.hasOverloadedBooleanValue[e]&&t===!1}var o=e(11),i=e(158),a=(e(166),{createMarkupForID:function(e){return o.ID_ATTRIBUTE_NAME+"="+i(e)},createMarkupForProperty:function(e,t){if(o.isStandardName.hasOwnProperty(e)&&o.isStandardName[e]){if(r(e,t))return"";var n=o.getAttributeName[e];return o.hasBooleanValue[e]||o.hasOverloadedBooleanValue[e]&&t===!0?n:n+"="+i(t)}return o.isCustomAttribute(e)?null==t?"":e+"="+i(t):null},setValueForProperty:function(e,t,n){if(o.isStandardName.hasOwnProperty(t)&&o.isStandardName[t]){var i=o.getMutationMethod[t];if(i)i(e,n);else if(r(t,n))this.deleteValueForProperty(e,t);else if(o.mustUseAttribute[t])e.setAttribute(o.getAttributeName[t],""+n);else{var a=o.getPropertyName[t];o.hasSideEffects[t]&&""+e[a]==""+n||(e[a]=n)}}else o.isCustomAttribute(t)&&(null==n?e.removeAttribute(t):e.setAttribute(t,""+n))},deleteValueForProperty:function(e,t){if(o.isStandardName.hasOwnProperty(t)&&o.isStandardName[t]){var n=o.getMutationMethod[t];if(n)n(e,void 0);else if(o.mustUseAttribute[t])e.removeAttribute(o.getAttributeName[t]);else{var r=o.getPropertyName[t],i=o.getDefaultValueForProperty(e.nodeName,r);o.hasSideEffects[t]&&""+e[r]===i||(e[r]=i)}}else o.isCustomAttribute(t)&&e.removeAttribute(t)}});t.exports=a},{11:11,158:158,166:166}],13:[function(e,t,n){"use strict";function r(e){return e.substring(1,e.indexOf(" "))}var o=e(22),i=e(123),a=e(126),s=e(139),u=e(147),l=/^(<[^ \/>]+)/,c="data-danger-index",p={dangerouslyRenderMarkup:function(e){u(o.canUseDOM);for(var t,n={},p=0;p<e.length;p++)u(e[p]),t=r(e[p]),t=s(t)?t:"*",n[t]=n[t]||[],n[t][p]=e[p];var d=[],f=0;for(t in n)if(n.hasOwnProperty(t)){var h,m=n[t];for(h in m)if(m.hasOwnProperty(h)){var v=m[h];m[h]=v.replace(l,"$1 "+c+'="'+h+'" ')}for(var g=i(m.join(""),a),y=0;y<g.length;++y){var C=g[y];C.hasAttribute&&C.hasAttribute(c)&&(h=+C.getAttribute(c),C.removeAttribute(c),u(!d.hasOwnProperty(h)),d[h]=C,f+=1)}}return u(f===d.length),u(d.length===e.length),d},dangerouslyReplaceNodeWithMarkup:function(e,t){u(o.canUseDOM),u(t),u("html"!==e.tagName.toLowerCase());var n=i(t,a)[0];e.parentNode.replaceChild(n,e)}};t.exports=p},{123:123,126:126,139:139,147:147,22:22}],14:[function(e,t,n){"use strict";var r=e(154),o=[r({ResponderEventPlugin:null}),r({SimpleEventPlugin:null}),r({TapEventPlugin:null}),r({EnterLeaveEventPlugin:null}),r({ChangeEventPlugin:null}),r({SelectEventPlugin:null}),r({BeforeInputEventPlugin:null}),r({AnalyticsEventPlugin:null}),r({MobileSafariClickEventPlugin:null})];t.exports=o},{154:154}],15:[function(e,t,n){"use strict";var r=e(16),o=e(21),i=e(109),a=e(75),s=e(154),u=r.topLevelTypes,l=a.getFirstReactDOM,c={mouseEnter:{registrationName:s({onMouseEnter:null}),dependencies:[u.topMouseOut,u.topMouseOver]},mouseLeave:{registrationName:s({onMouseLeave:null}),dependencies:[u.topMouseOut,u.topMouseOver]}},p=[null,null],d={eventTypes:c,extractEvents:function(e,t,n,r){if(e===u.topMouseOver&&(r.relatedTarget||r.fromElement))return null;if(e!==u.topMouseOut&&e!==u.topMouseOver)return null;var s;if(t.window===t)s=t;else{var d=t.ownerDocument;s=d?d.defaultView||d.parentWindow:window}var f,h;if(e===u.topMouseOut?(f=t,h=l(r.relatedTarget||r.toElement)||s):(f=s,h=t),f===h)return null;var m=f?a.getID(f):"",v=h?a.getID(h):"",g=i.getPooled(c.mouseLeave,m,r);g.type="mouseleave",g.target=f,g.relatedTarget=h;var y=i.getPooled(c.mouseEnter,v,r);return y.type="mouseenter",y.target=h,y.relatedTarget=f,o.accumulateEnterLeaveDispatches(g,y,m,v),p[0]=g,p[1]=y,p}};t.exports=d},{109:109,154:154,16:16,21:21,75:75}],16:[function(e,t,n){"use strict";var r=e(153),o=r({bubbled:null,captured:null}),i=r({topBlur:null,topChange:null,topClick:null,topCompositionEnd:null,topCompositionStart:null,topCompositionUpdate:null,topContextMenu:null,topCopy:null,topCut:null,topDoubleClick:null,topDrag:null,topDragEnd:null,topDragEnter:null,topDragExit:null,topDragLeave:null,topDragOver:null,topDragStart:null,topDrop:null,topError:null,topFocus:null,topInput:null,topKeyDown:null,topKeyPress:null,topKeyUp:null,topLoad:null,topMouseDown:null,topMouseMove:null,topMouseOut:null,topMouseOver:null,topMouseUp:null,topPaste:null,topReset:null,topScroll:null,topSelectionChange:null,topSubmit:null,topTextInput:null,topTouchCancel:null,topTouchEnd:null,topTouchMove:null,topTouchStart:null,topWheel:null}),a={topLevelTypes:i,PropagationPhases:o};t.exports=a},{153:153}],17:[function(e,t,n){var r=e(126),o={listen:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!1),{remove:function(){e.removeEventListener(t,n,!1)}}):e.attachEvent?(e.attachEvent("on"+t,n),{remove:function(){e.detachEvent("on"+t,n)}}):void 0},capture:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!0),{remove:function(){e.removeEventListener(t,n,!0)}}):{remove:r}},registerDefault:function(){}};t.exports=o},{126:126}],18:[function(e,t,n){"use strict";var r=e(19),o=e(20),i=e(115),a=e(132),s=e(147),u={},l=null,c=function(e){if(e){var t=o.executeDispatch,n=r.getPluginModuleForEvent(e);n&&n.executeDispatch&&(t=n.executeDispatch),o.executeDispatchesInOrder(e,t),e.isPersistent()||e.constructor.release(e)}},p=null,d={injection:{injectMount:o.injection.injectMount,injectInstanceHandle:function(e){p=e},getInstanceHandle:function(){return p},injectEventPluginOrder:r.injectEventPluginOrder,injectEventPluginsByName:r.injectEventPluginsByName},eventNameDispatchConfigs:r.eventNameDispatchConfigs,registrationNameModules:r.registrationNameModules,putListener:function(e,t,n){s(!n||"function"==typeof n);var r=u[t]||(u[t]={});r[e]=n},getListener:function(e,t){var n=u[t];return n&&n[e]},deleteListener:function(e,t){var n=u[t];n&&delete n[e]},deleteAllListeners:function(e){for(var t in u)delete u[t][e]},extractEvents:function(e,t,n,o){for(var a,s=r.plugins,u=0,l=s.length;l>u;u++){var c=s[u];if(c){var p=c.extractEvents(e,t,n,o);p&&(a=i(a,p))}}return a},enqueueEvents:function(e){e&&(l=i(l,e))},processEventQueue:function(){var e=l;l=null,a(e,c),s(!l)},__purge:function(){u={}},__getListenerBank:function(){return u}};t.exports=d},{115:115,132:132,147:147,19:19,20:20}],19:[function(e,t,n){"use strict";function r(){if(s)for(var e in u){var t=u[e],n=s.indexOf(e);if(a(n>-1),!l.plugins[n]){a(t.extractEvents),l.plugins[n]=t;var r=t.eventTypes;for(var i in r)a(o(r[i],t,i))}}}function o(e,t,n){a(!l.eventNameDispatchConfigs.hasOwnProperty(n)),l.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var o in r)if(r.hasOwnProperty(o)){var s=r[o];i(s,t,n)}return!0}return e.registrationName?(i(e.registrationName,t,n),!0):!1}function i(e,t,n){a(!l.registrationNameModules[e]),l.registrationNameModules[e]=t,l.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var a=e(147),s=null,u={},l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},injectEventPluginOrder:function(e){a(!s),s=Array.prototype.slice.call(e),r()},injectEventPluginsByName:function(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];u.hasOwnProperty(n)&&u[n]===o||(a(!u[n]),u[n]=o,t=!0)}t&&r()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return l.registrationNameModules[t.registrationName]||null;for(var n in t.phasedRegistrationNames)if(t.phasedRegistrationNames.hasOwnProperty(n)){var r=l.registrationNameModules[t.phasedRegistrationNames[n]];if(r)return r}return null},_resetEventPlugins:function(){s=null;for(var e in u)u.hasOwnProperty(e)&&delete u[e];l.plugins.length=0;var t=l.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=l.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};t.exports=l},{147:147}],20:[function(e,t,n){"use strict";function r(e){return e===v.topMouseUp||e===v.topTouchEnd||e===v.topTouchCancel}function o(e){return e===v.topMouseMove||e===v.topTouchMove}function i(e){return e===v.topMouseDown||e===v.topTouchStart}function a(e,t){var n=e._dispatchListeners,r=e._dispatchIDs;if(Array.isArray(n))for(var o=0;o<n.length&&!e.isPropagationStopped();o++)t(e,n[o],r[o]);else n&&t(e,n,r)}function s(e,t,n){e.currentTarget=m.Mount.getNode(n);var r=t(e,n);return e.currentTarget=null,r}function u(e,t){a(e,t),e._dispatchListeners=null,e._dispatchIDs=null}function l(e){var t=e._dispatchListeners,n=e._dispatchIDs;if(Array.isArray(t)){for(var r=0;r<t.length&&!e.isPropagationStopped();r++)if(t[r](e,n[r]))return n[r]}else if(t&&t(e,n))return n;return null}function c(e){var t=l(e);return e._dispatchIDs=null,e._dispatchListeners=null,t}function p(e){var t=e._dispatchListeners,n=e._dispatchIDs;h(!Array.isArray(t));var r=t?t(e,n):null;return e._dispatchListeners=null,e._dispatchIDs=null,r}function d(e){return!!e._dispatchListeners}var f=e(16),h=e(147),m={Mount:null,injectMount:function(e){m.Mount=e}},v=f.topLevelTypes,g={isEndish:r,isMoveish:o,isStartish:i,executeDirectDispatch:p,executeDispatch:s,executeDispatchesInOrder:u,executeDispatchesInOrderStopAtTrue:c,hasDispatches:d,injection:m,useTouchEvents:!1};t.exports=g},{147:147,16:16}],21:[function(e,t,n){"use strict";function r(e,t,n){var r=t.dispatchConfig.phasedRegistrationNames[n];return v(e,r)}function o(e,t,n){var o=t?m.bubbled:m.captured,i=r(e,n,o);i&&(n._dispatchListeners=f(n._dispatchListeners,i),n._dispatchIDs=f(n._dispatchIDs,e))}function i(e){e&&e.dispatchConfig.phasedRegistrationNames&&d.injection.getInstanceHandle().traverseTwoPhase(e.dispatchMarker,o,e)}function a(e,t,n){if(n&&n.dispatchConfig.registrationName){var r=n.dispatchConfig.registrationName,o=v(e,r);o&&(n._dispatchListeners=f(n._dispatchListeners,o),n._dispatchIDs=f(n._dispatchIDs,e))}}function s(e){e&&e.dispatchConfig.registrationName&&a(e.dispatchMarker,null,e)}function u(e){h(e,i)}function l(e,t,n,r){d.injection.getInstanceHandle().traverseEnterLeave(n,r,a,e,t)}function c(e){h(e,s)}var p=e(16),d=e(18),f=e(115),h=e(132),m=p.PropagationPhases,v=d.getListener,g={accumulateTwoPhaseDispatches:u,accumulateDirectDispatches:c,accumulateEnterLeaveDispatches:l};t.exports=g},{115:115,132:132,16:16,18:18}],22:[function(e,t,n){"use strict";var r=!("undefined"==typeof window||!window.document||!window.document.createElement),o={canUseDOM:r,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:r&&!!window.screen,isInWorker:!r};t.exports=o},{}],23:[function(e,t,n){"use strict";function r(e){this._root=e,this._startText=this.getText(),this._fallbackText=null}var o=e(30),i=e(29),a=e(142);i(r.prototype,{getText:function(){return"value"in this._root?this._root.value:this._root[a()]},getData:function(){if(this._fallbackText)return this._fallbackText;var e,t,n=this._startText,r=n.length,o=this.getText(),i=o.length;for(e=0;r>e&&n[e]===o[e];e++);var a=r-e;for(t=1;a>=t&&n[r-t]===o[i-t];t++);var s=t>1?1-t:void 0;return this._fallbackText=o.slice(e,s),this._fallbackText}}),o.addPoolingTo(r),t.exports=r},{142:142,29:29,30:30}],24:[function(e,t,n){"use strict";var r,o=e(11),i=e(22),a=o.injection.MUST_USE_ATTRIBUTE,s=o.injection.MUST_USE_PROPERTY,u=o.injection.HAS_BOOLEAN_VALUE,l=o.injection.HAS_SIDE_EFFECTS,c=o.injection.HAS_NUMERIC_VALUE,p=o.injection.HAS_POSITIVE_NUMERIC_VALUE,d=o.injection.HAS_OVERLOADED_BOOLEAN_VALUE;if(i.canUseDOM){var f=document.implementation;r=f&&f.hasFeature&&f.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")}var h={isCustomAttribute:RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),Properties:{accept:null,acceptCharset:null,accessKey:null,action:null,allowFullScreen:a|u,allowTransparency:a,alt:null,async:u,autoComplete:null,autoPlay:u,cellPadding:null,cellSpacing:null,charSet:a,checked:s|u,classID:a,className:r?a:s,cols:a|p,colSpan:null,content:null,contentEditable:null,contextMenu:a,controls:s|u,coords:null,crossOrigin:null,data:null,dateTime:a,defer:u,dir:null,disabled:a|u,download:d,draggable:null,encType:null,form:a,formAction:a,formEncType:a,formMethod:a,formNoValidate:u,formTarget:a,frameBorder:a,headers:null,height:a,hidden:a|u,high:null,href:null,hrefLang:null,htmlFor:null,httpEquiv:null,icon:null,id:s,label:null,lang:null,list:a,loop:s|u,low:null,manifest:a,marginHeight:null,marginWidth:null,max:null,maxLength:a,media:a,mediaGroup:null,method:null,min:null,multiple:s|u,muted:s|u,name:null,noValidate:u,open:u,optimum:null,pattern:null,placeholder:null,poster:null,preload:null,radioGroup:null,readOnly:s|u,rel:null,required:u,role:a,rows:a|p,rowSpan:null,sandbox:null,scope:null,scoped:u,scrolling:null,seamless:a|u,selected:s|u,shape:null,size:a|p,sizes:a,span:p,spellCheck:null,src:null,srcDoc:s,srcSet:a,start:c,step:null,style:null,tabIndex:null,target:null,title:null,type:null,useMap:null,value:s|l,width:a,wmode:a,autoCapitalize:null,autoCorrect:null,itemProp:a,itemScope:a|u,itemType:a,itemID:a,itemRef:a,property:null,unselectable:a},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{autoCapitalize:"autocapitalize",autoComplete:"autocomplete",autoCorrect:"autocorrect",autoFocus:"autofocus",autoPlay:"autoplay",encType:"encoding",hrefLang:"hreflang",radioGroup:"radiogroup",spellCheck:"spellcheck",srcDoc:"srcdoc",srcSet:"srcset"}};t.exports=h},{11:11,22:22}],25:[function(e,t,n){"use strict";var r=e(73),o=e(92),i={linkState:function(e){return new r(this.state[e],o.createStateKeySetter(this,e))}};t.exports=i},{73:73,92:92}],26:[function(e,t,n){"use strict";function r(e){l(null==e.props.checkedLink||null==e.props.valueLink)}function o(e){r(e),l(null==e.props.value&&null==e.props.onChange)}function i(e){r(e),l(null==e.props.checked&&null==e.props.onChange)}function a(e){this.props.valueLink.requestChange(e.target.value)}function s(e){this.props.checkedLink.requestChange(e.target.checked)}var u=e(84),l=e(147),c={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0},p={Mixin:{propTypes:{value:function(e,t,n){return!e[t]||c[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t,n){return!e[t]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:u.func}},getValue:function(e){return e.props.valueLink?(o(e),e.props.valueLink.value):e.props.value},getChecked:function(e){return e.props.checkedLink?(i(e),e.props.checkedLink.value):e.props.checked},getOnChange:function(e){return e.props.valueLink?(o(e),a):e.props.checkedLink?(i(e),s):e.props.onChange}};t.exports=p},{147:147,84:84}],27:[function(e,t,n){"use strict";function r(e){e.remove()}var o=e(33),i=e(115),a=e(132),s=e(147),u={trapBubbledEvent:function(e,t){s(this.isMounted());var n=this.getDOMNode();s(n);var r=o.trapBubbledEvent(e,t,n);this._localEventListeners=i(this._localEventListeners,r)},componentWillUnmount:function(){this._localEventListeners&&a(this._localEventListeners,r)}};t.exports=u},{115:115,132:132,147:147,33:33}],28:[function(e,t,n){"use strict";var r=e(16),o=e(126),i=r.topLevelTypes,a={eventTypes:null,extractEvents:function(e,t,n,r){if(e===i.topTouchStart){var a=r.target;a&&!a.onclick&&(a.onclick=o)}}};t.exports=a},{126:126,16:16}],29:[function(e,t,n){"use strict";function r(e,t){if(null==e)throw new TypeError("Object.assign target cannot be null or undefined");for(var n=Object(e),r=Object.prototype.hasOwnProperty,o=1;o<arguments.length;o++){var i=arguments[o];if(null!=i){var a=Object(i);for(var s in a)r.call(a,s)&&(n[s]=a[s])}}return n}t.exports=r},{}],30:[function(e,t,n){"use strict";var r=e(147),o=function(e){var t=this;if(t.instancePool.length){var n=t.instancePool.pop();return t.call(n,e),n}return new t(e)},i=function(e,t){var n=this;if(n.instancePool.length){var r=n.instancePool.pop();return n.call(r,e,t),r}return new n(e,t)},a=function(e,t,n){var r=this;if(r.instancePool.length){var o=r.instancePool.pop();return r.call(o,e,t,n),o}return new r(e,t,n)},s=function(e,t,n,r,o){var i=this;if(i.instancePool.length){var a=i.instancePool.pop();return i.call(a,e,t,n,r,o),a}return new i(e,t,n,r,o)},u=function(e){var t=this;r(e instanceof t),e.destructor&&e.destructor(),t.instancePool.length<t.poolSize&&t.instancePool.push(e)},l=10,c=o,p=function(e,t){var n=e;return n.instancePool=[],n.getPooled=t||c,n.poolSize||(n.poolSize=l),n.release=u,n},d={addPoolingTo:p,oneArgumentPooler:o,twoArgumentPooler:i,threeArgumentPooler:a,fiveArgumentPooler:s};t.exports=d},{147:147}],31:[function(e,t,n){"use strict";var r=e(20),o=e(37),i=e(39),a=e(38),s=e(44),u=e(45),l=e(61),c=(e(62),e(46)),p=e(57),d=e(60),f=e(70),h=e(75),m=e(80),v=e(84),g=e(87),y=e(90),C=e(29),E=e(129),b=e(157);d.inject();var _=l.createElement,x=l.createFactory,D=l.cloneElement,M=m.measure("React","render",h.render),T={Children:{map:o.map,forEach:o.forEach,count:o.count,only:b},Component:i,DOM:c,PropTypes:v,initializeTouchEvents:function(e){r.useTouchEvents=e},createClass:a.createClass,createElement:_,cloneElement:D,createFactory:x,createMixin:function(e){return e},constructAndRenderComponent:h.constructAndRenderComponent,constructAndRenderComponentByID:h.constructAndRenderComponentByID,findDOMNode:E,render:M,renderToString:y.renderToString,renderToStaticMarkup:y.renderToStaticMarkup,unmountComponentAtNode:h.unmountComponentAtNode,isValidElement:l.isValidElement,withContext:s.withContext,__spread:C};"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({CurrentOwner:u,InstanceHandles:f,Mount:h,Reconciler:g,TextComponent:p});T.version="0.13.3",t.exports=T},{129:129,157:157,20:20,29:29,37:37,38:38,39:39,44:44,45:45,46:46,57:57,60:60,61:61,62:62,70:70,75:75,80:80,84:84,87:87,90:90}],32:[function(e,t,n){"use strict";var r=e(129),o={getDOMNode:function(){return r(this)}};t.exports=o},{129:129}],33:[function(e,t,n){"use strict";function r(e){return Object.prototype.hasOwnProperty.call(e,m)||(e[m]=f++,p[e[m]]={}),p[e[m]]}var o=e(16),i=e(18),a=e(19),s=e(65),u=e(114),l=e(29),c=e(148),p={},d=!1,f=0,h={topBlur:"blur",topChange:"change",topClick:"click",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topScroll:"scroll",topSelectionChange:"selectionchange",topTextInput:"textInput",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topWheel:"wheel"},m="_reactListenersID"+String(Math.random()).slice(2),v=l({},s,{ReactEventListener:null,injection:{injectReactEventListener:function(e){e.setHandleTopLevel(v.handleTopLevel),v.ReactEventListener=e;
+
+}},setEnabled:function(e){v.ReactEventListener&&v.ReactEventListener.setEnabled(e)},isEnabled:function(){return!(!v.ReactEventListener||!v.ReactEventListener.isEnabled())},listenTo:function(e,t){for(var n=t,i=r(n),s=a.registrationNameDependencies[e],u=o.topLevelTypes,l=0,p=s.length;p>l;l++){var d=s[l];i.hasOwnProperty(d)&&i[d]||(d===u.topWheel?c("wheel")?v.ReactEventListener.trapBubbledEvent(u.topWheel,"wheel",n):c("mousewheel")?v.ReactEventListener.trapBubbledEvent(u.topWheel,"mousewheel",n):v.ReactEventListener.trapBubbledEvent(u.topWheel,"DOMMouseScroll",n):d===u.topScroll?c("scroll",!0)?v.ReactEventListener.trapCapturedEvent(u.topScroll,"scroll",n):v.ReactEventListener.trapBubbledEvent(u.topScroll,"scroll",v.ReactEventListener.WINDOW_HANDLE):d===u.topFocus||d===u.topBlur?(c("focus",!0)?(v.ReactEventListener.trapCapturedEvent(u.topFocus,"focus",n),v.ReactEventListener.trapCapturedEvent(u.topBlur,"blur",n)):c("focusin")&&(v.ReactEventListener.trapBubbledEvent(u.topFocus,"focusin",n),v.ReactEventListener.trapBubbledEvent(u.topBlur,"focusout",n)),i[u.topBlur]=!0,i[u.topFocus]=!0):h.hasOwnProperty(d)&&v.ReactEventListener.trapBubbledEvent(d,h[d],n),i[d]=!0)}},trapBubbledEvent:function(e,t,n){return v.ReactEventListener.trapBubbledEvent(e,t,n)},trapCapturedEvent:function(e,t,n){return v.ReactEventListener.trapCapturedEvent(e,t,n)},ensureScrollValueMonitoring:function(){if(!d){var e=u.refreshScrollValues;v.ReactEventListener.monitorScrollValue(e),d=!0}},eventNameDispatchConfigs:i.eventNameDispatchConfigs,registrationNameModules:i.registrationNameModules,putListener:i.putListener,getListener:i.getListener,deleteListener:i.deleteListener,deleteAllListeners:i.deleteAllListeners});t.exports=v},{114:114,148:148,16:16,18:18,19:19,29:29,65:65}],34:[function(e,t,n){"use strict";var r=e(31),o=e(29),i=r.createFactory(e(95)),a=r.createFactory(e(35)),s=r.createClass({displayName:"ReactCSSTransitionGroup",propTypes:{transitionName:r.PropTypes.string.isRequired,transitionAppear:r.PropTypes.bool,transitionEnter:r.PropTypes.bool,transitionLeave:r.PropTypes.bool},getDefaultProps:function(){return{transitionAppear:!1,transitionEnter:!0,transitionLeave:!0}},_wrapChild:function(e){return a({name:this.props.transitionName,appear:this.props.transitionAppear,enter:this.props.transitionEnter,leave:this.props.transitionLeave},e)},render:function(){return i(o({},this.props,{childFactory:this._wrapChild}))}});t.exports=s},{29:29,31:31,35:35,95:95}],35:[function(e,t,n){"use strict";var r=e(31),o=e(4),i=e(94),a=e(157),s=(e(166),17),u=r.createClass({displayName:"ReactCSSTransitionGroupChild",transition:function(e,t){var n=this.getDOMNode(),r=this.props.name+"-"+e,a=r+"-active",s=function(e){e&&e.target!==n||(o.removeClass(n,r),o.removeClass(n,a),i.removeEndEventListener(n,s),t&&t())};i.addEndEventListener(n,s),o.addClass(n,r),this.queueClass(a)},queueClass:function(e){this.classNameQueue.push(e),this.timeout||(this.timeout=setTimeout(this.flushClassNameQueue,s))},flushClassNameQueue:function(){this.isMounted()&&this.classNameQueue.forEach(o.addClass.bind(o,this.getDOMNode())),this.classNameQueue.length=0,this.timeout=null},componentWillMount:function(){this.classNameQueue=[]},componentWillUnmount:function(){this.timeout&&clearTimeout(this.timeout)},componentWillAppear:function(e){this.props.appear?this.transition("appear",e):e()},componentWillEnter:function(e){this.props.enter?this.transition("enter",e):e()},componentWillLeave:function(e){this.props.leave?this.transition("leave",e):e()},render:function(){return a(this.props.children)}});t.exports=u},{157:157,166:166,31:31,4:4,94:94}],36:[function(e,t,n){"use strict";var r=e(87),o=e(130),i=e(146),a=e(162),s={instantiateChildren:function(e,t,n){var r=o(e);for(var a in r)if(r.hasOwnProperty(a)){var s=r[a],u=i(s,null);r[a]=u}return r},updateChildren:function(e,t,n,s){var u=o(t);if(!u&&!e)return null;var l;for(l in u)if(u.hasOwnProperty(l)){var c=e&&e[l],p=c&&c._currentElement,d=u[l];if(a(p,d))r.receiveComponent(c,d,n,s),u[l]=c;else{c&&r.unmountComponent(c,l);var f=i(d,null);u[l]=f}}for(l in e)!e.hasOwnProperty(l)||u&&u.hasOwnProperty(l)||r.unmountComponent(e[l]);return u},unmountChildren:function(e){for(var t in e){var n=e[t];r.unmountComponent(n)}}};t.exports=s},{130:130,146:146,162:162,87:87}],37:[function(e,t,n){"use strict";function r(e,t){this.forEachFunction=e,this.forEachContext=t}function o(e,t,n,r){var o=e;o.forEachFunction.call(o.forEachContext,t,r)}function i(e,t,n){if(null==e)return e;var i=r.getPooled(t,n);f(e,o,i),r.release(i)}function a(e,t,n){this.mapResult=e,this.mapFunction=t,this.mapContext=n}function s(e,t,n,r){var o=e,i=o.mapResult,a=!i.hasOwnProperty(n);if(a){var s=o.mapFunction.call(o.mapContext,t,r);i[n]=s}}function u(e,t,n){if(null==e)return e;var r={},o=a.getPooled(r,t,n);return f(e,s,o),a.release(o),d.create(r)}function l(e,t,n,r){return null}function c(e,t){return f(e,l,null)}var p=e(30),d=e(67),f=e(164),h=(e(166),p.twoArgumentPooler),m=p.threeArgumentPooler;p.addPoolingTo(r,h),p.addPoolingTo(a,m);var v={forEach:i,map:u,count:c};t.exports=v},{164:164,166:166,30:30,67:67}],38:[function(e,t,n){"use strict";function r(e,t){var n=D.hasOwnProperty(t)?D[t]:null;T.hasOwnProperty(t)&&y(n===_.OVERRIDE_BASE),e.hasOwnProperty(t)&&y(n===_.DEFINE_MANY||n===_.DEFINE_MANY_MERGED)}function o(e,t){if(t){y("function"!=typeof t),y(!d.isValidElement(t));var n=e.prototype;t.hasOwnProperty(b)&&M.mixins(e,t.mixins);for(var o in t)if(t.hasOwnProperty(o)&&o!==b){var i=t[o];if(r(n,o),M.hasOwnProperty(o))M[o](e,i);else{var a=D.hasOwnProperty(o),l=n.hasOwnProperty(o),c=i&&i.__reactDontBind,p="function"==typeof i,f=p&&!a&&!l&&!c;if(f)n.__reactAutoBindMap||(n.__reactAutoBindMap={}),n.__reactAutoBindMap[o]=i,n[o]=i;else if(l){var h=D[o];y(a&&(h===_.DEFINE_MANY_MERGED||h===_.DEFINE_MANY)),h===_.DEFINE_MANY_MERGED?n[o]=s(n[o],i):h===_.DEFINE_MANY&&(n[o]=u(n[o],i))}else n[o]=i}}}}function i(e,t){if(t)for(var n in t){var r=t[n];if(t.hasOwnProperty(n)){var o=n in M;y(!o);var i=n in e;y(!i),e[n]=r}}}function a(e,t){y(e&&t&&"object"==typeof e&&"object"==typeof t);for(var n in t)t.hasOwnProperty(n)&&(y(void 0===e[n]),e[n]=t[n]);return e}function s(e,t){return function(){var n=e.apply(this,arguments),r=t.apply(this,arguments);if(null==n)return r;if(null==r)return n;var o={};return a(o,n),a(o,r),o}}function u(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function l(e,t){var n=t.bind(e);return n}function c(e){for(var t in e.__reactAutoBindMap)if(e.__reactAutoBindMap.hasOwnProperty(t)){var n=e.__reactAutoBindMap[t];e[t]=l(e,f.guard(n,e.constructor.displayName+"."+t))}}var p=e(39),d=(e(45),e(61)),f=e(64),h=e(71),m=e(72),v=(e(83),e(82),e(96)),g=e(29),y=e(147),C=e(153),E=e(154),b=(e(166),E({mixins:null})),_=C({DEFINE_ONCE:null,DEFINE_MANY:null,OVERRIDE_BASE:null,DEFINE_MANY_MERGED:null}),x=[],D={mixins:_.DEFINE_MANY,statics:_.DEFINE_MANY,propTypes:_.DEFINE_MANY,contextTypes:_.DEFINE_MANY,childContextTypes:_.DEFINE_MANY,getDefaultProps:_.DEFINE_MANY_MERGED,getInitialState:_.DEFINE_MANY_MERGED,getChildContext:_.DEFINE_MANY_MERGED,render:_.DEFINE_ONCE,componentWillMount:_.DEFINE_MANY,componentDidMount:_.DEFINE_MANY,componentWillReceiveProps:_.DEFINE_MANY,shouldComponentUpdate:_.DEFINE_ONCE,componentWillUpdate:_.DEFINE_MANY,componentDidUpdate:_.DEFINE_MANY,componentWillUnmount:_.DEFINE_MANY,updateComponent:_.OVERRIDE_BASE},M={displayName:function(e,t){e.displayName=t},mixins:function(e,t){if(t)for(var n=0;n<t.length;n++)o(e,t[n])},childContextTypes:function(e,t){e.childContextTypes=g({},e.childContextTypes,t)},contextTypes:function(e,t){e.contextTypes=g({},e.contextTypes,t)},getDefaultProps:function(e,t){e.getDefaultProps?e.getDefaultProps=s(e.getDefaultProps,t):e.getDefaultProps=t},propTypes:function(e,t){e.propTypes=g({},e.propTypes,t)},statics:function(e,t){i(e,t)}},T={replaceState:function(e,t){v.enqueueReplaceState(this,e),t&&v.enqueueCallback(this,t)},isMounted:function(){var e=h.get(this);return e&&e!==m.currentlyMountingInstance},setProps:function(e,t){v.enqueueSetProps(this,e),t&&v.enqueueCallback(this,t)},replaceProps:function(e,t){v.enqueueReplaceProps(this,e),t&&v.enqueueCallback(this,t)}},N=function(){};g(N.prototype,p.prototype,T);var P={createClass:function(e){var t=function(e,t){this.__reactAutoBindMap&&c(this),this.props=e,this.context=t,this.state=null;var n=this.getInitialState?this.getInitialState():null;y("object"==typeof n&&!Array.isArray(n)),this.state=n};t.prototype=new N,t.prototype.constructor=t,x.forEach(o.bind(null,t)),o(t,e),t.getDefaultProps&&(t.defaultProps=t.getDefaultProps()),y(t.prototype.render);for(var n in D)t.prototype[n]||(t.prototype[n]=null);return t.type=t,t},injection:{injectMixin:function(e){x.push(e)}}};t.exports=P},{147:147,153:153,154:154,166:166,29:29,39:39,45:45,61:61,64:64,71:71,72:72,82:82,83:83,96:96}],39:[function(e,t,n){"use strict";function r(e,t){this.props=e,this.context=t}{var o=e(96),i=e(147);e(166)}r.prototype.setState=function(e,t){i("object"==typeof e||"function"==typeof e||null==e),o.enqueueSetState(this,e),t&&o.enqueueCallback(this,t)},r.prototype.forceUpdate=function(e){o.enqueueForceUpdate(this),e&&o.enqueueCallback(this,e)};t.exports=r},{147:147,166:166,96:96}],40:[function(e,t,n){"use strict";var r=e(50),o=e(75),i={processChildrenUpdates:r.dangerouslyProcessChildrenUpdates,replaceNodeWithMarkupByID:r.dangerouslyReplaceNodeWithMarkupByID,unmountIDFromEnvironment:function(e){o.purgeID(e)}};t.exports=i},{50:50,75:75}],41:[function(e,t,n){"use strict";var r=e(147),o=!1,i={unmountIDFromEnvironment:null,replaceNodeWithMarkupByID:null,processChildrenUpdates:null,injection:{injectEnvironment:function(e){r(!o),i.unmountIDFromEnvironment=e.unmountIDFromEnvironment,i.replaceNodeWithMarkupByID=e.replaceNodeWithMarkupByID,i.processChildrenUpdates=e.processChildrenUpdates,o=!0}}};t.exports=i},{147:147}],42:[function(e,t,n){"use strict";var r=e(161),o={shouldComponentUpdate:function(e,t){return!r(this.props,e)||!r(this.state,t)}};t.exports=o},{161:161}],43:[function(e,t,n){"use strict";function r(e){var t=e._currentElement._owner||null;if(t){var n=t.getName();if(n)return" Check the render method of `"+n+"`."}return""}var o=e(41),i=e(44),a=e(45),s=e(61),u=(e(62),e(71)),l=e(72),c=e(78),p=e(80),d=e(83),f=(e(82),e(87)),h=e(97),m=e(29),v=e(127),g=e(147),y=e(162),C=(e(166),1),E={construct:function(e){this._currentElement=e,this._rootNodeID=null,this._instance=null,this._pendingElement=null,this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._renderedComponent=null,this._context=null,this._mountOrder=0,this._isTopLevel=!1,this._pendingCallbacks=null},mountComponent:function(e,t,n){this._context=n,this._mountOrder=C++,this._rootNodeID=e;var r=this._processProps(this._currentElement.props),o=this._processContext(this._currentElement._context),i=c.getComponentClassForElement(this._currentElement),a=new i(r,o);a.props=r,a.context=o,a.refs=v,this._instance=a,u.set(a,this);var s=a.state;void 0===s&&(a.state=s=null),g("object"==typeof s&&!Array.isArray(s)),this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1;var p,d,h=l.currentlyMountingInstance;l.currentlyMountingInstance=this;try{a.componentWillMount&&(a.componentWillMount(),this._pendingStateQueue&&(a.state=this._processPendingState(a.props,a.context))),p=this._getValidatedChildContext(n),d=this._renderValidatedComponent(p)}finally{l.currentlyMountingInstance=h}this._renderedComponent=this._instantiateReactComponent(d,this._currentElement.type);var m=f.mountComponent(this._renderedComponent,e,t,this._mergeChildContext(n,p));return a.componentDidMount&&t.getReactMountReady().enqueue(a.componentDidMount,a),m},unmountComponent:function(){var e=this._instance;if(e.componentWillUnmount){var t=l.currentlyUnmountingInstance;l.currentlyUnmountingInstance=this;try{e.componentWillUnmount()}finally{l.currentlyUnmountingInstance=t}}f.unmountComponent(this._renderedComponent),this._renderedComponent=null,this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._pendingCallbacks=null,this._pendingElement=null,this._context=null,this._rootNodeID=null,u.remove(e)},_setPropsInternal:function(e,t){var n=this._pendingElement||this._currentElement;this._pendingElement=s.cloneAndReplaceProps(n,m({},n.props,e)),h.enqueueUpdate(this,t)},_maskContext:function(e){var t=null;if("string"==typeof this._currentElement.type)return v;var n=this._currentElement.type.contextTypes;if(!n)return v;t={};for(var r in n)t[r]=e[r];return t},_processContext:function(e){var t=this._maskContext(e);return t},_getValidatedChildContext:function(e){var t=this._instance,n=t.getChildContext&&t.getChildContext();if(n){g("object"==typeof t.constructor.childContextTypes);for(var r in n)g(r in t.constructor.childContextTypes);return n}return null},_mergeChildContext:function(e,t){return t?m({},e,t):e},_processProps:function(e){return e},_checkPropTypes:function(e,t,n){var o=this.getName();for(var i in e)if(e.hasOwnProperty(i)){var a;try{g("function"==typeof e[i]),a=e[i](t,i,o,n)}catch(s){a=s}a instanceof Error&&(r(this),n===d.prop)}},receiveComponent:function(e,t,n){var r=this._currentElement,o=this._context;this._pendingElement=null,this.updateComponent(t,r,e,o,n)},performUpdateIfNecessary:function(e){null!=this._pendingElement&&f.receiveComponent(this,this._pendingElement||this._currentElement,e,this._context),(null!==this._pendingStateQueue||this._pendingForceUpdate)&&this.updateComponent(e,this._currentElement,this._currentElement,this._context,this._context)},_warnIfContextsDiffer:function(e,t){e=this._maskContext(e),t=this._maskContext(t);for(var n=Object.keys(t).sort(),r=(this.getName()||"ReactCompositeComponent",0);r<n.length;r++)n[r]},updateComponent:function(e,t,n,r,o){var i=this._instance,a=i.context,s=i.props;t!==n&&(a=this._processContext(n._context),s=this._processProps(n.props),i.componentWillReceiveProps&&i.componentWillReceiveProps(s,a));var u=this._processPendingState(s,a),l=this._pendingForceUpdate||!i.shouldComponentUpdate||i.shouldComponentUpdate(s,u,a);l?(this._pendingForceUpdate=!1,this._performComponentUpdate(n,s,u,a,e,o)):(this._currentElement=n,this._context=o,i.props=s,i.state=u,i.context=a)},_processPendingState:function(e,t){var n=this._instance,r=this._pendingStateQueue,o=this._pendingReplaceState;if(this._pendingReplaceState=!1,this._pendingStateQueue=null,!r)return n.state;if(o&&1===r.length)return r[0];for(var i=m({},o?r[0]:n.state),a=o?1:0;a<r.length;a++){var s=r[a];m(i,"function"==typeof s?s.call(n,i,e,t):s)}return i},_performComponentUpdate:function(e,t,n,r,o,i){var a=this._instance,s=a.props,u=a.state,l=a.context;a.componentWillUpdate&&a.componentWillUpdate(t,n,r),this._currentElement=e,this._context=i,a.props=t,a.state=n,a.context=r,this._updateRenderedComponent(o,i),a.componentDidUpdate&&o.getReactMountReady().enqueue(a.componentDidUpdate.bind(a,s,u,l),a)},_updateRenderedComponent:function(e,t){var n=this._renderedComponent,r=n._currentElement,o=this._getValidatedChildContext(),i=this._renderValidatedComponent(o);if(y(r,i))f.receiveComponent(n,i,e,this._mergeChildContext(t,o));else{var a=this._rootNodeID,s=n._rootNodeID;f.unmountComponent(n),this._renderedComponent=this._instantiateReactComponent(i,this._currentElement.type);var u=f.mountComponent(this._renderedComponent,a,e,this._mergeChildContext(t,o));this._replaceNodeWithMarkupByID(s,u)}},_replaceNodeWithMarkupByID:function(e,t){o.replaceNodeWithMarkupByID(e,t)},_renderValidatedComponentWithoutOwnerOrContext:function(){var e=this._instance,t=e.render();return t},_renderValidatedComponent:function(e){var t,n=i.current;i.current=this._mergeChildContext(this._currentElement._context,e),a.current=this;try{t=this._renderValidatedComponentWithoutOwnerOrContext()}finally{i.current=n,a.current=null}return g(null===t||t===!1||s.isValidElement(t)),t},attachRef:function(e,t){var n=this.getPublicInstance(),r=n.refs===v?n.refs={}:n.refs;r[e]=t.getPublicInstance()},detachRef:function(e){var t=this.getPublicInstance().refs;delete t[e]},getName:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displayName||e.name||t&&t.name||null},getPublicInstance:function(){return this._instance},_instantiateReactComponent:null};p.measureMethods(E,"ReactCompositeComponent",{mountComponent:"mountComponent",updateComponent:"updateComponent",_renderValidatedComponent:"_renderValidatedComponent"});var b={Mixin:E};t.exports=b},{127:127,147:147,162:162,166:166,29:29,41:41,44:44,45:45,61:61,62:62,71:71,72:72,78:78,80:80,82:82,83:83,87:87,97:97}],44:[function(e,t,n){"use strict";var r=e(29),o=e(127),i=(e(166),{current:o,withContext:function(e,t){var n,o=i.current;i.current=r({},o,e);try{n=t()}finally{i.current=o}return n}});t.exports=i},{127:127,166:166,29:29}],45:[function(e,t,n){"use strict";var r={current:null};t.exports=r},{}],46:[function(e,t,n){"use strict";function r(e){return o.createFactory(e)}var o=e(61),i=(e(62),e(155)),a=i({a:"a",abbr:"abbr",address:"address",area:"area",article:"article",aside:"aside",audio:"audio",b:"b",base:"base",bdi:"bdi",bdo:"bdo",big:"big",blockquote:"blockquote",body:"body",br:"br",button:"button",canvas:"canvas",caption:"caption",cite:"cite",code:"code",col:"col",colgroup:"colgroup",data:"data",datalist:"datalist",dd:"dd",del:"del",details:"details",dfn:"dfn",dialog:"dialog",div:"div",dl:"dl",dt:"dt",em:"em",embed:"embed",fieldset:"fieldset",figcaption:"figcaption",figure:"figure",footer:"footer",form:"form",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",head:"head",header:"header",hr:"hr",html:"html",i:"i",iframe:"iframe",img:"img",input:"input",ins:"ins",kbd:"kbd",keygen:"keygen",label:"label",legend:"legend",li:"li",link:"link",main:"main",map:"map",mark:"mark",menu:"menu",menuitem:"menuitem",meta:"meta",meter:"meter",nav:"nav",noscript:"noscript",object:"object",ol:"ol",optgroup:"optgroup",option:"option",output:"output",p:"p",param:"param",picture:"picture",pre:"pre",progress:"progress",q:"q",rp:"rp",rt:"rt",ruby:"ruby",s:"s",samp:"samp",script:"script",section:"section",select:"select",small:"small",source:"source",span:"span",strong:"strong",style:"style",sub:"sub",summary:"summary",sup:"sup",table:"table",tbody:"tbody",td:"td",textarea:"textarea",tfoot:"tfoot",th:"th",thead:"thead",time:"time",title:"title",tr:"tr",track:"track",u:"u",ul:"ul","var":"var",video:"video",wbr:"wbr",circle:"circle",clipPath:"clipPath",defs:"defs",ellipse:"ellipse",g:"g",line:"line",linearGradient:"linearGradient",mask:"mask",path:"path",pattern:"pattern",polygon:"polygon",polyline:"polyline",radialGradient:"radialGradient",rect:"rect",stop:"stop",svg:"svg",text:"text",tspan:"tspan"},r);t.exports=a},{155:155,61:61,62:62}],47:[function(e,t,n){"use strict";var r=e(2),o=e(32),i=e(38),a=e(61),s=e(153),u=a.createFactory("button"),l=s({onClick:!0,onDoubleClick:!0,onMouseDown:!0,onMouseMove:!0,onMouseUp:!0,onClickCapture:!0,onDoubleClickCapture:!0,onMouseDownCapture:!0,onMouseMoveCapture:!0,onMouseUpCapture:!0}),c=i.createClass({displayName:"ReactDOMButton",tagName:"BUTTON",mixins:[r,o],render:function(){var e={};for(var t in this.props)!this.props.hasOwnProperty(t)||this.props.disabled&&l[t]||(e[t]=this.props[t]);return u(e,this.props.children)}});t.exports=c},{153:153,2:2,32:32,38:38,61:61}],48:[function(e,t,n){"use strict";function r(e){e&&(null!=e.dangerouslySetInnerHTML&&(g(null==e.children),g("object"==typeof e.dangerouslySetInnerHTML&&"__html"in e.dangerouslySetInnerHTML)),g(null==e.style||"object"==typeof e.style))}function o(e,t,n,r){var o=d.findReactContainerForID(e);if(o){var i=o.nodeType===D?o.ownerDocument:o;E(t,i)}r.getPutListenerQueue().enqueuePutListener(e,t,n)}function i(e){I.call(P,e)||(g(N.test(e)),P[e]=!0)}function a(e){i(e),this._tag=e,this._renderedChildren=null,this._previousStyleCopy=null,this._rootNodeID=null}var s=e(6),u=e(11),l=e(12),c=e(33),p=e(40),d=e(75),f=e(76),h=e(80),m=e(29),v=e(128),g=e(147),y=(e(148),e(154)),C=(e(166),c.deleteListener),E=c.listenTo,b=c.registrationNameModules,_={string:!0,number:!0},x=y({style:null}),D=1,M=null,T={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},N=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,P={},I={}.hasOwnProperty;a.displayName="ReactDOMComponent",a.Mixin={construct:function(e){this._currentElement=e},mountComponent:function(e,t,n){this._rootNodeID=e,r(this._currentElement.props);var o=T[this._tag]?"":"</"+this._tag+">";return this._createOpenTagMarkupAndPutListeners(t)+this._createContentMarkup(t,n)+o},_createOpenTagMarkupAndPutListeners:function(e){var t=this._currentElement.props,n="<"+this._tag;for(var r in t)if(t.hasOwnProperty(r)){var i=t[r];if(null!=i)if(b.hasOwnProperty(r))o(this._rootNodeID,r,i,e);else{r===x&&(i&&(i=this._previousStyleCopy=m({},t.style)),i=s.createMarkupForStyles(i));var a=l.createMarkupForProperty(r,i);a&&(n+=" "+a)}}if(e.renderToStaticMarkup)return n+">";var u=l.createMarkupForID(this._rootNodeID);return n+" "+u+">"},_createContentMarkup:function(e,t){var n="";("listing"===this._tag||"pre"===this._tag||"textarea"===this._tag)&&(n="\n");var r=this._currentElement.props,o=r.dangerouslySetInnerHTML;if(null!=o){if(null!=o.__html)return n+o.__html}else{var i=_[typeof r.children]?r.children:null,a=null!=i?null:r.children;if(null!=i)return n+v(i);if(null!=a){var s=this.mountChildren(a,e,t);return n+s.join("")}}return n},receiveComponent:function(e,t,n){var r=this._currentElement;this._currentElement=e,this.updateComponent(t,r,e,n)},updateComponent:function(e,t,n,o){r(this._currentElement.props),this._updateDOMProperties(t.props,e),this._updateDOMChildren(t.props,e,o)},_updateDOMProperties:function(e,t){var n,r,i,a=this._currentElement.props;for(n in e)if(!a.hasOwnProperty(n)&&e.hasOwnProperty(n))if(n===x){var s=this._previousStyleCopy;for(r in s)s.hasOwnProperty(r)&&(i=i||{},i[r]="");this._previousStyleCopy=null}else b.hasOwnProperty(n)?C(this._rootNodeID,n):(u.isStandardName[n]||u.isCustomAttribute(n))&&M.deletePropertyByID(this._rootNodeID,n);for(n in a){var l=a[n],c=n===x?this._previousStyleCopy:e[n];if(a.hasOwnProperty(n)&&l!==c)if(n===x)if(l?l=this._previousStyleCopy=m({},l):this._previousStyleCopy=null,c){for(r in c)!c.hasOwnProperty(r)||l&&l.hasOwnProperty(r)||(i=i||{},i[r]="");for(r in l)l.hasOwnProperty(r)&&c[r]!==l[r]&&(i=i||{},i[r]=l[r])}else i=l;else b.hasOwnProperty(n)?o(this._rootNodeID,n,l,t):(u.isStandardName[n]||u.isCustomAttribute(n))&&M.updatePropertyByID(this._rootNodeID,n,l)}i&&M.updateStylesByID(this._rootNodeID,i)},_updateDOMChildren:function(e,t,n){var r=this._currentElement.props,o=_[typeof e.children]?e.children:null,i=_[typeof r.children]?r.children:null,a=e.dangerouslySetInnerHTML&&e.dangerouslySetInnerHTML.__html,s=r.dangerouslySetInnerHTML&&r.dangerouslySetInnerHTML.__html,u=null!=o?null:e.children,l=null!=i?null:r.children,c=null!=o||null!=a,p=null!=i||null!=s;null!=u&&null==l?this.updateChildren(null,t,n):c&&!p&&this.updateTextContent(""),null!=i?o!==i&&this.updateTextContent(""+i):null!=s?a!==s&&M.updateInnerHTMLByID(this._rootNodeID,s):null!=l&&this.updateChildren(l,t,n)},unmountComponent:function(){this.unmountChildren(),c.deleteAllListeners(this._rootNodeID),p.unmountIDFromEnvironment(this._rootNodeID),this._rootNodeID=null}},h.measureMethods(a,"ReactDOMComponent",{mountComponent:"mountComponent",updateComponent:"updateComponent"}),m(a.prototype,a.Mixin,f.Mixin),a.injection={injectIDOperations:function(e){a.BackendIDOperations=M=e}},t.exports=a},{11:11,12:12,128:128,147:147,148:148,154:154,166:166,29:29,33:33,40:40,6:6,75:75,76:76,80:80}],49:[function(e,t,n){"use strict";var r=e(16),o=e(27),i=e(32),a=e(38),s=e(61),u=s.createFactory("form"),l=a.createClass({displayName:"ReactDOMForm",tagName:"FORM",mixins:[i,o],render:function(){return u(this.props)},componentDidMount:function(){this.trapBubbledEvent(r.topLevelTypes.topReset,"reset"),this.trapBubbledEvent(r.topLevelTypes.topSubmit,"submit")}});t.exports=l},{16:16,27:27,32:32,38:38,61:61}],50:[function(e,t,n){"use strict";var r=e(6),o=e(10),i=e(12),a=e(75),s=e(80),u=e(147),l=e(159),c={dangerouslySetInnerHTML:"`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.",style:"`style` must be set using `updateStylesByID()`."},p={updatePropertyByID:function(e,t,n){var r=a.getNode(e);u(!c.hasOwnProperty(t)),null!=n?i.setValueForProperty(r,t,n):i.deleteValueForProperty(r,t)},deletePropertyByID:function(e,t,n){var r=a.getNode(e);u(!c.hasOwnProperty(t)),i.deleteValueForProperty(r,t,n)},updateStylesByID:function(e,t){var n=a.getNode(e);r.setValueForStyles(n,t)},updateInnerHTMLByID:function(e,t){var n=a.getNode(e);l(n,t)},updateTextContentByID:function(e,t){var n=a.getNode(e);o.updateTextContent(n,t)},dangerouslyReplaceNodeWithMarkupByID:function(e,t){var n=a.getNode(e);o.dangerouslyReplaceNodeWithMarkup(n,t)},dangerouslyProcessChildrenUpdates:function(e,t){for(var n=0;n<e.length;n++)e[n].parentNode=a.getNode(e[n].parentID);o.processUpdates(e,t)}};s.measureMethods(p,"ReactDOMIDOperations",{updatePropertyByID:"updatePropertyByID",deletePropertyByID:"deletePropertyByID",updateStylesByID:"updateStylesByID",updateInnerHTMLByID:"updateInnerHTMLByID",updateTextContentByID:"updateTextContentByID",dangerouslyReplaceNodeWithMarkupByID:"dangerouslyReplaceNodeWithMarkupByID",dangerouslyProcessChildrenUpdates:"dangerouslyProcessChildrenUpdates"}),t.exports=p},{10:10,12:12,147:147,159:159,6:6,75:75,80:80}],51:[function(e,t,n){"use strict";var r=e(16),o=e(27),i=e(32),a=e(38),s=e(61),u=s.createFactory("iframe"),l=a.createClass({displayName:"ReactDOMIframe",tagName:"IFRAME",mixins:[i,o],render:function(){return u(this.props)},componentDidMount:function(){this.trapBubbledEvent(r.topLevelTypes.topLoad,"load")}});t.exports=l},{16:16,27:27,32:32,38:38,61:61}],52:[function(e,t,n){"use strict";var r=e(16),o=e(27),i=e(32),a=e(38),s=e(61),u=s.createFactory("img"),l=a.createClass({displayName:"ReactDOMImg",tagName:"IMG",mixins:[i,o],render:function(){return u(this.props)},componentDidMount:function(){this.trapBubbledEvent(r.topLevelTypes.topLoad,"load"),this.trapBubbledEvent(r.topLevelTypes.topError,"error")}});t.exports=l},{16:16,27:27,32:32,38:38,61:61}],53:[function(e,t,n){"use strict";function r(){this.isMounted()&&this.forceUpdate()}var o=e(2),i=e(12),a=e(26),s=e(32),u=e(38),l=e(61),c=e(75),p=e(97),d=e(29),f=e(147),h=l.createFactory("input"),m={},v=u.createClass({displayName:"ReactDOMInput",tagName:"INPUT",mixins:[o,a.Mixin,s],getInitialState:function(){var e=this.props.defaultValue;return{initialChecked:this.props.defaultChecked||!1,initialValue:null!=e?e:null}},render:function(){var e=d({},this.props);e.defaultChecked=null,e.defaultValue=null;var t=a.getValue(this);e.value=null!=t?t:this.state.initialValue;var n=a.getChecked(this);return e.checked=null!=n?n:this.state.initialChecked,e.onChange=this._handleChange,h(e,this.props.children)},componentDidMount:function(){var e=c.getID(this.getDOMNode());m[e]=this},componentWillUnmount:function(){var e=this.getDOMNode(),t=c.getID(e);delete m[t]},componentDidUpdate:function(e,t,n){var r=this.getDOMNode();null!=this.props.checked&&i.setValueForProperty(r,"checked",this.props.checked||!1);var o=a.getValue(this);null!=o&&i.setValueForProperty(r,"value",""+o)},_handleChange:function(e){var t,n=a.getOnChange(this);n&&(t=n.call(this,e)),p.asap(r,this);var o=this.props.name;if("radio"===this.props.type&&null!=o){for(var i=this.getDOMNode(),s=i;s.parentNode;)s=s.parentNode;for(var u=s.querySelectorAll("input[name="+JSON.stringify(""+o)+'][type="radio"]'),l=0,d=u.length;d>l;l++){var h=u[l];if(h!==i&&h.form===i.form){var v=c.getID(h);f(v);var g=m[v];f(g),p.asap(r,g)}}}return t}});t.exports=v},{12:12,147:147,2:2,26:26,29:29,32:32,38:38,61:61,75:75,97:97}],54:[function(e,t,n){"use strict";var r=e(32),o=e(38),i=e(61),a=(e(166),i.createFactory("option")),s=o.createClass({displayName:"ReactDOMOption",tagName:"OPTION",mixins:[r],componentWillMount:function(){},render:function(){return a(this.props,this.props.children)}});t.exports=s},{166:166,32:32,38:38,61:61}],55:[function(e,t,n){"use strict";function r(){if(this._pendingUpdate){this._pendingUpdate=!1;var e=s.getValue(this);null!=e&&this.isMounted()&&i(this,e)}}function o(e,t,n){if(null==e[t])return null;if(e.multiple){if(!Array.isArray(e[t]))return new Error("The `"+t+"` prop supplied to <select> must be an array if `multiple` is true.")}else if(Array.isArray(e[t]))return new Error("The `"+t+"` prop supplied to <select> must be a scalar value if `multiple` is false.")}function i(e,t){var n,r,o,i=e.getDOMNode().options;if(e.props.multiple){for(n={},r=0,o=t.length;o>r;r++)n[""+t[r]]=!0;for(r=0,o=i.length;o>r;r++){var a=n.hasOwnProperty(i[r].value);i[r].selected!==a&&(i[r].selected=a)}}else{for(n=""+t,r=0,o=i.length;o>r;r++)if(i[r].value===n)return void(i[r].selected=!0);i.length&&(i[0].selected=!0)}}var a=e(2),s=e(26),u=e(32),l=e(38),c=e(61),p=e(97),d=e(29),f=c.createFactory("select"),h=l.createClass({displayName:"ReactDOMSelect",tagName:"SELECT",mixins:[a,s.Mixin,u],propTypes:{defaultValue:o,value:o},render:function(){var e=d({},this.props);return e.onChange=this._handleChange,e.value=null,f(e,this.props.children)},componentWillMount:function(){this._pendingUpdate=!1},componentDidMount:function(){var e=s.getValue(this);null!=e?i(this,e):null!=this.props.defaultValue&&i(this,this.props.defaultValue)},componentDidUpdate:function(e){var t=s.getValue(this);null!=t?(this._pendingUpdate=!1,i(this,t)):!e.multiple!=!this.props.multiple&&(null!=this.props.defaultValue?i(this,this.props.defaultValue):i(this,this.props.multiple?[]:""))},_handleChange:function(e){var t,n=s.getOnChange(this);return n&&(t=n.call(this,e)),this._pendingUpdate=!0,p.asap(r,this),t}});t.exports=h},{2:2,26:26,29:29,32:32,38:38,61:61,97:97}],56:[function(e,t,n){"use strict";function r(e,t,n,r){return e===n&&t===r}function o(e){var t=document.selection,n=t.createRange(),r=n.text.length,o=n.duplicate();o.moveToElementText(e),o.setEndPoint("EndToStart",n);var i=o.text.length,a=i+r;return{start:i,end:a}}function i(e){var t=window.getSelection&&window.getSelection();if(!t||0===t.rangeCount)return null;var n=t.anchorNode,o=t.anchorOffset,i=t.focusNode,a=t.focusOffset,s=t.getRangeAt(0),u=r(t.anchorNode,t.anchorOffset,t.focusNode,t.focusOffset),l=u?0:s.toString().length,c=s.cloneRange();c.selectNodeContents(e),c.setEnd(s.startContainer,s.startOffset);var p=r(c.startContainer,c.startOffset,c.endContainer,c.endOffset),d=p?0:c.toString().length,f=d+l,h=document.createRange();h.setStart(n,o),h.setEnd(i,a);var m=h.collapsed;return{start:m?f:d,end:m?d:f}}function a(e,t){var n,r,o=document.selection.createRange().duplicate();"undefined"==typeof t.end?(n=t.start,r=n):t.start>t.end?(n=t.end,r=t.start):(n=t.start,r=t.end),o.moveToElementText(e),o.moveStart("character",n),o.setEndPoint("EndToStart",o),o.moveEnd("character",r-n),o.select()}function s(e,t){if(window.getSelection){var n=window.getSelection(),r=e[c()].length,o=Math.min(t.start,r),i="undefined"==typeof t.end?o:Math.min(t.end,r);if(!n.extend&&o>i){var a=i;i=o,o=a}var s=l(e,o),u=l(e,i);if(s&&u){var p=document.createRange();p.setStart(s.node,s.offset),n.removeAllRanges(),o>i?(n.addRange(p),n.extend(u.node,u.offset)):(p.setEnd(u.node,u.offset),n.addRange(p))}}}var u=e(22),l=e(140),c=e(142),p=u.canUseDOM&&"selection"in document&&!("getSelection"in window),d={getOffsets:p?o:i,setOffsets:p?a:s};t.exports=d},{140:140,142:142,22:22}],57:[function(e,t,n){"use strict";var r=e(12),o=e(40),i=e(48),a=e(29),s=e(128),u=function(e){};a(u.prototype,{construct:function(e){this._currentElement=e,this._stringText=""+e,this._rootNodeID=null,this._mountIndex=0},mountComponent:function(e,t,n){this._rootNodeID=e;var o=s(this._stringText);return t.renderToStaticMarkup?o:"<span "+r.createMarkupForID(e)+">"+o+"</span>"},receiveComponent:function(e,t){if(e!==this._currentElement){this._currentElement=e;var n=""+e;
+
+n!==this._stringText&&(this._stringText=n,i.BackendIDOperations.updateTextContentByID(this._rootNodeID,n))}},unmountComponent:function(){o.unmountIDFromEnvironment(this._rootNodeID)}}),t.exports=u},{12:12,128:128,29:29,40:40,48:48}],58:[function(e,t,n){"use strict";function r(){this.isMounted()&&this.forceUpdate()}var o=e(2),i=e(12),a=e(26),s=e(32),u=e(38),l=e(61),c=e(97),p=e(29),d=e(147),f=(e(166),l.createFactory("textarea")),h=u.createClass({displayName:"ReactDOMTextarea",tagName:"TEXTAREA",mixins:[o,a.Mixin,s],getInitialState:function(){var e=this.props.defaultValue,t=this.props.children;null!=t&&(d(null==e),Array.isArray(t)&&(d(t.length<=1),t=t[0]),e=""+t),null==e&&(e="");var n=a.getValue(this);return{initialValue:""+(null!=n?n:e)}},render:function(){var e=p({},this.props);return d(null==e.dangerouslySetInnerHTML),e.defaultValue=null,e.value=null,e.onChange=this._handleChange,f(e,this.state.initialValue)},componentDidUpdate:function(e,t,n){var r=a.getValue(this);if(null!=r){var o=this.getDOMNode();i.setValueForProperty(o,"value",""+r)}},_handleChange:function(e){var t,n=a.getOnChange(this);return n&&(t=n.call(this,e)),c.asap(r,this),t}});t.exports=h},{12:12,147:147,166:166,2:2,26:26,29:29,32:32,38:38,61:61,97:97}],59:[function(e,t,n){"use strict";function r(){this.reinitializeTransaction()}var o=e(97),i=e(113),a=e(29),s=e(126),u={initialize:s,close:function(){d.isBatchingUpdates=!1}},l={initialize:s,close:o.flushBatchedUpdates.bind(o)},c=[l,u];a(r.prototype,i.Mixin,{getTransactionWrappers:function(){return c}});var p=new r,d={isBatchingUpdates:!1,batchedUpdates:function(e,t,n,r,o){var i=d.isBatchingUpdates;d.isBatchingUpdates=!0,i?e(t,n,r,o):p.perform(e,null,t,n,r,o)}};t.exports=d},{113:113,126:126,29:29,97:97}],60:[function(e,t,n){"use strict";function r(e){return h.createClass({tagName:e.toUpperCase(),render:function(){return new P(e,null,null,null,null,this.props)}})}function o(){R.EventEmitter.injectReactEventListener(I),R.EventPluginHub.injectEventPluginOrder(u),R.EventPluginHub.injectInstanceHandle(w),R.EventPluginHub.injectMount(O),R.EventPluginHub.injectEventPluginsByName({SimpleEventPlugin:L,EnterLeaveEventPlugin:l,ChangeEventPlugin:a,MobileSafariClickEventPlugin:d,SelectEventPlugin:A,BeforeInputEventPlugin:i}),R.NativeComponent.injectGenericComponentClass(g),R.NativeComponent.injectTextComponentClass(N),R.NativeComponent.injectAutoWrapper(r),R.Class.injectMixin(f),R.NativeComponent.injectComponentClasses({button:y,form:C,iframe:_,img:E,input:x,option:D,select:M,textarea:T,html:F("html"),head:F("head"),body:F("body")}),R.DOMProperty.injectDOMPropertyConfig(p),R.DOMProperty.injectDOMPropertyConfig(U),R.EmptyComponent.injectEmptyComponent("noscript"),R.Updates.injectReconcileTransaction(S),R.Updates.injectBatchingStrategy(v),R.RootIndex.injectCreateReactRootIndex(c.canUseDOM?s.createReactRootIndex:k.createReactRootIndex),R.Component.injectEnvironment(m),R.DOMComponent.injectIDOperations(b)}var i=e(3),a=e(8),s=e(9),u=e(14),l=e(15),c=e(22),p=e(24),d=e(28),f=e(32),h=e(38),m=e(40),v=e(59),g=e(48),y=e(47),C=e(49),E=e(52),b=e(50),_=e(51),x=e(53),D=e(54),M=e(55),T=e(58),N=e(57),P=e(61),I=e(66),R=e(68),w=e(70),O=e(75),S=e(86),A=e(99),k=e(100),L=e(101),U=e(98),F=e(122);t.exports={inject:o}},{100:100,101:101,122:122,14:14,15:15,22:22,24:24,28:28,3:3,32:32,38:38,40:40,47:47,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,57:57,58:58,59:59,61:61,66:66,68:68,70:70,75:75,8:8,86:86,9:9,98:98,99:99}],61:[function(e,t,n){"use strict";var r=e(44),o=e(45),i=e(29),a=(e(166),{key:!0,ref:!0}),s=function(e,t,n,r,o,i){this.type=e,this.key=t,this.ref=n,this._owner=r,this._context=o,this.props=i};s.prototype={_isReactElement:!0},s.createElement=function(e,t,n){var i,u={},l=null,c=null;if(null!=t){c=void 0===t.ref?null:t.ref,l=void 0===t.key?null:""+t.key;for(i in t)t.hasOwnProperty(i)&&!a.hasOwnProperty(i)&&(u[i]=t[i])}var p=arguments.length-2;if(1===p)u.children=n;else if(p>1){for(var d=Array(p),f=0;p>f;f++)d[f]=arguments[f+2];u.children=d}if(e&&e.defaultProps){var h=e.defaultProps;for(i in h)"undefined"==typeof u[i]&&(u[i]=h[i])}return new s(e,l,c,o.current,r.current,u)},s.createFactory=function(e){var t=s.createElement.bind(null,e);return t.type=e,t},s.cloneAndReplaceProps=function(e,t){var n=new s(e.type,e.key,e.ref,e._owner,e._context,t);return n},s.cloneElement=function(e,t,n){var r,u=i({},e.props),l=e.key,c=e.ref,p=e._owner;if(null!=t){void 0!==t.ref&&(c=t.ref,p=o.current),void 0!==t.key&&(l=""+t.key);for(r in t)t.hasOwnProperty(r)&&!a.hasOwnProperty(r)&&(u[r]=t[r])}var d=arguments.length-2;if(1===d)u.children=n;else if(d>1){for(var f=Array(d),h=0;d>h;h++)f[h]=arguments[h+2];u.children=f}return new s(e.type,l,c,p,e._context,u)},s.isValidElement=function(e){var t=!(!e||!e._isReactElement);return t},t.exports=s},{166:166,29:29,44:44,45:45}],62:[function(e,t,n){"use strict";function r(){if(y.current){var e=y.current.getName();if(e)return" Check the render method of `"+e+"`."}return""}function o(e){var t=e&&e.getPublicInstance();if(!t)return void 0;var n=t.constructor;return n?n.displayName||n.name||void 0:void 0}function i(){var e=y.current;return e&&o(e)||void 0}function a(e,t){e._store.validated||null!=e.key||(e._store.validated=!0,u('Each child in an array or iterator should have a unique "key" prop.',e,t))}function s(e,t,n){D.test(e)&&u("Child objects should have non-numeric keys so ordering is preserved.",t,n)}function u(e,t,n){var r=i(),a="string"==typeof n?n:n.displayName||n.name,s=r||a,u=_[e]||(_[e]={});if(!u.hasOwnProperty(s)){u[s]=!0;var l="";if(t&&t._owner&&t._owner!==y.current){var c=o(t._owner);l=" It was passed a child from "+c+"."}}}function l(e,t){if(Array.isArray(e))for(var n=0;n<e.length;n++){var r=e[n];m.isValidElement(r)&&a(r,t)}else if(m.isValidElement(e))e._store.validated=!0;else if(e){var o=E(e);if(o){if(o!==e.entries)for(var i,u=o.call(e);!(i=u.next()).done;)m.isValidElement(i.value)&&a(i.value,t)}else if("object"==typeof e){var l=v.extractIfFragment(e);for(var c in l)l.hasOwnProperty(c)&&s(c,l[c],t)}}}function c(e,t,n,o){for(var i in t)if(t.hasOwnProperty(i)){var a;try{b("function"==typeof t[i]),a=t[i](n,i,e,o)}catch(s){a=s}a instanceof Error&&!(a.message in x)&&(x[a.message]=!0,r(this))}}function p(e,t){var n=t.type,r="string"==typeof n?n:n.displayName,o=t._owner?t._owner.getPublicInstance().constructor.displayName:null,i=e+"|"+r+"|"+o;if(!M.hasOwnProperty(i)){M[i]=!0;var a="";r&&(a=" <"+r+" />");var s="";o&&(s=" The element was created by "+o+".")}}function d(e,t){return e!==e?t!==t:0===e&&0===t?1/e===1/t:e===t}function f(e){if(e._store){var t=e._store.originalProps,n=e.props;for(var r in n)n.hasOwnProperty(r)&&(t.hasOwnProperty(r)&&d(t[r],n[r])||(p(r,e),t[r]=n[r]))}}function h(e){if(null!=e.type){var t=C.getComponentClassForElement(e),n=t.displayName||t.name;t.propTypes&&c(n,t.propTypes,e.props,g.prop),"function"==typeof t.getDefaultProps}}var m=e(61),v=e(67),g=e(83),y=(e(82),e(45)),C=e(78),E=e(138),b=e(147),_=(e(166),{}),x={},D=/^\d+$/,M={},T={checkAndWarnForMutatedProps:f,createElement:function(e,t,n){var r=m.createElement.apply(this,arguments);if(null==r)return r;for(var o=2;o<arguments.length;o++)l(arguments[o],e);return h(r),r},createFactory:function(e){var t=T.createElement.bind(null,e);return t.type=e,t},cloneElement:function(e,t,n){for(var r=m.cloneElement.apply(this,arguments),o=2;o<arguments.length;o++)l(arguments[o],r.type);return h(r),r}};t.exports=T},{138:138,147:147,166:166,45:45,61:61,67:67,78:78,82:82,83:83}],63:[function(e,t,n){"use strict";function r(e){c[e]=!0}function o(e){delete c[e]}function i(e){return!!c[e]}var a,s=e(61),u=e(71),l=e(147),c={},p={injectEmptyComponent:function(e){a=s.createFactory(e)}},d=function(){};d.prototype.componentDidMount=function(){var e=u.get(this);e&&r(e._rootNodeID)},d.prototype.componentWillUnmount=function(){var e=u.get(this);e&&o(e._rootNodeID)},d.prototype.render=function(){return l(a),a()};var f=s.createElement(d),h={emptyElement:f,injection:p,isNullComponentID:i};t.exports=h},{147:147,61:61,71:71}],64:[function(e,t,n){"use strict";var r={guard:function(e,t){return e}};t.exports=r},{}],65:[function(e,t,n){"use strict";function r(e){o.enqueueEvents(e),o.processEventQueue()}var o=e(18),i={handleTopLevel:function(e,t,n,i){var a=o.extractEvents(e,t,n,i);r(a)}};t.exports=i},{18:18}],66:[function(e,t,n){"use strict";function r(e){var t=p.getID(e),n=c.getReactRootIDFromNodeID(t),r=p.findReactContainerForID(n),o=p.getFirstReactDOM(r);return o}function o(e,t){this.topLevelType=e,this.nativeEvent=t,this.ancestors=[]}function i(e){for(var t=p.getFirstReactDOM(h(e.nativeEvent))||window,n=t;n;)e.ancestors.push(n),n=r(n);for(var o=0,i=e.ancestors.length;i>o;o++){t=e.ancestors[o];var a=p.getID(t)||"";v._handleTopLevel(e.topLevelType,t,a,e.nativeEvent)}}function a(e){var t=m(window);e(t)}var s=e(17),u=e(22),l=e(30),c=e(70),p=e(75),d=e(97),f=e(29),h=e(137),m=e(143);f(o.prototype,{destructor:function(){this.topLevelType=null,this.nativeEvent=null,this.ancestors.length=0}}),l.addPoolingTo(o,l.twoArgumentPooler);var v={_enabled:!0,_handleTopLevel:null,WINDOW_HANDLE:u.canUseDOM?window:null,setHandleTopLevel:function(e){v._handleTopLevel=e},setEnabled:function(e){v._enabled=!!e},isEnabled:function(){return v._enabled},trapBubbledEvent:function(e,t,n){var r=n;return r?s.listen(r,t,v.dispatchEvent.bind(null,e)):null},trapCapturedEvent:function(e,t,n){var r=n;return r?s.capture(r,t,v.dispatchEvent.bind(null,e)):null},monitorScrollValue:function(e){var t=a.bind(null,e);s.listen(window,"scroll",t)},dispatchEvent:function(e,t){if(v._enabled){var n=o.getPooled(e,t);try{d.batchedUpdates(i,n)}finally{o.release(n)}}}};t.exports=v},{137:137,143:143,17:17,22:22,29:29,30:30,70:70,75:75,97:97}],67:[function(e,t,n){"use strict";var r=(e(61),e(166),{create:function(e){return e},extract:function(e){return e},extractIfFragment:function(e){return e}});t.exports=r},{166:166,61:61}],68:[function(e,t,n){"use strict";var r=e(11),o=e(18),i=e(41),a=e(38),s=e(63),u=e(33),l=e(78),c=e(48),p=e(80),d=e(89),f=e(97),h={Component:i.injection,Class:a.injection,DOMComponent:c.injection,DOMProperty:r.injection,EmptyComponent:s.injection,EventPluginHub:o.injection,EventEmitter:u.injection,NativeComponent:l.injection,Perf:p.injection,RootIndex:d.injection,Updates:f.injection};t.exports=h},{11:11,18:18,33:33,38:38,41:41,48:48,63:63,78:78,80:80,89:89,97:97}],69:[function(e,t,n){"use strict";function r(e){return i(document.documentElement,e)}var o=e(56),i=e(120),a=e(131),s=e(133),u={hasSelectionCapabilities:function(e){return e&&("INPUT"===e.nodeName&&"text"===e.type||"TEXTAREA"===e.nodeName||"true"===e.contentEditable)},getSelectionInformation:function(){var e=s();return{focusedElem:e,selectionRange:u.hasSelectionCapabilities(e)?u.getSelection(e):null}},restoreSelection:function(e){var t=s(),n=e.focusedElem,o=e.selectionRange;t!==n&&r(n)&&(u.hasSelectionCapabilities(n)&&u.setSelection(n,o),a(n))},getSelection:function(e){var t;if("selectionStart"in e)t={start:e.selectionStart,end:e.selectionEnd};else if(document.selection&&"INPUT"===e.nodeName){var n=document.selection.createRange();n.parentElement()===e&&(t={start:-n.moveStart("character",-e.value.length),end:-n.moveEnd("character",-e.value.length)})}else t=o.getOffsets(e);return t||{start:0,end:0}},setSelection:function(e,t){var n=t.start,r=t.end;if("undefined"==typeof r&&(r=n),"selectionStart"in e)e.selectionStart=n,e.selectionEnd=Math.min(r,e.value.length);else if(document.selection&&"INPUT"===e.nodeName){var i=e.createTextRange();i.collapse(!0),i.moveStart("character",n),i.moveEnd("character",r-n),i.select()}else o.setOffsets(e,t)}};t.exports=u},{120:120,131:131,133:133,56:56}],70:[function(e,t,n){"use strict";function r(e){return f+e.toString(36)}function o(e,t){return e.charAt(t)===f||t===e.length}function i(e){return""===e||e.charAt(0)===f&&e.charAt(e.length-1)!==f}function a(e,t){return 0===t.indexOf(e)&&o(t,e.length)}function s(e){return e?e.substr(0,e.lastIndexOf(f)):""}function u(e,t){if(d(i(e)&&i(t)),d(a(e,t)),e===t)return e;var n,r=e.length+h;for(n=r;n<t.length&&!o(t,n);n++);return t.substr(0,n)}function l(e,t){var n=Math.min(e.length,t.length);if(0===n)return"";for(var r=0,a=0;n>=a;a++)if(o(e,a)&&o(t,a))r=a;else if(e.charAt(a)!==t.charAt(a))break;var s=e.substr(0,r);return d(i(s)),s}function c(e,t,n,r,o,i){e=e||"",t=t||"",d(e!==t);var l=a(t,e);d(l||a(e,t));for(var c=0,p=l?s:u,f=e;;f=p(f,t)){var h;if(o&&f===e||i&&f===t||(h=n(f,l,r)),h===!1||f===t)break;d(c++<m)}}var p=e(89),d=e(147),f=".",h=f.length,m=100,v={createReactRootID:function(){return r(p.createReactRootIndex())},createReactID:function(e,t){return e+t},getReactRootIDFromNodeID:function(e){if(e&&e.charAt(0)===f&&e.length>1){var t=e.indexOf(f,1);return t>-1?e.substr(0,t):e}return null},traverseEnterLeave:function(e,t,n,r,o){var i=l(e,t);i!==e&&c(e,i,n,r,!1,!0),i!==t&&c(i,t,n,o,!0,!1)},traverseTwoPhase:function(e,t,n){e&&(c("",e,t,n,!0,!1),c(e,"",t,n,!1,!0))},traverseAncestors:function(e,t,n){c("",e,t,n,!0,!1)},_getFirstCommonAncestorID:l,_getNextDescendantID:u,isAncestorIDOf:a,SEPARATOR:f};t.exports=v},{147:147,89:89}],71:[function(e,t,n){"use strict";var r={remove:function(e){e._reactInternalInstance=void 0},get:function(e){return e._reactInternalInstance},has:function(e){return void 0!==e._reactInternalInstance},set:function(e,t){e._reactInternalInstance=t}};t.exports=r},{}],72:[function(e,t,n){"use strict";var r={currentlyMountingInstance:null,currentlyUnmountingInstance:null};t.exports=r},{}],73:[function(e,t,n){"use strict";function r(e,t){this.value=e,this.requestChange=t}function o(e){var t={value:"undefined"==typeof e?i.PropTypes.any.isRequired:e.isRequired,requestChange:i.PropTypes.func.isRequired};return i.PropTypes.shape(t)}var i=e(31);r.PropTypes={link:o},t.exports=r},{31:31}],74:[function(e,t,n){"use strict";var r=e(116),o={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(e){var t=r(e);return e.replace(">"," "+o.CHECKSUM_ATTR_NAME+'="'+t+'">')},canReuseMarkup:function(e,t){var n=t.getAttribute(o.CHECKSUM_ATTR_NAME);n=n&&parseInt(n,10);var i=r(e);return i===n}};t.exports=o},{116:116}],75:[function(e,t,n){"use strict";function r(e,t){for(var n=Math.min(e.length,t.length),r=0;n>r;r++)if(e.charAt(r)!==t.charAt(r))return r;return e.length===t.length?-1:n}function o(e){var t=I(e);return t&&K.getID(t)}function i(e){var t=a(e);if(t)if(L.hasOwnProperty(t)){var n=L[t];n!==e&&(w(!c(n,t)),L[t]=e)}else L[t]=e;return t}function a(e){return e&&e.getAttribute&&e.getAttribute(k)||""}function s(e,t){var n=a(e);n!==t&&delete L[n],e.setAttribute(k,t),L[t]=e}function u(e){return L.hasOwnProperty(e)&&c(L[e],e)||(L[e]=K.findReactNodeByID(e)),L[e]}function l(e){var t=b.get(e)._rootNodeID;return C.isNullComponentID(t)?null:(L.hasOwnProperty(t)&&c(L[t],t)||(L[t]=K.findReactNodeByID(t)),L[t])}function c(e,t){if(e){w(a(e)===t);var n=K.findReactContainerForID(t);if(n&&P(n,e))return!0}return!1}function p(e){delete L[e]}function d(e){var t=L[e];return t&&c(t,e)?void(W=t):!1}function f(e){W=null,E.traverseAncestors(e,d);var t=W;return W=null,t}function h(e,t,n,r,o){var i=D.mountComponent(e,t,r,N);e._isTopLevel=!0,K._mountImageIntoNode(i,n,o)}function m(e,t,n,r){var o=T.ReactReconcileTransaction.getPooled();o.perform(h,null,e,t,n,o,r),T.ReactReconcileTransaction.release(o)}var v=e(11),g=e(33),y=(e(45),e(61)),C=(e(62),e(63)),E=e(70),b=e(71),_=e(74),x=e(80),D=e(87),M=e(96),T=e(97),N=e(127),P=e(120),I=e(141),R=e(146),w=e(147),O=e(159),S=e(162),A=(e(166),E.SEPARATOR),k=v.ID_ATTRIBUTE_NAME,L={},U=1,F=9,B={},j={},V=[],W=null,K={_instancesByReactRootID:B,scrollMonitor:function(e,t){t()},_updateRootComponent:function(e,t,n,r){return K.scrollMonitor(n,function(){M.enqueueElementInternal(e,t),r&&M.enqueueCallbackInternal(e,r)}),e},_registerComponent:function(e,t){w(t&&(t.nodeType===U||t.nodeType===F)),g.ensureScrollValueMonitoring();var n=K.registerContainer(t);return B[n]=e,n},_renderNewRootComponent:function(e,t,n){var r=R(e,null),o=K._registerComponent(r,t);return T.batchedUpdates(m,r,o,t,n),r},render:function(e,t,n){w(y.isValidElement(e));var r=B[o(t)];if(r){var i=r._currentElement;if(S(i,e))return K._updateRootComponent(r,e,t,n).getPublicInstance();K.unmountComponentAtNode(t)}var a=I(t),s=a&&K.isRenderedByReact(a),u=s&&!r,l=K._renderNewRootComponent(e,t,u).getPublicInstance();return n&&n.call(l),l},constructAndRenderComponent:function(e,t,n){var r=y.createElement(e,t);return K.render(r,n)},constructAndRenderComponentByID:function(e,t,n){var r=document.getElementById(n);return w(r),K.constructAndRenderComponent(e,t,r)},registerContainer:function(e){var t=o(e);return t&&(t=E.getReactRootIDFromNodeID(t)),t||(t=E.createReactRootID()),j[t]=e,t},unmountComponentAtNode:function(e){w(e&&(e.nodeType===U||e.nodeType===F));var t=o(e),n=B[t];return n?(K.unmountComponentFromNode(n,e),delete B[t],delete j[t],!0):!1},unmountComponentFromNode:function(e,t){for(D.unmountComponent(e),t.nodeType===F&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)},findReactContainerForID:function(e){var t=E.getReactRootIDFromNodeID(e),n=j[t];return n},findReactNodeByID:function(e){var t=K.findReactContainerForID(e);return K.findComponentRoot(t,e)},isRenderedByReact:function(e){if(1!==e.nodeType)return!1;var t=K.getID(e);return t?t.charAt(0)===A:!1},getFirstReactDOM:function(e){for(var t=e;t&&t.parentNode!==t;){if(K.isRenderedByReact(t))return t;t=t.parentNode}return null},findComponentRoot:function(e,t){var n=V,r=0,o=f(t)||e;for(n[0]=o.firstChild,n.length=1;r<n.length;){for(var i,a=n[r++];a;){var s=K.getID(a);s?t===s?i=a:E.isAncestorIDOf(s,t)&&(n.length=r=0,n.push(a.firstChild)):n.push(a.firstChild),a=a.nextSibling}if(i)return n.length=0,i}n.length=0,w(!1)},_mountImageIntoNode:function(e,t,n){if(w(t&&(t.nodeType===U||t.nodeType===F)),n){var o=I(t);if(_.canReuseMarkup(e,o))return;var i=o.getAttribute(_.CHECKSUM_ATTR_NAME);o.removeAttribute(_.CHECKSUM_ATTR_NAME);var a=o.outerHTML;o.setAttribute(_.CHECKSUM_ATTR_NAME,i);var s=r(e,a);" (client) "+e.substring(s-20,s+20)+"\n (server) "+a.substring(s-20,s+20),w(t.nodeType!==F)}w(t.nodeType!==F),O(t,e)},getReactRootID:o,getID:i,setID:s,getNode:u,getNodeFromInstance:l,purgeID:p};x.measureMethods(K,"ReactMount",{_renderNewRootComponent:"_renderNewRootComponent",_mountImageIntoNode:"_mountImageIntoNode"}),t.exports=K},{11:11,120:120,127:127,141:141,146:146,147:147,159:159,162:162,166:166,33:33,45:45,61:61,62:62,63:63,70:70,71:71,74:74,80:80,87:87,96:96,97:97}],76:[function(e,t,n){"use strict";function r(e,t,n){h.push({parentID:e,parentNode:null,type:c.INSERT_MARKUP,markupIndex:m.push(t)-1,textContent:null,fromIndex:null,toIndex:n})}function o(e,t,n){h.push({parentID:e,parentNode:null,type:c.MOVE_EXISTING,markupIndex:null,textContent:null,fromIndex:t,toIndex:n})}function i(e,t){h.push({parentID:e,parentNode:null,type:c.REMOVE_NODE,markupIndex:null,textContent:null,fromIndex:t,toIndex:null})}function a(e,t){h.push({parentID:e,parentNode:null,type:c.TEXT_CONTENT,markupIndex:null,textContent:t,fromIndex:null,toIndex:null})}function s(){h.length&&(l.processChildrenUpdates(h,m),u())}function u(){h.length=0,m.length=0}var l=e(41),c=e(77),p=e(87),d=e(36),f=0,h=[],m=[],v={Mixin:{mountChildren:function(e,t,n){var r=d.instantiateChildren(e,t,n);this._renderedChildren=r;var o=[],i=0;for(var a in r)if(r.hasOwnProperty(a)){var s=r[a],u=this._rootNodeID+a,l=p.mountComponent(s,u,t,n);s._mountIndex=i,o.push(l),i++}return o},updateTextContent:function(e){f++;var t=!0;try{var n=this._renderedChildren;d.unmountChildren(n);for(var r in n)n.hasOwnProperty(r)&&this._unmountChildByName(n[r],r);this.setTextContent(e),t=!1}finally{f--,f||(t?u():s())}},updateChildren:function(e,t,n){f++;var r=!0;try{this._updateChildren(e,t,n),r=!1}finally{f--,f||(r?u():s())}},_updateChildren:function(e,t,n){var r=this._renderedChildren,o=d.updateChildren(r,e,t,n);if(this._renderedChildren=o,o||r){var i,a=0,s=0;for(i in o)if(o.hasOwnProperty(i)){var u=r&&r[i],l=o[i];u===l?(this.moveChild(u,s,a),a=Math.max(u._mountIndex,a),u._mountIndex=s):(u&&(a=Math.max(u._mountIndex,a),this._unmountChildByName(u,i)),this._mountChildByNameAtIndex(l,i,s,t,n)),s++}for(i in r)!r.hasOwnProperty(i)||o&&o.hasOwnProperty(i)||this._unmountChildByName(r[i],i)}},unmountChildren:function(){var e=this._renderedChildren;d.unmountChildren(e),this._renderedChildren=null},moveChild:function(e,t,n){e._mountIndex<n&&o(this._rootNodeID,e._mountIndex,t)},createChild:function(e,t){r(this._rootNodeID,t,e._mountIndex)},removeChild:function(e){i(this._rootNodeID,e._mountIndex)},setTextContent:function(e){a(this._rootNodeID,e)},_mountChildByNameAtIndex:function(e,t,n,r,o){var i=this._rootNodeID+t,a=p.mountComponent(e,i,r,o);e._mountIndex=n,this.createChild(e,a)},_unmountChildByName:function(e,t){this.removeChild(e),e._mountIndex=null}}};t.exports=v},{36:36,41:41,77:77,87:87}],77:[function(e,t,n){"use strict";var r=e(153),o=r({INSERT_MARKUP:null,MOVE_EXISTING:null,REMOVE_NODE:null,TEXT_CONTENT:null});t.exports=o},{153:153}],78:[function(e,t,n){"use strict";function r(e){if("function"==typeof e.type)return e.type;var t=e.type,n=p[t];return null==n&&(p[t]=n=l(t)),n}function o(e){return u(c),new c(e.type,e.props)}function i(e){return new d(e)}function a(e){return e instanceof d}var s=e(29),u=e(147),l=null,c=null,p={},d=null,f={injectGenericComponentClass:function(e){c=e},injectTextComponentClass:function(e){d=e},injectComponentClasses:function(e){s(p,e)},injectAutoWrapper:function(e){l=e}},h={getComponentClassForElement:r,createInternalComponent:o,createInstanceForText:i,isTextComponent:a,injection:f};t.exports=h},{147:147,29:29}],79:[function(e,t,n){"use strict";var r=e(147),o={isValidOwner:function(e){return!(!e||"function"!=typeof e.attachRef||"function"!=typeof e.detachRef)},addComponentAsRefTo:function(e,t,n){r(o.isValidOwner(n)),n.attachRef(t,e)},removeComponentAsRefFrom:function(e,t,n){r(o.isValidOwner(n)),n.getPublicInstance().refs[t]===e.getPublicInstance()&&n.detachRef(t)}};t.exports=o},{147:147}],80:[function(e,t,n){"use strict";function r(e,t,n){return n}var o={enableMeasure:!1,storedMeasure:r,measureMethods:function(e,t,n){},measure:function(e,t,n){return n},injection:{injectMeasure:function(e){o.storedMeasure=e}}};t.exports=o},{}],81:[function(e,t,n){"use strict";function r(e){return function(t,n,r){t.hasOwnProperty(n)?t[n]=e(t[n],r):t[n]=r}}function o(e,t){for(var n in t)if(t.hasOwnProperty(n)){var r=l[n];r&&l.hasOwnProperty(n)?r(e,n,t[n]):e.hasOwnProperty(n)||(e[n]=t[n])}return e}var i=e(29),a=e(126),s=e(152),u=r(function(e,t){return i({},t,e)}),l={children:a,className:r(s),style:u},c={mergeProps:function(e,t){return o(i({},e),t)}};t.exports=c},{126:126,152:152,29:29}],82:[function(e,t,n){"use strict";var r={};t.exports=r},{}],83:[function(e,t,n){"use strict";var r=e(153),o=r({prop:null,context:null,childContext:null});t.exports=o},{153:153}],84:[function(e,t,n){"use strict";function r(e){function t(t,n,r,o,i){if(o=o||b,null==n[r]){var a=C[i];return t?new Error("Required "+a+" `"+r+"` was not specified in "+("`"+o+"`.")):null}return e(n,r,o,i)}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function o(e){function t(t,n,r,o){var i=t[n],a=m(i);if(a!==e){var s=C[o],u=v(i);return new Error("Invalid "+s+" `"+n+"` of type `"+u+"` "+("supplied to `"+r+"`, expected `"+e+"`."))}return null}return r(t)}function i(){return r(E.thatReturns(null))}function a(e){function t(t,n,r,o){var i=t[n];if(!Array.isArray(i)){var a=C[o],s=m(i);return new Error("Invalid "+a+" `"+n+"` of type "+("`"+s+"` supplied to `"+r+"`, expected an array."))}for(var u=0;u<i.length;u++){var l=e(i,u,r,o);if(l instanceof Error)return l}return null}return r(t)}function s(){function e(e,t,n,r){if(!g.isValidElement(e[t])){var o=C[r];return new Error("Invalid "+o+" `"+t+"` supplied to "+("`"+n+"`, expected a ReactElement."))}return null}return r(e)}function u(e){function t(t,n,r,o){if(!(t[n]instanceof e)){var i=C[o],a=e.name||b;return new Error("Invalid "+i+" `"+n+"` supplied to "+("`"+r+"`, expected instance of `"+a+"`."))}return null}return r(t)}function l(e){function t(t,n,r,o){for(var i=t[n],a=0;a<e.length;a++)if(i===e[a])return null;var s=C[o],u=JSON.stringify(e);return new Error("Invalid "+s+" `"+n+"` of value `"+i+"` "+("supplied to `"+r+"`, expected one of "+u+"."))}return r(t)}function c(e){function t(t,n,r,o){var i=t[n],a=m(i);if("object"!==a){var s=C[o];return new Error("Invalid "+s+" `"+n+"` of type "+("`"+a+"` supplied to `"+r+"`, expected an object."))}for(var u in i)if(i.hasOwnProperty(u)){var l=e(i,u,r,o);if(l instanceof Error)return l}return null}return r(t)}function p(e){function t(t,n,r,o){for(var i=0;i<e.length;i++){var a=e[i];if(null==a(t,n,r,o))return null}var s=C[o];return new Error("Invalid "+s+" `"+n+"` supplied to "+("`"+r+"`."))}return r(t)}function d(){function e(e,t,n,r){if(!h(e[t])){var o=C[r];return new Error("Invalid "+o+" `"+t+"` supplied to "+("`"+n+"`, expected a ReactNode."))}return null}return r(e)}function f(e){function t(t,n,r,o){var i=t[n],a=m(i);if("object"!==a){var s=C[o];return new Error("Invalid "+s+" `"+n+"` of type `"+a+"` "+("supplied to `"+r+"`, expected `object`."))}for(var u in e){var l=e[u];if(l){var c=l(i,u,r,o);if(c)return c}}return null}return r(t)}function h(e){switch(typeof e){case"number":case"string":case"undefined":return!0;case"boolean":return!e;case"object":if(Array.isArray(e))return e.every(h);if(null===e||g.isValidElement(e))return!0;e=y.extractIfFragment(e);for(var t in e)if(!h(e[t]))return!1;return!0;default:return!1}}function m(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":t}function v(e){var t=m(e);if("object"===t){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return t}var g=e(61),y=e(67),C=e(82),E=e(126),b="<<anonymous>>",_=s(),x=d(),D={array:o("array"),bool:o("boolean"),func:o("function"),number:o("number"),object:o("object"),string:o("string"),any:i(),arrayOf:a,element:_,instanceOf:u,node:x,objectOf:c,oneOf:l,oneOfType:p,shape:f};t.exports=D},{126:126,61:61,67:67,82:82}],85:[function(e,t,n){"use strict";function r(){this.listenersToPut=[]}var o=e(30),i=e(33),a=e(29);a(r.prototype,{enqueuePutListener:function(e,t,n){this.listenersToPut.push({rootNodeID:e,propKey:t,propValue:n})},putListeners:function(){for(var e=0;e<this.listenersToPut.length;e++){var t=this.listenersToPut[e];i.putListener(t.rootNodeID,t.propKey,t.propValue)}},reset:function(){this.listenersToPut.length=0},destructor:function(){this.reset()}}),o.addPoolingTo(r),t.exports=r},{29:29,30:30,33:33}],86:[function(e,t,n){"use strict";function r(){this.reinitializeTransaction(),this.renderToStaticMarkup=!1,this.reactMountReady=o.getPooled(null),this.putListenerQueue=u.getPooled()}var o=e(7),i=e(30),a=e(33),s=e(69),u=e(85),l=e(113),c=e(29),p={initialize:s.getSelectionInformation,close:s.restoreSelection},d={initialize:function(){var e=a.isEnabled();return a.setEnabled(!1),e},close:function(e){a.setEnabled(e)}},f={initialize:function(){this.reactMountReady.reset()},close:function(){this.reactMountReady.notifyAll()}},h={initialize:function(){this.putListenerQueue.reset()},close:function(){this.putListenerQueue.putListeners()}},m=[h,p,d,f],v={getTransactionWrappers:function(){return m},getReactMountReady:function(){return this.reactMountReady},getPutListenerQueue:function(){return this.putListenerQueue},destructor:function(){o.release(this.reactMountReady),this.reactMountReady=null,u.release(this.putListenerQueue),this.putListenerQueue=null}};c(r.prototype,l.Mixin,v),i.addPoolingTo(r),t.exports=r},{113:113,29:29,30:30,33:33,69:69,7:7,85:85}],87:[function(e,t,n){"use strict";function r(){o.attachRefs(this,this._currentElement)}var o=e(88),i=(e(62),{mountComponent:function(e,t,n,o){var i=e.mountComponent(t,n,o);return n.getReactMountReady().enqueue(r,e),i},unmountComponent:function(e){o.detachRefs(e,e._currentElement),e.unmountComponent()},receiveComponent:function(e,t,n,i){var a=e._currentElement;if(t!==a||null==t._owner){var s=o.shouldUpdateRefs(a,t);s&&o.detachRefs(e,a),e.receiveComponent(t,n,i),s&&n.getReactMountReady().enqueue(r,e)}},performUpdateIfNecessary:function(e,t){e.performUpdateIfNecessary(t)}});t.exports=i},{62:62,88:88}],88:[function(e,t,n){"use strict";function r(e,t,n){"function"==typeof e?e(t.getPublicInstance()):i.addComponentAsRefTo(t,e,n)}function o(e,t,n){"function"==typeof e?e(null):i.removeComponentAsRefFrom(t,e,n)}var i=e(79),a={};a.attachRefs=function(e,t){var n=t.ref;null!=n&&r(n,e,t._owner)},a.shouldUpdateRefs=function(e,t){return t._owner!==e._owner||t.ref!==e.ref},a.detachRefs=function(e,t){var n=t.ref;null!=n&&o(n,e,t._owner)},t.exports=a},{79:79}],89:[function(e,t,n){"use strict";var r={injectCreateReactRootIndex:function(e){o.createReactRootIndex=e}},o={createReactRootIndex:null,injection:r};t.exports=o},{}],90:[function(e,t,n){"use strict";function r(e){p(i.isValidElement(e));var t;try{var n=a.createReactRootID();return t=u.getPooled(!1),t.perform(function(){var r=c(e,null),o=r.mountComponent(n,t,l);return s.addChecksumToMarkup(o)},null)}finally{u.release(t)}}function o(e){p(i.isValidElement(e));var t;try{var n=a.createReactRootID();return t=u.getPooled(!0),t.perform(function(){var r=c(e,null);return r.mountComponent(n,t,l)},null)}finally{u.release(t)}}var i=e(61),a=e(70),s=e(74),u=e(91),l=e(127),c=e(146),p=e(147);t.exports={renderToString:r,renderToStaticMarkup:o}},{127:127,146:146,147:147,61:61,70:70,74:74,91:91}],91:[function(e,t,n){"use strict";function r(e){this.reinitializeTransaction(),this.renderToStaticMarkup=e,this.reactMountReady=i.getPooled(null),this.putListenerQueue=a.getPooled()}var o=e(30),i=e(7),a=e(85),s=e(113),u=e(29),l=e(126),c={initialize:function(){this.reactMountReady.reset()},close:l},p={initialize:function(){this.putListenerQueue.reset()},close:l},d=[p,c],f={getTransactionWrappers:function(){return d},getReactMountReady:function(){return this.reactMountReady},getPutListenerQueue:function(){return this.putListenerQueue},destructor:function(){i.release(this.reactMountReady),this.reactMountReady=null,a.release(this.putListenerQueue),this.putListenerQueue=null}};u(r.prototype,s.Mixin,f),o.addPoolingTo(r),t.exports=r},{113:113,126:126,29:29,30:30,7:7,85:85}],92:[function(e,t,n){"use strict";function r(e,t){var n={};return function(r){n[t]=r,e.setState(n)}}var o={createStateSetter:function(e,t){return function(n,r,o,i,a,s){var u=t.call(e,n,r,o,i,a,s);u&&e.setState(u)}},createStateKeySetter:function(e,t){var n=e.__keySetters||(e.__keySetters={});return n[t]||(n[t]=r(e,t))}};o.Mixin={createStateSetter:function(e){return o.createStateSetter(this,e)},createStateKeySetter:function(e){return o.createStateKeySetter(this,e)}},t.exports=o},{}],93:[function(e,t,n){"use strict";var r=e(37),o=e(67),i={getChildMapping:function(e){return e?o.extract(r.map(e,function(e){return e})):e},mergeChildMappings:function(e,t){function n(n){return t.hasOwnProperty(n)?t[n]:e[n]}e=e||{},t=t||{};var r={},o=[];for(var i in e)t.hasOwnProperty(i)?o.length&&(r[i]=o,o=[]):o.push(i);var a,s={};for(var u in t){if(r.hasOwnProperty(u))for(a=0;a<r[u].length;a++){var l=r[u][a];s[r[u][a]]=n(l)}s[u]=n(u)}for(a=0;a<o.length;a++)s[o[a]]=n(o[a]);return s}};t.exports=i},{37:37,67:67}],94:[function(e,t,n){"use strict";function r(){var e=document.createElement("div"),t=e.style;"AnimationEvent"in window||delete s.animationend.animation,"TransitionEvent"in window||delete s.transitionend.transition;for(var n in s){var r=s[n];for(var o in r)if(o in t){u.push(r[o]);break}}}function o(e,t,n){e.addEventListener(t,n,!1)}function i(e,t,n){e.removeEventListener(t,n,!1)}var a=e(22),s={transitionend:{transition:"transitionend",WebkitTransition:"webkitTransitionEnd",MozTransition:"mozTransitionEnd",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd"},animationend:{animation:"animationend",WebkitAnimation:"webkitAnimationEnd",MozAnimation:"mozAnimationEnd",OAnimation:"oAnimationEnd",msAnimation:"MSAnimationEnd"}},u=[];a.canUseDOM&&r();var l={addEndEventListener:function(e,t){
+return 0===u.length?void window.setTimeout(t,0):void u.forEach(function(n){o(e,n,t)})},removeEndEventListener:function(e,t){0!==u.length&&u.forEach(function(n){i(e,n,t)})}};t.exports=l},{22:22}],95:[function(e,t,n){"use strict";var r=e(31),o=e(93),i=e(29),a=e(119),s=e(126),u=r.createClass({displayName:"ReactTransitionGroup",propTypes:{component:r.PropTypes.any,childFactory:r.PropTypes.func},getDefaultProps:function(){return{component:"span",childFactory:s.thatReturnsArgument}},getInitialState:function(){return{children:o.getChildMapping(this.props.children)}},componentWillMount:function(){this.currentlyTransitioningKeys={},this.keysToEnter=[],this.keysToLeave=[]},componentDidMount:function(){var e=this.state.children;for(var t in e)e[t]&&this.performAppear(t)},componentWillReceiveProps:function(e){var t=o.getChildMapping(e.children),n=this.state.children;this.setState({children:o.mergeChildMappings(n,t)});var r;for(r in t){var i=n&&n.hasOwnProperty(r);!t[r]||i||this.currentlyTransitioningKeys[r]||this.keysToEnter.push(r)}for(r in n){var a=t&&t.hasOwnProperty(r);!n[r]||a||this.currentlyTransitioningKeys[r]||this.keysToLeave.push(r)}},componentDidUpdate:function(){var e=this.keysToEnter;this.keysToEnter=[],e.forEach(this.performEnter);var t=this.keysToLeave;this.keysToLeave=[],t.forEach(this.performLeave)},performAppear:function(e){this.currentlyTransitioningKeys[e]=!0;var t=this.refs[e];t.componentWillAppear?t.componentWillAppear(this._handleDoneAppearing.bind(this,e)):this._handleDoneAppearing(e)},_handleDoneAppearing:function(e){var t=this.refs[e];t.componentDidAppear&&t.componentDidAppear(),delete this.currentlyTransitioningKeys[e];var n=o.getChildMapping(this.props.children);n&&n.hasOwnProperty(e)||this.performLeave(e)},performEnter:function(e){this.currentlyTransitioningKeys[e]=!0;var t=this.refs[e];t.componentWillEnter?t.componentWillEnter(this._handleDoneEntering.bind(this,e)):this._handleDoneEntering(e)},_handleDoneEntering:function(e){var t=this.refs[e];t.componentDidEnter&&t.componentDidEnter(),delete this.currentlyTransitioningKeys[e];var n=o.getChildMapping(this.props.children);n&&n.hasOwnProperty(e)||this.performLeave(e)},performLeave:function(e){this.currentlyTransitioningKeys[e]=!0;var t=this.refs[e];t.componentWillLeave?t.componentWillLeave(this._handleDoneLeaving.bind(this,e)):this._handleDoneLeaving(e)},_handleDoneLeaving:function(e){var t=this.refs[e];t.componentDidLeave&&t.componentDidLeave(),delete this.currentlyTransitioningKeys[e];var n=o.getChildMapping(this.props.children);if(n&&n.hasOwnProperty(e))this.performEnter(e);else{var r=i({},this.state.children);delete r[e],this.setState({children:r})}},render:function(){var e=[];for(var t in this.state.children){var n=this.state.children[t];n&&e.push(a(this.props.childFactory(n),{ref:t,key:t}))}return r.createElement(this.props.component,this.props,e)}});t.exports=u},{119:119,126:126,29:29,31:31,93:93}],96:[function(e,t,n){"use strict";function r(e){e!==i.currentlyMountingInstance&&l.enqueueUpdate(e)}function o(e,t){p(null==a.current);var n=u.get(e);return n?n===i.currentlyUnmountingInstance?null:n:null}var i=e(72),a=e(45),s=e(61),u=e(71),l=e(97),c=e(29),p=e(147),d=(e(166),{enqueueCallback:function(e,t){p("function"==typeof t);var n=o(e);return n&&n!==i.currentlyMountingInstance?(n._pendingCallbacks?n._pendingCallbacks.push(t):n._pendingCallbacks=[t],void r(n)):null},enqueueCallbackInternal:function(e,t){p("function"==typeof t),e._pendingCallbacks?e._pendingCallbacks.push(t):e._pendingCallbacks=[t],r(e)},enqueueForceUpdate:function(e){var t=o(e,"forceUpdate");t&&(t._pendingForceUpdate=!0,r(t))},enqueueReplaceState:function(e,t){var n=o(e,"replaceState");n&&(n._pendingStateQueue=[t],n._pendingReplaceState=!0,r(n))},enqueueSetState:function(e,t){var n=o(e,"setState");if(n){var i=n._pendingStateQueue||(n._pendingStateQueue=[]);i.push(t),r(n)}},enqueueSetProps:function(e,t){var n=o(e,"setProps");if(n){p(n._isTopLevel);var i=n._pendingElement||n._currentElement,a=c({},i.props,t);n._pendingElement=s.cloneAndReplaceProps(i,a),r(n)}},enqueueReplaceProps:function(e,t){var n=o(e,"replaceProps");if(n){p(n._isTopLevel);var i=n._pendingElement||n._currentElement;n._pendingElement=s.cloneAndReplaceProps(i,t),r(n)}},enqueueElementInternal:function(e,t){e._pendingElement=t,r(e)}});t.exports=d},{147:147,166:166,29:29,45:45,61:61,71:71,72:72,97:97}],97:[function(e,t,n){"use strict";function r(){v(T.ReactReconcileTransaction&&E)}function o(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=c.getPooled(),this.reconcileTransaction=T.ReactReconcileTransaction.getPooled()}function i(e,t,n,o,i){r(),E.batchedUpdates(e,t,n,o,i)}function a(e,t){return e._mountOrder-t._mountOrder}function s(e){var t=e.dirtyComponentsLength;v(t===g.length),g.sort(a);for(var n=0;t>n;n++){var r=g[n],o=r._pendingCallbacks;if(r._pendingCallbacks=null,f.performUpdateIfNecessary(r,e.reconcileTransaction),o)for(var i=0;i<o.length;i++)e.callbackQueue.enqueue(o[i],r.getPublicInstance())}}function u(e){return r(),E.isBatchingUpdates?void g.push(e):void E.batchedUpdates(u,e)}function l(e,t){v(E.isBatchingUpdates),y.enqueue(e,t),C=!0}var c=e(7),p=e(30),d=(e(45),e(80)),f=e(87),h=e(113),m=e(29),v=e(147),g=(e(166),[]),y=c.getPooled(),C=!1,E=null,b={initialize:function(){this.dirtyComponentsLength=g.length},close:function(){this.dirtyComponentsLength!==g.length?(g.splice(0,this.dirtyComponentsLength),D()):g.length=0}},_={initialize:function(){this.callbackQueue.reset()},close:function(){this.callbackQueue.notifyAll()}},x=[b,_];m(o.prototype,h.Mixin,{getTransactionWrappers:function(){return x},destructor:function(){this.dirtyComponentsLength=null,c.release(this.callbackQueue),this.callbackQueue=null,T.ReactReconcileTransaction.release(this.reconcileTransaction),this.reconcileTransaction=null},perform:function(e,t,n){return h.Mixin.perform.call(this,this.reconcileTransaction.perform,this.reconcileTransaction,e,t,n)}}),p.addPoolingTo(o);var D=function(){for(;g.length||C;){if(g.length){var e=o.getPooled();e.perform(s,null,e),o.release(e)}if(C){C=!1;var t=y;y=c.getPooled(),t.notifyAll(),c.release(t)}}};D=d.measure("ReactUpdates","flushBatchedUpdates",D);var M={injectReconcileTransaction:function(e){v(e),T.ReactReconcileTransaction=e},injectBatchingStrategy:function(e){v(e),v("function"==typeof e.batchedUpdates),v("boolean"==typeof e.isBatchingUpdates),E=e}},T={ReactReconcileTransaction:null,batchedUpdates:i,enqueueUpdate:u,flushBatchedUpdates:D,injection:M,asap:l};t.exports=T},{113:113,147:147,166:166,29:29,30:30,45:45,7:7,80:80,87:87}],98:[function(e,t,n){"use strict";var r=e(11),o=r.injection.MUST_USE_ATTRIBUTE,i={Properties:{clipPath:o,cx:o,cy:o,d:o,dx:o,dy:o,fill:o,fillOpacity:o,fontFamily:o,fontSize:o,fx:o,fy:o,gradientTransform:o,gradientUnits:o,markerEnd:o,markerMid:o,markerStart:o,offset:o,opacity:o,patternContentUnits:o,patternUnits:o,points:o,preserveAspectRatio:o,r:o,rx:o,ry:o,spreadMethod:o,stopColor:o,stopOpacity:o,stroke:o,strokeDasharray:o,strokeLinecap:o,strokeOpacity:o,strokeWidth:o,textAnchor:o,transform:o,version:o,viewBox:o,x1:o,x2:o,x:o,y1:o,y2:o,y:o},DOMAttributeNames:{clipPath:"clip-path",fillOpacity:"fill-opacity",fontFamily:"font-family",fontSize:"font-size",gradientTransform:"gradientTransform",gradientUnits:"gradientUnits",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",patternContentUnits:"patternContentUnits",patternUnits:"patternUnits",preserveAspectRatio:"preserveAspectRatio",spreadMethod:"spreadMethod",stopColor:"stop-color",stopOpacity:"stop-opacity",strokeDasharray:"stroke-dasharray",strokeLinecap:"stroke-linecap",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",textAnchor:"text-anchor",viewBox:"viewBox"}};t.exports=i},{11:11}],99:[function(e,t,n){"use strict";function r(e){if("selectionStart"in e&&s.hasSelectionCapabilities(e))return{start:e.selectionStart,end:e.selectionEnd};if(window.getSelection){var t=window.getSelection();return{anchorNode:t.anchorNode,anchorOffset:t.anchorOffset,focusNode:t.focusNode,focusOffset:t.focusOffset}}if(document.selection){var n=document.selection.createRange();return{parentElement:n.parentElement(),text:n.text,top:n.boundingTop,left:n.boundingLeft}}}function o(e){if(y||null==m||m!==l())return null;var t=r(m);if(!g||!d(g,t)){g=t;var n=u.getPooled(h.select,v,e);return n.type="select",n.target=m,a.accumulateTwoPhaseDispatches(n),n}}var i=e(16),a=e(21),s=e(69),u=e(105),l=e(133),c=e(150),p=e(154),d=e(161),f=i.topLevelTypes,h={select:{phasedRegistrationNames:{bubbled:p({onSelect:null}),captured:p({onSelectCapture:null})},dependencies:[f.topBlur,f.topContextMenu,f.topFocus,f.topKeyDown,f.topMouseDown,f.topMouseUp,f.topSelectionChange]}},m=null,v=null,g=null,y=!1,C={eventTypes:h,extractEvents:function(e,t,n,r){switch(e){case f.topFocus:(c(t)||"true"===t.contentEditable)&&(m=t,v=n,g=null);break;case f.topBlur:m=null,v=null,g=null;break;case f.topMouseDown:y=!0;break;case f.topContextMenu:case f.topMouseUp:return y=!1,o(r);case f.topSelectionChange:case f.topKeyDown:case f.topKeyUp:return o(r)}}};t.exports=C},{105:105,133:133,150:150,154:154,16:16,161:161,21:21,69:69}],100:[function(e,t,n){"use strict";var r=Math.pow(2,53),o={createReactRootIndex:function(){return Math.ceil(Math.random()*r)}};t.exports=o},{}],101:[function(e,t,n){"use strict";var r=e(16),o=e(20),i=e(21),a=e(102),s=e(105),u=e(106),l=e(108),c=e(109),p=e(104),d=e(110),f=e(111),h=e(112),m=e(134),v=e(147),g=e(154),y=(e(166),r.topLevelTypes),C={blur:{phasedRegistrationNames:{bubbled:g({onBlur:!0}),captured:g({onBlurCapture:!0})}},click:{phasedRegistrationNames:{bubbled:g({onClick:!0}),captured:g({onClickCapture:!0})}},contextMenu:{phasedRegistrationNames:{bubbled:g({onContextMenu:!0}),captured:g({onContextMenuCapture:!0})}},copy:{phasedRegistrationNames:{bubbled:g({onCopy:!0}),captured:g({onCopyCapture:!0})}},cut:{phasedRegistrationNames:{bubbled:g({onCut:!0}),captured:g({onCutCapture:!0})}},doubleClick:{phasedRegistrationNames:{bubbled:g({onDoubleClick:!0}),captured:g({onDoubleClickCapture:!0})}},drag:{phasedRegistrationNames:{bubbled:g({onDrag:!0}),captured:g({onDragCapture:!0})}},dragEnd:{phasedRegistrationNames:{bubbled:g({onDragEnd:!0}),captured:g({onDragEndCapture:!0})}},dragEnter:{phasedRegistrationNames:{bubbled:g({onDragEnter:!0}),captured:g({onDragEnterCapture:!0})}},dragExit:{phasedRegistrationNames:{bubbled:g({onDragExit:!0}),captured:g({onDragExitCapture:!0})}},dragLeave:{phasedRegistrationNames:{bubbled:g({onDragLeave:!0}),captured:g({onDragLeaveCapture:!0})}},dragOver:{phasedRegistrationNames:{bubbled:g({onDragOver:!0}),captured:g({onDragOverCapture:!0})}},dragStart:{phasedRegistrationNames:{bubbled:g({onDragStart:!0}),captured:g({onDragStartCapture:!0})}},drop:{phasedRegistrationNames:{bubbled:g({onDrop:!0}),captured:g({onDropCapture:!0})}},focus:{phasedRegistrationNames:{bubbled:g({onFocus:!0}),captured:g({onFocusCapture:!0})}},input:{phasedRegistrationNames:{bubbled:g({onInput:!0}),captured:g({onInputCapture:!0})}},keyDown:{phasedRegistrationNames:{bubbled:g({onKeyDown:!0}),captured:g({onKeyDownCapture:!0})}},keyPress:{phasedRegistrationNames:{bubbled:g({onKeyPress:!0}),captured:g({onKeyPressCapture:!0})}},keyUp:{phasedRegistrationNames:{bubbled:g({onKeyUp:!0}),captured:g({onKeyUpCapture:!0})}},load:{phasedRegistrationNames:{bubbled:g({onLoad:!0}),captured:g({onLoadCapture:!0})}},error:{phasedRegistrationNames:{bubbled:g({onError:!0}),captured:g({onErrorCapture:!0})}},mouseDown:{phasedRegistrationNames:{bubbled:g({onMouseDown:!0}),captured:g({onMouseDownCapture:!0})}},mouseMove:{phasedRegistrationNames:{bubbled:g({onMouseMove:!0}),captured:g({onMouseMoveCapture:!0})}},mouseOut:{phasedRegistrationNames:{bubbled:g({onMouseOut:!0}),captured:g({onMouseOutCapture:!0})}},mouseOver:{phasedRegistrationNames:{bubbled:g({onMouseOver:!0}),captured:g({onMouseOverCapture:!0})}},mouseUp:{phasedRegistrationNames:{bubbled:g({onMouseUp:!0}),captured:g({onMouseUpCapture:!0})}},paste:{phasedRegistrationNames:{bubbled:g({onPaste:!0}),captured:g({onPasteCapture:!0})}},reset:{phasedRegistrationNames:{bubbled:g({onReset:!0}),captured:g({onResetCapture:!0})}},scroll:{phasedRegistrationNames:{bubbled:g({onScroll:!0}),captured:g({onScrollCapture:!0})}},submit:{phasedRegistrationNames:{bubbled:g({onSubmit:!0}),captured:g({onSubmitCapture:!0})}},touchCancel:{phasedRegistrationNames:{bubbled:g({onTouchCancel:!0}),captured:g({onTouchCancelCapture:!0})}},touchEnd:{phasedRegistrationNames:{bubbled:g({onTouchEnd:!0}),captured:g({onTouchEndCapture:!0})}},touchMove:{phasedRegistrationNames:{bubbled:g({onTouchMove:!0}),captured:g({onTouchMoveCapture:!0})}},touchStart:{phasedRegistrationNames:{bubbled:g({onTouchStart:!0}),captured:g({onTouchStartCapture:!0})}},wheel:{phasedRegistrationNames:{bubbled:g({onWheel:!0}),captured:g({onWheelCapture:!0})}}},E={topBlur:C.blur,topClick:C.click,topContextMenu:C.contextMenu,topCopy:C.copy,topCut:C.cut,topDoubleClick:C.doubleClick,topDrag:C.drag,topDragEnd:C.dragEnd,topDragEnter:C.dragEnter,topDragExit:C.dragExit,topDragLeave:C.dragLeave,topDragOver:C.dragOver,topDragStart:C.dragStart,topDrop:C.drop,topError:C.error,topFocus:C.focus,topInput:C.input,topKeyDown:C.keyDown,topKeyPress:C.keyPress,topKeyUp:C.keyUp,topLoad:C.load,topMouseDown:C.mouseDown,topMouseMove:C.mouseMove,topMouseOut:C.mouseOut,topMouseOver:C.mouseOver,topMouseUp:C.mouseUp,topPaste:C.paste,topReset:C.reset,topScroll:C.scroll,topSubmit:C.submit,topTouchCancel:C.touchCancel,topTouchEnd:C.touchEnd,topTouchMove:C.touchMove,topTouchStart:C.touchStart,topWheel:C.wheel};for(var b in E)E[b].dependencies=[b];var _={eventTypes:C,executeDispatch:function(e,t,n){var r=o.executeDispatch(e,t,n);r===!1&&(e.stopPropagation(),e.preventDefault())},extractEvents:function(e,t,n,r){var o=E[e];if(!o)return null;var g;switch(e){case y.topInput:case y.topLoad:case y.topError:case y.topReset:case y.topSubmit:g=s;break;case y.topKeyPress:if(0===m(r))return null;case y.topKeyDown:case y.topKeyUp:g=l;break;case y.topBlur:case y.topFocus:g=u;break;case y.topClick:if(2===r.button)return null;case y.topContextMenu:case y.topDoubleClick:case y.topMouseDown:case y.topMouseMove:case y.topMouseOut:case y.topMouseOver:case y.topMouseUp:g=c;break;case y.topDrag:case y.topDragEnd:case y.topDragEnter:case y.topDragExit:case y.topDragLeave:case y.topDragOver:case y.topDragStart:case y.topDrop:g=p;break;case y.topTouchCancel:case y.topTouchEnd:case y.topTouchMove:case y.topTouchStart:g=d;break;case y.topScroll:g=f;break;case y.topWheel:g=h;break;case y.topCopy:case y.topCut:case y.topPaste:g=a}v(g);var C=g.getPooled(o,n,r);return i.accumulateTwoPhaseDispatches(C),C}};t.exports=_},{102:102,104:104,105:105,106:106,108:108,109:109,110:110,111:111,112:112,134:134,147:147,154:154,16:16,166:166,20:20,21:21}],102:[function(e,t,n){"use strict";function r(e,t,n){o.call(this,e,t,n)}var o=e(105),i={clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}};o.augmentClass(r,i),t.exports=r},{105:105}],103:[function(e,t,n){"use strict";function r(e,t,n){o.call(this,e,t,n)}var o=e(105),i={data:null};o.augmentClass(r,i),t.exports=r},{105:105}],104:[function(e,t,n){"use strict";function r(e,t,n){o.call(this,e,t,n)}var o=e(109),i={dataTransfer:null};o.augmentClass(r,i),t.exports=r},{109:109}],105:[function(e,t,n){"use strict";function r(e,t,n){this.dispatchConfig=e,this.dispatchMarker=t,this.nativeEvent=n;var r=this.constructor.Interface;for(var o in r)if(r.hasOwnProperty(o)){var i=r[o];i?this[o]=i(n):this[o]=n[o]}var s=null!=n.defaultPrevented?n.defaultPrevented:n.returnValue===!1;s?this.isDefaultPrevented=a.thatReturnsTrue:this.isDefaultPrevented=a.thatReturnsFalse,this.isPropagationStopped=a.thatReturnsFalse}var o=e(30),i=e(29),a=e(126),s=e(137),u={type:null,target:s,currentTarget:a.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};i(r.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e.preventDefault?e.preventDefault():e.returnValue=!1,this.isDefaultPrevented=a.thatReturnsTrue},stopPropagation:function(){var e=this.nativeEvent;e.stopPropagation?e.stopPropagation():e.cancelBubble=!0,this.isPropagationStopped=a.thatReturnsTrue},persist:function(){this.isPersistent=a.thatReturnsTrue},isPersistent:a.thatReturnsFalse,destructor:function(){var e=this.constructor.Interface;for(var t in e)this[t]=null;this.dispatchConfig=null,this.dispatchMarker=null,this.nativeEvent=null}}),r.Interface=u,r.augmentClass=function(e,t){var n=this,r=Object.create(n.prototype);i(r,e.prototype),e.prototype=r,e.prototype.constructor=e,e.Interface=i({},n.Interface,t),e.augmentClass=n.augmentClass,o.addPoolingTo(e,o.threeArgumentPooler)},o.addPoolingTo(r,o.threeArgumentPooler),t.exports=r},{126:126,137:137,29:29,30:30}],106:[function(e,t,n){"use strict";function r(e,t,n){o.call(this,e,t,n)}var o=e(111),i={relatedTarget:null};o.augmentClass(r,i),t.exports=r},{111:111}],107:[function(e,t,n){"use strict";function r(e,t,n){o.call(this,e,t,n)}var o=e(105),i={data:null};o.augmentClass(r,i),t.exports=r},{105:105}],108:[function(e,t,n){"use strict";function r(e,t,n){o.call(this,e,t,n)}var o=e(111),i=e(134),a=e(135),s=e(136),u={key:a,location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:s,charCode:function(e){return"keypress"===e.type?i(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?i(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}};o.augmentClass(r,u),t.exports=r},{111:111,134:134,135:135,136:136}],109:[function(e,t,n){"use strict";function r(e,t,n){o.call(this,e,t,n)}var o=e(111),i=e(114),a=e(136),s={screenX:null,screenY:null,clientX:null,clientY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:a,button:function(e){var t=e.button;return"which"in e?t:2===t?2:4===t?1:0},buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},pageX:function(e){return"pageX"in e?e.pageX:e.clientX+i.currentScrollLeft},pageY:function(e){return"pageY"in e?e.pageY:e.clientY+i.currentScrollTop}};o.augmentClass(r,s),t.exports=r},{111:111,114:114,136:136}],110:[function(e,t,n){"use strict";function r(e,t,n){o.call(this,e,t,n)}var o=e(111),i=e(136),a={touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:i};o.augmentClass(r,a),t.exports=r},{111:111,136:136}],111:[function(e,t,n){"use strict";function r(e,t,n){o.call(this,e,t,n)}var o=e(105),i=e(137),a={view:function(e){if(e.view)return e.view;var t=i(e);if(null!=t&&t.window===t)return t;var n=t.ownerDocument;return n?n.defaultView||n.parentWindow:window},detail:function(e){return e.detail||0}};o.augmentClass(r,a),t.exports=r},{105:105,137:137}],112:[function(e,t,n){"use strict";function r(e,t,n){o.call(this,e,t,n)}var o=e(109),i={deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null};o.augmentClass(r,i),t.exports=r},{109:109}],113:[function(e,t,n){"use strict";var r=e(147),o={reinitializeTransaction:function(){this.transactionWrappers=this.getTransactionWrappers(),this.wrapperInitData?this.wrapperInitData.length=0:this.wrapperInitData=[],this._isInTransaction=!1},_isInTransaction:!1,getTransactionWrappers:null,isInTransaction:function(){return!!this._isInTransaction},perform:function(e,t,n,o,i,a,s,u){r(!this.isInTransaction());var l,c;try{this._isInTransaction=!0,l=!0,this.initializeAll(0),c=e.call(t,n,o,i,a,s,u),l=!1}finally{try{if(l)try{this.closeAll(0)}catch(p){}else this.closeAll(0)}finally{this._isInTransaction=!1}}return c},initializeAll:function(e){for(var t=this.transactionWrappers,n=e;n<t.length;n++){var r=t[n];try{this.wrapperInitData[n]=i.OBSERVED_ERROR,this.wrapperInitData[n]=r.initialize?r.initialize.call(this):null}finally{if(this.wrapperInitData[n]===i.OBSERVED_ERROR)try{this.initializeAll(n+1)}catch(o){}}}},closeAll:function(e){r(this.isInTransaction());for(var t=this.transactionWrappers,n=e;n<t.length;n++){var o,a=t[n],s=this.wrapperInitData[n];try{o=!0,s!==i.OBSERVED_ERROR&&a.close&&a.close.call(this,s),o=!1}finally{if(o)try{this.closeAll(n+1)}catch(u){}}}this.wrapperInitData.length=0}},i={Mixin:o,OBSERVED_ERROR:{}};t.exports=i},{147:147}],114:[function(e,t,n){"use strict";var r={currentScrollLeft:0,currentScrollTop:0,refreshScrollValues:function(e){r.currentScrollLeft=e.x,r.currentScrollTop=e.y}};t.exports=r},{}],115:[function(e,t,n){"use strict";function r(e,t){if(o(null!=t),null==e)return t;var n=Array.isArray(e),r=Array.isArray(t);return n&&r?(e.push.apply(e,t),e):n?(e.push(t),e):r?[e].concat(t):[e,t]}var o=e(147);t.exports=r},{147:147}],116:[function(e,t,n){"use strict";function r(e){for(var t=1,n=0,r=0;r<e.length;r++)t=(t+e.charCodeAt(r))%o,n=(n+t)%o;return t|n<<16}var o=65521;t.exports=r},{}],117:[function(e,t,n){function r(e){return e.replace(o,function(e,t){return t.toUpperCase()})}var o=/-(.)/g;t.exports=r},{}],118:[function(e,t,n){"use strict";function r(e){return o(e.replace(i,"ms-"))}var o=e(117),i=/^-ms-/;t.exports=r},{117:117}],119:[function(e,t,n){"use strict";function r(e,t){var n=i.mergeProps(t,e.props);return!n.hasOwnProperty(s)&&e.props.hasOwnProperty(s)&&(n.children=e.props.children),o.createElement(e.type,n)}var o=e(61),i=e(81),a=e(154),s=(e(166),a({children:null}));t.exports=r},{154:154,166:166,61:61,81:81}],120:[function(e,t,n){function r(e,t){return e&&t?e===t?!0:o(e)?!1:o(t)?r(e,t.parentNode):e.contains?e.contains(t):e.compareDocumentPosition?!!(16&e.compareDocumentPosition(t)):!1:!1}var o=e(151);t.exports=r},{151:151}],121:[function(e,t,n){function r(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"length"in e&&!("setInterval"in e)&&"number"!=typeof e.nodeType&&(Array.isArray(e)||"callee"in e||"item"in e)}function o(e){return r(e)?Array.isArray(e)?e.slice():i(e):[e]}var i=e(163);t.exports=o},{163:163}],122:[function(e,t,n){"use strict";function r(e){var t=i.createFactory(e),n=o.createClass({tagName:e.toUpperCase(),displayName:"ReactFullPageComponent"+e,componentWillUnmount:function(){a(!1)},render:function(){return t(this.props)}});return n}var o=e(38),i=e(61),a=e(147);t.exports=r},{147:147,38:38,61:61}],123:[function(e,t,n){function r(e){var t=e.match(c);return t&&t[1].toLowerCase()}function o(e,t){var n=l;u(!!l);var o=r(e),i=o&&s(o);if(i){n.innerHTML=i[1]+e+i[2];for(var c=i[0];c--;)n=n.lastChild}else n.innerHTML=e;var p=n.getElementsByTagName("script");p.length&&(u(t),a(p).forEach(t));for(var d=a(n.childNodes);n.lastChild;)n.removeChild(n.lastChild);return d}var i=e(22),a=e(121),s=e(139),u=e(147),l=i.canUseDOM?document.createElement("div"):null,c=/^\s*<(\w+)/;t.exports=o},{121:121,139:139,147:147,22:22}],124:[function(e,t,n){"use strict";function r(e){return"object"==typeof e?Object.keys(e).filter(function(t){return e[t]}).join(" "):Array.prototype.join.call(arguments," ")}e(166);t.exports=r},{166:166}],125:[function(e,t,n){"use strict";function r(e,t){var n=null==t||"boolean"==typeof t||""===t;if(n)return"";var r=isNaN(t);return r||0===t||i.hasOwnProperty(e)&&i[e]?""+t:("string"==typeof t&&(t=t.trim()),t+"px")}var o=e(5),i=o.isUnitlessNumber;t.exports=r},{5:5}],126:[function(e,t,n){function r(e){return function(){return e}}function o(){}o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},t.exports=o},{}],127:[function(e,t,n){"use strict";var r={};t.exports=r},{}],128:[function(e,t,n){"use strict";function r(e){return i[e]}function o(e){return(""+e).replace(a,r)}var i={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},a=/[&><"']/g;t.exports=o},{}],129:[function(e,t,n){"use strict";function r(e){return null==e?null:s(e)?e:o.has(e)?i.getNodeFromInstance(e):(a(null==e.render||"function"!=typeof e.render),void a(!1))}{var o=(e(45),e(71)),i=e(75),a=e(147),s=e(149);e(166)}t.exports=r},{147:147,149:149,166:166,45:45,71:71,75:75}],130:[function(e,t,n){"use strict";function r(e,t,n){var r=e,o=!r.hasOwnProperty(n);o&&null!=t&&(r[n]=t)}function o(e){if(null==e)return e;var t={};return i(e,r,t),t}{var i=e(164);e(166)}t.exports=o},{164:164,166:166}],131:[function(e,t,n){"use strict";function r(e){try{e.focus()}catch(t){}}t.exports=r},{}],132:[function(e,t,n){"use strict";var r=function(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)};t.exports=r},{}],133:[function(e,t,n){function r(){try{return document.activeElement||document.body}catch(e){return document.body}}t.exports=r},{}],134:[function(e,t,n){"use strict";function r(e){var t,n=e.keyCode;return"charCode"in e?(t=e.charCode,0===t&&13===n&&(t=13)):t=n,t>=32||13===t?t:0}t.exports=r},{}],135:[function(e,t,n){"use strict";function r(e){if(e.key){var t=i[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n=o(e);return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?a[e.keyCode]||"Unidentified":""}var o=e(134),i={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},a={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};t.exports=r},{134:134}],136:[function(e,t,n){"use strict";function r(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var r=i[e];return r?!!n[r]:!1}function o(e){return r}var i={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};t.exports=o},{}],137:[function(e,t,n){"use strict";function r(e){var t=e.target||e.srcElement||window;return 3===t.nodeType?t.parentNode:t}t.exports=r},{}],138:[function(e,t,n){"use strict";function r(e){var t=e&&(o&&e[o]||e[i]);return"function"==typeof t?t:void 0}var o="function"==typeof Symbol&&Symbol.iterator,i="@@iterator";t.exports=r},{}],139:[function(e,t,n){function r(e){return i(!!a),d.hasOwnProperty(e)||(e="*"),s.hasOwnProperty(e)||("*"===e?a.innerHTML="<link />":a.innerHTML="<"+e+"></"+e+">",s[e]=!a.firstChild),s[e]?d[e]:null}var o=e(22),i=e(147),a=o.canUseDOM?document.createElement("div"):null,s={circle:!0,clipPath:!0,defs:!0,ellipse:!0,g:!0,line:!0,linearGradient:!0,path:!0,polygon:!0,polyline:!0,radialGradient:!0,rect:!0,stop:!0,text:!0},u=[1,'<select multiple="true">',"</select>"],l=[1,"<table>","</table>"],c=[3,"<table><tbody><tr>","</tr></tbody></table>"],p=[1,"<svg>","</svg>"],d={"*":[1,"?<div>","</div>"],area:[1,"<map>","</map>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],legend:[1,"<fieldset>","</fieldset>"],param:[1,"<object>","</object>"],tr:[2,"<table><tbody>","</tbody></table>"],optgroup:u,option:u,caption:l,colgroup:l,tbody:l,tfoot:l,thead:l,td:c,th:c,circle:p,clipPath:p,defs:p,ellipse:p,g:p,line:p,linearGradient:p,path:p,polygon:p,polyline:p,radialGradient:p,rect:p,stop:p,text:p};t.exports=r},{147:147,22:22}],140:[function(e,t,n){"use strict";function r(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function o(e){for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}function i(e,t){for(var n=r(e),i=0,a=0;n;){if(3===n.nodeType){if(a=i+n.textContent.length,t>=i&&a>=t)return{node:n,offset:t-i};i=a}n=r(o(n))}}t.exports=i},{}],141:[function(e,t,n){"use strict";function r(e){return e?e.nodeType===o?e.documentElement:e.firstChild:null}var o=9;t.exports=r},{}],142:[function(e,t,n){"use strict";function r(){return!i&&o.canUseDOM&&(i="textContent"in document.documentElement?"textContent":"innerText"),i}var o=e(22),i=null;t.exports=r},{22:22}],143:[function(e,t,n){"use strict";function r(e){return e===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffset||document.documentElement.scrollTop}:{x:e.scrollLeft,y:e.scrollTop}}t.exports=r},{}],144:[function(e,t,n){function r(e){return e.replace(o,"-$1").toLowerCase()}var o=/([A-Z])/g;t.exports=r},{}],145:[function(e,t,n){"use strict";function r(e){return o(e).replace(i,"-ms-")}var o=e(144),i=/^ms-/;t.exports=r},{144:144}],146:[function(e,t,n){"use strict";function r(e){return"function"==typeof e&&"undefined"!=typeof e.prototype&&"function"==typeof e.prototype.mountComponent&&"function"==typeof e.prototype.receiveComponent}function o(e,t){var n;if((null===e||e===!1)&&(e=a.emptyElement),"object"==typeof e){var o=e;n=t===o.type&&"string"==typeof o.type?s.createInternalComponent(o):r(o.type)?new o.type(o):new c}else"string"==typeof e||"number"==typeof e?n=s.createInstanceForText(e):l(!1);return n.construct(e),n._mountIndex=0,n._mountImage=null,n}var i=e(43),a=e(63),s=e(78),u=e(29),l=e(147),c=(e(166),function(){});u(c.prototype,i.Mixin,{_instantiateReactComponent:o}),t.exports=o},{147:147,166:166,29:29,43:43,63:63,78:78}],147:[function(e,t,n){"use strict";var r=function(e,t,n,r,o,i,a,s){if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,o,i,a,s],c=0;u=new Error("Invariant Violation: "+t.replace(/%s/g,function(){return l[c++]}))}throw u.framesToPop=1,u}};t.exports=r},{}],148:[function(e,t,n){"use strict";function r(e,t){if(!i.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var a=document.createElement("div");a.setAttribute(n,"return;"),r="function"==typeof a[n]}return!r&&o&&"wheel"===e&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var o,i=e(22);i.canUseDOM&&(o=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0),t.exports=r},{22:22}],149:[function(e,t,n){function r(e){return!(!e||!("function"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName))}t.exports=r},{}],150:[function(e,t,n){"use strict";function r(e){return e&&("INPUT"===e.nodeName&&o[e.type]||"TEXTAREA"===e.nodeName)}var o={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};t.exports=r},{}],151:[function(e,t,n){function r(e){return o(e)&&3==e.nodeType}var o=e(149);t.exports=r},{149:149}],152:[function(e,t,n){"use strict";function r(e){e||(e="");var t,n=arguments.length;if(n>1)for(var r=1;n>r;r++)t=arguments[r],t&&(e=(e?e+" ":"")+t);return e}t.exports=r},{}],153:[function(e,t,n){"use strict";var r=e(147),o=function(e){var t,n={};r(e instanceof Object&&!Array.isArray(e));for(t in e)e.hasOwnProperty(t)&&(n[t]=t);return n};t.exports=o},{147:147}],154:[function(e,t,n){var r=function(e){var t;for(t in e)if(e.hasOwnProperty(t))return t;return null};t.exports=r},{}],155:[function(e,t,n){"use strict";function r(e,t,n){if(!e)return null;var r={};for(var i in e)o.call(e,i)&&(r[i]=t.call(n,e[i],i,e));return r}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],156:[function(e,t,n){"use strict";function r(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}t.exports=r},{}],157:[function(e,t,n){"use strict";function r(e){return i(o.isValidElement(e)),e}var o=e(61),i=e(147);t.exports=r},{147:147,61:61}],158:[function(e,t,n){"use strict";function r(e){return'"'+o(e)+'"'}var o=e(128);t.exports=r},{128:128}],159:[function(e,t,n){"use strict";var r=e(22),o=/^[ \r\n\t\f]/,i=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,a=function(e,t){
+e.innerHTML=t};if("undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction&&(a=function(e,t){MSApp.execUnsafeLocalFunction(function(){e.innerHTML=t})}),r.canUseDOM){var s=document.createElement("div");s.innerHTML=" ",""===s.innerHTML&&(a=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),o.test(t)||"<"===t[0]&&i.test(t)){e.innerHTML="\ufeff"+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t})}t.exports=a},{22:22}],160:[function(e,t,n){"use strict";var r=e(22),o=e(128),i=e(159),a=function(e,t){e.textContent=t};r.canUseDOM&&("textContent"in document.documentElement||(a=function(e,t){i(e,o(t))})),t.exports=a},{128:128,159:159,22:22}],161:[function(e,t,n){"use strict";function r(e,t){if(e===t)return!0;var n;for(n in e)if(e.hasOwnProperty(n)&&(!t.hasOwnProperty(n)||e[n]!==t[n]))return!1;for(n in t)if(t.hasOwnProperty(n)&&!e.hasOwnProperty(n))return!1;return!0}t.exports=r},{}],162:[function(e,t,n){"use strict";function r(e,t){if(null!=e&&null!=t){var n=typeof e,r=typeof t;if("string"===n||"number"===n)return"string"===r||"number"===r;if("object"===r&&e.type===t.type&&e.key===t.key){var o=e._owner===t._owner;return o}}return!1}e(166);t.exports=r},{166:166}],163:[function(e,t,n){function r(e){var t=e.length;if(o(!Array.isArray(e)&&("object"==typeof e||"function"==typeof e)),o("number"==typeof t),o(0===t||t-1 in e),e.hasOwnProperty)try{return Array.prototype.slice.call(e)}catch(n){}for(var r=Array(t),i=0;t>i;i++)r[i]=e[i];return r}var o=e(147);t.exports=r},{147:147}],164:[function(e,t,n){"use strict";function r(e){return v[e]}function o(e,t){return e&&null!=e.key?a(e.key):t.toString(36)}function i(e){return(""+e).replace(g,r)}function a(e){return"$"+i(e)}function s(e,t,n,r,i){var u=typeof e;if(("undefined"===u||"boolean"===u)&&(e=null),null===e||"string"===u||"number"===u||l.isValidElement(e))return r(i,e,""===t?h+o(e,0):t,n),1;var p,v,g,y=0;if(Array.isArray(e))for(var C=0;C<e.length;C++)p=e[C],v=(""!==t?t+m:h)+o(p,C),g=n+y,y+=s(p,v,g,r,i);else{var E=d(e);if(E){var b,_=E.call(e);if(E!==e.entries)for(var x=0;!(b=_.next()).done;)p=b.value,v=(""!==t?t+m:h)+o(p,x++),g=n+y,y+=s(p,v,g,r,i);else for(;!(b=_.next()).done;){var D=b.value;D&&(p=D[1],v=(""!==t?t+m:h)+a(D[0])+m+o(p,0),g=n+y,y+=s(p,v,g,r,i))}}else if("object"===u){f(1!==e.nodeType);var M=c.extract(e);for(var T in M)M.hasOwnProperty(T)&&(p=M[T],v=(""!==t?t+m:h)+a(T)+m+o(p,0),g=n+y,y+=s(p,v,g,r,i))}}return y}function u(e,t,n){return null==e?0:s(e,"",0,t,n)}var l=e(61),c=e(67),p=e(70),d=e(138),f=e(147),h=(e(166),p.SEPARATOR),m=":",v={"=":"=0",".":"=1",":":"=2"},g=/[=.:]/g;t.exports=u},{138:138,147:147,166:166,61:61,67:67,70:70}],165:[function(e,t,n){"use strict";function r(e){return Array.isArray(e)?e.concat():e&&"object"==typeof e?a(new e.constructor,e):e}function o(e,t,n){u(Array.isArray(e));var r=t[n];u(Array.isArray(r))}function i(e,t){if(u("object"==typeof t),l.call(t,f))return u(1===Object.keys(t).length),t[f];var n=r(e);if(l.call(t,h)){var s=t[h];u(s&&"object"==typeof s),u(n&&"object"==typeof n),a(n,t[h])}l.call(t,c)&&(o(e,t,c),t[c].forEach(function(e){n.push(e)})),l.call(t,p)&&(o(e,t,p),t[p].forEach(function(e){n.unshift(e)})),l.call(t,d)&&(u(Array.isArray(e)),u(Array.isArray(t[d])),t[d].forEach(function(e){u(Array.isArray(e)),n.splice.apply(n,e)})),l.call(t,m)&&(u("function"==typeof t[m]),n=t[m](n));for(var v in t)g.hasOwnProperty(v)&&g[v]||(n[v]=i(e[v],t[v]));return n}var a=e(29),s=e(154),u=e(147),l={}.hasOwnProperty,c=s({$push:null}),p=s({$unshift:null}),d=s({$splice:null}),f=s({$set:null}),h=s({$merge:null}),m=s({$apply:null}),v=[c,p,d,f,h,m],g={};v.forEach(function(e){g[e]=!0}),t.exports=i},{147:147,154:154,29:29}],166:[function(e,t,n){"use strict";var r=e(126),o=r;t.exports=o},{126:126}]},{},[1])(1)}); \ No newline at end of file
diff --git a/web/templates/admin_console.html b/web/templates/admin_console.html
new file mode 100644
index 000000000..1444d9b17
--- /dev/null
+++ b/web/templates/admin_console.html
@@ -0,0 +1,24 @@
+
+{{define "admin_console"}}
+<!DOCTYPE html>
+<html>
+{{template "head" . }}
+<body>
+
+<div id="error_bar"></div>
+
+<div id="admin_controller"></div>
+
+<div id="select_team_modal"></div>
+
+<script>
+ window.setup_admin_console_page();
+
+ $(document).ready(function(){
+ $('[data-toggle="tooltip"]').tooltip();
+ $('[data-toggle="popover"]').popover();
+ });
+</script>
+</body>
+</html>
+{{end}}
diff --git a/web/templates/authorize.html b/web/templates/authorize.html
new file mode 100644
index 000000000..3392c1b1e
--- /dev/null
+++ b/web/templates/authorize.html
@@ -0,0 +1,26 @@
+{{define "authorize"}}
+<html>
+{{template "head" . }}
+<body class="white">
+ <div class="container-fluid">
+ <div class="inner__wrap">
+ <div class="row content">
+ <div class="signup-header">
+ {{.Props.TeamName}}
+ </div>
+ <div class="col-sm-12">
+ <div id="authorize"></div>
+ </div>
+ <div class="footer-push"></div>
+ </div>
+ <div class="row footer">
+ {{template "footer" . }}
+ </div>
+ </div>
+ </div>
+ <script>
+ window.setup_authorize_page('{{ .Props.TeamName }}', '{{ .Props.AppName }}', '{{ .Props.ResponseType }}', '{{ .Props.ClientId }}', '{{ .Props.RedirectUri }}', '{{ .Props.Scope }}', '{{ .Props.State }}' );
+ </script>
+</body>
+</html>
+{{end}}
diff --git a/web/templates/channel.html b/web/templates/channel.html
index a732a25ce..92aaaf02f 100644
--- a/web/templates/channel.html
+++ b/web/templates/channel.html
@@ -49,8 +49,9 @@
<div id="access_history_modal"></div>
<div id="activity_log_modal"></div>
<div id="removed_from_channel_modal"></div>
+ <div id="register_app_modal"></div>
<script>
- window.setup_channel_page('{{ .Props.TeamDisplayName }}', '{{ .Props.TeamType }}', '{{ .Props.TeamId }}', '{{ .Props.ChannelName }}', '{{ .Props.ChannelId }}');
+ window.setup_channel_page({{ .Props }});
$('body').tooltip( {selector: '[data-toggle=tooltip]'} );
$('.modal-body').css('max-height', $(window).height() * 0.7);
$('.modal-body').perfectScrollbar();
diff --git a/web/templates/footer.html b/web/templates/footer.html
index 204a89f03..4b15295b4 100644
--- a/web/templates/footer.html
+++ b/web/templates/footer.html
@@ -1,7 +1,7 @@
{{define "footer"}}
<div class="footer-pane col-xs-12">
<div class="col-xs-12">
- <span class="pull-right footer-site-name">{{ .SiteName }}</span>
+ <span class="pull-right footer-site-name">{{ .ClientProps.SiteName }}</span>
</div>
<div class="col-xs-12">
<span class="pull-right footer-link copyright">© 2015 SpinPunch</span>
@@ -12,9 +12,9 @@
</div>
</div>
<script>
- document.getElementById("help_link").setAttribute("href", config.HelpLink);
- document.getElementById("terms_link").setAttribute("href", config.TermsLink);
- document.getElementById("privacy_link").setAttribute("href", config.PrivacyLink);
- document.getElementById("about_link").setAttribute("href", config.AboutLink);
+ document.getElementById("help_link").setAttribute("href", '/static/help/help.html');
+ document.getElementById("terms_link").setAttribute("href", '/static/help/terms.html');
+ document.getElementById("privacy_link").setAttribute("href", '/static/help/privacy.html');
+ document.getElementById("about_link").setAttribute("href", '/static/help/about.html');
</script>
{{end}}
diff --git a/web/templates/head.html b/web/templates/head.html
index 76ee70ced..af5c86bba 100644
--- a/web/templates/head.html
+++ b/web/templates/head.html
@@ -3,14 +3,14 @@
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="robots" content="noindex, nofollow">
- <title>{{ .Title }}</title>
+ <title>{{ .Props.Title }}</title>
<!-- iOS add to homescreen -->
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="mobile-web-app-capable" content="yes" />
- <meta name="apple-mobile-web-app-title" content="{{ .Title }}">
- <meta name="application-name" content="{{ .Title }}">
+ <meta name="apple-mobile-web-app-title" content="{{ .Props.Title }}">
+ <meta name="application-name" content="{{ .Props.Title }}">
<meta name="format-detection" content="telephone=no">
<!-- iOS add to homescreen -->
@@ -18,25 +18,33 @@
<link rel="manifest" href="/static/config/manifest.json">
<!-- Android add to homescreen -->
- <link rel="stylesheet" href="/static/css/bootstrap-3.3.1.min.css">
+ <script>
+ window.config = {{ .ClientProps }};
+ </script>
+
+
+ <link rel="stylesheet" href="/static/css/bootstrap-3.3.5.min.css">
<link rel="stylesheet" href="/static/css/jasny-bootstrap.min.css" rel="stylesheet">
- <script src="/static/js/react-with-addons-0.13.1.js"></script>
+ <script src="/static/js/react-with-addons-0.13.3.js"></script>
<script src="/static/js/jquery-1.11.1.js"></script>
- <script src="/static/js/bootstrap-3.3.1.js"></script>
+ <script src="/static/js/bootstrap-3.3.5.js"></script>
+ <script src="/static/js/react-bootstrap-0.25.1.js"></script>
<link id="favicon" rel="icon" href="/static/images/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="/static/images/favicon.ico" type="image/x-icon">
<link href='/static/css/google-fonts.css' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="/static/css/styles.css">
- <script src="/static/js/perfect-scrollbar-0.6.3.jquery.js"></script>
+ <script src="/static/js/perfect-scrollbar-0.6.5.jquery.js"></script>
<script src="/static/js/jquery-dragster/jquery.dragster.js"></script>
- <script type="text/javascript" src="https://www.google.com/jsapi?autoload={'modules':[{'name':'visualization','version':'1','packages':['annotationchart']}]}"></script>
+ <script src="/static/js/emojify.min.js"></script>
+ <script>
+ emojify.setConfig({img_dir: '/static/images/emoji'});
+ </script>
- <script type="text/javascript" src="https://cloudfront.loggly.com/js/loggly.tracker.js" async></script>
<style id="antiClickjack">body{display:none !important;}</style>
<script src="/static/js/bundle.js"></script>
<script type="text/javascript">
@@ -45,28 +53,8 @@
blocker.parentNode.removeChild(blocker);
}
</script>
- <script>
- if (window.config == null) {
- window.config = {};
- }
- window.config.SiteName = '{{ .SiteName }}';
- window.config.ProfileWidth = '{{ .Props.ProfileWidth }}'
- window.config.ProfileHeight = '{{ .Props.ProfileHeight }}'
- </script>
-
-
- <script>
- if (window.config.LogglyWriteKey != null && window.config.LogglyWriteKey !== "") {
- var LTracker = LTracker || [];
- window.LTracker = LTracker;
- LTracker.push({'logglyKey': window.config.LogglyWriteKey, 'sendConsoleErrors' : window.config.LogglyConsoleErrors });
- } else {
- window.LTracker = [];
- console.warn("config.js missing LogglyWriteKey, Loggly analytics is not reporting");
- }
- </script>
<script type="text/javascript">
- if (window.config.SegmentWriteKey != null && window.config.SegmentWriteKey !== "") {
+ if (window.config.SegmentDeveloperKey != null && window.config.SegmentDeveloperKey !== "") {
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","group","track","ready","alias","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="3.0.1";
analytics.load(window.config.SegmentWriteKey);
var user = window.UserStore.getCurrentUser(true);
@@ -87,7 +75,6 @@
analytics = {};
analytics.page = function(){};
analytics.track = function(){};
- console.warn("config.js missing SegmentWriteKey, SegmentIO analytics is not tracking");
}
</script>
<!-- Snowplow starts plowing -->
@@ -99,7 +86,7 @@
n.src=w;g.parentNode.insertBefore(n,g)}}(window,document,"script","//d1fc8wv8zag5ca.cloudfront.net/2.4.2/sp.js","snowplow"));
window.snowplow('newTracker', 'cf', '{{ .Props.AnalyticsUrl }}', {
- appId: '{{ .SiteName }}'
+ appId: window.config.SiteName
});
var user = window.UserStore.getCurrentUser(true);
@@ -110,7 +97,6 @@
window.snowplow('trackPageView');
} else {
window.snowplow = function(){};
- console.warn("config.json missing AnalyticsUrl, Snowplow analytics is not tracking");
}
</script>
<!-- Snowplow stops plowing -->
diff --git a/web/templates/home.html b/web/templates/home.html
index 9ec8b7000..0d8b89061 100644
--- a/web/templates/home.html
+++ b/web/templates/home.html
@@ -17,7 +17,7 @@
</div>
</div>
<script>
- window.setup_home_page({{.Props.TeamURL}});
+ window.setup_home_page({{ .Props }});
</script>
</body>
</html>
diff --git a/web/templates/login.html b/web/templates/login.html
index 4b2813358..a5809a1f4 100644
--- a/web/templates/login.html
+++ b/web/templates/login.html
@@ -20,7 +20,7 @@
</div>
</div>
<script>
-window.setup_login_page('{{.Props.TeamDisplayName}}', '{{.Props.TeamName}}', '{{.Props.AuthServices}}');
+window.setup_login_page({{ .Props }});
</script>
</body>
</html>
diff --git a/web/templates/password_reset.html b/web/templates/password_reset.html
index 6244f6418..7f6335c92 100644
--- a/web/templates/password_reset.html
+++ b/web/templates/password_reset.html
@@ -9,7 +9,7 @@
</div>
</div>
<script>
- window.setup_password_reset_page('{{ .Props.IsReset }}', '{{ .Props.TeamDisplayName }}', '{{ .Props.TeamName }}', '{{ .Props.Hash }}', '{{ .Props.Data }}');
+ window.setup_password_reset_page({{ .Props }});
</script>
</body>
</html>
diff --git a/web/templates/signup_team.html b/web/templates/signup_team.html
index 8d9d6e0b8..a6000696e 100644
--- a/web/templates/signup_team.html
+++ b/web/templates/signup_team.html
@@ -9,7 +9,7 @@
<div class="col-sm-12">
<div class="signup-team__container">
<img class="signup-team-logo" src="/static/images/logo.png" />
- <h1>{{ .SiteName }}</h1>
+ <h1>{{ .ClientProps.SiteName }}</h1>
<h4 class="color--light">All team communication in one place, searchable and accessible anywhere</h4>
<div id="signup-team"></div>
</div>
@@ -22,7 +22,7 @@
</div>
</div>
<script>
-window.setup_signup_team_page('{{.Props.AuthServices}}');
+window.setup_signup_team_page({{ .Props }});
</script>
</body>
</html>
diff --git a/web/templates/signup_team_complete.html b/web/templates/signup_team_complete.html
index 041889435..4b179b1e1 100644
--- a/web/templates/signup_team_complete.html
+++ b/web/templates/signup_team_complete.html
@@ -19,7 +19,7 @@
</div>
</div>
<script>
-window.setup_signup_team_complete_page('{{.Props.Email}}', '{{.Props.Data}}', '{{.Props.Hash}}');
+window.setup_signup_team_complete_page({{ .Props }});
</script>
</body>
</html>
diff --git a/web/templates/signup_user_complete.html b/web/templates/signup_user_complete.html
index e9f6bafcf..2400b7b77 100644
--- a/web/templates/signup_user_complete.html
+++ b/web/templates/signup_user_complete.html
@@ -19,7 +19,7 @@
</div>
</div>
<script>
- window.setup_signup_user_complete_page('{{.Props.Email}}', '{{.Props.TeamName}}', '{{.Props.TeamDisplayName}}', '{{.Props.TeamId}}', '{{.Props.Data}}', '{{.Props.Hash}}', '{{.Props.AuthServices}}');
+ window.setup_signup_user_complete_page({{ .Props }});
</script>
</body>
</html>
diff --git a/web/templates/verify.html b/web/templates/verify.html
index de839db68..cb4832512 100644
--- a/web/templates/verify.html
+++ b/web/templates/verify.html
@@ -9,7 +9,7 @@
</div>
</div>
<script>
- window.setupVerifyPage('{{.Props.IsVerified}}', '{{.Props.TeamURL}}', '{{.Props.UserEmail}}');
+ window.setupVerifyPage({{ .Props }});
</script>
</body>
</html>
diff --git a/web/templates/welcome.html b/web/templates/welcome.html
index bab7a135d..e7eeb5648 100644
--- a/web/templates/welcome.html
+++ b/web/templates/welcome.html
@@ -11,7 +11,7 @@
<div class="row main">
<div class="app__content">
<div class="welcome-info">
- <h1>Welcome to {{ .SiteName }}!</h1>
+ <h1>Welcome to {{ .ClientProps.SiteName }}!</h1>
<p>
You do not appear to be part of any teams. Please contact your
administrator to have him send you an invitation to a private team.
diff --git a/web/web.go b/web/web.go
index 1709e1eec..305e4f199 100644
--- a/web/web.go
+++ b/web/web.go
@@ -4,19 +4,18 @@
package web
import (
- "fmt"
- "html/template"
- "net/http"
- "strconv"
- "strings"
-
l4g "code.google.com/p/log4go"
+ "fmt"
"github.com/gorilla/mux"
"github.com/mattermost/platform/api"
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/utils"
"github.com/mssola/user_agent"
"gopkg.in/fsnotify.v1"
+ "html/template"
+ "net/http"
+ "strconv"
+ "strings"
)
var Templates *template.Template
@@ -30,10 +29,8 @@ func NewHtmlTemplatePage(templateName string, title string) *HtmlTemplatePage {
}
props := make(map[string]string)
- props["AnalyticsUrl"] = utils.Cfg.ServiceSettings.AnalyticsUrl
- props["ProfileHeight"] = fmt.Sprintf("%v", utils.Cfg.ImageSettings.ProfileHeight)
- props["ProfileWidth"] = fmt.Sprintf("%v", utils.Cfg.ImageSettings.ProfileWidth)
- return &HtmlTemplatePage{TemplateName: templateName, Title: title, SiteName: utils.Cfg.ServiceSettings.SiteName, Props: props}
+ props["Title"] = title
+ return &HtmlTemplatePage{TemplateName: templateName, Props: props, ClientProps: utils.ClientProperties}
}
func (me *HtmlTemplatePage) Render(c *api.Context, w http.ResponseWriter) {
@@ -52,31 +49,32 @@ func InitWeb() {
mainrouter.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(staticDir))))
mainrouter.Handle("/", api.AppHandlerIndependent(root)).Methods("GET")
- mainrouter.Handle("/{team:[A-Za-z0-9-]+(__)?[A-Za-z0-9-]+}", api.AppHandler(login)).Methods("GET")
- mainrouter.Handle("/{team:[A-Za-z0-9-]+(__)?[A-Za-z0-9-]+}/", api.AppHandler(login)).Methods("GET")
- mainrouter.Handle("/{team:[A-Za-z0-9-]+(__)?[A-Za-z0-9-]+}/login", api.AppHandler(login)).Methods("GET")
-
- // Bug in gorilla.mux prevents us from using regex here.
- mainrouter.Handle("/{team}/login/{service}", api.AppHandler(loginWithOAuth)).Methods("GET")
- mainrouter.Handle("/login/{service:[A-Za-z]+}/complete", api.AppHandlerIndependent(loginCompleteOAuth)).Methods("GET")
-
- mainrouter.Handle("/{team:[A-Za-z0-9-]+(__)?[A-Za-z0-9-]+}/logout", api.AppHandler(logout)).Methods("GET")
- mainrouter.Handle("/{team:[A-Za-z0-9-]+(__)?[A-Za-z0-9-]+}/reset_password", api.AppHandler(resetPassword)).Methods("GET")
- // Bug in gorilla.mux prevents us from using regex here.
- mainrouter.Handle("/{team}/channels/{channelname}", api.UserRequired(getChannel)).Methods("GET")
+ mainrouter.Handle("/oauth/authorize", api.UserRequired(authorizeOAuth)).Methods("GET")
+ mainrouter.Handle("/oauth/access_token", api.ApiAppHandler(getAccessToken)).Methods("POST")
- // Anything added here must have an _ in it so it does not conflict with team names
mainrouter.Handle("/signup_team_complete/", api.AppHandlerIndependent(signupTeamComplete)).Methods("GET")
mainrouter.Handle("/signup_user_complete/", api.AppHandlerIndependent(signupUserComplete)).Methods("GET")
mainrouter.Handle("/signup_team_confirm/", api.AppHandlerIndependent(signupTeamConfirm)).Methods("GET")
-
- // Bug in gorilla.mux prevents us from using regex here.
- mainrouter.Handle("/{team}/signup/{service}", api.AppHandler(signupWithOAuth)).Methods("GET")
- mainrouter.Handle("/signup/{service:[A-Za-z]+}/complete", api.AppHandlerIndependent(signupCompleteOAuth)).Methods("GET")
-
mainrouter.Handle("/verify_email", api.AppHandlerIndependent(verifyEmail)).Methods("GET")
mainrouter.Handle("/find_team", api.AppHandlerIndependent(findTeam)).Methods("GET")
mainrouter.Handle("/signup_team", api.AppHandlerIndependent(signup)).Methods("GET")
+ mainrouter.Handle("/login/{service:[A-Za-z]+}/complete", api.AppHandlerIndependent(loginCompleteOAuth)).Methods("GET")
+ mainrouter.Handle("/signup/{service:[A-Za-z]+}/complete", api.AppHandlerIndependent(signupCompleteOAuth)).Methods("GET")
+
+ mainrouter.Handle("/admin_console", api.UserRequired(adminConsole)).Methods("GET")
+
+ // ----------------------------------------------------------------------------------------------
+ // *ANYTHING* team specific should go below this line
+ // ----------------------------------------------------------------------------------------------
+
+ mainrouter.Handle("/{team:[A-Za-z0-9-]+(__)?[A-Za-z0-9-]+}", api.AppHandler(login)).Methods("GET")
+ mainrouter.Handle("/{team:[A-Za-z0-9-]+(__)?[A-Za-z0-9-]+}/", api.AppHandler(login)).Methods("GET")
+ mainrouter.Handle("/{team:[A-Za-z0-9-]+(__)?[A-Za-z0-9-]+}/login", api.AppHandler(login)).Methods("GET")
+ mainrouter.Handle("/{team:[A-Za-z0-9-]+(__)?[A-Za-z0-9-]+}/logout", api.AppHandler(logout)).Methods("GET")
+ mainrouter.Handle("/{team:[A-Za-z0-9-]+(__)?[A-Za-z0-9-]+}/reset_password", api.AppHandler(resetPassword)).Methods("GET")
+ mainrouter.Handle("/{team}/login/{service}", api.AppHandler(loginWithOAuth)).Methods("GET") // Bug in gorilla.mux prevents us from using regex here.
+ mainrouter.Handle("/{team}/channels/{channelname}", api.UserRequired(getChannel)).Methods("GET") // Bug in gorilla.mux prevents us from using regex here.
+ mainrouter.Handle("/{team}/signup/{service}", api.AppHandler(signupWithOAuth)).Methods("GET") // Bug in gorilla.mux prevents us from using regex here.
watchAndParseTemplates()
}
@@ -345,7 +343,7 @@ func getChannel(c *api.Context, w http.ResponseWriter, r *http.Request) {
}
page := NewHtmlTemplatePage("channel", "")
- page.Title = name + " - " + team.DisplayName + " " + page.SiteName
+ page.Props["Title"] = name + " - " + team.DisplayName + " " + page.ClientProps["SiteName"]
page.Props["TeamDisplayName"] = team.DisplayName
page.Props["TeamType"] = team.Type
page.Props["TeamId"] = team.Id
@@ -448,7 +446,7 @@ func resetPassword(c *api.Context, w http.ResponseWriter, r *http.Request) {
}
page := NewHtmlTemplatePage("password_reset", "")
- page.Title = "Reset Password - " + page.SiteName
+ page.Props["Title"] = "Reset Password " + page.ClientProps["SiteName"]
page.Props["TeamDisplayName"] = teamDisplayName
page.Props["Hash"] = hash
page.Props["Data"] = data
@@ -641,3 +639,202 @@ func loginCompleteOAuth(c *api.Context, w http.ResponseWriter, r *http.Request)
}
}
}
+
+func adminConsole(c *api.Context, w http.ResponseWriter, r *http.Request) {
+
+ if !c.HasSystemAdminPermissions("adminConsole") {
+ return
+ }
+
+ page := NewHtmlTemplatePage("admin_console", "Admin Console")
+ page.Render(c, w)
+}
+
+func authorizeOAuth(c *api.Context, w http.ResponseWriter, r *http.Request) {
+ if !utils.Cfg.ServiceSettings.EnableOAuthServiceProvider {
+ c.Err = model.NewAppError("authorizeOAuth", "The system admin has turned off OAuth service providing.", "")
+ c.Err.StatusCode = http.StatusNotImplemented
+ return
+ }
+
+ if !CheckBrowserCompatability(c, r) {
+ return
+ }
+
+ responseType := r.URL.Query().Get("response_type")
+ clientId := r.URL.Query().Get("client_id")
+ redirect := r.URL.Query().Get("redirect_uri")
+ scope := r.URL.Query().Get("scope")
+ state := r.URL.Query().Get("state")
+
+ if len(responseType) == 0 || len(clientId) == 0 || len(redirect) == 0 {
+ c.Err = model.NewAppError("authorizeOAuth", "Missing one or more of response_type, client_id, or redirect_uri", "")
+ return
+ }
+
+ var app *model.OAuthApp
+ if result := <-api.Srv.Store.OAuth().GetApp(clientId); result.Err != nil {
+ c.Err = result.Err
+ return
+ } else {
+ app = result.Data.(*model.OAuthApp)
+ }
+
+ var team *model.Team
+ if result := <-api.Srv.Store.Team().Get(c.Session.TeamId); result.Err != nil {
+ c.Err = result.Err
+ return
+ } else {
+ team = result.Data.(*model.Team)
+ }
+
+ page := NewHtmlTemplatePage("authorize", "Authorize Application")
+ page.Props["TeamName"] = team.Name
+ page.Props["AppName"] = app.Name
+ page.Props["ResponseType"] = responseType
+ page.Props["ClientId"] = clientId
+ page.Props["RedirectUri"] = redirect
+ page.Props["Scope"] = scope
+ page.Props["State"] = state
+ page.Render(c, w)
+}
+
+func getAccessToken(c *api.Context, w http.ResponseWriter, r *http.Request) {
+ if !utils.Cfg.ServiceSettings.EnableOAuthServiceProvider {
+ c.Err = model.NewAppError("getAccessToken", "The system admin has turned off OAuth service providing.", "")
+ c.Err.StatusCode = http.StatusNotImplemented
+ return
+ }
+
+ c.LogAudit("attempt")
+
+ r.ParseForm()
+
+ grantType := r.FormValue("grant_type")
+ if grantType != model.ACCESS_TOKEN_GRANT_TYPE {
+ c.Err = model.NewAppError("getAccessToken", "invalid_request: Bad grant_type", "")
+ return
+ }
+
+ clientId := r.FormValue("client_id")
+ if len(clientId) != 26 {
+ c.Err = model.NewAppError("getAccessToken", "invalid_request: Bad client_id", "")
+ return
+ }
+
+ secret := r.FormValue("client_secret")
+ if len(secret) == 0 {
+ c.Err = model.NewAppError("getAccessToken", "invalid_request: Missing client_secret", "")
+ return
+ }
+
+ code := r.FormValue("code")
+ if len(code) == 0 {
+ c.Err = model.NewAppError("getAccessToken", "invalid_request: Missing code", "")
+ return
+ }
+
+ redirectUri := r.FormValue("redirect_uri")
+
+ achan := api.Srv.Store.OAuth().GetApp(clientId)
+ tchan := api.Srv.Store.OAuth().GetAccessDataByAuthCode(code)
+
+ authData := api.GetAuthData(code)
+
+ if authData == nil {
+ c.LogAudit("fail - invalid auth code")
+ c.Err = model.NewAppError("getAccessToken", "invalid_grant: Invalid or expired authorization code", "")
+ return
+ }
+
+ uchan := api.Srv.Store.User().Get(authData.UserId)
+
+ if authData.IsExpired() {
+ c.LogAudit("fail - auth code expired")
+ c.Err = model.NewAppError("getAccessToken", "invalid_grant: Invalid or expired authorization code", "")
+ return
+ }
+
+ if authData.RedirectUri != redirectUri {
+ c.LogAudit("fail - redirect uri provided did not match previous redirect uri")
+ c.Err = model.NewAppError("getAccessToken", "invalid_request: Supplied redirect_uri does not match authorization code redirect_uri", "")
+ return
+ }
+
+ if !model.ComparePassword(code, fmt.Sprintf("%v:%v:%v:%v", clientId, redirectUri, authData.CreateAt, authData.UserId)) {
+ c.LogAudit("fail - auth code is invalid")
+ c.Err = model.NewAppError("getAccessToken", "invalid_grant: Invalid or expired authorization code", "")
+ return
+ }
+
+ var app *model.OAuthApp
+ if result := <-achan; result.Err != nil {
+ c.Err = model.NewAppError("getAccessToken", "invalid_client: Invalid client credentials", "")
+ return
+ } else {
+ app = result.Data.(*model.OAuthApp)
+ }
+
+ if !model.ComparePassword(app.ClientSecret, secret) {
+ c.LogAudit("fail - invalid client credentials")
+ c.Err = model.NewAppError("getAccessToken", "invalid_client: Invalid client credentials", "")
+ return
+ }
+
+ callback := redirectUri
+ if len(callback) == 0 {
+ callback = app.CallbackUrls[0]
+ }
+
+ if result := <-tchan; result.Err != nil {
+ c.Err = model.NewAppError("getAccessToken", "server_error: Encountered internal server error while accessing database", "")
+ return
+ } else if result.Data != nil {
+ c.LogAudit("fail - auth code has been used previously")
+ accessData := result.Data.(*model.AccessData)
+
+ // Revoke access token, related auth code, and session from DB as well as from cache
+ if err := api.RevokeAccessToken(accessData.Token); err != nil {
+ l4g.Error("Encountered an error revoking an access token, err=" + err.Message)
+ }
+
+ c.Err = model.NewAppError("getAccessToken", "invalid_grant: Authorization code already exchanged for an access token", "")
+ return
+ }
+
+ var user *model.User
+ if result := <-uchan; result.Err != nil {
+ c.Err = model.NewAppError("getAccessToken", "server_error: Encountered internal server error while pulling user from database", "")
+ return
+ } else {
+ user = result.Data.(*model.User)
+ }
+
+ session := &model.Session{UserId: user.Id, TeamId: user.TeamId, Roles: user.Roles, IsOAuth: true}
+
+ if result := <-api.Srv.Store.Session().Save(session); result.Err != nil {
+ c.Err = model.NewAppError("getAccessToken", "server_error: Encountered internal server error while saving session to database", "")
+ return
+ } else {
+ session = result.Data.(*model.Session)
+ api.AddSessionToCache(session)
+ }
+
+ accessData := &model.AccessData{AuthCode: authData.Code, Token: session.Token, RedirectUri: callback}
+
+ if result := <-api.Srv.Store.OAuth().SaveAccessData(accessData); result.Err != nil {
+ l4g.Error(result.Err)
+ c.Err = model.NewAppError("getAccessToken", "server_error: Encountered internal server error while saving access token to database", "")
+ return
+ }
+
+ accessRsp := &model.AccessResponse{AccessToken: session.Token, TokenType: model.ACCESS_TOKEN_TYPE, ExpiresIn: model.SESSION_TIME_OAUTH_IN_SECS}
+
+ w.Header().Set("Content-Type", "application/json")
+ w.Header().Set("Cache-Control", "no-store")
+ w.Header().Set("Pragma", "no-cache")
+
+ c.LogAuditWithUserId(user.Id, "success")
+
+ w.Write([]byte(accessRsp.ToJson()))
+}
diff --git a/web/web_test.go b/web/web_test.go
index ccd0bba56..3da7eb2dc 100644
--- a/web/web_test.go
+++ b/web/web_test.go
@@ -6,8 +6,11 @@ package web
import (
"github.com/mattermost/platform/api"
"github.com/mattermost/platform/model"
+ "github.com/mattermost/platform/store"
"github.com/mattermost/platform/utils"
"net/http"
+ "net/url"
+ "strings"
"testing"
"time"
)
@@ -23,7 +26,7 @@ func Setup() {
api.InitApi()
InitWeb()
URL = "http://localhost:" + utils.Cfg.ServiceSettings.Port
- ApiClient = model.NewClient(URL + "/api/v1")
+ ApiClient = model.NewClient(URL)
}
}
@@ -48,6 +51,135 @@ func TestStatic(t *testing.T) {
}
}
+func TestGetAccessToken(t *testing.T) {
+ Setup()
+
+ team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN}
+ rteam, _ := ApiClient.CreateTeam(&team)
+
+ user := model.User{TeamId: rteam.Data.(*model.Team).Id, Email: strings.ToLower(model.NewId()) + "corey@test.com", Password: "pwd"}
+ ruser := ApiClient.Must(ApiClient.CreateUser(&user, "")).Data.(*model.User)
+ store.Must(api.Srv.Store.User().VerifyEmail(ruser.Id))
+
+ app := &model.OAuthApp{Name: "TestApp" + model.NewId(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
+
+ if !utils.Cfg.ServiceSettings.EnableOAuthServiceProvider {
+ data := url.Values{"grant_type": []string{"junk"}, "client_id": []string{"12345678901234567890123456"}, "client_secret": []string{"12345678901234567890123456"}, "code": []string{"junk"}, "redirect_uri": []string{app.CallbackUrls[0]}}
+
+ if _, err := ApiClient.GetAccessToken(data); err == nil {
+ t.Fatal("should have failed - oauth providing turned off")
+ }
+ } else {
+
+ ApiClient.Must(ApiClient.LoginById(ruser.Id, "pwd"))
+ app = ApiClient.Must(ApiClient.RegisterApp(app)).Data.(*model.OAuthApp)
+
+ redirect := ApiClient.Must(ApiClient.AllowOAuth(model.AUTHCODE_RESPONSE_TYPE, app.Id, app.CallbackUrls[0], "all", "123")).Data.(map[string]string)["redirect"]
+ rurl, _ := url.Parse(redirect)
+
+ ApiClient.Logout()
+
+ data := url.Values{"grant_type": []string{"junk"}, "client_id": []string{app.Id}, "client_secret": []string{app.ClientSecret}, "code": []string{rurl.Query().Get("code")}, "redirect_uri": []string{app.CallbackUrls[0]}}
+
+ if _, err := ApiClient.GetAccessToken(data); err == nil {
+ t.Fatal("should have failed - bad grant type")
+ }
+
+ data.Set("grant_type", model.ACCESS_TOKEN_GRANT_TYPE)
+ data.Set("client_id", "")
+ if _, err := ApiClient.GetAccessToken(data); err == nil {
+ t.Fatal("should have failed - missing client id")
+ }
+ data.Set("client_id", "junk")
+ if _, err := ApiClient.GetAccessToken(data); err == nil {
+ t.Fatal("should have failed - bad client id")
+ }
+
+ data.Set("client_id", app.Id)
+ data.Set("client_secret", "")
+ if _, err := ApiClient.GetAccessToken(data); err == nil {
+ t.Fatal("should have failed - missing client secret")
+ }
+
+ data.Set("client_secret", "junk")
+ if _, err := ApiClient.GetAccessToken(data); err == nil {
+ t.Fatal("should have failed - bad client secret")
+ }
+
+ data.Set("client_secret", app.ClientSecret)
+ data.Set("code", "")
+ if _, err := ApiClient.GetAccessToken(data); err == nil {
+ t.Fatal("should have failed - missing code")
+ }
+
+ data.Set("code", "junk")
+ if _, err := ApiClient.GetAccessToken(data); err == nil {
+ t.Fatal("should have failed - bad code")
+ }
+
+ data.Set("code", rurl.Query().Get("code"))
+ data.Set("redirect_uri", "junk")
+ if _, err := ApiClient.GetAccessToken(data); err == nil {
+ t.Fatal("should have failed - non-matching redirect uri")
+ }
+
+ // reset data for successful request
+ data.Set("grant_type", model.ACCESS_TOKEN_GRANT_TYPE)
+ data.Set("client_id", app.Id)
+ data.Set("client_secret", app.ClientSecret)
+ data.Set("code", rurl.Query().Get("code"))
+ data.Set("redirect_uri", app.CallbackUrls[0])
+
+ token := ""
+ if result, err := ApiClient.GetAccessToken(data); err != nil {
+ t.Fatal(err)
+ } else {
+ rsp := result.Data.(*model.AccessResponse)
+ if len(rsp.AccessToken) == 0 {
+ t.Fatal("access token not returned")
+ } else {
+ token = rsp.AccessToken
+ }
+ if rsp.TokenType != model.ACCESS_TOKEN_TYPE {
+ t.Fatal("access token type incorrect")
+ }
+ }
+
+ if result, err := ApiClient.DoApiGet("/users/profiles?access_token="+token, "", ""); err != nil {
+ t.Fatal(err)
+ } else {
+ userMap := model.UserMapFromJson(result.Body)
+ if len(userMap) == 0 {
+ t.Fatal("user map empty - did not get results correctly")
+ }
+ }
+
+ if _, err := ApiClient.DoApiGet("/users/profiles", "", ""); err == nil {
+ t.Fatal("should have failed - no access token provided")
+ }
+
+ if _, err := ApiClient.DoApiGet("/users/profiles?access_token=junk", "", ""); err == nil {
+ t.Fatal("should have failed - bad access token provided")
+ }
+
+ ApiClient.SetOAuthToken(token)
+ if result, err := ApiClient.DoApiGet("/users/profiles", "", ""); err != nil {
+ t.Fatal(err)
+ } else {
+ userMap := model.UserMapFromJson(result.Body)
+ if len(userMap) == 0 {
+ t.Fatal("user map empty - did not get results correctly")
+ }
+ }
+
+ if _, err := ApiClient.GetAccessToken(data); err == nil {
+ t.Fatal("should have failed - tried to reuse auth code")
+ }
+
+ ApiClient.ClearOAuthToken()
+ }
+}
+
func TestZZWebTearDown(t *testing.T) {
// *IMPORTANT*
// This should be the last function in any test file