From fafac3b4128a0993b0de1c6e8ca3062bf1ccc14e Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Thu, 8 Dec 2016 16:59:09 +0100 Subject: Revert "[#801] Merge branch 'signup'" This reverts commit d10f607a4d40587510b0dc31b31fe4750bf4a3a3, reversing changes made to c28abba2f5b1186c671ebef508d40ffaae6d5bc5. --- .gitignore | 36 +- README.md | 2 +- doc/first-steps.md | 4 +- service/MANIFEST.in | 2 +- service/go | 6 +- service/pixelated/adapter/welcome_mail.py | 2 +- service/pixelated/application.py | 17 +- service/pixelated/assets/Interstitial.html | 18 + service/pixelated/assets/Interstitial.js | 58 + service/pixelated/assets/__init__.py | 0 .../pixelated/assets/_login_disclaimer_banner.html | 9 + service/pixelated/assets/favicon.png | Bin 0 -> 592 bytes service/pixelated/assets/hive-bg.png | Bin 0 -> 3356 bytes service/pixelated/assets/index.html | 9 + service/pixelated/assets/jquery-2.1.3.min.js | 4 + service/pixelated/assets/login.html | 36 + service/pixelated/assets/normalize.min.css | 1 + service/pixelated/assets/opensans.css | 69 + service/pixelated/assets/pixelated-logo-orange.svg | 29 + service/pixelated/assets/pixelated.css | 128 ++ service/pixelated/assets/snap.svg-min.js | 20 + service/pixelated/assets/welcome.mail.en-US | 94 + service/pixelated/assets/welcome.mail.pt-BR | 102 + service/pixelated/assets/welcome.mail.pt-BR.txt | 30 + service/pixelated/bitmask_libraries/provider.py | 2 +- service/pixelated/resources/__init__.py | 10 +- service/pixelated/resources/auth.py | 32 +- service/pixelated/resources/inbox_resource.py | 56 - service/pixelated/resources/login_resource.py | 32 +- service/pixelated/resources/root_resource.py | 120 +- service/pixelated/resources/session.py | 10 - service/setup.py | 4 +- service/templates/Interstitial.html | 18 - service/templates/__init__.py | 0 service/templates/_login_disclaimer_banner.html | 9 - service/templates/index.html | 99 - service/templates/login.html | 37 - service/templates/welcome.mail.en-US | 94 - service/templates/welcome.mail.pt-BR | 102 - service/templates/welcome.mail.pt-BR.txt | 30 - service/test/integration/test_contacts.py | 1 + service/test/integration/test_delete_mail.py | 13 +- service/test/integration/test_drafts.py | 30 +- service/test/integration/test_feedback_service.py | 2 +- service/test/integration/test_logout.py | 6 +- .../test/integration/test_mark_as_read_unread.py | 29 +- service/test/integration/test_multi_user_login.py | 8 +- .../test/integration/test_retrieve_attachment.py | 4 +- service/test/integration/test_static_files.py | 27 - service/test/integration/test_tags.py | 23 +- service/test/integration/test_users_count.py | 5 +- .../test/support/integration/app_test_client.py | 67 +- .../test/support/integration/multi_user_client.py | 29 +- service/test/unit/resources/test_auth.py | 73 - service/test/unit/resources/test_inbox_resource.py | 46 - service/test/unit/resources/test_login_resource.py | 15 +- service/test/unit/resources/test_root_resource.py | 258 +-- service/test/unit/resources/test_session.py | 25 - service/test/unit/test_welcome_mail.py | 3 +- web-ui/.bowerrc | 2 +- web-ui/.jshintignore | 12 +- web-ui/.jshintrc | 3 +- web-ui/.tx/config | 4 +- web-ui/Makefile | 4 +- web-ui/app/404.html | 157 ++ web-ui/app/favicon.ico | 0 web-ui/app/fonts/OpenSans-Bold.woff | Bin 0 -> 14504 bytes web-ui/app/fonts/OpenSans-BoldItalic.woff | Bin 0 -> 15488 bytes web-ui/app/fonts/OpenSans-Extrabold.woff | Bin 0 -> 15312 bytes web-ui/app/fonts/OpenSans-ExtraboldItalic.woff | Bin 0 -> 15932 bytes web-ui/app/fonts/OpenSans-Italic.woff | Bin 0 -> 15768 bytes web-ui/app/fonts/OpenSans-Light.woff | Bin 0 -> 15048 bytes web-ui/app/fonts/OpenSans-Semibold.woff | Bin 0 -> 15236 bytes web-ui/app/fonts/OpenSans-SemiboldItalic.woff | Bin 0 -> 15736 bytes web-ui/app/fonts/OpenSans.woff | Bin 0 -> 14604 bytes web-ui/app/fonts/OpenSansLight-Italic.woff | Bin 0 -> 15956 bytes web-ui/app/fonts/icomoon.ttf | Bin 0 -> 1272 bytes web-ui/app/fonts/icomoon.woff | Bin 0 -> 1348 bytes web-ui/app/images/LOADING-transparent.gif | Bin 0 -> 16170 bytes web-ui/app/images/fa-sent.svg | 15 + web-ui/app/images/favicon.png | Bin 0 -> 592 bytes web-ui/app/images/logo.svg | 30 + .../pixelated-symbol-blue-transparent-01.png | Bin 0 -> 9075 bytes web-ui/app/index.html | 113 ++ web-ui/app/js/dispatchers/left_pane_dispatcher.js | 62 + .../app/js/dispatchers/middle_pane_dispatcher.js | 74 + web-ui/app/js/dispatchers/right_pane_dispatcher.js | 117 ++ web-ui/app/js/features/features.js | 61 + web-ui/app/js/feedback/feedback_cache.js | 35 + web-ui/app/js/feedback/feedback_trigger.js | 39 + web-ui/app/js/foundation/initialize_foundation.js | 5 + web-ui/app/js/foundation/off_canvas.js | 46 + web-ui/app/js/helpers/browser.js | 36 + web-ui/app/js/helpers/contenttype.js | 184 ++ web-ui/app/js/helpers/iterator.js | 60 + web-ui/app/js/helpers/monitored_ajax.js | 67 + web-ui/app/js/helpers/sanitizer.js | 126 ++ web-ui/app/js/helpers/triggering.js | 29 + web-ui/app/js/helpers/view_helper.js | 163 ++ web-ui/app/js/lib/highlightRegex.js | 127 ++ web-ui/app/js/lib/html4-defs.js | 640 ++++++ web-ui/app/js/mail_list/domain/refresher.js | 43 + web-ui/app/js/mail_list/ui/mail_item_factory.js | 59 + .../app/js/mail_list/ui/mail_items/draft_item.js | 55 + .../mail_list/ui/mail_items/generic_mail_item.js | 97 + web-ui/app/js/mail_list/ui/mail_items/mail_item.js | 88 + web-ui/app/js/mail_list/ui/mail_items/sent_item.js | 61 + web-ui/app/js/mail_list/ui/mail_list.js | 182 ++ .../mail_list_actions/ui/archive_many_trigger.js | 29 + .../app/js/mail_list_actions/ui/compose_trigger.js | 57 + .../js/mail_list_actions/ui/delete_many_trigger.js | 47 + .../js/mail_list_actions/ui/mail_list_actions.js | 93 + .../mail_list_actions/ui/mark_as_unread_trigger.js | 47 + .../ui/mark_many_as_read_trigger.js | 47 + .../js/mail_list_actions/ui/pagination_trigger.js | 66 + .../mail_list_actions/ui/recover_many_trigger.js | 47 + .../app/js/mail_list_actions/ui/refresh_trigger.js | 44 + .../ui/toggle_check_all_trigger.js | 49 + web-ui/app/js/mail_view/data/feedback_sender.js | 49 + web-ui/app/js/mail_view/data/mail_builder.js | 102 + web-ui/app/js/mail_view/data/mail_sender.js | 93 + web-ui/app/js/mail_view/ui/attachment_icon.js | 61 + web-ui/app/js/mail_view/ui/attachment_list.js | 210 ++ web-ui/app/js/mail_view/ui/compose_box.js | 84 + web-ui/app/js/mail_view/ui/draft_box.js | 109 ++ web-ui/app/js/mail_view/ui/draft_save_status.js | 42 + web-ui/app/js/mail_view/ui/feedback_box.js | 69 + web-ui/app/js/mail_view/ui/forward_box.js | 97 + web-ui/app/js/mail_view/ui/mail_actions.js | 84 + web-ui/app/js/mail_view/ui/mail_view.js | 255 +++ .../app/js/mail_view/ui/no_mails_available_pane.js | 50 + .../js/mail_view/ui/no_message_selected_pane.js | 41 + web-ui/app/js/mail_view/ui/recipients/recipient.js | 112 ++ .../app/js/mail_view/ui/recipients/recipients.js | 193 ++ .../js/mail_view/ui/recipients/recipients_input.js | 180 ++ .../mail_view/ui/recipients/recipients_iterator.js | 59 + web-ui/app/js/mail_view/ui/reply_box.js | 116 ++ web-ui/app/js/mail_view/ui/reply_section.js | 129 ++ web-ui/app/js/mail_view/ui/send_button.js | 130 ++ web-ui/app/js/main.js | 84 + web-ui/app/js/mixins/with_auto_refresh.js | 47 + web-ui/app/js/mixins/with_compose_inline.js | 84 + .../app/js/mixins/with_enable_disable_on_event.js | 48 + web-ui/app/js/mixins/with_feature_toggle.js | 40 + web-ui/app/js/mixins/with_hide_and_show.js | 31 + web-ui/app/js/mixins/with_mail_edit_base.js | 263 +++ web-ui/app/js/mixins/with_mail_sandbox.js | 80 + web-ui/app/js/mixins/with_mail_tagging.js | 69 + web-ui/app/js/monkey_patching/all.js | 17 + web-ui/app/js/monkey_patching/array.js | 27 + web-ui/app/js/monkey_patching/post_message.js | 32 + web-ui/app/js/page/default.js | 146 ++ web-ui/app/js/page/events.js | 222 +++ web-ui/app/js/page/logout.js | 43 + web-ui/app/js/page/logout_shortcut.js | 33 + web-ui/app/js/page/pane_contract_expand.js | 51 + web-ui/app/js/page/pix_logo.js | 62 + web-ui/app/js/page/router.js | 71 + web-ui/app/js/page/router/url_params.js | 57 + web-ui/app/js/page/unread_count_title.js | 53 + web-ui/app/js/page/version.js | 41 + web-ui/app/js/sandbox.js | 11 + web-ui/app/js/search/results_highlighter.js | 97 + web-ui/app/js/search/search_trigger.js | 81 + web-ui/app/js/services/delete_service.js | 59 + web-ui/app/js/services/mail_service.js | 335 ++++ web-ui/app/js/services/model/mail.js | 126 ++ web-ui/app/js/services/recover_service.js | 38 + web-ui/app/js/style_guide/main.js | 33 + web-ui/app/js/tags/data/tags.js | 66 + web-ui/app/js/tags/ui/tag.js | 154 ++ web-ui/app/js/tags/ui/tag_base.js | 68 + web-ui/app/js/tags/ui/tag_list.js | 105 + web-ui/app/js/user_alerts/ui/user_alerts.js | 57 + web-ui/app/js/user_settings/data/user_settings.js | 52 + .../app/js/user_settings/ui/user_settings_box.js | 77 + .../app/js/user_settings/ui/user_settings_icon.js | 57 + web-ui/app/js/views/i18n.js | 62 + web-ui/app/js/views/recipientListFormatter.js | 33 + web-ui/app/js/views/templates.js | 85 + web-ui/app/locales/en_US/translation.json | 72 + web-ui/app/locales/pt_BR/translation.json | 72 + web-ui/app/locales/sv_SE/translation.json | 42 + web-ui/app/robots.txt | 3 + web-ui/app/sandbox.html | 16 + web-ui/app/scss/_mixins.scss | 71 + web-ui/app/scss/_others.scss | 72 + web-ui/app/scss/base/_colors.scss | 64 + web-ui/app/scss/base/_fonts.scss | 68 + web-ui/app/scss/base/_scaffolding.scss | 10 + web-ui/app/scss/mixins/_position-helpers.scss | 9 + web-ui/app/scss/mixins/_tags.scss | 110 ++ web-ui/app/scss/sandbox.scss | 27 + web-ui/app/scss/style.scss | 39 + .../scss/templates/_no-content-placeholder.scss | 5 + web-ui/app/scss/templates/_unread-count.scss | 14 + web-ui/app/scss/vendor/_customfont.scss | 9 + web-ui/app/scss/vendor/_foundation.scss | 2066 ++++++++++++++++++++ web-ui/app/scss/vendor/_reset.scss | 421 ++++ web-ui/app/scss/vendor/_scut.scss | 1518 ++++++++++++++ web-ui/app/scss/views/_action-bar.scss | 159 ++ web-ui/app/scss/views/_close-button.scss | 22 + web-ui/app/scss/views/_compose-button.scss | 27 + web-ui/app/scss/views/_compose-view.scss | 451 +++++ web-ui/app/scss/views/_mail-list.scss | 124 ++ web-ui/app/scss/views/_message-panel.scss | 26 + web-ui/app/scss/views/_navigation.scss | 589 ++++++ web-ui/app/scss/views/_no-mails-available.scss | 3 + web-ui/app/scss/views/_no-message-selected.scss | 14 + web-ui/app/scss/views/_read-view.scss | 165 ++ web-ui/app/scss/views/_security-labels.scss | 67 + web-ui/app/templates/compose/attachment_item.hbs | 4 + .../templates/compose/attachment_upload_item.hbs | 5 + web-ui/app/templates/compose/attachments_list.hbs | 14 + web-ui/app/templates/compose/compose_box.hbs | 32 + web-ui/app/templates/compose/feedback_box.hbs | 18 + web-ui/app/templates/compose/fixed_recipient.hbs | 8 + web-ui/app/templates/compose/inline_box.hbs | 20 + .../app/templates/compose/no_mails_available.hbs | 7 + .../app/templates/compose/no_message_selected.hbs | 3 + web-ui/app/templates/compose/recipient_input.hbs | 1 + web-ui/app/templates/compose/recipients.hbs | 33 + web-ui/app/templates/compose/reply_section.hbs | 6 + .../templates/compose/upload_attachment_failed.hbs | 6 + web-ui/app/templates/feedback/feedback_trigger.hbs | 8 + web-ui/app/templates/mail_actions/actions_box.hbs | 7 + .../app/templates/mail_actions/compose_trigger.hbs | 3 + .../templates/mail_actions/pagination_trigger.hbs | 3 + .../app/templates/mail_actions/refresh_trigger.hbs | 3 + .../templates/mail_actions/trash_actions_box.hbs | 5 + web-ui/app/templates/mails/draft.hbs | 41 + web-ui/app/templates/mails/full_view.hbs | 83 + web-ui/app/templates/mails/mail_actions.hbs | 6 + web-ui/app/templates/mails/sent.hbs | 36 + web-ui/app/templates/mails/single.hbs | 28 + web-ui/app/templates/mails/trash.hbs | 32 + web-ui/app/templates/page/logout.hbs | 9 + web-ui/app/templates/page/logout_shortcut.hbs | 6 + web-ui/app/templates/page/user_settings_box.hbs | 10 + web-ui/app/templates/page/user_settings_icon.hbs | 8 + web-ui/app/templates/page/version.hbs | 2 + web-ui/app/templates/search/search_trigger.hbs | 3 + web-ui/app/templates/tags/shortcut.hbs | 9 + web-ui/app/templates/tags/tag.hbs | 3 + web-ui/app/templates/tags/tag_inner.hbs | 4 + web-ui/app/templates/tags/tag_list.hbs | 6 + web-ui/app/templates/user_alerts/message.hbs | 1 + web-ui/config/add_git_version.sh | 2 +- web-ui/config/buildoptions.js | 4 +- web-ui/config/compass.rb | 12 +- web-ui/config/control-tower.yml | 2 +- web-ui/config/imagemin.js | 4 +- web-ui/config/minify_app.sh | 34 - web-ui/config/package.sh | 54 +- web-ui/karma.conf.js | 54 +- web-ui/package.json | 35 +- web-ui/public/404.html | 157 -- web-ui/public/Interstitial.js | 61 - web-ui/public/dummy.json | 1 - web-ui/public/favicon.ico | 0 web-ui/public/favicon.png | Bin 592 -> 0 bytes web-ui/public/fonts/OpenSans-Bold.woff | Bin 14504 -> 0 bytes web-ui/public/fonts/OpenSans-BoldItalic.woff | Bin 15488 -> 0 bytes web-ui/public/fonts/OpenSans-Extrabold.woff | Bin 15312 -> 0 bytes web-ui/public/fonts/OpenSans-ExtraboldItalic.woff | Bin 15932 -> 0 bytes web-ui/public/fonts/OpenSans-Italic.woff | Bin 15768 -> 0 bytes web-ui/public/fonts/OpenSans-Light.woff | Bin 15048 -> 0 bytes web-ui/public/fonts/OpenSans-Semibold.woff | Bin 15236 -> 0 bytes web-ui/public/fonts/OpenSans-SemiboldItalic.woff | Bin 15736 -> 0 bytes web-ui/public/fonts/OpenSans.woff | Bin 14604 -> 0 bytes web-ui/public/fonts/OpenSansLight-Italic.woff | Bin 15956 -> 0 bytes web-ui/public/fonts/icomoon.ttf | Bin 1272 -> 0 bytes web-ui/public/fonts/icomoon.woff | Bin 1348 -> 0 bytes web-ui/public/hive-bg.png | Bin 3356 -> 0 bytes web-ui/public/jquery-2.1.3.min.js | 4 - .../public/js/dispatchers/left_pane_dispatcher.js | 62 - .../js/dispatchers/middle_pane_dispatcher.js | 74 - .../public/js/dispatchers/right_pane_dispatcher.js | 117 -- web-ui/public/js/features/features.js | 61 - web-ui/public/js/feedback/feedback_cache.js | 35 - web-ui/public/js/feedback/feedback_trigger.js | 39 - .../public/js/foundation/initialize_foundation.js | 5 - web-ui/public/js/foundation/off_canvas.js | 46 - web-ui/public/js/helpers/browser.js | 36 - web-ui/public/js/helpers/contenttype.js | 184 -- web-ui/public/js/helpers/iterator.js | 60 - web-ui/public/js/helpers/monitored_ajax.js | 67 - web-ui/public/js/helpers/sanitizer.js | 126 -- web-ui/public/js/helpers/triggering.js | 29 - web-ui/public/js/helpers/view_helper.js | 163 -- web-ui/public/js/lib/highlightRegex.js | 127 -- web-ui/public/js/lib/html4-defs.js | 640 ------ web-ui/public/js/mail_list/domain/refresher.js | 43 - web-ui/public/js/mail_list/ui/mail_item_factory.js | 59 - .../js/mail_list/ui/mail_items/draft_item.js | 55 - .../mail_list/ui/mail_items/generic_mail_item.js | 97 - .../public/js/mail_list/ui/mail_items/mail_item.js | 88 - .../public/js/mail_list/ui/mail_items/sent_item.js | 61 - web-ui/public/js/mail_list/ui/mail_list.js | 182 -- .../mail_list_actions/ui/archive_many_trigger.js | 29 - .../js/mail_list_actions/ui/compose_trigger.js | 57 - .../js/mail_list_actions/ui/delete_many_trigger.js | 47 - .../js/mail_list_actions/ui/mail_list_actions.js | 93 - .../mail_list_actions/ui/mark_as_unread_trigger.js | 47 - .../ui/mark_many_as_read_trigger.js | 47 - .../js/mail_list_actions/ui/pagination_trigger.js | 66 - .../mail_list_actions/ui/recover_many_trigger.js | 47 - .../js/mail_list_actions/ui/refresh_trigger.js | 44 - .../ui/toggle_check_all_trigger.js | 49 - web-ui/public/js/mail_view/data/feedback_sender.js | 49 - web-ui/public/js/mail_view/data/mail_builder.js | 102 - web-ui/public/js/mail_view/data/mail_sender.js | 93 - web-ui/public/js/mail_view/ui/attachment_icon.js | 61 - web-ui/public/js/mail_view/ui/attachment_list.js | 210 -- web-ui/public/js/mail_view/ui/compose_box.js | 84 - web-ui/public/js/mail_view/ui/draft_box.js | 109 -- web-ui/public/js/mail_view/ui/draft_save_status.js | 42 - web-ui/public/js/mail_view/ui/feedback_box.js | 69 - web-ui/public/js/mail_view/ui/forward_box.js | 97 - web-ui/public/js/mail_view/ui/mail_actions.js | 84 - web-ui/public/js/mail_view/ui/mail_view.js | 255 --- .../js/mail_view/ui/no_mails_available_pane.js | 50 - .../js/mail_view/ui/no_message_selected_pane.js | 41 - .../public/js/mail_view/ui/recipients/recipient.js | 112 -- .../js/mail_view/ui/recipients/recipients.js | 193 -- .../js/mail_view/ui/recipients/recipients_input.js | 180 -- .../mail_view/ui/recipients/recipients_iterator.js | 59 - web-ui/public/js/mail_view/ui/reply_box.js | 116 -- web-ui/public/js/mail_view/ui/reply_section.js | 129 -- web-ui/public/js/mail_view/ui/send_button.js | 130 -- web-ui/public/js/main.js | 84 - web-ui/public/js/mixins/with_auto_refresh.js | 47 - web-ui/public/js/mixins/with_compose_inline.js | 84 - .../js/mixins/with_enable_disable_on_event.js | 48 - web-ui/public/js/mixins/with_feature_toggle.js | 40 - web-ui/public/js/mixins/with_hide_and_show.js | 31 - web-ui/public/js/mixins/with_mail_edit_base.js | 263 --- web-ui/public/js/mixins/with_mail_sandbox.js | 80 - web-ui/public/js/mixins/with_mail_tagging.js | 69 - web-ui/public/js/monkey_patching/all.js | 17 - web-ui/public/js/monkey_patching/array.js | 27 - web-ui/public/js/monkey_patching/post_message.js | 32 - web-ui/public/js/page/default.js | 146 -- web-ui/public/js/page/events.js | 222 --- web-ui/public/js/page/logout.js | 43 - web-ui/public/js/page/logout_shortcut.js | 33 - web-ui/public/js/page/pane_contract_expand.js | 51 - web-ui/public/js/page/pix_logo.js | 62 - web-ui/public/js/page/router.js | 71 - web-ui/public/js/page/router/url_params.js | 57 - web-ui/public/js/page/unread_count_title.js | 53 - web-ui/public/js/page/version.js | 41 - web-ui/public/js/sandbox.js | 11 - web-ui/public/js/search/results_highlighter.js | 97 - web-ui/public/js/search/search_trigger.js | 81 - web-ui/public/js/services/delete_service.js | 59 - web-ui/public/js/services/mail_service.js | 335 ---- web-ui/public/js/services/model/mail.js | 126 -- web-ui/public/js/services/recover_service.js | 38 - web-ui/public/js/style_guide/main.js | 33 - web-ui/public/js/tags/data/tags.js | 66 - web-ui/public/js/tags/ui/tag.js | 154 -- web-ui/public/js/tags/ui/tag_base.js | 68 - web-ui/public/js/tags/ui/tag_list.js | 105 - web-ui/public/js/user_alerts/ui/user_alerts.js | 57 - .../public/js/user_settings/data/user_settings.js | 52 - .../js/user_settings/ui/user_settings_box.js | 77 - .../js/user_settings/ui/user_settings_icon.js | 57 - web-ui/public/js/views/i18n.js | 62 - web-ui/public/js/views/recipientListFormatter.js | 33 - web-ui/public/js/views/templates.js | 85 - web-ui/public/locales/en_US/translation.json | 72 - web-ui/public/locales/pt_BR/translation.json | 72 - web-ui/public/locales/sv_SE/translation.json | 42 - web-ui/public/normalize.min.css | 1 - web-ui/public/opensans.css | 69 - web-ui/public/pixelated-logo-orange.svg | 29 - web-ui/public/pixelated.css | 128 -- web-ui/public/robots.txt | 3 - web-ui/public/sandbox.html | 13 - web-ui/public/scss/_mixins.scss | 71 - web-ui/public/scss/_others.scss | 72 - web-ui/public/scss/base/_colors.scss | 64 - web-ui/public/scss/base/_fonts.scss | 68 - web-ui/public/scss/base/_scaffolding.scss | 10 - web-ui/public/scss/mixins/_position-helpers.scss | 9 - web-ui/public/scss/mixins/_tags.scss | 110 -- web-ui/public/scss/sandbox.scss | 27 - web-ui/public/scss/style.scss | 39 - .../scss/templates/_no-content-placeholder.scss | 5 - web-ui/public/scss/templates/_unread-count.scss | 14 - web-ui/public/scss/vendor/_customfont.scss | 9 - web-ui/public/scss/vendor/_foundation.scss | 2066 -------------------- web-ui/public/scss/vendor/_reset.scss | 421 ---- web-ui/public/scss/vendor/_scut.scss | 1518 -------------- web-ui/public/scss/views/_action-bar.scss | 159 -- web-ui/public/scss/views/_close-button.scss | 22 - web-ui/public/scss/views/_compose-button.scss | 27 - web-ui/public/scss/views/_compose-view.scss | 451 ----- web-ui/public/scss/views/_mail-list.scss | 124 -- web-ui/public/scss/views/_message-panel.scss | 26 - web-ui/public/scss/views/_navigation.scss | 589 ------ web-ui/public/scss/views/_no-mails-available.scss | 3 - web-ui/public/scss/views/_no-message-selected.scss | 14 - web-ui/public/scss/views/_read-view.scss | 165 -- web-ui/public/scss/views/_security-labels.scss | 67 - web-ui/public/signup.css | 174 -- web-ui/public/signup.html | 19 - web-ui/public/snap.svg-min.js | 20 - .../public/templates/compose/attachment_item.hbs | 4 - .../templates/compose/attachment_upload_item.hbs | 5 - .../public/templates/compose/attachments_list.hbs | 14 - web-ui/public/templates/compose/compose_box.hbs | 32 - web-ui/public/templates/compose/feedback_box.hbs | 18 - .../public/templates/compose/fixed_recipient.hbs | 8 - web-ui/public/templates/compose/inline_box.hbs | 20 - .../templates/compose/no_mails_available.hbs | 7 - .../templates/compose/no_message_selected.hbs | 3 - .../public/templates/compose/recipient_input.hbs | 1 - web-ui/public/templates/compose/recipients.hbs | 33 - web-ui/public/templates/compose/reply_section.hbs | 6 - .../templates/compose/upload_attachment_failed.hbs | 6 - .../public/templates/feedback/feedback_trigger.hbs | 8 - .../public/templates/mail_actions/actions_box.hbs | 7 - .../templates/mail_actions/compose_trigger.hbs | 3 - .../templates/mail_actions/pagination_trigger.hbs | 3 - .../templates/mail_actions/refresh_trigger.hbs | 3 - .../templates/mail_actions/trash_actions_box.hbs | 5 - web-ui/public/templates/mails/draft.hbs | 41 - web-ui/public/templates/mails/full_view.hbs | 83 - web-ui/public/templates/mails/mail_actions.hbs | 6 - web-ui/public/templates/mails/sent.hbs | 36 - web-ui/public/templates/mails/single.hbs | 28 - web-ui/public/templates/mails/trash.hbs | 32 - web-ui/public/templates/page/logout.hbs | 9 - web-ui/public/templates/page/logout_shortcut.hbs | 6 - web-ui/public/templates/page/user_settings_box.hbs | 10 - .../public/templates/page/user_settings_icon.hbs | 8 - web-ui/public/templates/page/version.hbs | 2 - web-ui/public/templates/search/search_trigger.hbs | 3 - web-ui/public/templates/tags/shortcut.hbs | 9 - web-ui/public/templates/tags/tag.hbs | 3 - web-ui/public/templates/tags/tag_inner.hbs | 4 - web-ui/public/templates/tags/tag_list.hbs | 6 - web-ui/public/templates/user_alerts/message.hbs | 1 - web-ui/src/images/LOADING-transparent.gif | Bin 16170 -> 0 bytes web-ui/src/images/fa-sent.svg | 15 - web-ui/src/images/favicon.png | Bin 592 -> 0 bytes web-ui/src/images/logo.svg | 30 - web-ui/src/images/pixelated-logo-orange.svg | 29 - .../pixelated-symbol-blue-transparent-01.png | Bin 9075 -> 0 bytes web-ui/src/images/sent_email.png | Bin 9160 -> 0 bytes web-ui/src/js/index.js | 235 --- web-ui/test/test-main.js | 54 +- 454 files changed, 16592 insertions(+), 17511 deletions(-) create mode 100644 service/pixelated/assets/Interstitial.html create mode 100644 service/pixelated/assets/Interstitial.js create mode 100644 service/pixelated/assets/__init__.py create mode 100644 service/pixelated/assets/_login_disclaimer_banner.html create mode 100644 service/pixelated/assets/favicon.png create mode 100644 service/pixelated/assets/hive-bg.png create mode 100644 service/pixelated/assets/index.html create mode 100644 service/pixelated/assets/jquery-2.1.3.min.js create mode 100644 service/pixelated/assets/login.html create mode 100644 service/pixelated/assets/normalize.min.css create mode 100644 service/pixelated/assets/opensans.css create mode 100644 service/pixelated/assets/pixelated-logo-orange.svg create mode 100644 service/pixelated/assets/pixelated.css create mode 100644 service/pixelated/assets/snap.svg-min.js create mode 100644 service/pixelated/assets/welcome.mail.en-US create mode 100644 service/pixelated/assets/welcome.mail.pt-BR create mode 100644 service/pixelated/assets/welcome.mail.pt-BR.txt delete mode 100644 service/pixelated/resources/inbox_resource.py delete mode 100644 service/templates/Interstitial.html delete mode 100644 service/templates/__init__.py delete mode 100644 service/templates/_login_disclaimer_banner.html delete mode 100644 service/templates/index.html delete mode 100644 service/templates/login.html delete mode 100644 service/templates/welcome.mail.en-US delete mode 100644 service/templates/welcome.mail.pt-BR delete mode 100644 service/templates/welcome.mail.pt-BR.txt delete mode 100644 service/test/integration/test_static_files.py delete mode 100644 service/test/unit/resources/test_auth.py delete mode 100644 service/test/unit/resources/test_inbox_resource.py delete mode 100644 service/test/unit/resources/test_session.py create mode 100644 web-ui/app/404.html create mode 100644 web-ui/app/favicon.ico create mode 100644 web-ui/app/fonts/OpenSans-Bold.woff create mode 100644 web-ui/app/fonts/OpenSans-BoldItalic.woff create mode 100644 web-ui/app/fonts/OpenSans-Extrabold.woff create mode 100644 web-ui/app/fonts/OpenSans-ExtraboldItalic.woff create mode 100644 web-ui/app/fonts/OpenSans-Italic.woff create mode 100644 web-ui/app/fonts/OpenSans-Light.woff create mode 100644 web-ui/app/fonts/OpenSans-Semibold.woff create mode 100644 web-ui/app/fonts/OpenSans-SemiboldItalic.woff create mode 100644 web-ui/app/fonts/OpenSans.woff create mode 100644 web-ui/app/fonts/OpenSansLight-Italic.woff create mode 100644 web-ui/app/fonts/icomoon.ttf create mode 100644 web-ui/app/fonts/icomoon.woff create mode 100644 web-ui/app/images/LOADING-transparent.gif create mode 100644 web-ui/app/images/fa-sent.svg create mode 100644 web-ui/app/images/favicon.png create mode 100644 web-ui/app/images/logo.svg create mode 100644 web-ui/app/images/pixelated-symbol-blue-transparent-01.png create mode 100644 web-ui/app/index.html create mode 100644 web-ui/app/js/dispatchers/left_pane_dispatcher.js create mode 100644 web-ui/app/js/dispatchers/middle_pane_dispatcher.js create mode 100644 web-ui/app/js/dispatchers/right_pane_dispatcher.js create mode 100644 web-ui/app/js/features/features.js create mode 100644 web-ui/app/js/feedback/feedback_cache.js create mode 100644 web-ui/app/js/feedback/feedback_trigger.js create mode 100644 web-ui/app/js/foundation/initialize_foundation.js create mode 100644 web-ui/app/js/foundation/off_canvas.js create mode 100644 web-ui/app/js/helpers/browser.js create mode 100644 web-ui/app/js/helpers/contenttype.js create mode 100644 web-ui/app/js/helpers/iterator.js create mode 100644 web-ui/app/js/helpers/monitored_ajax.js create mode 100644 web-ui/app/js/helpers/sanitizer.js create mode 100644 web-ui/app/js/helpers/triggering.js create mode 100644 web-ui/app/js/helpers/view_helper.js create mode 100644 web-ui/app/js/lib/highlightRegex.js create mode 100644 web-ui/app/js/lib/html4-defs.js create mode 100644 web-ui/app/js/mail_list/domain/refresher.js create mode 100644 web-ui/app/js/mail_list/ui/mail_item_factory.js create mode 100644 web-ui/app/js/mail_list/ui/mail_items/draft_item.js create mode 100644 web-ui/app/js/mail_list/ui/mail_items/generic_mail_item.js create mode 100644 web-ui/app/js/mail_list/ui/mail_items/mail_item.js create mode 100644 web-ui/app/js/mail_list/ui/mail_items/sent_item.js create mode 100644 web-ui/app/js/mail_list/ui/mail_list.js create mode 100644 web-ui/app/js/mail_list_actions/ui/archive_many_trigger.js create mode 100644 web-ui/app/js/mail_list_actions/ui/compose_trigger.js create mode 100644 web-ui/app/js/mail_list_actions/ui/delete_many_trigger.js create mode 100644 web-ui/app/js/mail_list_actions/ui/mail_list_actions.js create mode 100644 web-ui/app/js/mail_list_actions/ui/mark_as_unread_trigger.js create mode 100644 web-ui/app/js/mail_list_actions/ui/mark_many_as_read_trigger.js create mode 100644 web-ui/app/js/mail_list_actions/ui/pagination_trigger.js create mode 100644 web-ui/app/js/mail_list_actions/ui/recover_many_trigger.js create mode 100644 web-ui/app/js/mail_list_actions/ui/refresh_trigger.js create mode 100644 web-ui/app/js/mail_list_actions/ui/toggle_check_all_trigger.js create mode 100644 web-ui/app/js/mail_view/data/feedback_sender.js create mode 100644 web-ui/app/js/mail_view/data/mail_builder.js create mode 100644 web-ui/app/js/mail_view/data/mail_sender.js create mode 100644 web-ui/app/js/mail_view/ui/attachment_icon.js create mode 100644 web-ui/app/js/mail_view/ui/attachment_list.js create mode 100644 web-ui/app/js/mail_view/ui/compose_box.js create mode 100644 web-ui/app/js/mail_view/ui/draft_box.js create mode 100644 web-ui/app/js/mail_view/ui/draft_save_status.js create mode 100644 web-ui/app/js/mail_view/ui/feedback_box.js create mode 100644 web-ui/app/js/mail_view/ui/forward_box.js create mode 100644 web-ui/app/js/mail_view/ui/mail_actions.js create mode 100644 web-ui/app/js/mail_view/ui/mail_view.js create mode 100644 web-ui/app/js/mail_view/ui/no_mails_available_pane.js create mode 100644 web-ui/app/js/mail_view/ui/no_message_selected_pane.js create mode 100644 web-ui/app/js/mail_view/ui/recipients/recipient.js create mode 100644 web-ui/app/js/mail_view/ui/recipients/recipients.js create mode 100644 web-ui/app/js/mail_view/ui/recipients/recipients_input.js create mode 100644 web-ui/app/js/mail_view/ui/recipients/recipients_iterator.js create mode 100644 web-ui/app/js/mail_view/ui/reply_box.js create mode 100644 web-ui/app/js/mail_view/ui/reply_section.js create mode 100644 web-ui/app/js/mail_view/ui/send_button.js create mode 100644 web-ui/app/js/main.js create mode 100644 web-ui/app/js/mixins/with_auto_refresh.js create mode 100644 web-ui/app/js/mixins/with_compose_inline.js create mode 100644 web-ui/app/js/mixins/with_enable_disable_on_event.js create mode 100644 web-ui/app/js/mixins/with_feature_toggle.js create mode 100644 web-ui/app/js/mixins/with_hide_and_show.js create mode 100644 web-ui/app/js/mixins/with_mail_edit_base.js create mode 100644 web-ui/app/js/mixins/with_mail_sandbox.js create mode 100644 web-ui/app/js/mixins/with_mail_tagging.js create mode 100644 web-ui/app/js/monkey_patching/all.js create mode 100644 web-ui/app/js/monkey_patching/array.js create mode 100644 web-ui/app/js/monkey_patching/post_message.js create mode 100644 web-ui/app/js/page/default.js create mode 100644 web-ui/app/js/page/events.js create mode 100644 web-ui/app/js/page/logout.js create mode 100644 web-ui/app/js/page/logout_shortcut.js create mode 100644 web-ui/app/js/page/pane_contract_expand.js create mode 100644 web-ui/app/js/page/pix_logo.js create mode 100644 web-ui/app/js/page/router.js create mode 100644 web-ui/app/js/page/router/url_params.js create mode 100644 web-ui/app/js/page/unread_count_title.js create mode 100644 web-ui/app/js/page/version.js create mode 100644 web-ui/app/js/sandbox.js create mode 100644 web-ui/app/js/search/results_highlighter.js create mode 100644 web-ui/app/js/search/search_trigger.js create mode 100644 web-ui/app/js/services/delete_service.js create mode 100644 web-ui/app/js/services/mail_service.js create mode 100644 web-ui/app/js/services/model/mail.js create mode 100644 web-ui/app/js/services/recover_service.js create mode 100644 web-ui/app/js/style_guide/main.js create mode 100644 web-ui/app/js/tags/data/tags.js create mode 100644 web-ui/app/js/tags/ui/tag.js create mode 100644 web-ui/app/js/tags/ui/tag_base.js create mode 100644 web-ui/app/js/tags/ui/tag_list.js create mode 100644 web-ui/app/js/user_alerts/ui/user_alerts.js create mode 100644 web-ui/app/js/user_settings/data/user_settings.js create mode 100644 web-ui/app/js/user_settings/ui/user_settings_box.js create mode 100644 web-ui/app/js/user_settings/ui/user_settings_icon.js create mode 100644 web-ui/app/js/views/i18n.js create mode 100644 web-ui/app/js/views/recipientListFormatter.js create mode 100644 web-ui/app/js/views/templates.js create mode 100644 web-ui/app/locales/en_US/translation.json create mode 100644 web-ui/app/locales/pt_BR/translation.json create mode 100644 web-ui/app/locales/sv_SE/translation.json create mode 100644 web-ui/app/robots.txt create mode 100644 web-ui/app/sandbox.html create mode 100644 web-ui/app/scss/_mixins.scss create mode 100644 web-ui/app/scss/_others.scss create mode 100644 web-ui/app/scss/base/_colors.scss create mode 100644 web-ui/app/scss/base/_fonts.scss create mode 100644 web-ui/app/scss/base/_scaffolding.scss create mode 100644 web-ui/app/scss/mixins/_position-helpers.scss create mode 100644 web-ui/app/scss/mixins/_tags.scss create mode 100644 web-ui/app/scss/sandbox.scss create mode 100644 web-ui/app/scss/style.scss create mode 100644 web-ui/app/scss/templates/_no-content-placeholder.scss create mode 100644 web-ui/app/scss/templates/_unread-count.scss create mode 100644 web-ui/app/scss/vendor/_customfont.scss create mode 100644 web-ui/app/scss/vendor/_foundation.scss create mode 100644 web-ui/app/scss/vendor/_reset.scss create mode 100644 web-ui/app/scss/vendor/_scut.scss create mode 100644 web-ui/app/scss/views/_action-bar.scss create mode 100644 web-ui/app/scss/views/_close-button.scss create mode 100644 web-ui/app/scss/views/_compose-button.scss create mode 100644 web-ui/app/scss/views/_compose-view.scss create mode 100644 web-ui/app/scss/views/_mail-list.scss create mode 100644 web-ui/app/scss/views/_message-panel.scss create mode 100644 web-ui/app/scss/views/_navigation.scss create mode 100644 web-ui/app/scss/views/_no-mails-available.scss create mode 100644 web-ui/app/scss/views/_no-message-selected.scss create mode 100644 web-ui/app/scss/views/_read-view.scss create mode 100644 web-ui/app/scss/views/_security-labels.scss create mode 100644 web-ui/app/templates/compose/attachment_item.hbs create mode 100644 web-ui/app/templates/compose/attachment_upload_item.hbs create mode 100644 web-ui/app/templates/compose/attachments_list.hbs create mode 100644 web-ui/app/templates/compose/compose_box.hbs create mode 100644 web-ui/app/templates/compose/feedback_box.hbs create mode 100644 web-ui/app/templates/compose/fixed_recipient.hbs create mode 100644 web-ui/app/templates/compose/inline_box.hbs create mode 100644 web-ui/app/templates/compose/no_mails_available.hbs create mode 100644 web-ui/app/templates/compose/no_message_selected.hbs create mode 100644 web-ui/app/templates/compose/recipient_input.hbs create mode 100644 web-ui/app/templates/compose/recipients.hbs create mode 100644 web-ui/app/templates/compose/reply_section.hbs create mode 100644 web-ui/app/templates/compose/upload_attachment_failed.hbs create mode 100644 web-ui/app/templates/feedback/feedback_trigger.hbs create mode 100644 web-ui/app/templates/mail_actions/actions_box.hbs create mode 100644 web-ui/app/templates/mail_actions/compose_trigger.hbs create mode 100644 web-ui/app/templates/mail_actions/pagination_trigger.hbs create mode 100644 web-ui/app/templates/mail_actions/refresh_trigger.hbs create mode 100644 web-ui/app/templates/mail_actions/trash_actions_box.hbs create mode 100644 web-ui/app/templates/mails/draft.hbs create mode 100644 web-ui/app/templates/mails/full_view.hbs create mode 100644 web-ui/app/templates/mails/mail_actions.hbs create mode 100644 web-ui/app/templates/mails/sent.hbs create mode 100644 web-ui/app/templates/mails/single.hbs create mode 100644 web-ui/app/templates/mails/trash.hbs create mode 100644 web-ui/app/templates/page/logout.hbs create mode 100644 web-ui/app/templates/page/logout_shortcut.hbs create mode 100644 web-ui/app/templates/page/user_settings_box.hbs create mode 100644 web-ui/app/templates/page/user_settings_icon.hbs create mode 100644 web-ui/app/templates/page/version.hbs create mode 100644 web-ui/app/templates/search/search_trigger.hbs create mode 100644 web-ui/app/templates/tags/shortcut.hbs create mode 100644 web-ui/app/templates/tags/tag.hbs create mode 100644 web-ui/app/templates/tags/tag_inner.hbs create mode 100644 web-ui/app/templates/tags/tag_list.hbs create mode 100644 web-ui/app/templates/user_alerts/message.hbs delete mode 100644 web-ui/config/minify_app.sh delete mode 100644 web-ui/public/404.html delete mode 100644 web-ui/public/Interstitial.js delete mode 100644 web-ui/public/dummy.json delete mode 100644 web-ui/public/favicon.ico delete mode 100644 web-ui/public/favicon.png delete mode 100644 web-ui/public/fonts/OpenSans-Bold.woff delete mode 100644 web-ui/public/fonts/OpenSans-BoldItalic.woff delete mode 100644 web-ui/public/fonts/OpenSans-Extrabold.woff delete mode 100644 web-ui/public/fonts/OpenSans-ExtraboldItalic.woff delete mode 100644 web-ui/public/fonts/OpenSans-Italic.woff delete mode 100644 web-ui/public/fonts/OpenSans-Light.woff delete mode 100644 web-ui/public/fonts/OpenSans-Semibold.woff delete mode 100644 web-ui/public/fonts/OpenSans-SemiboldItalic.woff delete mode 100644 web-ui/public/fonts/OpenSans.woff delete mode 100644 web-ui/public/fonts/OpenSansLight-Italic.woff delete mode 100644 web-ui/public/fonts/icomoon.ttf delete mode 100644 web-ui/public/fonts/icomoon.woff delete mode 100644 web-ui/public/hive-bg.png delete mode 100644 web-ui/public/jquery-2.1.3.min.js delete mode 100644 web-ui/public/js/dispatchers/left_pane_dispatcher.js delete mode 100644 web-ui/public/js/dispatchers/middle_pane_dispatcher.js delete mode 100644 web-ui/public/js/dispatchers/right_pane_dispatcher.js delete mode 100644 web-ui/public/js/features/features.js delete mode 100644 web-ui/public/js/feedback/feedback_cache.js delete mode 100644 web-ui/public/js/feedback/feedback_trigger.js delete mode 100644 web-ui/public/js/foundation/initialize_foundation.js delete mode 100644 web-ui/public/js/foundation/off_canvas.js delete mode 100644 web-ui/public/js/helpers/browser.js delete mode 100644 web-ui/public/js/helpers/contenttype.js delete mode 100644 web-ui/public/js/helpers/iterator.js delete mode 100644 web-ui/public/js/helpers/monitored_ajax.js delete mode 100644 web-ui/public/js/helpers/sanitizer.js delete mode 100644 web-ui/public/js/helpers/triggering.js delete mode 100644 web-ui/public/js/helpers/view_helper.js delete mode 100644 web-ui/public/js/lib/highlightRegex.js delete mode 100644 web-ui/public/js/lib/html4-defs.js delete mode 100644 web-ui/public/js/mail_list/domain/refresher.js delete mode 100644 web-ui/public/js/mail_list/ui/mail_item_factory.js delete mode 100644 web-ui/public/js/mail_list/ui/mail_items/draft_item.js delete mode 100644 web-ui/public/js/mail_list/ui/mail_items/generic_mail_item.js delete mode 100644 web-ui/public/js/mail_list/ui/mail_items/mail_item.js delete mode 100644 web-ui/public/js/mail_list/ui/mail_items/sent_item.js delete mode 100644 web-ui/public/js/mail_list/ui/mail_list.js delete mode 100644 web-ui/public/js/mail_list_actions/ui/archive_many_trigger.js delete mode 100644 web-ui/public/js/mail_list_actions/ui/compose_trigger.js delete mode 100644 web-ui/public/js/mail_list_actions/ui/delete_many_trigger.js delete mode 100644 web-ui/public/js/mail_list_actions/ui/mail_list_actions.js delete mode 100644 web-ui/public/js/mail_list_actions/ui/mark_as_unread_trigger.js delete mode 100644 web-ui/public/js/mail_list_actions/ui/mark_many_as_read_trigger.js delete mode 100644 web-ui/public/js/mail_list_actions/ui/pagination_trigger.js delete mode 100644 web-ui/public/js/mail_list_actions/ui/recover_many_trigger.js delete mode 100644 web-ui/public/js/mail_list_actions/ui/refresh_trigger.js delete mode 100644 web-ui/public/js/mail_list_actions/ui/toggle_check_all_trigger.js delete mode 100644 web-ui/public/js/mail_view/data/feedback_sender.js delete mode 100644 web-ui/public/js/mail_view/data/mail_builder.js delete mode 100644 web-ui/public/js/mail_view/data/mail_sender.js delete mode 100644 web-ui/public/js/mail_view/ui/attachment_icon.js delete mode 100644 web-ui/public/js/mail_view/ui/attachment_list.js delete mode 100644 web-ui/public/js/mail_view/ui/compose_box.js delete mode 100644 web-ui/public/js/mail_view/ui/draft_box.js delete mode 100644 web-ui/public/js/mail_view/ui/draft_save_status.js delete mode 100644 web-ui/public/js/mail_view/ui/feedback_box.js delete mode 100644 web-ui/public/js/mail_view/ui/forward_box.js delete mode 100644 web-ui/public/js/mail_view/ui/mail_actions.js delete mode 100644 web-ui/public/js/mail_view/ui/mail_view.js delete mode 100644 web-ui/public/js/mail_view/ui/no_mails_available_pane.js delete mode 100644 web-ui/public/js/mail_view/ui/no_message_selected_pane.js delete mode 100644 web-ui/public/js/mail_view/ui/recipients/recipient.js delete mode 100644 web-ui/public/js/mail_view/ui/recipients/recipients.js delete mode 100644 web-ui/public/js/mail_view/ui/recipients/recipients_input.js delete mode 100644 web-ui/public/js/mail_view/ui/recipients/recipients_iterator.js delete mode 100644 web-ui/public/js/mail_view/ui/reply_box.js delete mode 100644 web-ui/public/js/mail_view/ui/reply_section.js delete mode 100644 web-ui/public/js/mail_view/ui/send_button.js delete mode 100644 web-ui/public/js/main.js delete mode 100644 web-ui/public/js/mixins/with_auto_refresh.js delete mode 100644 web-ui/public/js/mixins/with_compose_inline.js delete mode 100644 web-ui/public/js/mixins/with_enable_disable_on_event.js delete mode 100644 web-ui/public/js/mixins/with_feature_toggle.js delete mode 100644 web-ui/public/js/mixins/with_hide_and_show.js delete mode 100644 web-ui/public/js/mixins/with_mail_edit_base.js delete mode 100644 web-ui/public/js/mixins/with_mail_sandbox.js delete mode 100644 web-ui/public/js/mixins/with_mail_tagging.js delete mode 100644 web-ui/public/js/monkey_patching/all.js delete mode 100644 web-ui/public/js/monkey_patching/array.js delete mode 100644 web-ui/public/js/monkey_patching/post_message.js delete mode 100644 web-ui/public/js/page/default.js delete mode 100644 web-ui/public/js/page/events.js delete mode 100644 web-ui/public/js/page/logout.js delete mode 100644 web-ui/public/js/page/logout_shortcut.js delete mode 100644 web-ui/public/js/page/pane_contract_expand.js delete mode 100644 web-ui/public/js/page/pix_logo.js delete mode 100644 web-ui/public/js/page/router.js delete mode 100644 web-ui/public/js/page/router/url_params.js delete mode 100644 web-ui/public/js/page/unread_count_title.js delete mode 100644 web-ui/public/js/page/version.js delete mode 100644 web-ui/public/js/sandbox.js delete mode 100644 web-ui/public/js/search/results_highlighter.js delete mode 100644 web-ui/public/js/search/search_trigger.js delete mode 100644 web-ui/public/js/services/delete_service.js delete mode 100644 web-ui/public/js/services/mail_service.js delete mode 100644 web-ui/public/js/services/model/mail.js delete mode 100644 web-ui/public/js/services/recover_service.js delete mode 100644 web-ui/public/js/style_guide/main.js delete mode 100644 web-ui/public/js/tags/data/tags.js delete mode 100644 web-ui/public/js/tags/ui/tag.js delete mode 100644 web-ui/public/js/tags/ui/tag_base.js delete mode 100644 web-ui/public/js/tags/ui/tag_list.js delete mode 100644 web-ui/public/js/user_alerts/ui/user_alerts.js delete mode 100644 web-ui/public/js/user_settings/data/user_settings.js delete mode 100644 web-ui/public/js/user_settings/ui/user_settings_box.js delete mode 100644 web-ui/public/js/user_settings/ui/user_settings_icon.js delete mode 100644 web-ui/public/js/views/i18n.js delete mode 100644 web-ui/public/js/views/recipientListFormatter.js delete mode 100644 web-ui/public/js/views/templates.js delete mode 100644 web-ui/public/locales/en_US/translation.json delete mode 100644 web-ui/public/locales/pt_BR/translation.json delete mode 100644 web-ui/public/locales/sv_SE/translation.json delete mode 100644 web-ui/public/normalize.min.css delete mode 100644 web-ui/public/opensans.css delete mode 100644 web-ui/public/pixelated-logo-orange.svg delete mode 100644 web-ui/public/pixelated.css delete mode 100644 web-ui/public/robots.txt delete mode 100644 web-ui/public/sandbox.html delete mode 100644 web-ui/public/scss/_mixins.scss delete mode 100644 web-ui/public/scss/_others.scss delete mode 100644 web-ui/public/scss/base/_colors.scss delete mode 100644 web-ui/public/scss/base/_fonts.scss delete mode 100644 web-ui/public/scss/base/_scaffolding.scss delete mode 100644 web-ui/public/scss/mixins/_position-helpers.scss delete mode 100644 web-ui/public/scss/mixins/_tags.scss delete mode 100644 web-ui/public/scss/sandbox.scss delete mode 100644 web-ui/public/scss/style.scss delete mode 100644 web-ui/public/scss/templates/_no-content-placeholder.scss delete mode 100644 web-ui/public/scss/templates/_unread-count.scss delete mode 100644 web-ui/public/scss/vendor/_customfont.scss delete mode 100644 web-ui/public/scss/vendor/_foundation.scss delete mode 100644 web-ui/public/scss/vendor/_reset.scss delete mode 100644 web-ui/public/scss/vendor/_scut.scss delete mode 100644 web-ui/public/scss/views/_action-bar.scss delete mode 100644 web-ui/public/scss/views/_close-button.scss delete mode 100644 web-ui/public/scss/views/_compose-button.scss delete mode 100644 web-ui/public/scss/views/_compose-view.scss delete mode 100644 web-ui/public/scss/views/_mail-list.scss delete mode 100644 web-ui/public/scss/views/_message-panel.scss delete mode 100644 web-ui/public/scss/views/_navigation.scss delete mode 100644 web-ui/public/scss/views/_no-mails-available.scss delete mode 100644 web-ui/public/scss/views/_no-message-selected.scss delete mode 100644 web-ui/public/scss/views/_read-view.scss delete mode 100644 web-ui/public/scss/views/_security-labels.scss delete mode 100644 web-ui/public/signup.css delete mode 100644 web-ui/public/signup.html delete mode 100644 web-ui/public/snap.svg-min.js delete mode 100644 web-ui/public/templates/compose/attachment_item.hbs delete mode 100644 web-ui/public/templates/compose/attachment_upload_item.hbs delete mode 100644 web-ui/public/templates/compose/attachments_list.hbs delete mode 100644 web-ui/public/templates/compose/compose_box.hbs delete mode 100644 web-ui/public/templates/compose/feedback_box.hbs delete mode 100644 web-ui/public/templates/compose/fixed_recipient.hbs delete mode 100644 web-ui/public/templates/compose/inline_box.hbs delete mode 100644 web-ui/public/templates/compose/no_mails_available.hbs delete mode 100644 web-ui/public/templates/compose/no_message_selected.hbs delete mode 100644 web-ui/public/templates/compose/recipient_input.hbs delete mode 100644 web-ui/public/templates/compose/recipients.hbs delete mode 100644 web-ui/public/templates/compose/reply_section.hbs delete mode 100644 web-ui/public/templates/compose/upload_attachment_failed.hbs delete mode 100644 web-ui/public/templates/feedback/feedback_trigger.hbs delete mode 100644 web-ui/public/templates/mail_actions/actions_box.hbs delete mode 100644 web-ui/public/templates/mail_actions/compose_trigger.hbs delete mode 100644 web-ui/public/templates/mail_actions/pagination_trigger.hbs delete mode 100644 web-ui/public/templates/mail_actions/refresh_trigger.hbs delete mode 100644 web-ui/public/templates/mail_actions/trash_actions_box.hbs delete mode 100644 web-ui/public/templates/mails/draft.hbs delete mode 100644 web-ui/public/templates/mails/full_view.hbs delete mode 100644 web-ui/public/templates/mails/mail_actions.hbs delete mode 100644 web-ui/public/templates/mails/sent.hbs delete mode 100644 web-ui/public/templates/mails/single.hbs delete mode 100644 web-ui/public/templates/mails/trash.hbs delete mode 100644 web-ui/public/templates/page/logout.hbs delete mode 100644 web-ui/public/templates/page/logout_shortcut.hbs delete mode 100644 web-ui/public/templates/page/user_settings_box.hbs delete mode 100644 web-ui/public/templates/page/user_settings_icon.hbs delete mode 100644 web-ui/public/templates/page/version.hbs delete mode 100644 web-ui/public/templates/search/search_trigger.hbs delete mode 100644 web-ui/public/templates/tags/shortcut.hbs delete mode 100644 web-ui/public/templates/tags/tag.hbs delete mode 100644 web-ui/public/templates/tags/tag_inner.hbs delete mode 100644 web-ui/public/templates/tags/tag_list.hbs delete mode 100644 web-ui/public/templates/user_alerts/message.hbs delete mode 100644 web-ui/src/images/LOADING-transparent.gif delete mode 100644 web-ui/src/images/fa-sent.svg delete mode 100644 web-ui/src/images/favicon.png delete mode 100644 web-ui/src/images/logo.svg delete mode 100644 web-ui/src/images/pixelated-logo-orange.svg delete mode 100644 web-ui/src/images/pixelated-symbol-blue-transparent-01.png delete mode 100644 web-ui/src/images/sent_email.png delete mode 100644 web-ui/src/js/index.js diff --git a/.gitignore b/.gitignore index 7b1d856c..0c347bf8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,37 +3,35 @@ *.log *.DS_Store *.egg-info -/web-ui/lib/ -/web-ui/node_modules -/web-ui/public/bower_components/ -/web-ui/public/images/ -/web-ui/public/signup.js -/web-ui/public/*.min.js +web-ui/node_modules +web-ui/app/bower_components +web-ui/target .tmp .sass-cache/ +dist/ *archive.zip *.swp *.swo -/web-ui/public/js/generated -/web-ui/public/css +web-ui/app/js/generated +web-ui/app/css test-results.xml -/control_tower.html -/state.yml -*.pid +control_tower.html +state.yml +.server.pid *archive.zip artifacts/ -/public/ +public/ .DS_Store -/screenshot* +screenshot* *.pyc -/env/ +env/ .vagrant/ __pycache__/ .virtualenv # custom config file that can be used with the useragent /config -/credentials.ini -/pixelated.cfg -/service/_trial_temp/ -/_trial_temp -/web-ui/coverage +credentials.ini +pixelated.cfg +service/_trial_temp/ +_trial_temp +web-ui/coverage diff --git a/README.md b/README.md index 50c7cda9..a3232039 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Here's a [podcast](https://soundcloud.com/thoughtworks/pixelated-why-secure-comm **Pixelated is still in early development state!** -![High level architecture User Agent](https://raw.githubusercontent.com/pixelated/website/master/static/images/pixelated-user-agent.png) +![High level architecture User Agent](https://raw.githubusercontent.com/pixelated/website/master/assets/images/pixelated-user-agent.png) ## Try it! diff --git a/doc/first-steps.md b/doc/first-steps.md index 0485b236..e4a24097 100644 --- a/doc/first-steps.md +++ b/doc/first-steps.md @@ -55,7 +55,7 @@ After that take some minutes to familiarize yourself with the user interface. To get a better feeling for the code base, let's try some smaller changes. Let's assume that we'd like to change the way subjects are displayed in the mail list. First we want to find the location in the code that renders the subjects. -Start your favorite text editor and open pixelated-user-agent/web-ui/public/js/mail_list/ui/mail_items/mail_item.js. Find the method named render. This seems to be the right location. To verify our assumption, let's change the html content. +Start your favorite text editor and open pixelated-user-agent/web-ui/app/js/mail_list/ui/mail_items/mail_item.js. Find the method named render. This seems to be the right location. To verify our assumption, let's change the html content. ```javascript this.render = function () { @@ -139,7 +139,7 @@ cd web-ui Now refresh your browser again to see the changes in effect. Finally we would like to change the color of the highlighting. The pixleated user agent uses [SASS](http://sass-lang.com/) to make handling styles a little bit easier. -You can find the style sheets in web-ui/public/scss/. The search-hightlight is defined in styles.scss: +You can find the style sheets in web-ui/app/scss/. The search-hightlight is defined in styles.scss: ```scss .search-highlight { diff --git a/service/MANIFEST.in b/service/MANIFEST.in index 81d25913..a4fb90be 100644 --- a/service/MANIFEST.in +++ b/service/MANIFEST.in @@ -1,5 +1,5 @@ include README.md recursive-include pixelated/certificates *.* -recursive-include pixelated/static *.* +recursive-include pixelated/assets *.* recursive-include debian * diff --git a/service/go b/service/go index 904cb17b..eae21a2e 100755 --- a/service/go +++ b/service/go @@ -38,11 +38,11 @@ function setuppy { echo "Installing Pixelated User Agent." pip install --upgrade pip setuptools if [ `uname -s` = "Darwin" ]; then - CFLAGS="-DCRYPTOPP_DISABLE_ASM=1" pip install --exists-action w -r requirements.txt + CFLAGS="-DCRYPTOPP_DISABLE_ASM=1" pip install --exists-action s -r requirements.txt else - pip install --exists-action w -r requirements.txt + pip install --exists-action s -r requirements.txt fi - pip install --exists-action w -r test_requirements.txt + pip install --exists-action s -r test_requirements.txt echo "Done." } diff --git a/service/pixelated/adapter/welcome_mail.py b/service/pixelated/adapter/welcome_mail.py index 50147990..8d3cdd7a 100644 --- a/service/pixelated/adapter/welcome_mail.py +++ b/service/pixelated/adapter/welcome_mail.py @@ -20,7 +20,7 @@ from pixelated.adapter.model.mail import InputMail def add_welcome_mail(mail_store, language='en-US'): welcome_mail = pkg_resources.resource_filename( - 'templates', + 'pixelated.assets', 'welcome.mail.%s' % (language)) with open(welcome_mail) as mail_template_file: diff --git a/service/pixelated/application.py b/service/pixelated/application.py index 73095da4..46e5ba85 100644 --- a/service/pixelated/application.py +++ b/service/pixelated/application.py @@ -37,18 +37,12 @@ from pixelated.config.leap import initialize_leap_single_user, init_monkeypatche from pixelated.config.services import ServicesFactory, SingleUserServicesFactory from pixelated.config.site import PixelatedSite from pixelated.resources.auth import PixelatedRealm, PixelatedAuthSessionWrapper, SessionChecker +from pixelated.resources.login_resource import LoginResource from pixelated.resources.root_resource import RootResource log = Logger() -def get_static_folder(): - static_folder = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "web-ui", "public")) - if not os.path.exists(static_folder): - static_folder = os.path.join('/', 'usr', 'share', 'pixelated-user-agent') - return static_folder - - class UserAgentMode(object): def __init__(self, is_single_user): self.is_single_user = is_single_user @@ -100,7 +94,7 @@ def initialize(): args = arguments.parse_user_agent_args() logger.init(debug=args.debug) services_factory = _create_service_factory(args) - resource = RootResource(services_factory, static_folder=get_static_folder()) + resource = RootResource(services_factory) def start(): start_async = _start_mode(args, resource, services_factory) @@ -161,12 +155,11 @@ def _setup_multi_user(args, root_resource, services_factory): def set_up_protected_resources(root_resource, provider, services_factory, banner=None, authenticator=None): session_checker = SessionChecker(services_factory) - anonymous_resource = RootResource(services_factory, static_folder=get_static_folder(), public=True) - realm = PixelatedRealm(root_resource, anonymous_resource) + realm = PixelatedRealm() _portal = portal.Portal(realm, [session_checker, AllowAnonymousAccess()]) - protected_resource = PixelatedAuthSessionWrapper(_portal) - anonymous_resource.initialize(provider, disclaimer_banner=banner, authenticator=authenticator) + anonymous_resource = LoginResource(services_factory, provider, disclaimer_banner=banner, authenticator=authenticator) + protected_resource = PixelatedAuthSessionWrapper(_portal, root_resource, anonymous_resource, []) root_resource.initialize(provider, disclaimer_banner=banner, authenticator=authenticator) return protected_resource diff --git a/service/pixelated/assets/Interstitial.html b/service/pixelated/assets/Interstitial.html new file mode 100644 index 00000000..bc6cc738 --- /dev/null +++ b/service/pixelated/assets/Interstitial.html @@ -0,0 +1,18 @@ + + + + + + + + + + + +
+ +
+ + + + diff --git a/service/pixelated/assets/Interstitial.js b/service/pixelated/assets/Interstitial.js new file mode 100644 index 00000000..ac5a789a --- /dev/null +++ b/service/pixelated/assets/Interstitial.js @@ -0,0 +1,58 @@ +if ($('#hive').length) { + var hive = new Snap('#hive'); + var img_width = $('#hive').width(); + var left_pos = img_width * .5; + + var pixelated = hive.path("M12.4,20.3v31.8l28,15.8l28-15.8V20.3l-28-15.8L12.4,20.3z M39.2,56.4l-16.3-9V27.9l16.3,9.3L39.2,56.4z M57.7,47.4l-16.1,9l0-19.2l16.1-9.4V47.4z M57.7,25.2L40.4,35.5L22.9,25.2l17.5-9.4L57.7,25.2z").transform("translate(319, 50)").attr("fill", "#908e8e"); + var all = hive.group().transform("matrix(2, 0, 0, 2, -100, -100)"); + + var height = 50; + var width = 58; + var rows = (($(window).height() / height) / 2) + 1; + var cols = (($(window).width() / width) / 2) + 1; + + + for (var j = 0; j < rows; j++) { + for (var i = 0; i < cols; i++) { + x = i * width + (j%2*width/2); + y = j * height; + all.add(pixelated.clone().transform("translate("+x+","+y+")")); + } + } + + all.add(pixelated); + + var brightenLogo = function () { + var glowPosition = Math.floor(Math.random()*rows*cols); + + all[glowPosition].animate({fill: "#FFF"}, 1000, function() { + darkenLogo(all[glowPosition]); + }); + }; + + var darkenLogo = function (el) { + el.animate({fill: "#908e8e"}, 1000, brightenLogo); + }; + + brightenLogo(); + +} + +$(function () { + var handler = setInterval(function () { + $.ajax({ + method: 'GET', + url: '/' + }).success(function (data) { + if (/Pixelated Mail/g.test(data)) { + window.location="/"; + } + }); + }, 2000); + + $('#hive-section').height($(window).height()); + + $(window).resize(function() { + window.location.reload(true); + }); +}); diff --git a/service/pixelated/assets/__init__.py b/service/pixelated/assets/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/service/pixelated/assets/_login_disclaimer_banner.html b/service/pixelated/assets/_login_disclaimer_banner.html new file mode 100644 index 00000000..dfc63030 --- /dev/null +++ b/service/pixelated/assets/_login_disclaimer_banner.html @@ -0,0 +1,9 @@ +
+ +
diff --git a/service/pixelated/assets/favicon.png b/service/pixelated/assets/favicon.png new file mode 100644 index 00000000..e14841c7 Binary files /dev/null and b/service/pixelated/assets/favicon.png differ diff --git a/service/pixelated/assets/hive-bg.png b/service/pixelated/assets/hive-bg.png new file mode 100644 index 00000000..77316967 Binary files /dev/null and b/service/pixelated/assets/hive-bg.png differ diff --git a/service/pixelated/assets/index.html b/service/pixelated/assets/index.html new file mode 100644 index 00000000..c095577e --- /dev/null +++ b/service/pixelated/assets/index.html @@ -0,0 +1,9 @@ + + + + + + click here + + + diff --git a/service/pixelated/assets/jquery-2.1.3.min.js b/service/pixelated/assets/jquery-2.1.3.min.js new file mode 100644 index 00000000..25714ed2 --- /dev/null +++ b/service/pixelated/assets/jquery-2.1.3.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) +},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n(" + + {{#if attachments}} +
+ +
+

{{ attachments.length }} attachment(s):

+ +
+ {{/if}} + diff --git a/web-ui/app/templates/mails/mail_actions.hbs b/web-ui/app/templates/mails/mail_actions.hbs new file mode 100644 index 00000000..0adfe853 --- /dev/null +++ b/web-ui/app/templates/mails/mail_actions.hbs @@ -0,0 +1,6 @@ + + +
    +
  • {{t 'reply-to-all'}}
  • +
  • {{t 'delete-this-message'}}
  • +
diff --git a/web-ui/app/templates/mails/sent.hbs b/web-ui/app/templates/mails/sent.hbs new file mode 100644 index 00000000..158b20c8 --- /dev/null +++ b/web-ui/app/templates/mails/sent.hbs @@ -0,0 +1,36 @@ +
+ +
+ +
+
+ {{t 'to'}}: + {{#if header.to }} + {{ header.to }} + {{else}} + {{t 'no-recipient'}} + {{/if}} +
+ + {{ formatDate header.date }} +
+
+
+ {{#if header.subject }} + {{header.subject}} + {{else}} + {{t 'no-subject'}} + {{/if}} +
+ + {{#if attachments}} +
+ {{/if}} +
+
    + {{#each tagsForListView }} +
  • {{ this }}
  • + {{/each }} +
+
+ diff --git a/web-ui/app/templates/mails/single.hbs b/web-ui/app/templates/mails/single.hbs new file mode 100644 index 00000000..aaede844 --- /dev/null +++ b/web-ui/app/templates/mails/single.hbs @@ -0,0 +1,28 @@ +
+ +
+ +
+
+ {{#if header.from }} + {{ header.from }} + {{else}} + {{t "you"}} + {{/if}} +
+ + {{ formatDate header.date }} +
+
+
{{ header.subject }}
+ + {{#if attachments}} +
+ {{/if}} +
+
    + {{#each tagsForListView }} +
  • {{ this }}
  • + {{/each }} +
+
diff --git a/web-ui/app/templates/mails/trash.hbs b/web-ui/app/templates/mails/trash.hbs new file mode 100644 index 00000000..f8947b15 --- /dev/null +++ b/web-ui/app/templates/mails/trash.hbs @@ -0,0 +1,32 @@ +
+ +
+ +
+
+ {{#if header.from }} + {{ header.from }} + {{else}} + {{t "you"}} + {{/if}} +
+ + {{ formatDate header.date }} +
+
+
+ + {{ header.subject }} +
+ + {{#if attachments}} +
+ {{/if}} +
+
    + {{#each tagsForListView }} +
  • {{ this }}
  • + {{/each }} +
+
+ diff --git a/web-ui/app/templates/page/logout.hbs b/web-ui/app/templates/page/logout.hbs new file mode 100644 index 00000000..0cc079bc --- /dev/null +++ b/web-ui/app/templates/page/logout.hbs @@ -0,0 +1,9 @@ +
    +
    + +
  • +
    + {{t 'logout'}} +
  • +
    +
diff --git a/web-ui/app/templates/page/logout_shortcut.hbs b/web-ui/app/templates/page/logout_shortcut.hbs new file mode 100644 index 00000000..043ab0dc --- /dev/null +++ b/web-ui/app/templates/page/logout_shortcut.hbs @@ -0,0 +1,6 @@ +
  • + + +
    {{t 'logout'}}
    +
    +
  • diff --git a/web-ui/app/templates/page/user_settings_box.hbs b/web-ui/app/templates/page/user_settings_box.hbs new file mode 100644 index 00000000..2152b779 --- /dev/null +++ b/web-ui/app/templates/page/user_settings_box.hbs @@ -0,0 +1,10 @@ +
    + + +

    {{t 'user-account'}}

    + +
    +

    {{t 'email-address'}}

    +

    {{ account_email }}

    +

    {{t 'public-key-fingerprint'}}

    +

    {{ formatFingerPrint fingerprint }}

    diff --git a/web-ui/app/templates/page/user_settings_icon.hbs b/web-ui/app/templates/page/user_settings_icon.hbs new file mode 100644 index 00000000..8f2f9215 --- /dev/null +++ b/web-ui/app/templates/page/user_settings_icon.hbs @@ -0,0 +1,8 @@ + diff --git a/web-ui/app/templates/page/version.hbs b/web-ui/app/templates/page/version.hbs new file mode 100644 index 00000000..5f43f78a --- /dev/null +++ b/web-ui/app/templates/page/version.hbs @@ -0,0 +1,2 @@ +{{t 'version'}}: UNKNOWN_VERSION
    + diff --git a/web-ui/app/templates/search/search_trigger.hbs b/web-ui/app/templates/search/search_trigger.hbs new file mode 100644 index 00000000..2261d154 --- /dev/null +++ b/web-ui/app/templates/search/search_trigger.hbs @@ -0,0 +1,3 @@ +
    + +
    diff --git a/web-ui/app/templates/tags/shortcut.hbs b/web-ui/app/templates/tags/shortcut.hbs new file mode 100644 index 00000000..1e82d6a9 --- /dev/null +++ b/web-ui/app/templates/tags/shortcut.hbs @@ -0,0 +1,9 @@ +
  • + + {{#if displayBadge }} + {{ count }} + {{/if}} + +
    {{ tagName }}
    +
    +
  • diff --git a/web-ui/app/templates/tags/tag.hbs b/web-ui/app/templates/tags/tag.hbs new file mode 100644 index 00000000..ca397b9a --- /dev/null +++ b/web-ui/app/templates/tags/tag.hbs @@ -0,0 +1,3 @@ +
  • + {{> tag_inner }} +
  • diff --git a/web-ui/app/templates/tags/tag_inner.hbs b/web-ui/app/templates/tags/tag_inner.hbs new file mode 100644 index 00000000..2e0958cb --- /dev/null +++ b/web-ui/app/templates/tags/tag_inner.hbs @@ -0,0 +1,4 @@ +{{ tagName }} +{{#if displayBadge }} +{{ count }} +{{/if}} diff --git a/web-ui/app/templates/tags/tag_list.hbs b/web-ui/app/templates/tags/tag_list.hbs new file mode 100644 index 00000000..92a73283 --- /dev/null +++ b/web-ui/app/templates/tags/tag_list.hbs @@ -0,0 +1,6 @@ +
      +
      + + {{t 'tags.tags'}} +
      +
        diff --git a/web-ui/app/templates/user_alerts/message.hbs b/web-ui/app/templates/user_alerts/message.hbs new file mode 100644 index 00000000..abba1f91 --- /dev/null +++ b/web-ui/app/templates/user_alerts/message.hbs @@ -0,0 +1 @@ +{{ message.content }} diff --git a/web-ui/config/add_git_version.sh b/web-ui/config/add_git_version.sh index abda150a..a0abefc0 100755 --- a/web-ui/config/add_git_version.sh +++ b/web-ui/config/add_git_version.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -TEMPLATE_FILE="public/js/generated/hbs/templates.js" +TEMPLATE_FILE="app/js/generated/hbs/templates.js" COMMITISH=$(git rev-parse --short HEAD) COMMITDATE=$(git show -s --format=%cd) diff --git a/web-ui/config/buildoptions.js b/web-ui/config/buildoptions.js index 2e7ba028..63c91653 100644 --- a/web-ui/config/buildoptions.js +++ b/web-ui/config/buildoptions.js @@ -16,11 +16,11 @@ */ ({ - baseUrl: '../public', + baseUrl: '../app', wrap: true, almond: true, optimize: 'none', - mainConfigFile: '../public/js/main.js', + mainConfigFile: '../app/js/main.js', out: '../.tmp/app.concatenated.js', include: ['js/main'], name: 'bower_components/almond/almond' diff --git a/web-ui/config/compass.rb b/web-ui/config/compass.rb index 461bd9e2..9c52a04e 100644 --- a/web-ui/config/compass.rb +++ b/web-ui/config/compass.rb @@ -17,12 +17,14 @@ # Set this to the root of your project when deployed: +target_dir = ENV['PIXELATED_BUILD'] == 'package' ? 'dist' : 'app' + + http_path = "/" -css_dir = "public/css" -sass_dir = "public/scss" -images_dir = "src/images" -generated_images_dir = "public/images" -javascripts_dir = "public/js" +css_dir = "#{target_dir}/css" +sass_dir = "app/scss" +images_dir = "app/images" +javascripts_dir = "app/js" # You can select your preferred output style here (can be overridden via the command line): # output_style = :expanded or :nested or :compact or :compressed diff --git a/web-ui/config/control-tower.yml b/web-ui/config/control-tower.yml index 2d4d5865..874e1b64 100644 --- a/web-ui/config/control-tower.yml +++ b/web-ui/config/control-tower.yml @@ -1,3 +1,3 @@ --- -include_pattern: 'public/js/**/*.js' +include_pattern: 'app/js/**/*.js' exclude_pattern: '' diff --git a/web-ui/config/imagemin.js b/web-ui/config/imagemin.js index 6f94373e..2b2c87e0 100644 --- a/web-ui/config/imagemin.js +++ b/web-ui/config/imagemin.js @@ -17,8 +17,8 @@ const imagemin = require('imagemin'); -imagemin(['src/images/*.{gif,jpg,png,svg}'], - 'public/images' +imagemin(['app/images/*.{gif,jpg,png,svg}'], + 'dist/images' ).then(files => { console.log('Images list:') files.map(function(file) { console.log(file.path); }); diff --git a/web-ui/config/minify_app.sh b/web-ui/config/minify_app.sh deleted file mode 100644 index d9e232a5..00000000 --- a/web-ui/config/minify_app.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -# Copyright (c) 2014 ThoughtWorks, Inc. -# -# Pixelated is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pixelated is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Pixelated. If not, see . - -set -e - -# concat js files and minify for app.min.js -cat \ -public/bower_components/modernizr/modernizr.js \ -public/bower_components/lodash/dist/lodash.js \ -public/bower_components/jquery/dist/jquery.js \ -public/bower_components/jquery-ui/jquery-ui.js \ -public/bower_components/jquery-file-upload/js/jquery.fileupload.js \ -public/js/lib/highlightRegex.js \ -public/bower_components/handlebars/handlebars.js \ -public/bower_components/typeahead.js/dist/typeahead.bundle.js \ -public/bower_components/foundation/js/foundation.js \ -public/bower_components/foundation/js/foundation/foundation.reveal.js \ -public/bower_components/foundation/js/foundation/foundation.offcanvas.js \ -public/js/foundation/initialize_foundation.js \ -public/bower_components/iframe-resizer/js/iframeResizer.js \ -.tmp/app.concatenated.js | node_modules/.bin/minify --js > public/app.min.js diff --git a/web-ui/config/package.sh b/web-ui/config/package.sh index 06351257..165eeff3 100644 --- a/web-ui/config/package.sh +++ b/web-ui/config/package.sh @@ -18,11 +18,61 @@ set -e +export PIXELATED_BUILD='package' + +mkdir -p dist + # initial npm tasks -./go build +./go clean +./go compass +./go handlebars +./go imagemin +./go minify_html +./go minify_sandbox +./go add_git_version +./go buildmain + -if [ ! -s public/app.min.js ] +# copy files +cd app +cp --parents \ +404.html \ +fonts/* \ +locales/**/* \ +bower_components/font-awesome/css/font-awesome.min.css \ +bower_components/jquery-file-upload/css/jquery.fileupload.css \ +bower_components/font-awesome/fonts/* \ +../dist +cd - + +# concat js files and minify for app.min.js +cat \ +app/bower_components/modernizr/modernizr.js \ +app/bower_components/lodash/dist/lodash.js \ +app/bower_components/jquery/dist/jquery.js \ +app/bower_components/jquery-ui/jquery-ui.js \ +app/bower_components/jquery-file-upload/js/jquery.fileupload.js \ +app/js/lib/highlightRegex.js \ +app/bower_components/handlebars/handlebars.js \ +app/bower_components/typeahead.js/dist/typeahead.bundle.js \ +app/bower_components/foundation/js/foundation.js \ +app/bower_components/foundation/js/foundation/foundation.reveal.js \ +app/bower_components/foundation/js/foundation/foundation.offcanvas.js \ +app/js/foundation/initialize_foundation.js \ +app/bower_components/iframe-resizer/js/iframeResizer.js \ +.tmp/app.concatenated.js > dist/app.js +node_modules/.bin/minify dist/app.js > dist/app.min.js +rm dist/app.js + +if [ ! -s dist/app.min.js ] then echo "Minification failed!" exit 1; fi + +# concat js files and minify for sandbox.min.js +cat \ +app/js/sandbox.js \ +app/bower_components/iframe-resizer/js/iframeResizer.contentWindow.js > dist/sandbox.js +node_modules/.bin/minify dist/sandbox.js > dist/sandbox.min.js +rm dist/sandbox.js diff --git a/web-ui/karma.conf.js b/web-ui/karma.conf.js index 93628052..52b54f57 100644 --- a/web-ui/karma.conf.js +++ b/web-ui/karma.conf.js @@ -17,51 +17,51 @@ module.exports = function (config) { // list of files / patterns to load in the browser files: [ // loaded without require - 'public/bower_components/lodash/dist/lodash.js', - 'public/bower_components/jquery/dist/jquery.js', - 'public/bower_components/jquery-ui/jquery-ui.min.js', - 'public/bower_components/jquery-file-upload/js/jquery.fileupload.js', - 'public/bower_components/jasmine-jquery/lib/jasmine-jquery.js', - 'public/bower_components/jasmine-flight/lib/jasmine-flight.js', - 'public/bower_components/jasmine-jquery/lib/jasmine-jquery.js', - 'public/bower_components/handlebars/handlebars.min.js', - 'public/bower_components/modernizr/modernizr.js', - 'public/bower_components/foundation/js/foundation.js', - 'public/bower_components/foundation/js/foundation/foundation.reveal.js', - 'public/bower_components/foundation/js/foundation/foundation.offcanvas.js', - 'public/js/lib/highlightRegex.js', + 'app/bower_components/lodash/dist/lodash.js', + 'app/bower_components/jquery/dist/jquery.js', + 'app/bower_components/jquery-ui/jquery-ui.min.js', + 'app/bower_components/jquery-file-upload/js/jquery.fileupload.js', + 'app/bower_components/jasmine-jquery/lib/jasmine-jquery.js', + 'app/bower_components/jasmine-flight/lib/jasmine-flight.js', + 'app/bower_components/jasmine-jquery/lib/jasmine-jquery.js', + 'app/bower_components/handlebars/handlebars.min.js', + 'app/bower_components/modernizr/modernizr.js', + 'app/bower_components/foundation/js/foundation.js', + 'app/bower_components/foundation/js/foundation/foundation.reveal.js', + 'app/bower_components/foundation/js/foundation/foundation.offcanvas.js', + 'app/js/lib/highlightRegex.js', // hack to load RequireJS after the shim libs 'node_modules/requirejs/require.js', 'node_modules/karma-requirejs/lib/adapter.js', // loaded with require - {pattern: 'public/bower_components/DOMPurify/dist/purify.min.js', included: false}, - {pattern: 'public/bower_components/he/he.js', included: false}, - {pattern: 'public/bower_components/flight/**/*.js', included: false}, - {pattern: 'public/bower_components/i18next/**/*.js', included: false}, - {pattern: 'public/bower_components/i18next-xhr-backend/**/*.js', included: false}, - {pattern: 'public/bower_components/i18next-browser-languagedetector/**/*.js', included: false}, - {pattern: 'public/bower_components/quoted-printable/*.js', included: false}, - {pattern: 'public/bower_components/utf8/utf8.js', included: false}, - {pattern: 'public/locales/**/*.json', included: false}, - {pattern: 'public/js/**/*.js', included: false}, + {pattern: 'app/bower_components/DOMPurify/dist/purify.min.js', included: false}, + {pattern: 'app/bower_components/he/he.js', included: false}, + {pattern: 'app/bower_components/flight/**/*.js', included: false}, + {pattern: 'app/bower_components/i18next/**/*.js', included: false}, + {pattern: 'app/bower_components/i18next-xhr-backend/**/*.js', included: false}, + {pattern: 'app/bower_components/i18next-browser-languagedetector/**/*.js', included: false}, + {pattern: 'app/bower_components/quoted-printable/*.js', included: false}, + {pattern: 'app/bower_components/utf8/utf8.js', included: false}, + {pattern: 'app/locales/**/*.json', included: false}, + {pattern: 'app/js/**/*.js', included: false}, {pattern: 'test/test_data.js', included: false}, {pattern: 'test/custom_matchers.js', included: false}, {pattern: 'test/features.js', included: false}, {pattern: 'test/spec/**/*.spec.js', included: false}, - {pattern: 'public/sandbox.html', included: true, served: true}, + {pattern: 'app/sandbox.html', included: true, served: true}, 'test/test-main.js' ], proxies: { - '/sandbox/sandbox.html': '/base/public/sandbox.html', + '/sandbox/sandbox.html': '/base/app/sandbox.html', }, // list of files to exclude exclude: [ - 'public/js/main.js' + 'app/js/main.js' ], // test results reporter to use @@ -69,7 +69,7 @@ module.exports = function (config) { reporters: ['dots', 'junit', 'coverage'], preprocessors: { - 'public/js/!(lib)/**/*.js': ['coverage'] + 'app/js/!(lib)/**/*.js': ['coverage'] }, // enable / disable watching file and executing tests whenever any file changes diff --git a/web-ui/package.json b/web-ui/package.json index 83931b09..2a0056e4 100644 --- a/web-ui/package.json +++ b/web-ui/package.json @@ -5,23 +5,20 @@ "repository": "https://github.com/pixelated-project/pixelated-user-agent", "private": true, "devDependencies": { - "babel": "^6.5.2", - "babel-cli": "^6.18.0", "bower": "1.7.9", - "browserify": "^13.1.1", "handlebars": "4.0.5", "html-minifier": "2.1.6", "imagemin": "5.2.1", "jshint": "2.9.2", "karma": "0.13.19", "karma-chrome-launcher": "0.2.2", - "karma-coverage": "0.2.7", "karma-firefox-launcher": "0.1.7", "karma-jasmine": "0.2.2", "karma-jasmine-ajax": "0.1.13", "karma-junit-reporter": "0.2.2", "karma-phantomjs-launcher": "1.0.1", "karma-requirejs": "1.0.0", + "karma-coverage": "0.2.7", "minify": "2.0.9", "requirejs": "2.2.0", "watch": "0.19.1" @@ -31,34 +28,18 @@ "debug": "npm run build && node_modules/karma/bin/karma start --browsers Chrome $GRUNT_OPTS", "watch": "npm run compass-watch & npm run handlebars-watch", "watch-test": "node_modules/karma/bin/karma start", - "handlebars": "mkdir -p public/js/generated/hbs/ && node_modules/handlebars/bin/handlebars public/templates/**/*.hbs > public/js/generated/hbs/templates.js --namespace=window.Pixelated --root .", - "handlebars-watch": "node_modules/.bin/watch 'npm run handlebars' public/templates", + "handlebars": "mkdir -p app/js/generated/hbs/ && node_modules/handlebars/bin/handlebars app/templates/**/*.hbs > app/js/generated/hbs/templates.js --namespace=window.Pixelated --root .", + "handlebars-watch": "node_modules/.bin/watch 'npm run handlebars' app/templates", "compass": "compass compile", "compass-watch": "compass watch", - "build": "npm run clean && npm run handlebars && npm run add_git_version && npm run compass && npm run imagemin && npm run build-signup && npm run buildmain && npm run minify_app && npm run minify_sandbox", - "build-signup": "babel src/js -d lib/js && browserify lib/js/index.js >public/signup.js", - "jshint": "node_modules/jshint/bin/jshint --config=.jshintrc src public test", - "clean": "rm -rf .tmp/ public/js/generated/hbs/* public/css/* lib/js public/signup.js", + "build": "npm run clean && npm run handlebars && npm run add_git_version && npm run compass", + "jshint": "node_modules/jshint/bin/jshint --config=.jshintrc app test", + "clean": "rm -rf .tmp/ 'dist/*' app/js/generated/hbs/* app/css/*", "buildmain": "node_modules/requirejs/bin/r.js -o config/buildoptions.js", - "minify_app": "/bin/bash config/minify_app.sh", - "minify_sandbox": "cat public/js/sandbox.js public/bower_components/iframe-resizer/js/iframeResizer.contentWindow.js | node_modules/.bin/minify --js > public/sandbox.min.js", "package": "/bin/bash config/package.sh", "imagemin": "node config/imagemin.js", + "minify_html": "node_modules/.bin/html-minifier app/index.html --collapse-whitespace | sed 's|.*||' > dist/index.html", + "minify_sandbox": "node_modules/.bin/html-minifier app/sandbox.html --collapse-whitespace | sed 's|.*||' > dist/sandbox.html", "add_git_version": "/bin/bash config/add_git_version.sh" - }, - "dependencies": { - "babel-preset-es2015": "^6.18.0", - "babel-preset-react": "^6.16.0", - "immutable": "^3.8.1", - "react": "^15.3.2", - "react-dom": "^15.3.2", - "redux": "^3.6.0", - "whatwg-fetch": "^2.0.0" - }, - "babel": { - "presets": [ - "es2015", - "react" - ] } } diff --git a/web-ui/public/404.html b/web-ui/public/404.html deleted file mode 100644 index fdace4ab..00000000 --- a/web-ui/public/404.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - Page Not Found :( - - - -
        -

        Not found :(

        -

        Sorry, but the page you were trying to view does not exist.

        -

        It looks like this was the result of either:

        -
          -
        • a mistyped address
        • -
        • an out-of-date link
        • -
        - - -
        - - diff --git a/web-ui/public/Interstitial.js b/web-ui/public/Interstitial.js deleted file mode 100644 index 05c5ff29..00000000 --- a/web-ui/public/Interstitial.js +++ /dev/null @@ -1,61 +0,0 @@ -if ($('#hive').length) { - var hive = new Snap('#hive'); - var img_width = $('#hive').width(); - var left_pos = img_width * 0.5; - - var pixelated = hive.path("M12.4,20.3v31.8l28,15.8l28-15.8V20.3l-28-15.8L12.4,20.3z M39.2,56.4l-16.3-9V27.9l16.3,9.3L39.2,56.4z M57.7,47.4l-16.1,9l0-19.2l16.1-9.4V47.4z M57.7,25.2L40.4,35.5L22.9,25.2l17.5-9.4L57.7,25.2z").transform("translate(319, 50)").attr("fill", "#908e8e"); - var all = hive.group().transform("matrix(2, 0, 0, 2, -100, -100)"); - - var height = 50; - var width = 58; - var rows = (($(window).height() / height) / 2) + 1; - var cols = (($(window).width() / width) / 2) + 1; - - - for (var j = 0; j < rows; j++) { - for (var i = 0; i < cols; i++) { - var x = i * width + (j%2*width/2); - var y = j * height; - all.add(pixelated.clone().transform("translate("+x+","+y+")")); - } - } - - all.add(pixelated); - - var brightenLogo = function () { - 'use strict'; - var glowPosition = Math.floor(Math.random()*rows*cols); - - all[glowPosition].animate({fill: "#FFF"}, 1000, function() { - darkenLogo(all[glowPosition]); - }); - }; - - var darkenLogo = function (el) { - 'use strict'; - el.animate({fill: "#908e8e"}, 1000, brightenLogo); - }; - - brightenLogo(); - -} - -$(function () { - 'use strict'; - var handler = setInterval(function () { - $.ajax({ - method: 'GET', - url: '/' - }).success(function (data) { - if (/Pixelated Mail/g.test(data)) { - window.location="/"; - } - }); - }, 2000); - - $('#hive-section').height($(window).height()); - - $(window).resize(function() { - window.location.reload(true); - }); -}); diff --git a/web-ui/public/dummy.json b/web-ui/public/dummy.json deleted file mode 100644 index 0967ef42..00000000 --- a/web-ui/public/dummy.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/web-ui/public/favicon.ico b/web-ui/public/favicon.ico deleted file mode 100644 index e69de29b..00000000 diff --git a/web-ui/public/favicon.png b/web-ui/public/favicon.png deleted file mode 100644 index e14841c7..00000000 Binary files a/web-ui/public/favicon.png and /dev/null differ diff --git a/web-ui/public/fonts/OpenSans-Bold.woff b/web-ui/public/fonts/OpenSans-Bold.woff deleted file mode 100644 index dacf3c9c..00000000 Binary files a/web-ui/public/fonts/OpenSans-Bold.woff and /dev/null differ diff --git a/web-ui/public/fonts/OpenSans-BoldItalic.woff b/web-ui/public/fonts/OpenSans-BoldItalic.woff deleted file mode 100644 index a4e29c0f..00000000 Binary files a/web-ui/public/fonts/OpenSans-BoldItalic.woff and /dev/null differ diff --git a/web-ui/public/fonts/OpenSans-Extrabold.woff b/web-ui/public/fonts/OpenSans-Extrabold.woff deleted file mode 100644 index 7a2e352b..00000000 Binary files a/web-ui/public/fonts/OpenSans-Extrabold.woff and /dev/null differ diff --git a/web-ui/public/fonts/OpenSans-ExtraboldItalic.woff b/web-ui/public/fonts/OpenSans-ExtraboldItalic.woff deleted file mode 100644 index ce3ab2e7..00000000 Binary files a/web-ui/public/fonts/OpenSans-ExtraboldItalic.woff and /dev/null differ diff --git a/web-ui/public/fonts/OpenSans-Italic.woff b/web-ui/public/fonts/OpenSans-Italic.woff deleted file mode 100644 index c5f6bac1..00000000 Binary files a/web-ui/public/fonts/OpenSans-Italic.woff and /dev/null differ diff --git a/web-ui/public/fonts/OpenSans-Light.woff b/web-ui/public/fonts/OpenSans-Light.woff deleted file mode 100644 index eb601d70..00000000 Binary files a/web-ui/public/fonts/OpenSans-Light.woff and /dev/null differ diff --git a/web-ui/public/fonts/OpenSans-Semibold.woff b/web-ui/public/fonts/OpenSans-Semibold.woff deleted file mode 100644 index 56c44944..00000000 Binary files a/web-ui/public/fonts/OpenSans-Semibold.woff and /dev/null differ diff --git a/web-ui/public/fonts/OpenSans-SemiboldItalic.woff b/web-ui/public/fonts/OpenSans-SemiboldItalic.woff deleted file mode 100644 index 3a439fc3..00000000 Binary files a/web-ui/public/fonts/OpenSans-SemiboldItalic.woff and /dev/null differ diff --git a/web-ui/public/fonts/OpenSans.woff b/web-ui/public/fonts/OpenSans.woff deleted file mode 100644 index 77706fa6..00000000 Binary files a/web-ui/public/fonts/OpenSans.woff and /dev/null differ diff --git a/web-ui/public/fonts/OpenSansLight-Italic.woff b/web-ui/public/fonts/OpenSansLight-Italic.woff deleted file mode 100644 index 3f9f088f..00000000 Binary files a/web-ui/public/fonts/OpenSansLight-Italic.woff and /dev/null differ diff --git a/web-ui/public/fonts/icomoon.ttf b/web-ui/public/fonts/icomoon.ttf deleted file mode 100644 index 61315d04..00000000 Binary files a/web-ui/public/fonts/icomoon.ttf and /dev/null differ diff --git a/web-ui/public/fonts/icomoon.woff b/web-ui/public/fonts/icomoon.woff deleted file mode 100644 index 82f11748..00000000 Binary files a/web-ui/public/fonts/icomoon.woff and /dev/null differ diff --git a/web-ui/public/hive-bg.png b/web-ui/public/hive-bg.png deleted file mode 100644 index 77316967..00000000 Binary files a/web-ui/public/hive-bg.png and /dev/null differ diff --git a/web-ui/public/jquery-2.1.3.min.js b/web-ui/public/jquery-2.1.3.min.js deleted file mode 100644 index 25714ed2..00000000 --- a/web-ui/public/jquery-2.1.3.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) -},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
        "],col:[2,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n(" - - {{#if attachments}} -
        - -
        -

        {{ attachments.length }} attachment(s):

        - -
        - {{/if}} - diff --git a/web-ui/public/templates/mails/mail_actions.hbs b/web-ui/public/templates/mails/mail_actions.hbs deleted file mode 100644 index 0adfe853..00000000 --- a/web-ui/public/templates/mails/mail_actions.hbs +++ /dev/null @@ -1,6 +0,0 @@ - - -
          -
        • {{t 'reply-to-all'}}
        • -
        • {{t 'delete-this-message'}}
        • -
        diff --git a/web-ui/public/templates/mails/sent.hbs b/web-ui/public/templates/mails/sent.hbs deleted file mode 100644 index 158b20c8..00000000 --- a/web-ui/public/templates/mails/sent.hbs +++ /dev/null @@ -1,36 +0,0 @@ -
        - -
        - -
        -
        - {{t 'to'}}: - {{#if header.to }} - {{ header.to }} - {{else}} - {{t 'no-recipient'}} - {{/if}} -
        - - {{ formatDate header.date }} -
        -
        -
        - {{#if header.subject }} - {{header.subject}} - {{else}} - {{t 'no-subject'}} - {{/if}} -
        - - {{#if attachments}} -
        - {{/if}} -
        -
          - {{#each tagsForListView }} -
        • {{ this }}
        • - {{/each }} -
        -
        - diff --git a/web-ui/public/templates/mails/single.hbs b/web-ui/public/templates/mails/single.hbs deleted file mode 100644 index aaede844..00000000 --- a/web-ui/public/templates/mails/single.hbs +++ /dev/null @@ -1,28 +0,0 @@ -
        - -
        - -
        -
        - {{#if header.from }} - {{ header.from }} - {{else}} - {{t "you"}} - {{/if}} -
        - - {{ formatDate header.date }} -
        -
        -
        {{ header.subject }}
        - - {{#if attachments}} -
        - {{/if}} -
        -
          - {{#each tagsForListView }} -
        • {{ this }}
        • - {{/each }} -
        -
        diff --git a/web-ui/public/templates/mails/trash.hbs b/web-ui/public/templates/mails/trash.hbs deleted file mode 100644 index f8947b15..00000000 --- a/web-ui/public/templates/mails/trash.hbs +++ /dev/null @@ -1,32 +0,0 @@ -
        - -
        - -
        -
        - {{#if header.from }} - {{ header.from }} - {{else}} - {{t "you"}} - {{/if}} -
        - - {{ formatDate header.date }} -
        -
        -
        - - {{ header.subject }} -
        - - {{#if attachments}} -
        - {{/if}} -
        -
          - {{#each tagsForListView }} -
        • {{ this }}
        • - {{/each }} -
        -
        - diff --git a/web-ui/public/templates/page/logout.hbs b/web-ui/public/templates/page/logout.hbs deleted file mode 100644 index 0cc079bc..00000000 --- a/web-ui/public/templates/page/logout.hbs +++ /dev/null @@ -1,9 +0,0 @@ -
          -
          - -
        • -
          - {{t 'logout'}} -
        • -
          -
        diff --git a/web-ui/public/templates/page/logout_shortcut.hbs b/web-ui/public/templates/page/logout_shortcut.hbs deleted file mode 100644 index 043ab0dc..00000000 --- a/web-ui/public/templates/page/logout_shortcut.hbs +++ /dev/null @@ -1,6 +0,0 @@ -
      • - - -
        {{t 'logout'}}
        -
        -
      • diff --git a/web-ui/public/templates/page/user_settings_box.hbs b/web-ui/public/templates/page/user_settings_box.hbs deleted file mode 100644 index 2152b779..00000000 --- a/web-ui/public/templates/page/user_settings_box.hbs +++ /dev/null @@ -1,10 +0,0 @@ -
        - - -

        {{t 'user-account'}}

        - -
        -

        {{t 'email-address'}}

        -

        {{ account_email }}

        -

        {{t 'public-key-fingerprint'}}

        -

        {{ formatFingerPrint fingerprint }}

        diff --git a/web-ui/public/templates/page/user_settings_icon.hbs b/web-ui/public/templates/page/user_settings_icon.hbs deleted file mode 100644 index 8f2f9215..00000000 --- a/web-ui/public/templates/page/user_settings_icon.hbs +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/web-ui/public/templates/page/version.hbs b/web-ui/public/templates/page/version.hbs deleted file mode 100644 index 5f43f78a..00000000 --- a/web-ui/public/templates/page/version.hbs +++ /dev/null @@ -1,2 +0,0 @@ -{{t 'version'}}: UNKNOWN_VERSION
        - diff --git a/web-ui/public/templates/search/search_trigger.hbs b/web-ui/public/templates/search/search_trigger.hbs deleted file mode 100644 index 2261d154..00000000 --- a/web-ui/public/templates/search/search_trigger.hbs +++ /dev/null @@ -1,3 +0,0 @@ -
        - -
        diff --git a/web-ui/public/templates/tags/shortcut.hbs b/web-ui/public/templates/tags/shortcut.hbs deleted file mode 100644 index 1e82d6a9..00000000 --- a/web-ui/public/templates/tags/shortcut.hbs +++ /dev/null @@ -1,9 +0,0 @@ -
      • - - {{#if displayBadge }} - {{ count }} - {{/if}} - -
        {{ tagName }}
        -
        -
      • diff --git a/web-ui/public/templates/tags/tag.hbs b/web-ui/public/templates/tags/tag.hbs deleted file mode 100644 index ca397b9a..00000000 --- a/web-ui/public/templates/tags/tag.hbs +++ /dev/null @@ -1,3 +0,0 @@ -
      • - {{> tag_inner }} -
      • diff --git a/web-ui/public/templates/tags/tag_inner.hbs b/web-ui/public/templates/tags/tag_inner.hbs deleted file mode 100644 index 2e0958cb..00000000 --- a/web-ui/public/templates/tags/tag_inner.hbs +++ /dev/null @@ -1,4 +0,0 @@ -{{ tagName }} -{{#if displayBadge }} -{{ count }} -{{/if}} diff --git a/web-ui/public/templates/tags/tag_list.hbs b/web-ui/public/templates/tags/tag_list.hbs deleted file mode 100644 index 92a73283..00000000 --- a/web-ui/public/templates/tags/tag_list.hbs +++ /dev/null @@ -1,6 +0,0 @@ -
          -
          - - {{t 'tags.tags'}} -
          -
            diff --git a/web-ui/public/templates/user_alerts/message.hbs b/web-ui/public/templates/user_alerts/message.hbs deleted file mode 100644 index abba1f91..00000000 --- a/web-ui/public/templates/user_alerts/message.hbs +++ /dev/null @@ -1 +0,0 @@ -{{ message.content }} diff --git a/web-ui/src/images/LOADING-transparent.gif b/web-ui/src/images/LOADING-transparent.gif deleted file mode 100644 index ac9abcde..00000000 Binary files a/web-ui/src/images/LOADING-transparent.gif and /dev/null differ diff --git a/web-ui/src/images/fa-sent.svg b/web-ui/src/images/fa-sent.svg deleted file mode 100644 index a4b4bea4..00000000 --- a/web-ui/src/images/fa-sent.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - fa-sent - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/web-ui/src/images/favicon.png b/web-ui/src/images/favicon.png deleted file mode 100644 index e14841c7..00000000 Binary files a/web-ui/src/images/favicon.png and /dev/null differ diff --git a/web-ui/src/images/logo.svg b/web-ui/src/images/logo.svg deleted file mode 100644 index 6c2d8989..00000000 --- a/web-ui/src/images/logo.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/web-ui/src/images/pixelated-logo-orange.svg b/web-ui/src/images/pixelated-logo-orange.svg deleted file mode 100644 index 7e0ef43d..00000000 --- a/web-ui/src/images/pixelated-logo-orange.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/web-ui/src/images/pixelated-symbol-blue-transparent-01.png b/web-ui/src/images/pixelated-symbol-blue-transparent-01.png deleted file mode 100644 index 96b92155..00000000 Binary files a/web-ui/src/images/pixelated-symbol-blue-transparent-01.png and /dev/null differ diff --git a/web-ui/src/images/sent_email.png b/web-ui/src/images/sent_email.png deleted file mode 100644 index ddaa11d0..00000000 Binary files a/web-ui/src/images/sent_email.png and /dev/null differ diff --git a/web-ui/src/js/index.js b/web-ui/src/js/index.js deleted file mode 100644 index 8e66db06..00000000 --- a/web-ui/src/js/index.js +++ /dev/null @@ -1,235 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import {createStore} from 'redux'; -import {Map} from 'immutable'; -import 'whatwg-fetch'; - - -class PixelatedComponent extends React.Component { - _updateStateFromStore() { - this.setState(this.props.store.getState().toJS()); - } - - componentWillMount() { - this.unsubscribe = this.props.store.subscribe(() => this._updateStateFromStore()); - this._updateStateFromStore(); - } - - componentWillUnmount() { - this.unsubscribe(); - } -} - - -class PixelatedForm extends PixelatedComponent { - _fetchAndDispatch(url, actionProperties) { - const immutableActionProperties = new Map(actionProperties); - this.props.store.dispatch(immutableActionProperties.merge({status: 'STARTED'}).toJS()); - fetch(url).then((response) => { - return response.json(); - }).then((json) => { - setTimeout(() => { - this.props.store.dispatch(immutableActionProperties.merge({status: 'SUCCESS', json: json}).toJS()); - }, 3000); - }).catch((error) => { - console.error('something went wrong', error); - this.props.store.dispatch(immutableActionProperties.merge({status: 'ERROR', error: error}).toJS()); - }); - } -} - - -class InviteCodeForm extends PixelatedForm { - render() { - let className = "blue-button validation-link"; - - if(!this.state.inviteCodeValidation) { - className = className + " disabled"; - } - - return ( -
            -
            - - -
            - -
            - ); - } - - _handleClick(event) { - event.stopPropagation(); - event.preventDefault(); - this.props.store.dispatch({type: 'SUBMIT_INVITE_CODE', inviteCode: event.target['invite-code'].value}); - } - - _handleInputEmpty(event) { - this.props.store.dispatch({type: 'VALIDATE_INVITE_CODE', inviteCode: event.target.value}); - } -} - - -class CreateAccountForm extends PixelatedForm { - render() { - return ( -
            - @domain.com -
            - - -
            - -
            - - -
            - - -
            - ); - } - - _handleClick(event) { - event.stopPropagation(); - event.preventDefault(); - this.props.store.dispatch({type: 'SUBMIT_CREATE_ACCOUNT', username: event.target.username.value, password: event.target.password.value}); - } -} - - -class BackupEmailForm extends PixelatedForm { - render() { - return ( -
            -
            - - -
            - - -

            - I didn't receive anything. Send the email again -

            -
            - ); - } - - _handleClick(event) { - event.stopPropagation(); - event.preventDefault(); - this._fetchAndDispatch('dummy.json', {type: 'SUBMIT_BACKUP_EMAIL', backupEmail: event.target['backup-email'].value}); - } -} - - -class BackupEmailSentForm extends PixelatedForm { - render() { - return ( -
            - {this.state.isFetching || I received the codes.
            Go to my inbox
            } -

            - I didn't receive anything. Send the email again -

            -
            - ); - } - - _handleClick(event) { - event.stopPropagation(); - event.preventDefault(); - } -} - - -class SignUp extends PixelatedComponent { - render() { - return ( -
            -
            -

            {this.state.header}

            - {this.state.icon} -

            {this.state.summary}

            -
            -
            - {this._form()} -
            -
            - ); - } - - _form() { - switch(this.state.form) { - case 'invite_code': return ; - case 'create_account': return ; - case 'backup_email': return ; - case 'backup_email_sent': return ; - default: throw Error('TODO'); - } - } -} - - -const initialState = new Map({ - isFetching: false, - form: 'invite_code', - header: 'Welcome', - icon: null, - summary: ['Do you have an invite code?',
            , 'Type it below'], -}); - - -const store = createStore((state=initialState, action) => { - switch (action.type) { - case 'SUBMIT_INVITE_CODE': - return state.merge({ - inviteCode: action.inviteCode, - form: 'create_account', - header: 'Create your account', - summary: 'Choose your username, and be careful about your password, it must be strong and easy to remember. If you have a password manager, we strongly advise you to use one.', - }); - case 'SUBMIT_CREATE_ACCOUNT': - return state.merge({ - username: action.username, - password: action.password, - form: 'backup_email', - header: 'In case you lose your password...', - summary: 'Set up a backup email account. You\'ll receive an email with a code so you can recover your account in the future, other will be sent to your account administrator.', - }); - case 'SUBMIT_BACKUP_EMAIL': - switch (action.status) { - case 'STARTED': - return state.merge({ - isFetching: true, - backupEmail: action.backupEmail, - form: 'backup_email_sent', - icon:

            , - summary: 'An email was sent to the email you provided. Check your spam folder, just in case.', - }); - case 'SUCCESS': - return state.merge({ - isFetching: false, - }); - case 'ERROR': - return state.merge({ - isFetching: false, - }); - default: - return state; - } - case 'SUBMIT_BACKUP_EMAIL_SENT': - return state.merge({}); - case 'VALIDATE_INVITE_CODE': - return state.merge({ - inviteCodeValidation: Boolean(action.inviteCode) - }); - default: - return state; - } -}); - - -ReactDOM.render( - , - document.getElementById('app') -); diff --git a/web-ui/test/test-main.js b/web-ui/test/test-main.js index ce76be9b..4396993f 100644 --- a/web-ui/test/test-main.js +++ b/web-ui/test/test-main.js @@ -19,34 +19,34 @@ requirejs.config({ baseUrl: '/base', paths: { - 'page': 'public/js/page', - 'js': 'public/js', - 'lib': 'public/js/lib', - 'hbs': 'public/js/generated/hbs', - 'flight': 'public/bower_components/flight', - 'DOMPurify': 'public/bower_components/DOMPurify/dist/purify.min', - 'he': 'public/bower_components/he/he', - 'views': 'public/js/views', - 'helpers': 'public/js/helpers', - 'feedback': 'public/js/feedback', - 'tags': 'public/js/tags', - 'mail_list': 'public/js/mail_list', - 'mail_list_actions': 'public/js/mail_list_actions', - 'user_alerts': 'public/js/user_alerts', - 'mail_view': 'public/js/mail_view', - 'dispatchers': 'public/js/dispatchers', - 'mixins': 'public/js/mixins', - 'services': 'public/js/services', - 'search': 'public/js/search', - 'monkey_patching': 'public/js/monkey_patching', - 'i18next': 'public/bower_components/i18next/i18next', - 'i18nextXHRBackend': 'public/bower_components/i18next-xhr-backend/i18nextXHRBackend', - 'i18nextBrowserLanguageDetector': 'public/bower_components/i18next-browser-languagedetector/i18nextBrowserLanguageDetector', - 'quoted-printable': 'public/bower_components/quoted-printable', - 'utf8': 'public/bower_components/utf8', + 'page': 'app/js/page', + 'js': 'app/js', + 'lib': 'app/js/lib', + 'hbs': 'app/js/generated/hbs', + 'flight': 'app/bower_components/flight', + 'DOMPurify': 'app/bower_components/DOMPurify/dist/purify.min', + 'he': 'app/bower_components/he/he', + 'views': 'app/js/views', + 'helpers': 'app/js/helpers', + 'feedback': 'app/js/feedback', + 'tags': 'app/js/tags', + 'mail_list': 'app/js/mail_list', + 'mail_list_actions': 'app/js/mail_list_actions', + 'user_alerts': 'app/js/user_alerts', + 'mail_view': 'app/js/mail_view', + 'dispatchers': 'app/js/dispatchers', + 'mixins': 'app/js/mixins', + 'services': 'app/js/services', + 'search': 'app/js/search', + 'monkey_patching': 'app/js/monkey_patching', + 'i18next': 'app/bower_components/i18next/i18next', + 'i18nextXHRBackend': 'app/bower_components/i18next-xhr-backend/i18nextXHRBackend', + 'i18nextBrowserLanguageDetector': 'app/bower_components/i18next-browser-languagedetector/i18nextBrowserLanguageDetector', + 'quoted-printable': 'app/bower_components/quoted-printable', + 'utf8': 'app/bower_components/utf8', 'test': 'test', 'features': 'test/features', - 'user_settings': 'public/js/user_settings' + 'user_settings': 'app/js/user_settings' }, deps: tests, @@ -73,7 +73,7 @@ requirejs.config({ .init({ lng: 'en_US', backend: { - loadPath: '/base/public/locales/en_US/translation.json' + loadPath: '/base/app/locales/en_US/translation.json' } }); Handlebars.registerHelper('t', i18n.t); -- cgit v1.2.3