From 21b562852885f883be43032e03c709241e8e6d4f Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Tue, 5 Feb 2013 14:16:51 -0500 Subject: [PATCH] Initial release of Discourse --- .autotest | 5 + .gitattributes | 1 + .gitignore | 61 + .rspec | 1 + AUTHORS.md | 19 + CONTRIBUTING.md | 114 + COPYRIGHT.txt | 33 + DEVELOPMENT.md | 77 + Gemfile | 115 + Gemfile.lock | 442 + Guardfile | 87 + INSTALL.md | 27 + LICENSE.txt | 339 + PLUGINS.md | 6 + README.md | 116 + Rakefile | 7 + SOFTWARE.md | 47 + Vagrantfile | 14 + adminjs | 1 + app/assets/fonts/FontAwesome.otf | Bin 0 -> 48748 bytes app/assets/fonts/fontawesome-webfont.eot | Bin 0 -> 27879 bytes app/assets/fonts/fontawesome-webfont.ttf | Bin 0 -> 60296 bytes app/assets/fonts/fontawesome-webfont.woff | Bin 0 -> 31840 bytes app/assets/fonts/zocial-regular-webfont.eot | Bin 0 -> 29272 bytes app/assets/fonts/zocial-regular-webfont.svg | 333 + app/assets/fonts/zocial-regular-webfont.ttf | Bin 0 -> 29040 bytes app/assets/fonts/zocial-regular-webfont.woff | Bin 0 -> 21160 bytes app/assets/images/auth/facebook.gif | Bin 0 -> 2075 bytes app/assets/images/auth/google.gif | Bin 0 -> 1596 bytes app/assets/images/auth/twitter.png | Bin 0 -> 1313 bytes app/assets/images/auth/yahoo.gif | Bin 0 -> 1682 bytes app/assets/images/avatars/0.jpg | Bin 0 -> 3969 bytes app/assets/images/avatars/1.jpg | Bin 0 -> 2150 bytes app/assets/images/avatars/10.jpg | Bin 0 -> 2147 bytes app/assets/images/avatars/100.jpg | Bin 0 -> 4041 bytes app/assets/images/avatars/101.jpg | Bin 0 -> 1458 bytes app/assets/images/avatars/102.jpg | Bin 0 -> 3099 bytes app/assets/images/avatars/103.jpg | Bin 0 -> 2419 bytes app/assets/images/avatars/104.jpg | Bin 0 -> 1693 bytes app/assets/images/avatars/105.jpg | Bin 0 -> 3356 bytes app/assets/images/avatars/106.jpg | Bin 0 -> 2190 bytes app/assets/images/avatars/107.jpg | Bin 0 -> 3966 bytes app/assets/images/avatars/108.jpg | Bin 0 -> 2070 bytes app/assets/images/avatars/109.jpg | Bin 0 -> 7551 bytes app/assets/images/avatars/11.jpg | Bin 0 -> 2296 bytes app/assets/images/avatars/110.jpg | Bin 0 -> 2727 bytes app/assets/images/avatars/111.jpg | Bin 0 -> 5211 bytes app/assets/images/avatars/112.jpg | Bin 0 -> 3162 bytes app/assets/images/avatars/113.jpg | Bin 0 -> 4317 bytes app/assets/images/avatars/114.jpg | Bin 0 -> 19753 bytes app/assets/images/avatars/115.jpg | Bin 0 -> 2581 bytes app/assets/images/avatars/116.jpg | Bin 0 -> 2509 bytes app/assets/images/avatars/117.jpg | Bin 0 -> 1607 bytes app/assets/images/avatars/118.jpg | Bin 0 -> 3000 bytes app/assets/images/avatars/119.jpg | Bin 0 -> 2171 bytes app/assets/images/avatars/12.jpg | Bin 0 -> 4551 bytes app/assets/images/avatars/120.jpg | Bin 0 -> 7633 bytes app/assets/images/avatars/121.jpg | Bin 0 -> 7313 bytes app/assets/images/avatars/122.jpg | Bin 0 -> 3666 bytes app/assets/images/avatars/123.jpg | Bin 0 -> 8441 bytes app/assets/images/avatars/124.jpg | Bin 0 -> 2394 bytes app/assets/images/avatars/125.jpg | Bin 0 -> 2932 bytes app/assets/images/avatars/126.jpg | Bin 0 -> 3034 bytes app/assets/images/avatars/127.jpg | Bin 0 -> 38114 bytes app/assets/images/avatars/128.jpg | Bin 0 -> 2304 bytes app/assets/images/avatars/129.jpg | Bin 0 -> 2170 bytes app/assets/images/avatars/13.jpg | Bin 0 -> 3261 bytes app/assets/images/avatars/130.jpg | Bin 0 -> 3399 bytes app/assets/images/avatars/131.jpg | Bin 0 -> 2634 bytes app/assets/images/avatars/132.jpg | Bin 0 -> 2378 bytes app/assets/images/avatars/133.jpg | Bin 0 -> 2958 bytes app/assets/images/avatars/134.jpg | Bin 0 -> 1930 bytes app/assets/images/avatars/135.jpg | Bin 0 -> 1528 bytes app/assets/images/avatars/136.jpg | Bin 0 -> 1670 bytes app/assets/images/avatars/137.jpg | Bin 0 -> 7485 bytes app/assets/images/avatars/138.jpg | Bin 0 -> 6516 bytes app/assets/images/avatars/14.jpg | Bin 0 -> 2296 bytes app/assets/images/avatars/15.jpg | Bin 0 -> 1740 bytes app/assets/images/avatars/16.jpg | Bin 0 -> 38040 bytes app/assets/images/avatars/17.jpg | Bin 0 -> 2928 bytes app/assets/images/avatars/18.jpg | Bin 0 -> 22951 bytes app/assets/images/avatars/19.jpg | Bin 0 -> 2953 bytes app/assets/images/avatars/2.jpg | Bin 0 -> 5587 bytes app/assets/images/avatars/20.jpg | Bin 0 -> 2292 bytes app/assets/images/avatars/21.jpg | Bin 0 -> 19340 bytes app/assets/images/avatars/22.jpg | Bin 0 -> 8759 bytes app/assets/images/avatars/23.jpg | Bin 0 -> 2723 bytes app/assets/images/avatars/24.jpg | Bin 0 -> 2306 bytes app/assets/images/avatars/25.jpg | Bin 0 -> 1576 bytes app/assets/images/avatars/26.jpg | Bin 0 -> 3948 bytes app/assets/images/avatars/27.jpg | Bin 0 -> 1975 bytes app/assets/images/avatars/28.jpg | Bin 0 -> 2901 bytes app/assets/images/avatars/29.jpg | Bin 0 -> 23707 bytes app/assets/images/avatars/3.jpg | Bin 0 -> 4534 bytes app/assets/images/avatars/30.jpg | Bin 0 -> 9242 bytes app/assets/images/avatars/31.jpg | Bin 0 -> 2145 bytes app/assets/images/avatars/32.jpg | Bin 0 -> 1674 bytes app/assets/images/avatars/33.jpg | Bin 0 -> 2006 bytes app/assets/images/avatars/34.jpg | Bin 0 -> 5688 bytes app/assets/images/avatars/35.jpg | Bin 0 -> 3657 bytes app/assets/images/avatars/36.jpg | Bin 0 -> 1894 bytes app/assets/images/avatars/37.jpg | Bin 0 -> 1595 bytes app/assets/images/avatars/38.jpg | Bin 0 -> 25651 bytes app/assets/images/avatars/39.jpg | Bin 0 -> 2584 bytes app/assets/images/avatars/4.jpg | Bin 0 -> 3245 bytes app/assets/images/avatars/40.jpg | Bin 0 -> 4101 bytes app/assets/images/avatars/41.jpg | Bin 0 -> 2997 bytes app/assets/images/avatars/42.jpg | Bin 0 -> 2133 bytes app/assets/images/avatars/43.jpg | Bin 0 -> 6972 bytes app/assets/images/avatars/44.jpg | Bin 0 -> 2458 bytes app/assets/images/avatars/45.jpg | Bin 0 -> 3315 bytes app/assets/images/avatars/46.jpg | Bin 0 -> 3238 bytes app/assets/images/avatars/47.jpg | Bin 0 -> 2561 bytes app/assets/images/avatars/48.jpg | Bin 0 -> 3692 bytes app/assets/images/avatars/49.jpg | Bin 0 -> 6148 bytes app/assets/images/avatars/5.jpg | Bin 0 -> 9591 bytes app/assets/images/avatars/50.jpg | Bin 0 -> 3797 bytes app/assets/images/avatars/51.jpg | Bin 0 -> 4027 bytes app/assets/images/avatars/52.jpg | Bin 0 -> 1985 bytes app/assets/images/avatars/53.jpg | Bin 0 -> 1977 bytes app/assets/images/avatars/54.jpg | Bin 0 -> 4064 bytes app/assets/images/avatars/55.jpg | Bin 0 -> 1794 bytes app/assets/images/avatars/56.jpg | Bin 0 -> 3887 bytes app/assets/images/avatars/57.jpg | Bin 0 -> 4329 bytes app/assets/images/avatars/58.jpg | Bin 0 -> 2387 bytes app/assets/images/avatars/59.jpg | Bin 0 -> 2509 bytes app/assets/images/avatars/6.jpg | Bin 0 -> 2352 bytes app/assets/images/avatars/60.jpg | Bin 0 -> 8527 bytes app/assets/images/avatars/61.jpg | Bin 0 -> 7344 bytes app/assets/images/avatars/62.jpg | Bin 0 -> 26698 bytes app/assets/images/avatars/63.jpg | Bin 0 -> 1772 bytes app/assets/images/avatars/64.jpg | Bin 0 -> 2950 bytes app/assets/images/avatars/65.jpg | Bin 0 -> 3888 bytes app/assets/images/avatars/66.jpg | Bin 0 -> 4042 bytes app/assets/images/avatars/67.jpg | Bin 0 -> 29871 bytes app/assets/images/avatars/68.jpg | Bin 0 -> 1729 bytes app/assets/images/avatars/69.jpg | Bin 0 -> 13830 bytes app/assets/images/avatars/7.jpg | Bin 0 -> 1944 bytes app/assets/images/avatars/70.jpg | Bin 0 -> 1683 bytes app/assets/images/avatars/71.jpg | Bin 0 -> 1365 bytes app/assets/images/avatars/72.jpg | Bin 0 -> 4478 bytes app/assets/images/avatars/73.jpg | Bin 0 -> 2123 bytes app/assets/images/avatars/74.jpg | Bin 0 -> 3149 bytes app/assets/images/avatars/75.jpg | Bin 0 -> 1892 bytes app/assets/images/avatars/76.jpg | Bin 0 -> 10590 bytes app/assets/images/avatars/77.jpg | Bin 0 -> 2820 bytes app/assets/images/avatars/78.jpg | Bin 0 -> 4662 bytes app/assets/images/avatars/79.jpg | Bin 0 -> 2438 bytes app/assets/images/avatars/8.jpg | Bin 0 -> 2651 bytes app/assets/images/avatars/80.jpg | Bin 0 -> 2785 bytes app/assets/images/avatars/81.jpg | Bin 0 -> 5196 bytes app/assets/images/avatars/82.jpg | Bin 0 -> 3055 bytes app/assets/images/avatars/83.jpg | Bin 0 -> 1600 bytes app/assets/images/avatars/84.jpg | Bin 0 -> 4026 bytes app/assets/images/avatars/85.jpg | Bin 0 -> 3346 bytes app/assets/images/avatars/86.jpg | Bin 0 -> 2852 bytes app/assets/images/avatars/87.jpg | Bin 0 -> 3849 bytes app/assets/images/avatars/88.jpg | Bin 0 -> 1086 bytes app/assets/images/avatars/89.jpg | Bin 0 -> 1975 bytes app/assets/images/avatars/9.jpg | Bin 0 -> 3752 bytes app/assets/images/avatars/90.jpg | Bin 0 -> 1771 bytes app/assets/images/avatars/91.jpg | Bin 0 -> 5895 bytes app/assets/images/avatars/92.jpg | Bin 0 -> 1791 bytes app/assets/images/avatars/93.jpg | Bin 0 -> 3613 bytes app/assets/images/avatars/94.jpg | Bin 0 -> 2096 bytes app/assets/images/avatars/95.jpg | Bin 0 -> 2170 bytes app/assets/images/avatars/96.jpg | Bin 0 -> 3255 bytes app/assets/images/avatars/97.jpg | Bin 0 -> 24975 bytes app/assets/images/avatars/98.jpg | Bin 0 -> 4928 bytes app/assets/images/avatars/99.jpg | Bin 0 -> 3901 bytes app/assets/images/avatars/rename.rb | 9 + app/assets/images/chosen-sprite.png | Bin 0 -> 559 bytes .../images/cool_avatars/coding_horror.png | Bin 0 -> 4570 bytes app/assets/images/cool_avatars/evil_trout.jpg | Bin 0 -> 14574 bytes app/assets/images/cool_avatars/hanzo.png | Bin 0 -> 14877 bytes app/assets/images/cool_avatars/sam.png | Bin 0 -> 7274 bytes app/assets/images/favicon.ico | Bin 0 -> 1150 bytes .../images/favicons/1282043220-favicon.ico | Bin 0 -> 1150 bytes app/assets/images/favicons/amazon.png | Bin 0 -> 965 bytes app/assets/images/favicons/apple.png | Bin 0 -> 753 bytes app/assets/images/favicons/github.png | Bin 0 -> 957 bytes app/assets/images/favicons/google_play.png | Bin 0 -> 1197 bytes app/assets/images/favicons/twitter.png | Bin 0 -> 960 bytes app/assets/images/favicons/wikipedia.png | Bin 0 -> 318 bytes app/assets/images/grippie.png | Bin 0 -> 162 bytes app/assets/images/logo-single.png | Bin 0 -> 1318 bytes app/assets/images/logo.png | Bin 0 -> 2291 bytes app/assets/images/posted.png | Bin 0 -> 1491 bytes app/assets/images/spinner_96.gif | Bin 0 -> 13707 bytes app/assets/images/spinner_96_w.gif | Bin 0 -> 10729 bytes app/assets/images/thread-default.png | Bin 0 -> 1868 bytes app/assets/images/wmd-buttons.png | Bin 0 -> 7465 bytes app/assets/images/wmd-quote-post.gif | Bin 0 -> 2468 bytes app/assets/javascripts/admin.js | 1 + .../admin_customize_controller.js.coffee | 18 + .../admin_email_logs_controller.js.coffee | 17 + .../admin_flags_controller.js.coffee | 16 + .../admin_site_settings_controller.js.coffee | 30 + .../admin_users_list_controller.js.coffee | 45 + .../admin/models/admin_user.js.coffee | 122 + .../admin/models/email_log.js.coffee | 17 + .../admin/models/flagged_post.js.coffee | 62 + .../admin/models/site_customization.js.coffee | 78 + .../admin/models/site_setting.js.coffee | 42 + .../routes/admin_customize_route.js.coffee | 2 + .../routes/admin_email_logs_route.js.coffee | 2 + .../routes/admin_flags_active_route.js.coffee | 6 + .../routes/admin_flags_old_route.js.coffee | 6 + .../admin/routes/admin_routes.js.coffee | 17 + .../admin_site_settings_route.js.coffee | 2 + .../admin/routes/admin_user_route.js.coffee | 2 + .../admin_users_list_active_route.js.coffee | 2 + .../admin_users_list_new_route.js.coffee | 2 + .../admin_users_list_pending_route.js.coffee | 2 + .../admin/templates/admin.js.handlebars | 23 + .../admin/templates/customize.js.handlebars | 56 + .../admin/templates/dashboard.js.handlebars | 4 + .../admin/templates/email_logs.js.handlebars | 37 + .../admin/templates/flags.js.handlebars | 49 + .../templates/site_settings.js.handlebars | 34 + .../admin/templates/user.js.handlebars | 168 + .../admin/templates/users_list.js.handlebars | 82 + .../javascripts/admin/translations.js.erb | 7 + .../admin/views/ace_editor_view.js.coffee | 42 + .../views/admin_customize_view.js.coffee | 33 + .../views/admin_dashboard_view.js.coffee | 2 + .../views/admin_email_logs_view.js.coffee | 2 + .../admin/views/admin_flags_view.js.coffee | 3 + .../views/admin_site_settings_view.js.coffee | 2 + .../admin/views/admin_user_view.js.coffee | 2 + .../views/admin_users_list_view.js.coffee | 2 + .../admin/views/admin_view.js.coffee | 2 + app/assets/javascripts/application.js.erb | 51 + app/assets/javascripts/discourse.js.coffee | 272 + .../components/autocomplete.js.coffee | 255 + .../discourse/components/bbcode.js.coffee | 130 + .../components/caret_position.js.coffee | 101 + .../components/click_track.js.coffee | 64 + .../discourse/components/debounce.js.coffee | 20 + .../components/discourse_text_field.js.coffee | 7 + .../components/div_resizer.js.coffee | 61 + .../discourse/components/eyeline.coffee | 64 + .../components/key_value_store.coffee | 33 + .../components/message_bus.js.coffee | 114 + .../components/pagedown_editor.js.coffee | 24 + .../discourse/components/probes.js | 122 + .../components/screen_track.js.coffee | 128 + .../components/syntax_highlighting.js.coffee | 8 + .../components/transition_helper.js.coffee | 25 + .../components/user_search.js.coffee | 51 + .../discourse/components/utilities.coffee | 165 + .../application_controller.js.coffee | 6 + .../controllers/composer_controller.js.coffee | 173 + .../controllers/controller.js.coffee | 1 + .../controllers/header_controller.js.coffee | 7 + .../list_categories_controller.js.coffee | 21 + .../controllers/list_controller.js.coffee | 73 + .../list_topics_controller.js.coffee | 53 + .../controllers/modal_controller.js.coffee | 3 + .../preferences_controller.js.coffee | 54 + .../preferences_email_controller.js.coffee | 35 + .../preferences_username_controller.js.coffee | 40 + .../quote_button_controller.js.coffee | 70 + .../controllers/share_controller.js.coffee | 14 + .../controllers/static_controller.js.coffee | 21 + .../topic_admin_menu_controller.js.coffee | 6 + .../controllers/topic_controller.js.coffee | 309 + .../user_activity_controller.js.coffee | 15 + .../controllers/user_controller.js.coffee | 9 + .../user_invited_controller.js.coffee | 5 + ...user_private_messages_controller.js.coffee | 11 + .../helpers/application_helpers.js.coffee | 128 + .../discourse/helpers/i18n_helpers.js.coffee | 25 + .../discourse/mixins/presence.js.coffee | 15 + .../discourse/mixins/scrolling.js.coffee | 15 + .../discourse/models/action_summary.js.coffee | 67 + .../discourse/models/archetype.js.coffee | 11 + .../discourse/models/category.js.coffee.erb | 31 + .../discourse/models/category_list.js.coffee | 29 + .../discourse/models/composer.js.coffee | 422 + .../discourse/models/draft.js.coffee | 51 + .../models/input_validation.js.coffee | 1 + .../discourse/models/invite.js.coffee | 17 + .../discourse/models/invite_list.js.coffee | 19 + .../discourse/models/mention.js.coffee | 41 + .../discourse/models/model.js.coffee | 36 + .../discourse/models/nav_item.js.coffee | 49 + .../discourse/models/notification.js.coffee | 27 + .../discourse/models/onebox.js.coffee | 48 + .../discourse/models/post.js.coffee.erb | 242 + .../models/post_action_type.js.coffee | 11 + .../discourse/models/site.js.coffee.erb | 36 + .../discourse/models/topic.js.coffee | 307 + .../discourse/models/topic_list.js.coffee | 105 + .../discourse/models/user.js.coffee | 198 + .../discourse/models/user_action.js.coffee | 4 + .../models/user_action_stat.js.coffee | 1 + .../routes/application_route.js.coffee | 5 + .../routes/application_routes.js.coffee | 37 + .../discourse/routes/discourse_location.js | 192 + .../routes/discourse_route.js.coffee | 29 + .../routes/filtered_list_route.js.coffee | 23 + .../routes/google_analytics.js.coffee | 12 + .../routes/list_categories_route.js.coffee | 13 + .../routes/list_category_route.js.coffee | 10 + .../routes/preferences_email_route.js.coffee | 5 + .../routes/preferences_route.js.coffee | 6 + .../preferences_username_route.js.coffee | 7 + .../discourse/routes/static_route.js.coffee | 4 + .../routes/topic_best_of_route.js.coffee | 9 + .../routes/topic_from_params_route.js.coffee | 7 + .../discourse/routes/topic_route.js.coffee | 21 + .../routes/user_activity_route.js.coffee | 8 + .../routes/user_invited_route.js.coffee | 7 + .../user_private_messages_route.js.coffee | 15 + .../discourse/routes/user_route.js.coffee | 3 + .../templates/application.js.handlebars | 7 + .../templates/composer.js.handlebars | 77 + .../templates/embedded_post.js.handlebars | 17 + .../templates/excerpt/category.js.handlebars | 26 + .../templates/excerpt/close.handlebars | 1 + .../templates/excerpt/post.js.handlebars | 21 + .../templates/excerpt/user.js.handlebars | 10 + .../templates/featured_topics.js.handlebars | 45 + .../discourse/templates/flag.js.handlebars | 33 + .../discourse/templates/header.js.handlebars | 114 + .../discourse/templates/history.js.handlebars | 43 + .../templates/image_selector.js.handlebars | 36 + .../templates/list/categories.js.handlebars | 8 + .../templates/list/list.js.handlebars | 44 + .../list/topic_list_item.js.handlebars | 53 + .../templates/list/topics.js.handlebars | 59 + .../modal/archetype_options.js.handlebars | 8 + .../modal/create_account.js.handlebars | 60 + .../modal/edit_category.js.handlebars | 22 + .../modal/forgot_password.js.handlebars | 9 + .../templates/modal/invite.js.handlebars | 25 + .../modal/invite_private.js.handlebars | 25 + .../templates/modal/login.js.handlebars | 44 + .../modal/modal_errors.js.handlebars | 8 + .../modal/modal_header.js.handlebars | 5 + .../modal/move_selected.js.handlebars | 20 + .../modal/option_boolean.js.handlebars | 6 + .../templates/participant.js.handlebars | 4 + .../discourse/templates/post.js.handlebars | 67 + .../discourse/templates/quote.js.shbrs | 9 + .../discourse/templates/search.js.handlebars | 29 + .../search/category_result.js.handlebars | 6 + .../search/topic_result.js.handlebars | 6 + .../search/user_result.js.handlebars | 7 + .../templates/selected_posts.js.handlebars | 11 + .../discourse/templates/share.js.handlebars | 5 + .../discourse/templates/static.js.handlebars | 9 + .../templates/suggested_topic.js.handlebars | 43 + .../discourse/templates/topic.js.handlebars | 141 + .../templates/topic_admin_menu.js.handlebars | 61 + .../templates/topic_extra_info.js.handlebars | 19 + .../best_of_toggle.js.handlebars | 4 + .../topic_summary/info.js.handlebars | 104 + .../private_message.js.handlebars | 19 + .../templates/user/activity.js.handlebars | 54 + .../templates/user/email.js.handlebars | 46 + .../templates/user/invited.js.handlebars | 70 + .../templates/user/preferences.js.handlebars | 108 + .../user/private_messages.js.handlebars | 23 + .../templates/user/stream.js.handlebars | 17 + .../templates/user/user.js.handlebars | 46 + .../templates/user/username.js.handlebars | 36 + .../javascripts/discourse/translations.js.erb | 5 + .../views/actions_history_view.js.coffee | 57 + .../views/application_view.js.coffee | 2 + .../archetype_options_modal_view.js.coffee | 3 + .../views/auto_sized_text_view.js.coffee | 18 + .../discourse/views/button_view.js.coffee | 16 + .../discourse/views/combobox_view.js.coffee | 24 + .../views/combobox_view_category.js.coffee | 8 + .../discourse/views/composer_view.js.coffee | 248 + .../views/dropdown_button_view.js.coffee | 41 + .../views/embedded_post_view.js.coffee | 8 + .../excerpt/excerpt_category_view.js.coffee | 29 + .../views/excerpt/excerpt_post_view.js.coffee | 19 + .../views/excerpt/excerpt_user_view.js.coffee | 18 + .../views/excerpt/excerpt_view.js.coffee | 154 + .../views/featured_threads_view.js.coffee | 7 + .../views/featured_topics_view.js.coffee | 3 + .../discourse/views/flag_view.js.coffee | 53 + .../discourse/views/header_view.js.coffee | 93 + .../discourse/views/history_view.js.coffee | 33 + .../discourse/views/image_selector.js.coffee | 31 + .../discourse/views/input_tip_view.js.coffee | 20 + .../views/list/list_categories_view.js.coffee | 5 + .../views/list/list_topics_view.js.coffee | 50 + .../discourse/views/list/list_view.js.coffee | 16 + .../views/list/topic_list_item_view.js.coffee | 26 + .../modal/archetype_options_view.js.coffee | 16 + .../views/modal/create_account_view.js.coffee | 140 + .../views/modal/edit_category_view.js.coffee | 45 + .../modal/forgot_password_view.js.coffee | 12 + .../views/modal/invite_modal_view.js.coffee | 42 + .../modal/invite_private_modal_view.js.coffee | 37 + .../views/modal/login_view.js.coffee | 99 + .../views/modal/modal_body_view.js.coffee | 18 + .../views/modal/modal_view.js.coffee | 22 + .../views/modal/move_selected_view.js.coffee | 39 + .../views/modal/option_boolean_view.js.coffee | 14 + .../discourse/views/nav_item_view.js.coffee | 36 + .../views/notifications_view.js.coffee | 5 + .../discourse/views/parent_view.js.coffee | 14 + .../views/participant_view.js.coffee | 7 + .../discourse/views/post_link_view.js.coffee | 16 + .../discourse/views/post_menu_view.js.coffee | 101 + .../discourse/views/post_view.js.coffee | 227 + .../views/prepend_post_view.js.coffee | 7 + .../views/quote_buton_view.js.coffee | 26 + .../discourse/views/replies_view.js.coffee | 13 + .../search/search_results_type_view.js.coffee | 20 + .../views/search/search_view.js.coffee | 115 + .../views/selected_posts_view.js.coffee | 9 + .../discourse/views/share_view.js.coffee | 50 + .../views/suggested_topic_view.js.coffee | 2 + .../views/topic_admin_menu_view.js.coffee | 11 + .../views/topic_extra_info_view.js.coffee | 12 + .../views/topic_footer_buttons_view.js.coffee | 84 + .../views/topic_posts_view.js.coffee | 4 + .../views/topic_status_view.js.coffee | 30 + .../topic_summary/topic_links_view.js.coffee | 2 + .../topic_summary_view.js.coffee | 63 + .../discourse/views/topic_view.js.coffee | 417 + .../views/user/activity_filter_view.js.coffee | 24 + .../user/preferences_email_view.js.coffee | 6 + .../user/preferences_username_view.js.coffee | 7 + .../views/user/preferences_view.js.coffee | 5 + .../views/user/user_activity_view.js.coffee | 8 + .../views/user/user_invited_view.js.coffee | 3 + .../user/user_private_messages_view.js.coffee | 17 + .../views/user/user_stream_view.js.coffee | 31 + .../discourse/views/user/user_view.js.coffee | 2 + .../discourse/views/view.js.coffee | 6 + app/assets/javascripts/env.js.coffee | 8 + app/assets/javascripts/external/LAB.js | 5 + .../external/Markdown.Converter.js | 1314 + .../javascripts/external/Markdown.Editor.js | 2213 ++ .../external/Markdown.Sanitizer.js | 108 + app/assets/javascripts/external/bootbox.js | 511 + .../javascripts/external/bootstrap-alert.js | 90 + .../javascripts/external/bootstrap-button.js | 96 + .../external/bootstrap-dropdown.js | 100 + .../javascripts/external/bootstrap-modal.js | 218 + .../external/bootstrap-transition.js | 51 + .../javascripts/external/chosen.jquery.js | 1076 + app/assets/javascripts/external/ember.js | 26685 ++++++++++++++++ .../javascripts/external/group-helper.js | 23 + .../external/handlebars-1.0.rc.2.js | 1993 ++ app/assets/javascripts/external/humane.js | 134 + .../javascripts/external/jquery-1.8.2.js | 9440 ++++++ .../external/jquery.ba-replacetext.js | 129 + .../external/jquery.ba-resize.min.js | 9 + .../javascripts/external/jquery.color.js | 664 + .../javascripts/external/jquery.cookie.js | 47 + .../javascripts/external/jquery.fileupload.js | 1128 + .../external/jquery.iframe-transport.js | 172 + .../external/jquery.putcursoratend.js | 38 + .../javascripts/external/jquery.tagsinput.js | 345 + .../javascripts/external/jquery.ui.widget.js | 282 + .../external/modernizr.custom.95264.js | 4 + app/assets/javascripts/external/mousetrap.js | 864 + .../javascripts/external/respond.min.js | 6 + app/assets/javascripts/external/rsvp.js | 289 + app/assets/javascripts/external/show-html.js | 45 + .../javascripts/external/sugar-1.3.5.js | 8364 +++++ .../external/twitter-text-1.5.0.js | 1294 + .../javascripts/external_production/ember.js | 26480 +++++++++++++++ .../external_production/group-helper.js | 23 + .../external_production/sugar-1.3.5.js | 116 + app/assets/javascripts/jquery.js.erb | 1 + .../javascripts/pagedown_custom.js.coffee | 10 + .../javascripts/preload_store.js.coffee | 47 + app/assets/stylesheets/admin.css | 6 + app/assets/stylesheets/admin/admin_base.scss | 247 + app/assets/stylesheets/application.css.erb | 15 + .../application/activation.css.scss | 13 + .../stylesheets/application/bbcode.css.scss | 128 + .../application/code_highlighting.css.scss | 84 + .../stylesheets/application/compose.css.scss | 371 + .../application/discourse.css.scss | 310 + .../stylesheets/application/faqs.css.scss | 208 + .../stylesheets/application/header.css.scss | 234 + .../stylesheets/application/history.css.scss | 26 + .../stylesheets/application/image-upload.scss | 29 + .../stylesheets/application/login.css.scss | 25 + .../stylesheets/application/modal.css.scss | 164 + .../stylesheets/application/onebox.scss | 66 + .../stylesheets/application/pagedown.css.scss | 141 + .../application/request_access.css.scss | 13 + .../application/share_link.css.scss | 30 + .../application/topic-admin-menu.css.scss | 37 + .../application/topic-list.css.scss | 295 + .../application/topic-post.css.scss | 729 + .../stylesheets/application/topic.css.scss | 469 + .../stylesheets/application/user.css.scss | 283 + .../application/username_tagsinput.css | 33 + .../stylesheets/components/badges.css.scss | 78 + .../stylesheets/components/buttons.css.scss | 149 + .../stylesheets/components/navs.css.scss | 96 + .../stylesheets/components/tooltips.css.scss | 144 + .../stylesheets/foundation/base.css.scss | 79 + .../stylesheets/foundation/helpers.css.scss | 66 + app/assets/stylesheets/foundation/mixins.scss | 182 + .../stylesheets/foundation/variables.scss | 169 + .../stylesheets/vendor/bootstrap.css.scss | 2037 ++ app/assets/stylesheets/vendor/chosen.css.erb | 395 + .../stylesheets/vendor/font-awesome.css.erb | 462 + app/assets/stylesheets/vendor/normalize.css | 396 + app/controllers/admin/admin_controller.rb | 16 + .../admin/email_logs_controller.rb | 15 + app/controllers/admin/export_controller.rb | 10 + app/controllers/admin/flags_controller.rb | 103 + .../admin/impersonate_controller.rb | 20 + .../admin/site_customizations_controller.rb | 45 + .../admin/site_settings_controller.rb | 14 + app/controllers/admin/users_controller.rb | 76 + app/controllers/admin/versions_controller.rb | 15 + app/controllers/application_controller.rb | 240 + app/controllers/categories_controller.rb | 52 + app/controllers/clicks_controller.rb | 25 + app/controllers/draft_controller.rb | 20 + app/controllers/email_controller.rb | 30 + app/controllers/exceptions_controller.rb | 15 + app/controllers/excerpt_controller.rb | 40 + app/controllers/facebook_controller.rb | 93 + app/controllers/faq_controller.rb | 9 + app/controllers/forums_controller.rb | 19 + app/controllers/invites_controller.rb | 41 + app/controllers/list_controller.rb | 80 + app/controllers/notifications_controller.rb | 14 + app/controllers/onebox_controller.rb | 10 + app/controllers/post_actions_controller.rb | 55 + app/controllers/posts_controller.rb | 138 + app/controllers/privacy_controller.rb | 9 + app/controllers/request_access_controller.rb | 22 + app/controllers/search_controller.rb | 9 + app/controllers/session_controller.rb | 57 + app/controllers/static_controller.rb | 22 + app/controllers/topics_controller.rb | 252 + app/controllers/tos_controller.rb | 9 + app/controllers/twitter_controller.rb | 85 + app/controllers/uploads_controller.rb | 7 + app/controllers/user_actions_controller.rb | 24 + app/controllers/user_open_ids_controller.rb | 192 + app/controllers/users_controller.rb | 333 + app/helpers/application_helper.rb | 33 + app/helpers/forum_helper.rb | 2 + app/helpers/list_helper.rb | 2 + app/helpers/notifications_helper.rb | 2 + app/helpers/user_notifications_helper.rb | 3 + app/mailers/.gitkeep | 0 app/mailers/invite_mailer.rb | 21 + app/mailers/test_mailer.rb | 12 + app/mailers/user_notifications.rb | 80 + app/models/.gitkeep | 0 app/models/category.rb | 86 + app/models/category_featured_topic.rb | 40 + app/models/category_featured_user.rb | 31 + app/models/category_list.rb | 69 + app/models/draft.rb | 45 + app/models/draft_sequence.rb | 29 + app/models/email_log.rb | 12 + app/models/email_token.rb | 55 + app/models/error_log.rb | 111 + app/models/facebook_user_info.rb | 4 + app/models/incoming_link.rb | 47 + app/models/invite.rb | 87 + app/models/invited_list.rb | 25 + app/models/message_bus_observer.rb | 58 + app/models/notification.rb | 95 + app/models/onebox_render.rb | 10 + app/models/post.rb | 469 + app/models/post_action.rb | 168 + app/models/post_action_type.rb | 31 + app/models/post_alert_observer.rb | 141 + app/models/post_onebox_render.rb | 6 + app/models/post_reply.rb | 7 + app/models/post_timing.rb | 42 + app/models/search_observer.rb | 103 + app/models/site.rb | 49 + app/models/site_customization.rb | 144 + app/models/site_setting.rb | 129 + app/models/topic.rb | 516 + app/models/topic_allowed_user.rb | 7 + app/models/topic_invite.rb | 10 + app/models/topic_link.rb | 112 + app/models/topic_link_click.rb | 58 + app/models/topic_list.rb | 76 + app/models/topic_poster.rb | 18 + app/models/topic_user.rb | 197 + app/models/twitter_user_info.rb | 3 + app/models/upload.rb | 98 + app/models/user.rb | 451 + app/models/user_action.rb | 213 + app/models/user_action_observer.rb | 189 + app/models/user_email_observer.rb | 50 + app/models/user_open_id.rb | 8 + app/models/user_visit.rb | 3 + app/models/view.rb | 36 + .../admin_detailed_user_serializer.rb | 27 + app/serializers/admin_user_serializer.rb | 64 + app/serializers/application_serializer.rb | 3 + app/serializers/archetype_serializer.rb | 20 + app/serializers/basic_topic_serializer.rb | 53 + app/serializers/basic_user_serializer.rb | 3 + .../category_detailed_serializer.rb | 20 + .../category_excerpt_serializer.rb | 34 + .../category_featured_users_serializer.rb | 5 + app/serializers/category_list_serializer.rb | 11 + app/serializers/category_serializer.rb | 3 + app/serializers/category_topic_serializer.rb | 7 + app/serializers/current_user_serializer.rb | 14 + app/serializers/email_log_serializer.rb | 6 + app/serializers/excerpt_type.rb | 11 + app/serializers/invite_serializer.rb | 12 + app/serializers/invited_list_serializer.rb | 10 + app/serializers/invited_user_serializer.rb | 19 + app/serializers/notification_serializer.rb | 19 + .../post_action_type_serializer.rb | 27 + app/serializers/post_excerpt_serializer.rb | 37 + app/serializers/post_serializer.rb | 194 + app/serializers/site_serializer.rb | 13 + app/serializers/suggested_topic_serializer.rb | 11 + app/serializers/topic_link_serializer.rb | 32 + app/serializers/topic_list_item_serializer.rb | 22 + app/serializers/topic_list_serializer.rb | 15 + .../topic_post_count_serializer.rb | 22 + app/serializers/topic_poster_serializer.rb | 6 + app/serializers/topic_view_serializer.rb | 208 + app/serializers/trust_level_serializer.rb | 5 + app/serializers/upload_serializer.rb | 5 + app/serializers/user_excerpt_serializer.rb | 14 + app/serializers/user_serializer.rb | 68 + app/serializers/version_serializer.rb | 21 + app/views/default/empty.html.erb | 1 + app/views/email/resubscribe.html.erb | 7 + app/views/email/unsubscribe.html.erb | 20 + app/views/exceptions/not_found.html.erb | 27 + app/views/facebook/complete.haml | 6 + app/views/layouts/application.html.erb | 149 + app/views/layouts/no_js.html.erb | 53 + app/views/list/list.erb | 10 + app/views/request_access/new.html.erb | 21 + app/views/static/faq.html.erb | 138 + app/views/static/privacy.html.erb | 64 + app/views/static/tos.html.erb | 126 + app/views/topics/show.html.erb | 19 + app/views/twitter/complete.haml | 6 + app/views/user_notifications/digest.text.erb | 29 + app/views/user_open_ids/complete.haml | 6 + app/views/users/activate_account.html.erb | 19 + app/views/users/authorize_email.html.erb | 12 + app/views/users/password_reset.html.erb | 46 + config.ru | 3 + config/application.rb | 102 + config/boot.rb | 6 + config/cdn.yml.sample | 5 + config/clock.rb | 19 + config/database.yml | 30 + config/environment.rb | 5 + config/environments/development.rb | 47 + config/environments/production.rb | 43 + config/environments/test.rb | 45 + config/fog_credentials.yml.sample | 4 + config/i18n-js.yml | 28 + config/initializers/backtrace_silencers.rb | 7 + config/initializers/freedom_patches.rb | 3 + config/initializers/inflections.rb | 10 + config/initializers/message_bus.rb | 27 + config/initializers/mime_types.rb | 5 + config/initializers/mini_profiler.rb | 49 + config/initializers/oj.rb | 2 + config/initializers/quiet_logger.rb | 15 + .../rails3_ar_after_commit_tests.rb | 23 + config/initializers/secret_token.rb | 3 + config/initializers/session_store.rb | 8 + config/initializers/sidekiq.rb | 16 + config/initializers/silence_logger.rb | 27 + config/initializers/site_settings.rb | 5 + config/initializers/vestal_versions.rb | 9 + config/initializers/watch_for_restart.rb | 61 + config/initializers/wrap_parameters.rb | 15 + config/locales/en.yml | 1322 + config/nginx.sample.conf | 54 + config/redis.yml | 18 + config/routes.rb | 210 + db/fixtures/post_action_types.rb | 43 + .../20120311163914_create_forum_threads.rb | 11 + db/migrate/20120311164326_create_posts.rb | 14 + db/migrate/20120311170118_create_users.rb | 9 + db/migrate/20120311201341_create_forums.rb | 9 + db/migrate/20120311210245_create_sites.rb | 8 + .../20120416201606_add_reply_to_to_posts.rb | 6 + ...120420183447_add_views_to_forum_threads.rb | 5 + ...140906_add_posts_count_to_forum_threads.rb | 7 + db/migrate/20120423142820_fix_post_indices.rb | 11 + .../20120423151548_remove_last_post_id.rb | 9 + ...425145456_add_display_username_to_users.rb | 15 + ...120427150624_add_user_id_index_to_posts.rb | 5 + db/migrate/20120427151452_cooked_migration.rb | 6 + .../20120427154330_create_vestal_versions.rb | 28 + .../20120427172031_add_version_to_posts.rb | 5 + ...2183240_add_created_by_to_forum_threads.rb | 15 + ..._add_last_post_user_id_to_forum_threads.rb | 17 + .../20120503205521_add_site_id_to_users.rb | 9 + .../20120507144132_create_expressions.rb | 13 + .../20120507144222_create_expression_types.rb | 12 + ...20120514144549_add_reply_count_to_posts.rb | 13 + ...0514173920_add_flag_to_expression_types.rb | 5 + ...934_add_description_to_expression_types.rb | 5 + .../20120517200130_add_quoteless_to_post.rb | 5 + .../20120518200115_create_read_posts.rb | 17 + .../20120519182212_create_last_read_posts.rb | 12 + db/migrate/20120523180723_create_views.rb | 14 + ...0523184307_add_replies_to_forum_threads.rb | 7 + ...523201329_add_featured_to_forum_threads.rb | 21 + ...525194845_add_avg_time_to_forum_threads.rb | 12 + db/migrate/20120529175956_create_uploads.rb | 18 + db/migrate/20120529202707_create_stars.rb | 12 + ...20120530150726_create_forum_thread_user.rb | 41 + db/migrate/20120530160745_migrate_posted.rb | 10 + ...120530200724_add_index_to_forum_threads.rb | 5 + ...0120530212912_create_forum_thread_links.rb | 16 + ...0120614190726_add_tags_to_forum_threads.rb | 5 + ...20120614202024_add_quote_count_to_posts.rb | 12 + db/migrate/20120615180517_create_bookmarks.rb | 11 + ...20120618152946_add_reply_below_to_posts.rb | 5 + .../20120618212349_create_post_timings.rb | 13 + .../20120618214856_create_message_bus.rb | 13 + db/migrate/20120619150807_fix_post_timings.rb | 14 + db/migrate/20120619153349_drop_read_posts.rb | 14 + ...0619172714_add_post_number_to_bookmarks.rb | 14 + ...d_seen_post_count_to_forum_thread_users.rb | 8 + ...1190310_add_deleted_at_to_forum_threads.rb | 5 + .../20120622200242_create_notifications.rb | 13 + ...45714_add_seen_notification_id_to_users.rb | 10 + .../20120625162318_add_deleted_at_to_posts.rb | 5 + ...dd_highest_post_number_to_forum_threads.rb | 7 + ...25195326_add_image_url_to_forum_threads.rb | 5 + ...0120629143908_rename_expression_type_id.rb | 16 + .../20120629150253_denormalize_expressions.rb | 25 + ...629151243_make_expressions_less_generic.rb | 16 + .../20120629182637_create_incoming_links.rb | 15 + db/migrate/20120702211427_create_replies.rb | 17 + ...34_add_reflection_to_forum_thread_links.rb | 6 + ...201312_add_incoming_link_count_to_posts.rb | 5 + ...dd_incoming_link_count_to_forum_threads.rb | 5 + ...20703210004_add_bookmark_count_to_posts.rb | 19 + .../20120704160659_add_avg_time_to_posts.rb | 6 + .../20120704201743_add_view_count_to_posts.rb | 8 + .../20120705181724_add_user_to_versions.rb | 7 + ...20708210305_add_last_posted_at_to_users.rb | 11 + .../20120712150500_create_categories.rb | 28 + ...151934_add_category_id_to_forum_threads.rb | 18 + ...201324_create_category_featured_threads.rb | 11 + .../20120716020835_create_site_settings.rb | 12 + .../20120716173544_add_stats_to_categories.rb | 7 + .../20120718044955_create_user_open_ids.rb | 13 + ...mail_hashed_password_name_salt_to_users.rb | 30 + ...20720013733_add_username_lower_to_users.rb | 11 + .../20120720044246_add_auth_token_to_users.rb | 6 + ...120720162422_add_forum_id_to_categories.rb | 12 + ...23051512_add_not_nulls_to_user_open_ids.rb | 7 + ...0120724234502_add_last_seen_at_to_users.rb | 5 + .../20120724234711_add_website_to_users.rb | 5 + ...0120725183347_add_excerpt_to_categories.rb | 5 + ...726201830_add_invisible_to_forum_thread.rb | 12 + ...0120726235129_add_user_id_to_categories.rb | 7 + ...27005556_remove_excerpt_from_categories.rb | 9 + db/migrate/20120727150428_rename_invisible.rb | 9 + ...7213543_add_thread_counts_to_categories.rb | 11 + ...0802151210_add_icon_to_expression_types.rb | 7 + .../20120803191426_add_admin_flag_to_users.rb | 9 + ..._password_new_salt_email_token_to_users.rb | 9 + ...617_remove_new_password_stuff_from_user.rb | 6 + db/migrate/20120807223020_create_actions.rb | 25 + db/migrate/20120809020415_remove_site_id.rb | 22 + db/migrate/20120809030647_remove_forum_id.rb | 10 + ...0120809053414_correct_indexing_on_posts.rb | 23 + .../20120809154750_remove_index_for_now.rb | 11 + .../20120809174649_create_post_actions.rb | 21 + ...20120809175110_create_post_action_types.rb | 14 + ...01855_migrate_bookmarks_to_post_actions.rb | 14 + ...10064839_rename_actions_to_user_actions.rb | 5 + .../20120812235417_retire_expressions.rb | 20 + ...name_expression_columns_in_forum_thread.rb | 10 + ...2912_rename_expression_columns_in_posts.rb | 9 + ...3201426_create_forum_thread_link_clicks.rb | 13 + ..._add_unique_index_to_forum_thread_links.rb | 13 + .../20120815180106_add_post_type_to_posts.rb | 5 + ..._moderator_posts_count_to_forum_threads.rb | 10 + ...6_add_unique_constraint_to_user_actions.rb | 5 + .../20120816205537_add_forum_thread_states.rb | 7 + ...538_add_starred_at_to_forum_thread_user.rb | 20 + .../20120820191804_add_search_indices.rb | 11 + ...21191616_add_bumped_at_to_forum_threads.rb | 10 + .../20120823205956_add_slug_to_categories.rb | 7 + ...24171908_create_category_featured_users.rb | 11 + .../20120828204209_create_onebox_renders.rb | 12 + ...120828204624_create_post_onebox_renders.rb | 10 + ...830182736_add_preview_to_onebox_renders.rb | 9 + ...4_remove_description_from_site_settings.rb | 9 + .../20120918152319_rename_views_to_reads.rb | 9 + ...0918205931_add_sub_tag_to_forum_threads.rb | 14 + ...152846_add_has_best_of_to_forum_threads.rb | 8 + .../20120921055428_add_twitter_user_info.rb | 13 + .../20120921155050_create_archetypes.rb | 20 + ...21162512_add_meta_data_to_forum_threads.rb | 5 + ...20120921163606_create_archetype_options.rb | 17 + .../20120924182000_add_hstore_extension.rb | 9 + .../20120924182031_add_vote_count_to_posts.rb | 6 + ...0_remove_english_from_post_action_types.rb | 11 + ...90802_add_sequence_to_post_action_types.rb | 6 + .../20120928170023_add_sort_order_to_posts.rb | 13 + ...20121009161116_add_email_stuff_to_users.rb | 6 + .../20121011155904_create_email_logs.rb | 13 + .../20121017162924_convert_archetypes.rb | 14 + ...121018103721_rename_forum_thread_tables.rb | 40 + ...121018133039_create_topic_allowed_users.rb | 12 + .../20121018182709_fix_notification_data.rb | 8 + ...121106015500_drop_avatar_url_from_users.rb | 15 + ...516_add_post_action_id_to_notifications.rb | 6 + .../20121109164630_create_trust_levels.rb | 10 + .../20121113200844_bio_markdown_support.rb | 17 + ...121113200845_create_facebook_user_infos.rb | 19 + .../20121115172544_rename_sticky_to_pinned.rb | 9 + ...6212424_add_more_email_settings_to_user.rb | 6 + ...21119190529_add_email_settings_to_users.rb | 6 + ...0121119200843_add_email_direct_to_users.rb | 8 + db/migrate/20121121202035_create_invites.rb | 15 + .../20121121205215_create_topic_invites.rb | 12 + ...121122033316_add_muted_at_to_topic_user.rb | 7 + ...0121123054127_make_post_number_distinct.rb | 31 + .../20121123063630_create_user_visits.rb | 10 + .../20121129160035_create_email_tokens.rb | 13 + ...129184948_remove_email_token_from_users.rb | 14 + db/migrate/20121130010400_create_drafts.rb | 11 + ...0191818_add_link_post_id_to_topic_links.rb | 5 + ...1202225421_add_visited_at_to_topic_user.rb | 6 + ...21203181719_rename_seen_notificaiton_id.rb | 9 + db/migrate/20121204183855_fix_link_post_id.rb | 26 + ...747_add_another_featured_user_to_topics.rb | 5 + .../20121205162143_add_approved_to_users.rb | 7 + ...000741_add_notifications_to_topic_users.rb | 7 + ...121211233131_create_site_customizations.rb | 16 + ...ide_default_style_to_site_customization.rb | 6 + ...21218205642_add_topics_entered_to_users.rb | 6 + ...21224072204_add_last_editor_id_to_posts.rb | 5 + .../20121224095139_create_draft_sequence.rb | 10 + .../20121224100650_add_sequence_to_drafts.rb | 5 + ...0121228192219_add_deleted_at_to_invites.rb | 5 + ...07165207_add_digest_after_days_to_users.rb | 5 + ...08195847_add_previous_visit_at_to_users.rb | 5 + ...12140_merge_mute_options_on_topic_users.rb | 11 + ...7_correct_default_on_notification_level.rb | 5 + ...03_oops_unwatch_a_boat_of_watched_stuff.rb | 5 + ...130116151829_remove_sub_tag_from_topics.rb | 9 + db/migrate/20130120222728_fix_search.rb | 18 + ...30121231352_add_tracking_to_topic_users.rb | 8 + ...122051134_add_auto_track_topics_to_user.rb | 5 + ...ter_seconds_and_banning_and_dob_to_user.rb | 20 + ...070909_auto_track_all_topics_replied_to.rb | 15 + .../20130125002652_add_hidden_to_posts.rb | 6 + ...0130125030305_add_fields_to_post_action.rb | 6 + ...0125031122_correct_index_on_post_action.rb | 6 + .../20130127213646_remove_trust_levels.rb | 14 + ...20130128182013_trust_level_default_null.rb | 9 + .../20130129010625_remove_pm_reflections.rb | 8 + .../20130129163244_add_time_read_to_users.rb | 8 + ...0130129174845_add_days_visited_to_users.rb | 7 + .../20130130154611_remove_index_from_views.rb | 11 + ...1055710_add_custom_flag_count_to_topics.rb | 6 + ...dd_column_summaries_to_posts_and_topics.rb | 12 + ...023409_add_position_to_post_action_type.rb | 5 + ...0203204338_add_last_version_at_to_posts.rb | 9 + .../20130204000159_add_ip_address_to_users.rb | 8 + .../20130205021905_alter_facebook_user_id.rb | 9 + db/schema.rb | 341 + db/seeds.rb | 0 db/structure.sql | 2534 ++ dbs/.gitignore | 0 dbs/export/empty.tar.gz | Bin 0 -> 2275 bytes dbs/export/try.tar.gz | Bin 0 -> 3307 bytes dbs/sql/empty.sql.gz | Bin 0 -> 27383 bytes images/discourse.png | Bin 0 -> 2291 bytes jsapp | 1 + lib/admin_constraint.rb | 10 + lib/age_words.rb | 20 + lib/archetype.rb | 43 + lib/assets/.gitkeep | 0 lib/assets/quote_email.js.shbrs | 8 + lib/avatar_lookup.rb | 35 + lib/content_buffer.rb | 64 + lib/cooked_post_processor.rb | 93 + lib/current_user.rb | 32 + lib/custom_renderer.rb | 31 + lib/discourse.rb | 49 + lib/discourse_observer.rb | 48 + lib/discourse_plugin_registry.rb | 57 + lib/discourse_redis.rb | 44 + lib/distributed_hash.rb | 36 + lib/email.rb | 15 + lib/email_builder.rb | 20 + lib/email_sender.rb | 37 + lib/export/export.rb | 35 + lib/export/json_encoder.rb | 75 + lib/freedom_patches/active_record_base.rb | 24 + lib/freedom_patches/rails4.rb | 69 + lib/guardian.rb | 315 + lib/headless-ember.js | 29 + lib/image_sizer.rb | 17 + lib/imgur.rb | 24 + lib/import/adapter/base.rb | 31 + .../merge_mute_options_on_topic_users.rb | 28 + .../adapter/remove_sub_tag_from_topics.rb | 27 + lib/import/import.rb | 54 + lib/import/json_decoder.rb | 27 + lib/jobs.rb | 83 + lib/jobs/calculate_avg_time.rb | 12 + lib/jobs/calculate_score.rb | 13 + lib/jobs/calculate_view_counts.rb | 13 + lib/jobs/category_stats.rb | 11 + lib/jobs/enqueue_digest_emails.rb | 23 + lib/jobs/exporter.rb | 119 + lib/jobs/feature_threads.rb | 11 + lib/jobs/feature_topic_users.rb | 35 + lib/jobs/importer.rb | 289 + lib/jobs/invite_email.rb | 18 + lib/jobs/notify_moved_posts.rb | 31 + lib/jobs/process_post.rb | 25 + lib/jobs/send_system_message.rb | 21 + lib/jobs/test_email.rb | 18 + lib/jobs/user_email.rb | 71 + lib/markdown_linker.rb | 27 + lib/mothership.rb | 58 + lib/oneboxer.rb | 140 + lib/oneboxer/amazon_onebox.rb | 44 + lib/oneboxer/android_app_store_onebox.rb | 35 + lib/oneboxer/apple_app_onebox.rb | 37 + lib/oneboxer/base.rb | 45 + lib/oneboxer/base_onebox.rb | 48 + lib/oneboxer/bliptv_onebox.rb | 13 + lib/oneboxer/clikthrough_onebox.rb | 14 + lib/oneboxer/college_humor_onebox.rb | 14 + lib/oneboxer/dailymotion_onebox.rb | 14 + lib/oneboxer/discourse_onebox.rb | 88 + lib/oneboxer/dotsub_onebox.rb | 14 + lib/oneboxer/flickr_onebox.rb | 24 + lib/oneboxer/funny_or_die_onebox.rb | 10 + lib/oneboxer/gist_onebox.rb | 30 + lib/oneboxer/github_blob_onebox.rb | 49 + lib/oneboxer/handlebars_onebox.rb | 51 + lib/oneboxer/hulu_onebox.rb | 13 + lib/oneboxer/image_onebox.rb | 13 + lib/oneboxer/imgur_onebox.rb | 29 + lib/oneboxer/kinomap_onebox.rb | 14 + lib/oneboxer/nfb_onebox.rb | 14 + lib/oneboxer/oembed_onebox.rb | 52 + lib/oneboxer/open_graph_onebox.rb | 35 + lib/oneboxer/qik_onebox.rb | 13 + lib/oneboxer/revision_onebox.rb | 13 + lib/oneboxer/smugmug_onebox.rb | 13 + lib/oneboxer/ted_onebox.rb | 10 + .../templates/discourse_post_onebox.hbrs | 0 .../templates/discourse_topic_onebox.hbrs | 23 + .../templates/discourse_user_onebox.hbrs | 8 + lib/oneboxer/templates/gist_onebox.hbrs | 16 + .../templates/github_blob_onebox.hbrs | 15 + lib/oneboxer/templates/oembed_onebox.hbrs | 17 + lib/oneboxer/templates/simple_onebox.hbrs | 18 + lib/oneboxer/templates/twitter_onebox.hbrs | 24 + lib/oneboxer/twitter_onebox.rb | 30 + lib/oneboxer/viddler_onebox.rb | 13 + lib/oneboxer/vimeo_onebox.rb | 13 + lib/oneboxer/whitelist.rb | 86 + lib/oneboxer/wikipedia_onebox.rb | 59 + lib/oneboxer/yfrog_onebox.rb | 13 + lib/post_creator.rb | 98 + lib/pretty_text.rb | 266 + lib/promotion.rb | 35 + lib/rate_limiter.rb | 53 + lib/rate_limiter/limit_exceeded.rb | 11 + lib/rate_limiter/on_create_record.rb | 61 + lib/remote_ip_improved.rb | 129 + lib/score_calculator.rb | 58 + lib/search.rb | 168 + lib/site_setting_extension.rb | 230 + lib/slug.rb | 30 + lib/sql_builder.rb | 48 + lib/system_message.rb | 47 + lib/tasks/add_topic_to_quotes.rake | 9 + lib/tasks/build_test_topic.rake | 50 + lib/tasks/cdn.rake | 40 + lib/tasks/export.rake | 49 + lib/tasks/images.rake | 12 + lib/tasks/posts.rake | 23 + lib/tasks/search.rake | 42 + lib/tasks/user_actions.rake | 13 + lib/topic_query.rb | 156 + lib/topic_view.rb | 206 + lib/trust_level.rb | 28 + lib/unread.rb | 33 + lib/version.rb | 10 + log/.gitkeep | 0 public/403.html | 27 + public/404.html | 25 + public/404.json | 1 + public/422.html | 26 + public/500.html | 12 + public/503.html | 11 + public/favicon.ico | Bin 0 -> 198 bytes .../javascripts/highlight-handlebars.pack.js | 1 + public/robots.txt | 5 + script/rails | 6 + spec/components/archetype_spec.rb | 51 + spec/components/category_list_spec.rb | 72 + spec/components/content_buffer_spec.rb | 29 + spec/components/cooked_post_processor_spec.rb | 97 + .../discourse_plugin_registry_spec.rb | 43 + spec/components/discourse_spec.rb | 56 + spec/components/distributed_hash_spec.rb | 12 + spec/components/email_sender_spec.rb | 119 + spec/components/email_spec.rb | 22 + spec/components/export/export_spec.rb | 37 + spec/components/export/json_encoder_spec.rb | 146 + spec/components/guardian_spec.rb | 728 + spec/components/image_sizer_spec.rb | 42 + spec/components/import/adapter/base_spec.rb | 24 + spec/components/import/import_spec.rb | 66 + spec/components/import/json_decoder_spec.rb | 62 + .../jobs/calculate_view_counts_spec.rb | 12 + .../jobs/enqueue_digest_emails_spec.rb | 61 + spec/components/jobs/exporter_spec.rb | 190 + .../jobs/feature_topic_users_spec.rb | 44 + spec/components/jobs/importer_spec.rb | 541 + spec/components/jobs/invite_email_spec.rb | 29 + spec/components/jobs/jobs_base_spec.rb | 17 + .../jobs/notify_moved_posts_spec.rb | 36 + spec/components/jobs/process_post_spec.rb | 37 + .../jobs/send_system_message_spec.rb | 26 + spec/components/jobs/test_email_spec.rb | 27 + spec/components/jobs/user_email_spec.rb | 97 + spec/components/jobs_spec.rb | 79 + spec/components/mothership_spec.rb | 64 + spec/components/oneboxer_spec.rb | 132 + spec/components/post_creator_spec.rb | 103 + spec/components/pretty_text_spec.rb | 143 + spec/components/promotion_spec.rb | 48 + spec/components/rate_limiter_spec.rb | 103 + spec/components/score_calculator_spec.rb | 49 + spec/components/search_spec.rb | 182 + spec/components/slug_spec.rb | 32 + spec/components/sql_builder_spec.rb | 35 + spec/components/system_message_spec.rb | 43 + spec/components/topic_query_spec.rb | 260 + spec/components/topic_view_spec.rb | 234 + spec/components/unread_spec.rb | 64 + .../admin/admin_controller_spec.rb | 20 + .../admin/email_logs_controller_spec.rb | 37 + .../admin/export_controller_spec.rb | 57 + .../admin/flags_controller_spec.rb | 37 + .../admin/impersonate_controller_spec.rb | 68 + .../site_customizations_controller_spec.rb | 42 + .../admin/site_settings_controller_spec.rb | 43 + .../admin/users_controller_spec.rb | 118 + .../admin/versions_controller_spec.rb | 55 + .../controllers/categories_controller_spec.rb | 147 + spec/controllers/clicks_controller_spec.rb | 64 + spec/controllers/draft_controller_spec.rb | 22 + spec/controllers/email_controller_spec.rb | 99 + spec/controllers/excerpt_controller_spec.rb | 82 + spec/controllers/invites_controller_spec.rb | 151 + spec/controllers/list_controller_spec.rb | 87 + .../notifications_controller_spec.rb | 22 + spec/controllers/onebox_controller_spec.rb | 15 + .../post_actions_controller_spec.rb | 127 + spec/controllers/posts_controller_spec.rb | 278 + .../request_access_controller_spec.rb | 56 + spec/controllers/search_controller_spec.rb | 16 + spec/controllers/session_controller_spec.rb | 130 + spec/controllers/static_controller_spec.rb | 27 + spec/controllers/topics_controller_spec.rb | 419 + spec/controllers/users_controller_spec.rb | 635 + spec/fabricators/category_fabricator.rb | 4 + spec/fabricators/incoming_link_fabricator.rb | 9 + spec/fabricators/invite_fabricator.rb | 4 + spec/fabricators/notification_fabricator.rb | 18 + spec/fabricators/post_fabricator.rb | 74 + spec/fabricators/topic_fabricator.rb | 17 + spec/fabricators/user_action_fabricator.rb | 6 + spec/fabricators/user_fabricator.rb | 51 + spec/integrity/i18n_spec.rb | 25 + spec/javascripts/bbcode_spec.js.coffee | 138 + .../key_value_store_spec.js.coffee | 17 + spec/javascripts/message_bus_spec.js.coffee | 24 + spec/javascripts/preload_store_spec.js.coffee | 81 + spec/javascripts/spec.css | 3 + spec/javascripts/spec.js | 11 + spec/javascripts/utilities_spec.js.coffee | 82 + spec/mailers/invite_mailer_spec.rb | 16 + spec/mailers/test_mailer_spec.rb | 15 + spec/mailers/user_notifications_spec.rb | 60 + spec/models/category_featured_topic_spec.rb | 9 + spec/models/category_featured_user_spec.rb | 26 + spec/models/category_spec.rb | 175 + spec/models/draft_sequence_spec.rb | 14 + spec/models/draft_spec.rb | 81 + spec/models/email_log_spec.rb | 24 + spec/models/email_token_spec.rb | 128 + spec/models/error_log_spec.rb | 58 + spec/models/incoming_link_spec.rb | 75 + spec/models/invite_spec.rb | 286 + spec/models/message_bus_observer_spec.rb | 18 + spec/models/notification_spec.rb | 111 + spec/models/onebox_render_spec.rb | 11 + spec/models/post_action_spec.rb | 159 + spec/models/post_action_type_spec.rb | 5 + spec/models/post_alert_observer_spec.rb | 104 + spec/models/post_onebox_render_spec.rb | 8 + spec/models/post_reply_spec.rb | 8 + spec/models/post_spec.rb | 704 + spec/models/post_timing_spec.rb | 113 + spec/models/site_customization_spec.rb | 64 + spec/models/site_setting_spec.rb | 110 + spec/models/topic_allowed_user_spec.rb | 6 + spec/models/topic_invite_spec.rb | 10 + spec/models/topic_link_click_spec.rb | 130 + spec/models/topic_link_spec.rb | 206 + spec/models/topic_spec.rb | 960 + spec/models/topic_user_spec.rb | 199 + spec/models/upload_spec.rb | 9 + spec/models/user_action_spec.rb | 174 + spec/models/user_email_observer_spec.rb | 77 + spec/models/user_open_id_spec.rb | 8 + spec/models/user_spec.rb | 586 + spec/models/user_visit_spec.rb | 4 + spec/models/view_spec.rb | 13 + spec/requests/store_incoming_spec.rb | 45 + spec/spec_helper.rb | 122 + spec/support/rate_limit_matcher.rb | 5 + sublime-project | 23 + vendor/backports/notification.rb | 368 + vendor/gems/discourse_emoji/Gemfile | 13 + vendor/gems/discourse_emoji/Gemfile.lock | 111 + vendor/gems/discourse_emoji/LICENSE | 14 + vendor/gems/discourse_emoji/README.md | 3 + vendor/gems/discourse_emoji/Rakefile | 7 + .../discourse_emoji/discourse_emoji.gemspec | 19 + .../discourse_emoji/lib/discourse_emoji.rb | 2 + .../lib/discourse_emoji/engine.rb | 16 + .../lib/discourse_emoji/plugin.rb | 15 + .../lib/discourse_emoji/version.rb | 3 + .../gems/discourse_emoji/spec/plugin_spec.rb | 24 + .../gems/discourse_emoji/spec/spec_helper.rb | 13 + .../vendor/assets/images/emoji/+1.png | 1 + .../vendor/assets/images/emoji/-1.png | 1 + .../vendor/assets/images/emoji/100.png | 1 + .../vendor/assets/images/emoji/109.png | 1 + .../vendor/assets/images/emoji/1234.png | 1 + .../vendor/assets/images/emoji/8ball.png | 1 + .../vendor/assets/images/emoji/a.png | 1 + .../vendor/assets/images/emoji/ab.png | 1 + .../vendor/assets/images/emoji/abc.png | 1 + .../vendor/assets/images/emoji/abcd.png | 1 + .../vendor/assets/images/emoji/accept.png | 1 + .../assets/images/emoji/aerial_tramway.png | 1 + .../vendor/assets/images/emoji/airplane.png | 1 + .../assets/images/emoji/alarm_clock.png | 1 + .../vendor/assets/images/emoji/alien.png | 1 + .../vendor/assets/images/emoji/ambulance.png | 1 + .../vendor/assets/images/emoji/anchor.png | 1 + .../vendor/assets/images/emoji/angel.png | 1 + .../vendor/assets/images/emoji/anger.png | 1 + .../vendor/assets/images/emoji/angry.png | 1 + .../vendor/assets/images/emoji/ant.png | 1 + .../vendor/assets/images/emoji/apple.png | 1 + .../vendor/assets/images/emoji/aquarius.png | 1 + .../vendor/assets/images/emoji/aries.png | 1 + .../assets/images/emoji/arrow_backward.png | 1 + .../assets/images/emoji/arrow_double_down.png | 1 + .../assets/images/emoji/arrow_double_up.png | 1 + .../vendor/assets/images/emoji/arrow_down.png | 1 + .../assets/images/emoji/arrow_down_small.png | 1 + .../assets/images/emoji/arrow_forward.png | 1 + .../images/emoji/arrow_heading_down.png | 1 + .../assets/images/emoji/arrow_heading_up.png | 1 + .../vendor/assets/images/emoji/arrow_left.png | 1 + .../assets/images/emoji/arrow_lower_left.png | 1 + .../assets/images/emoji/arrow_lower_right.png | 1 + .../assets/images/emoji/arrow_right.png | 1 + .../assets/images/emoji/arrow_right_hook.png | 1 + .../vendor/assets/images/emoji/arrow_up.png | 1 + .../assets/images/emoji/arrow_up_down.png | 1 + .../assets/images/emoji/arrow_up_small.png | 1 + .../assets/images/emoji/arrow_upper_left.png | 1 + .../assets/images/emoji/arrow_upper_right.png | 1 + .../assets/images/emoji/arrows_clockwise.png | 1 + .../images/emoji/arrows_counterclockwise.png | 1 + .../vendor/assets/images/emoji/art.png | 1 + .../assets/images/emoji/articulated_lorry.png | 1 + .../vendor/assets/images/emoji/astonished.png | 1 + .../vendor/assets/images/emoji/atm.png | 1 + .../vendor/assets/images/emoji/b.png | 1 + .../vendor/assets/images/emoji/baby.png | 1 + .../assets/images/emoji/baby_bottle.png | 1 + .../vendor/assets/images/emoji/baby_chick.png | 1 + .../assets/images/emoji/baby_symbol.png | 1 + .../assets/images/emoji/baggage_claim.png | 1 + .../vendor/assets/images/emoji/balloon.png | 1 + .../images/emoji/ballot_box_with_check.png | 1 + .../vendor/assets/images/emoji/bamboo.png | 1 + .../vendor/assets/images/emoji/banana.png | 1 + .../vendor/assets/images/emoji/bangbang.png | 1 + .../vendor/assets/images/emoji/bank.png | 1 + .../vendor/assets/images/emoji/bar_chart.png | 1 + .../vendor/assets/images/emoji/barber.png | 1 + .../vendor/assets/images/emoji/baseball.png | 1 + .../vendor/assets/images/emoji/basketball.png | 1 + .../vendor/assets/images/emoji/bath.png | 1 + .../vendor/assets/images/emoji/bathtub.png | 1 + .../vendor/assets/images/emoji/battery.png | 1 + .../vendor/assets/images/emoji/bear.png | 1 + .../vendor/assets/images/emoji/bee.png | 1 + .../vendor/assets/images/emoji/beer.png | 1 + .../vendor/assets/images/emoji/beers.png | 1 + .../vendor/assets/images/emoji/beetle.png | 1 + .../vendor/assets/images/emoji/beginner.png | 1 + .../vendor/assets/images/emoji/bell.png | 1 + .../vendor/assets/images/emoji/bento.png | 1 + .../vendor/assets/images/emoji/bicyclist.png | 1 + .../vendor/assets/images/emoji/bike.png | 1 + .../vendor/assets/images/emoji/bikini.png | 1 + .../vendor/assets/images/emoji/bird.png | 1 + .../vendor/assets/images/emoji/birthday.png | 1 + .../assets/images/emoji/black_circle.png | 1 + .../assets/images/emoji/black_joker.png | 1 + .../vendor/assets/images/emoji/black_nib.png | 1 + .../assets/images/emoji/black_square.png | 1 + .../vendor/assets/images/emoji/blossom.png | 1 + .../vendor/assets/images/emoji/blowfish.png | 1 + .../vendor/assets/images/emoji/blue_book.png | 1 + .../vendor/assets/images/emoji/blue_car.png | 1 + .../vendor/assets/images/emoji/blue_heart.png | 1 + .../vendor/assets/images/emoji/blush.png | 1 + .../vendor/assets/images/emoji/boar.png | 1 + .../vendor/assets/images/emoji/boat.png | 1 + .../vendor/assets/images/emoji/bomb.png | 1 + .../vendor/assets/images/emoji/book.png | 1 + .../vendor/assets/images/emoji/bookmark.png | 1 + .../assets/images/emoji/bookmark_tabs.png | 1 + .../vendor/assets/images/emoji/books.png | 1 + .../vendor/assets/images/emoji/boom.png | 1 + .../vendor/assets/images/emoji/boot.png | 1 + .../vendor/assets/images/emoji/bouquet.png | 1 + .../vendor/assets/images/emoji/bow.png | 1 + .../vendor/assets/images/emoji/bowling.png | 1 + .../vendor/assets/images/emoji/bowtie.png | Bin 0 -> 6478 bytes .../vendor/assets/images/emoji/boy.png | 1 + .../vendor/assets/images/emoji/bread.png | 1 + .../assets/images/emoji/bride_with_veil.png | 1 + .../assets/images/emoji/bridge_at_night.png | 1 + .../vendor/assets/images/emoji/briefcase.png | 1 + .../assets/images/emoji/broken_heart.png | 1 + .../vendor/assets/images/emoji/bug.png | 1 + .../vendor/assets/images/emoji/bulb.png | 1 + .../assets/images/emoji/bullettrain_front.png | 1 + .../assets/images/emoji/bullettrain_side.png | 1 + .../vendor/assets/images/emoji/bus.png | 1 + .../vendor/assets/images/emoji/busstop.png | 1 + .../images/emoji/bust_in_silhouette.png | 1 + .../images/emoji/busts_in_silhouette.png | 1 + .../vendor/assets/images/emoji/cactus.png | 1 + .../vendor/assets/images/emoji/cake.png | 1 + .../vendor/assets/images/emoji/calendar.png | 1 + .../vendor/assets/images/emoji/calling.png | 1 + .../vendor/assets/images/emoji/camel.png | 1 + .../vendor/assets/images/emoji/camera.png | 1 + .../vendor/assets/images/emoji/cancer.png | 1 + .../vendor/assets/images/emoji/candy.png | 1 + .../assets/images/emoji/capital_abcd.png | 1 + .../vendor/assets/images/emoji/capricorn.png | 1 + .../vendor/assets/images/emoji/car.png | 1 + .../vendor/assets/images/emoji/card_index.png | 1 + .../assets/images/emoji/carousel_horse.png | 1 + .../vendor/assets/images/emoji/cat.png | 1 + .../vendor/assets/images/emoji/cat2.png | 1 + .../vendor/assets/images/emoji/cd.png | 1 + .../vendor/assets/images/emoji/chart.png | 1 + .../emoji/chart_with_downwards_trend.png | 1 + .../images/emoji/chart_with_upwards_trend.png | 1 + .../assets/images/emoji/checkered_flag.png | 1 + .../vendor/assets/images/emoji/cherries.png | 1 + .../assets/images/emoji/cherry_blossom.png | 1 + .../vendor/assets/images/emoji/chestnut.png | 1 + .../vendor/assets/images/emoji/chicken.png | 1 + .../assets/images/emoji/children_crossing.png | 1 + .../assets/images/emoji/chocolate_bar.png | 1 + .../assets/images/emoji/christmas_tree.png | 1 + .../vendor/assets/images/emoji/church.png | 1 + .../vendor/assets/images/emoji/cinema.png | 1 + .../assets/images/emoji/circus_tent.png | 1 + .../assets/images/emoji/city_sunrise.png | 1 + .../assets/images/emoji/city_sunset.png | 1 + .../vendor/assets/images/emoji/cl.png | 1 + .../vendor/assets/images/emoji/clap.png | 1 + .../vendor/assets/images/emoji/clapper.png | 1 + .../vendor/assets/images/emoji/clipboard.png | 1 + .../vendor/assets/images/emoji/clock1.png | 1 + .../vendor/assets/images/emoji/clock10.png | 1 + .../vendor/assets/images/emoji/clock1030.png | 1 + .../vendor/assets/images/emoji/clock11.png | 1 + .../vendor/assets/images/emoji/clock1130.png | 1 + .../vendor/assets/images/emoji/clock12.png | 1 + .../vendor/assets/images/emoji/clock1230.png | 1 + .../vendor/assets/images/emoji/clock130.png | 1 + .../vendor/assets/images/emoji/clock2.png | 1 + .../vendor/assets/images/emoji/clock230.png | 1 + .../vendor/assets/images/emoji/clock3.png | 1 + .../vendor/assets/images/emoji/clock330.png | 1 + .../vendor/assets/images/emoji/clock4.png | 1 + .../vendor/assets/images/emoji/clock430.png | 1 + .../vendor/assets/images/emoji/clock5.png | 1 + .../vendor/assets/images/emoji/clock530.png | 1 + .../vendor/assets/images/emoji/clock6.png | 1 + .../vendor/assets/images/emoji/clock630.png | 1 + .../vendor/assets/images/emoji/clock7.png | 1 + .../vendor/assets/images/emoji/clock730.png | 1 + .../vendor/assets/images/emoji/clock8.png | 1 + .../vendor/assets/images/emoji/clock830.png | 1 + .../vendor/assets/images/emoji/clock9.png | 1 + .../vendor/assets/images/emoji/clock930.png | 1 + .../assets/images/emoji/closed_book.png | 1 + .../images/emoji/closed_lock_with_key.png | 1 + .../assets/images/emoji/closed_umbrella.png | 1 + .../vendor/assets/images/emoji/cloud.png | 1 + .../vendor/assets/images/emoji/clubs.png | 1 + .../vendor/assets/images/emoji/cn.png | 1 + .../vendor/assets/images/emoji/cocktail.png | 1 + .../vendor/assets/images/emoji/coffee.png | 1 + .../vendor/assets/images/emoji/cold_sweat.png | 1 + .../vendor/assets/images/emoji/collision.png | 1 + .../vendor/assets/images/emoji/computer.png | 1 + .../assets/images/emoji/confetti_ball.png | 1 + .../vendor/assets/images/emoji/confounded.png | 1 + .../assets/images/emoji/congratulations.png | 1 + .../assets/images/emoji/construction.png | 1 + .../images/emoji/construction_worker.png | 1 + .../assets/images/emoji/convenience_store.png | 1 + .../vendor/assets/images/emoji/cookie.png | 1 + .../vendor/assets/images/emoji/cool.png | 1 + .../vendor/assets/images/emoji/cop.png | 1 + .../vendor/assets/images/emoji/copyright.png | 1 + .../vendor/assets/images/emoji/corn.png | 1 + .../vendor/assets/images/emoji/couple.png | 1 + .../assets/images/emoji/couple_with_heart.png | 1 + .../vendor/assets/images/emoji/couplekiss.png | 1 + .../vendor/assets/images/emoji/cow.png | 1 + .../vendor/assets/images/emoji/cow2.png | 1 + .../assets/images/emoji/credit_card.png | 1 + .../vendor/assets/images/emoji/crocodile.png | 1 + .../assets/images/emoji/crossed_flags.png | 1 + .../vendor/assets/images/emoji/crown.png | 1 + .../vendor/assets/images/emoji/cry.png | 1 + .../assets/images/emoji/crying_cat_face.png | 1 + .../assets/images/emoji/crystal_ball.png | 1 + .../vendor/assets/images/emoji/cupid.png | 1 + .../vendor/assets/images/emoji/curly_loop.png | 1 + .../assets/images/emoji/currency_exchange.png | 1 + .../vendor/assets/images/emoji/curry.png | 1 + .../vendor/assets/images/emoji/custard.png | 1 + .../vendor/assets/images/emoji/customs.png | 1 + .../vendor/assets/images/emoji/cyclone.png | 1 + .../vendor/assets/images/emoji/dancer.png | 1 + .../vendor/assets/images/emoji/dancers.png | 1 + .../vendor/assets/images/emoji/dango.png | 1 + .../vendor/assets/images/emoji/dart.png | 1 + .../vendor/assets/images/emoji/dash.png | 1 + .../vendor/assets/images/emoji/date.png | 1 + .../vendor/assets/images/emoji/de.png | 1 + .../assets/images/emoji/deciduous_tree.png | 1 + .../assets/images/emoji/department_store.png | 1 + .../emoji/diamond_shape_with_a_dot_inside.png | 1 + .../vendor/assets/images/emoji/diamonds.png | 1 + .../assets/images/emoji/disappointed.png | 1 + .../vendor/assets/images/emoji/dizzy.png | 1 + .../vendor/assets/images/emoji/dizzy_face.png | 1 + .../assets/images/emoji/do_not_litter.png | 1 + .../vendor/assets/images/emoji/dog.png | 1 + .../vendor/assets/images/emoji/dog2.png | 1 + .../vendor/assets/images/emoji/dollar.png | 1 + .../vendor/assets/images/emoji/dolls.png | 1 + .../vendor/assets/images/emoji/dolphin.png | 1 + .../vendor/assets/images/emoji/door.png | 1 + .../vendor/assets/images/emoji/doughnut.png | 1 + .../vendor/assets/images/emoji/dragon.png | 1 + .../assets/images/emoji/dragon_face.png | 1 + .../vendor/assets/images/emoji/dress.png | 1 + .../assets/images/emoji/dromedary_camel.png | 1 + .../vendor/assets/images/emoji/droplet.png | 1 + .../vendor/assets/images/emoji/dvd.png | 1 + .../vendor/assets/images/emoji/e-mail.png | 1 + .../vendor/assets/images/emoji/ear.png | 1 + .../assets/images/emoji/ear_of_rice.png | 1 + .../assets/images/emoji/earth_africa.png | 1 + .../assets/images/emoji/earth_americas.png | 1 + .../vendor/assets/images/emoji/earth_asia.png | 1 + .../vendor/assets/images/emoji/egg.png | 1 + .../vendor/assets/images/emoji/eggplant.png | 1 + .../vendor/assets/images/emoji/eight.png | 1 + .../images/emoji/eight_pointed_black_star.png | 1 + .../images/emoji/eight_spoked_asterisk.png | 1 + .../assets/images/emoji/electric_plug.png | 1 + .../vendor/assets/images/emoji/elephant.png | 1 + .../vendor/assets/images/emoji/email.png | 1 + .../vendor/assets/images/emoji/end.png | 1 + .../vendor/assets/images/emoji/envelope.png | 1 + .../vendor/assets/images/emoji/es.png | 1 + .../vendor/assets/images/emoji/euro.png | 1 + .../assets/images/emoji/european_castle.png | 1 + .../images/emoji/european_post_office.png | 1 + .../assets/images/emoji/evergreen_tree.png | 1 + .../assets/images/emoji/exclamation.png | 1 + .../vendor/assets/images/emoji/eyeglasses.png | 1 + .../vendor/assets/images/emoji/eyes.png | 1 + .../vendor/assets/images/emoji/facepunch.png | 1 + .../vendor/assets/images/emoji/factory.png | 1 + .../assets/images/emoji/fallen_leaf.png | 1 + .../vendor/assets/images/emoji/family.png | 1 + .../assets/images/emoji/fast_forward.png | 1 + .../vendor/assets/images/emoji/fax.png | 1 + .../vendor/assets/images/emoji/fearful.png | 1 + .../vendor/assets/images/emoji/feelsgood.png | Bin 0 -> 1163 bytes .../vendor/assets/images/emoji/feet.png | 1 + .../assets/images/emoji/ferris_wheel.png | 1 + .../assets/images/emoji/file_folder.png | 1 + .../vendor/assets/images/emoji/finnadie.png | Bin 0 -> 1208 bytes .../vendor/assets/images/emoji/fire.png | 1 + .../assets/images/emoji/fire_engine.png | 1 + .../vendor/assets/images/emoji/fireworks.png | 1 + .../images/emoji/first_quarter_moon.png | 1 + .../emoji/first_quarter_moon_with_face.png | 1 + .../vendor/assets/images/emoji/fish.png | 1 + .../vendor/assets/images/emoji/fish_cake.png | 1 + .../images/emoji/fishing_pole_and_fish.png | 1 + .../vendor/assets/images/emoji/fist.png | 1 + .../vendor/assets/images/emoji/five.png | 1 + .../vendor/assets/images/emoji/flags.png | 1 + .../vendor/assets/images/emoji/flashlight.png | 1 + .../assets/images/emoji/floppy_disk.png | 1 + .../images/emoji/flower_playing_cards.png | 1 + .../vendor/assets/images/emoji/flushed.png | 1 + .../vendor/assets/images/emoji/foggy.png | 1 + .../vendor/assets/images/emoji/football.png | 1 + .../assets/images/emoji/fork_and_knife.png | 1 + .../vendor/assets/images/emoji/fountain.png | 1 + .../vendor/assets/images/emoji/four.png | 1 + .../assets/images/emoji/four_leaf_clover.png | 1 + .../vendor/assets/images/emoji/fr.png | 1 + .../vendor/assets/images/emoji/free.png | 1 + .../assets/images/emoji/fried_shrimp.png | 1 + .../vendor/assets/images/emoji/fries.png | 1 + .../vendor/assets/images/emoji/frog.png | 1 + .../vendor/assets/images/emoji/fuelpump.png | 1 + .../vendor/assets/images/emoji/full_moon.png | 1 + .../images/emoji/full_moon_with_face.png | 1 + .../vendor/assets/images/emoji/game_die.png | 1 + .../vendor/assets/images/emoji/gb.png | 1 + .../vendor/assets/images/emoji/gem.png | 1 + .../vendor/assets/images/emoji/gemini.png | 1 + .../vendor/assets/images/emoji/ghost.png | 1 + .../vendor/assets/images/emoji/gift.png | 1 + .../vendor/assets/images/emoji/gift_heart.png | 1 + .../vendor/assets/images/emoji/girl.png | 1 + .../images/emoji/globe_with_meridians.png | 1 + .../vendor/assets/images/emoji/goat.png | 1 + .../vendor/assets/images/emoji/goberserk.png | Bin 0 -> 1334 bytes .../vendor/assets/images/emoji/godmode.png | Bin 0 -> 1042 bytes .../vendor/assets/images/emoji/golf.png | 1 + .../vendor/assets/images/emoji/grapes.png | 1 + .../assets/images/emoji/green_apple.png | 1 + .../vendor/assets/images/emoji/green_book.png | 1 + .../assets/images/emoji/green_heart.png | 1 + .../assets/images/emoji/grey_exclamation.png | 1 + .../assets/images/emoji/grey_question.png | 1 + .../vendor/assets/images/emoji/grin.png | 1 + .../vendor/assets/images/emoji/guardsman.png | 1 + .../vendor/assets/images/emoji/guitar.png | 1 + .../vendor/assets/images/emoji/gun.png | 1 + .../vendor/assets/images/emoji/haircut.png | 1 + .../vendor/assets/images/emoji/hamburger.png | 1 + .../vendor/assets/images/emoji/hammer.png | 1 + .../vendor/assets/images/emoji/hamster.png | 1 + .../vendor/assets/images/emoji/hand.png | 1 + .../vendor/assets/images/emoji/handbag.png | 1 + .../vendor/assets/images/emoji/hankey.png | 1 + .../vendor/assets/images/emoji/hash.png | 1 + .../assets/images/emoji/hatched_chick.png | 1 + .../assets/images/emoji/hatching_chick.png | 1 + .../vendor/assets/images/emoji/headphones.png | 1 + .../assets/images/emoji/hear_no_evil.png | 1 + .../vendor/assets/images/emoji/heart.png | 1 + .../assets/images/emoji/heart_decoration.png | 1 + .../vendor/assets/images/emoji/heart_eyes.png | 1 + .../assets/images/emoji/heart_eyes_cat.png | 1 + .../vendor/assets/images/emoji/heartbeat.png | 1 + .../vendor/assets/images/emoji/heartpulse.png | 1 + .../vendor/assets/images/emoji/hearts.png | 1 + .../assets/images/emoji/heavy_check_mark.png | 1 + .../images/emoji/heavy_division_sign.png | 1 + .../assets/images/emoji/heavy_dollar_sign.png | 1 + .../images/emoji/heavy_exclamation_mark.png | 1 + .../assets/images/emoji/heavy_minus_sign.png | 1 + .../images/emoji/heavy_multiplication_x.png | 1 + .../assets/images/emoji/heavy_plus_sign.png | 1 + .../vendor/assets/images/emoji/helicopter.png | 1 + .../vendor/assets/images/emoji/herb.png | 1 + .../vendor/assets/images/emoji/hibiscus.png | 1 + .../assets/images/emoji/high_brightness.png | 1 + .../vendor/assets/images/emoji/high_heel.png | 1 + .../vendor/assets/images/emoji/hocho.png | 1 + .../vendor/assets/images/emoji/honey_pot.png | 1 + .../vendor/assets/images/emoji/honeybee.png | 1 + .../vendor/assets/images/emoji/horse.png | 1 + .../assets/images/emoji/horse_racing.png | 1 + .../vendor/assets/images/emoji/hospital.png | 1 + .../vendor/assets/images/emoji/hotel.png | 1 + .../vendor/assets/images/emoji/hotsprings.png | 1 + .../vendor/assets/images/emoji/hourglass.png | 1 + .../vendor/assets/images/emoji/house.png | 1 + .../assets/images/emoji/hurtrealbad.png | Bin 0 -> 1456 bytes .../vendor/assets/images/emoji/ice_cream.png | 1 + .../vendor/assets/images/emoji/icecream.png | 1 + .../vendor/assets/images/emoji/id.png | 1 + .../images/emoji/ideograph_advantage.png | 1 + .../vendor/assets/images/emoji/imp.png | 1 + .../vendor/assets/images/emoji/inbox_tray.png | 1 + .../assets/images/emoji/incoming_envelope.png | 1 + .../images/emoji/information_desk_person.png | 1 + .../images/emoji/information_source.png | 1 + .../vendor/assets/images/emoji/innocent.png | 1 + .../assets/images/emoji/interrobang.png | 1 + .../vendor/assets/images/emoji/iphone.png | 1 + .../vendor/assets/images/emoji/it.png | 1 + .../assets/images/emoji/izakaya_lantern.png | 1 + .../assets/images/emoji/jack_o_lantern.png | 1 + .../vendor/assets/images/emoji/japan.png | 1 + .../assets/images/emoji/japanese_castle.png | 1 + .../assets/images/emoji/japanese_goblin.png | 1 + .../assets/images/emoji/japanese_ogre.png | 1 + .../vendor/assets/images/emoji/jeans.png | 1 + .../vendor/assets/images/emoji/joy.png | 1 + .../vendor/assets/images/emoji/joy_cat.png | 1 + .../vendor/assets/images/emoji/jp.png | 1 + .../vendor/assets/images/emoji/key.png | 1 + .../vendor/assets/images/emoji/keycap_ten.png | 1 + .../vendor/assets/images/emoji/kimono.png | 1 + .../vendor/assets/images/emoji/kiss.png | 1 + .../assets/images/emoji/kissing_cat.png | 1 + .../assets/images/emoji/kissing_face.png | 1 + .../assets/images/emoji/kissing_heart.png | 1 + .../vendor/assets/images/emoji/koala.png | 1 + .../vendor/assets/images/emoji/koko.png | 1 + .../vendor/assets/images/emoji/kr.png | 1 + .../assets/images/emoji/large_blue_circle.png | 1 + .../images/emoji/large_blue_diamond.png | 1 + .../images/emoji/large_orange_diamond.png | 1 + .../assets/images/emoji/last_quarter_moon.png | 1 + .../emoji/last_quarter_moon_with_face.png | 1 + .../vendor/assets/images/emoji/laughing.png | 1 + .../vendor/assets/images/emoji/leaves.png | 1 + .../vendor/assets/images/emoji/ledger.png | 1 + .../assets/images/emoji/left_luggage.png | 1 + .../assets/images/emoji/left_right_arrow.png | 1 + .../emoji/leftwards_arrow_with_hook.png | 1 + .../vendor/assets/images/emoji/lemon.png | 1 + .../vendor/assets/images/emoji/leo.png | 1 + .../vendor/assets/images/emoji/leopard.png | 1 + .../vendor/assets/images/emoji/libra.png | 1 + .../vendor/assets/images/emoji/light_rail.png | 1 + .../vendor/assets/images/emoji/link.png | 1 + .../vendor/assets/images/emoji/lips.png | 1 + .../vendor/assets/images/emoji/lipstick.png | 1 + .../vendor/assets/images/emoji/lock.png | 1 + .../assets/images/emoji/lock_with_ink_pen.png | 1 + .../vendor/assets/images/emoji/lollipop.png | 1 + .../vendor/assets/images/emoji/loop.png | 1 + .../assets/images/emoji/loudspeaker.png | 1 + .../vendor/assets/images/emoji/love_hotel.png | 1 + .../assets/images/emoji/love_letter.png | 1 + .../assets/images/emoji/low_brightness.png | 1 + .../vendor/assets/images/emoji/m.png | 1 + .../vendor/assets/images/emoji/mag.png | 1 + .../vendor/assets/images/emoji/mag_right.png | 1 + .../vendor/assets/images/emoji/mahjong.png | 1 + .../vendor/assets/images/emoji/mailbox.png | 1 + .../assets/images/emoji/mailbox_closed.png | 1 + .../assets/images/emoji/mailbox_with_mail.png | 1 + .../images/emoji/mailbox_with_no_mail.png | 1 + .../vendor/assets/images/emoji/man.png | 1 + .../images/emoji/man_with_gua_pi_mao.png | 1 + .../assets/images/emoji/man_with_turban.png | 1 + .../vendor/assets/images/emoji/mans_shoe.png | 1 + .../vendor/assets/images/emoji/maple_leaf.png | 1 + .../vendor/assets/images/emoji/mask.png | 1 + .../vendor/assets/images/emoji/massage.png | 1 + .../assets/images/emoji/meat_on_bone.png | 1 + .../vendor/assets/images/emoji/mega.png | 1 + .../vendor/assets/images/emoji/melon.png | 1 + .../vendor/assets/images/emoji/memo.png | 1 + .../vendor/assets/images/emoji/mens.png | 1 + .../vendor/assets/images/emoji/metal.png | Bin 0 -> 3098 bytes .../vendor/assets/images/emoji/metro.png | 1 + .../vendor/assets/images/emoji/microphone.png | 1 + .../vendor/assets/images/emoji/microscope.png | 1 + .../vendor/assets/images/emoji/milky_way.png | 1 + .../vendor/assets/images/emoji/minibus.png | 1 + .../vendor/assets/images/emoji/minidisc.png | 1 + .../assets/images/emoji/mobile_phone_off.png | 1 + .../assets/images/emoji/money_with_wings.png | 1 + .../vendor/assets/images/emoji/moneybag.png | 1 + .../vendor/assets/images/emoji/monkey.png | 1 + .../assets/images/emoji/monkey_face.png | 1 + .../vendor/assets/images/emoji/monorail.png | 1 + .../vendor/assets/images/emoji/moon.png | 1 + .../assets/images/emoji/mortar_board.png | 1 + .../vendor/assets/images/emoji/mount_fuji.png | 1 + .../images/emoji/mountain_bicyclist.png | 1 + .../assets/images/emoji/mountain_cableway.png | 1 + .../assets/images/emoji/mountain_railway.png | 1 + .../vendor/assets/images/emoji/mouse.png | 1 + .../vendor/assets/images/emoji/mouse2.png | 1 + .../assets/images/emoji/movie_camera.png | 1 + .../vendor/assets/images/emoji/moyai.png | 1 + .../vendor/assets/images/emoji/muscle.png | 1 + .../vendor/assets/images/emoji/mushroom.png | 1 + .../assets/images/emoji/musical_keyboard.png | 1 + .../assets/images/emoji/musical_note.png | 1 + .../assets/images/emoji/musical_score.png | 1 + .../vendor/assets/images/emoji/mute.png | 1 + .../vendor/assets/images/emoji/nail_care.png | 1 + .../vendor/assets/images/emoji/name_badge.png | 1 + .../vendor/assets/images/emoji/neckbeard.png | Bin 0 -> 6421 bytes .../vendor/assets/images/emoji/necktie.png | 1 + .../emoji/negative_squared_cross_mark.png | 1 + .../assets/images/emoji/neutral_face.png | 1 + .../vendor/assets/images/emoji/new.png | 1 + .../vendor/assets/images/emoji/new_moon.png | 1 + .../images/emoji/new_moon_with_face.png | 1 + .../vendor/assets/images/emoji/newspaper.png | 1 + .../vendor/assets/images/emoji/ng.png | 1 + .../vendor/assets/images/emoji/nine.png | 1 + .../vendor/assets/images/emoji/no_bell.png | 1 + .../assets/images/emoji/no_bicycles.png | 1 + .../vendor/assets/images/emoji/no_entry.png | 1 + .../assets/images/emoji/no_entry_sign.png | 1 + .../vendor/assets/images/emoji/no_good.png | 1 + .../assets/images/emoji/no_mobile_phones.png | 1 + .../vendor/assets/images/emoji/no_mouth.png | 1 + .../assets/images/emoji/no_pedestrians.png | 1 + .../vendor/assets/images/emoji/no_smoking.png | 1 + .../assets/images/emoji/non-potable_water.png | 1 + .../vendor/assets/images/emoji/nose.png | 1 + .../vendor/assets/images/emoji/notebook.png | 1 + .../emoji/notebook_with_decorative_cover.png | 1 + .../vendor/assets/images/emoji/notes.png | 1 + .../assets/images/emoji/nut_and_bolt.png | 1 + .../vendor/assets/images/emoji/o.png | 1 + .../vendor/assets/images/emoji/o2.png | 1 + .../vendor/assets/images/emoji/ocean.png | 1 + .../vendor/assets/images/emoji/octocat.png | Bin 0 -> 4391 bytes .../vendor/assets/images/emoji/octopus.png | 1 + .../vendor/assets/images/emoji/oden.png | 1 + .../vendor/assets/images/emoji/office.png | 1 + .../vendor/assets/images/emoji/ok.png | 1 + .../vendor/assets/images/emoji/ok_hand.png | 1 + .../vendor/assets/images/emoji/ok_woman.png | 1 + .../vendor/assets/images/emoji/older_man.png | 1 + .../assets/images/emoji/older_woman.png | 1 + .../vendor/assets/images/emoji/on.png | 1 + .../images/emoji/oncoming_automobile.png | 1 + .../assets/images/emoji/oncoming_bus.png | 1 + .../images/emoji/oncoming_police_car.png | 1 + .../assets/images/emoji/oncoming_taxi.png | 1 + .../vendor/assets/images/emoji/one.png | 1 + .../assets/images/emoji/open_file_folder.png | 1 + .../vendor/assets/images/emoji/open_hands.png | 1 + .../vendor/assets/images/emoji/ophiuchus.png | 1 + .../assets/images/emoji/orange_book.png | 1 + .../assets/images/emoji/outbox_tray.png | 1 + .../vendor/assets/images/emoji/ox.png | 1 + .../assets/images/emoji/page_facing_up.png | 1 + .../assets/images/emoji/page_with_curl.png | 1 + .../vendor/assets/images/emoji/pager.png | 1 + .../vendor/assets/images/emoji/palm_tree.png | 1 + .../vendor/assets/images/emoji/panda_face.png | 1 + .../vendor/assets/images/emoji/paperclip.png | 1 + .../vendor/assets/images/emoji/parking.png | 1 + .../images/emoji/part_alternation_mark.png | 1 + .../assets/images/emoji/partly_sunny.png | 1 + .../assets/images/emoji/passport_control.png | 1 + .../vendor/assets/images/emoji/paw_prints.png | 1 + .../vendor/assets/images/emoji/peach.png | 1 + .../vendor/assets/images/emoji/pear.png | 1 + .../vendor/assets/images/emoji/pencil.png | 1 + .../vendor/assets/images/emoji/pencil2.png | 1 + .../vendor/assets/images/emoji/penguin.png | 1 + .../vendor/assets/images/emoji/pensive.png | 1 + .../assets/images/emoji/performing_arts.png | 1 + .../vendor/assets/images/emoji/persevere.png | 1 + .../assets/images/emoji/person_frowning.png | 1 + .../images/emoji/person_with_blond_hair.png | 1 + .../images/emoji/person_with_pouting_face.png | 1 + .../vendor/assets/images/emoji/phone.png | 1 + .../vendor/assets/images/emoji/pig.png | 1 + .../vendor/assets/images/emoji/pig2.png | 1 + .../vendor/assets/images/emoji/pig_nose.png | 1 + .../vendor/assets/images/emoji/pill.png | 1 + .../vendor/assets/images/emoji/pineapple.png | 1 + .../vendor/assets/images/emoji/pisces.png | 1 + .../vendor/assets/images/emoji/pizza.png | 1 + .../vendor/assets/images/emoji/point_down.png | 1 + .../vendor/assets/images/emoji/point_left.png | 1 + .../assets/images/emoji/point_right.png | 1 + .../vendor/assets/images/emoji/point_up.png | 1 + .../vendor/assets/images/emoji/point_up_2.png | 1 + .../vendor/assets/images/emoji/police_car.png | 1 + .../vendor/assets/images/emoji/poodle.png | 1 + .../vendor/assets/images/emoji/poop.png | 1 + .../assets/images/emoji/post_office.png | 1 + .../assets/images/emoji/postal_horn.png | 1 + .../vendor/assets/images/emoji/postbox.png | 1 + .../assets/images/emoji/potable_water.png | 1 + .../vendor/assets/images/emoji/pouch.png | 1 + .../assets/images/emoji/poultry_leg.png | 1 + .../vendor/assets/images/emoji/pound.png | 1 + .../assets/images/emoji/pouting_cat.png | 1 + .../vendor/assets/images/emoji/pray.png | 1 + .../vendor/assets/images/emoji/princess.png | 1 + .../vendor/assets/images/emoji/punch.png | 1 + .../assets/images/emoji/purple_heart.png | 1 + .../vendor/assets/images/emoji/purse.png | 1 + .../vendor/assets/images/emoji/pushpin.png | 1 + .../images/emoji/put_litter_in_its_place.png | 1 + .../vendor/assets/images/emoji/question.png | 1 + .../vendor/assets/images/emoji/rabbit.png | 1 + .../vendor/assets/images/emoji/rabbit2.png | 1 + .../vendor/assets/images/emoji/racehorse.png | 1 + .../vendor/assets/images/emoji/radio.png | 1 + .../assets/images/emoji/radio_button.png | 1 + .../vendor/assets/images/emoji/rage.png | 1 + .../vendor/assets/images/emoji/rage1.png | Bin 0 -> 1087 bytes .../vendor/assets/images/emoji/rage2.png | Bin 0 -> 1098 bytes .../vendor/assets/images/emoji/rage3.png | Bin 0 -> 1119 bytes .../vendor/assets/images/emoji/rage4.png | Bin 0 -> 1270 bytes .../assets/images/emoji/railway_car.png | 1 + .../vendor/assets/images/emoji/rainbow.png | 1 + .../assets/images/emoji/raised_hand.png | 1 + .../assets/images/emoji/raised_hands.png | 1 + .../vendor/assets/images/emoji/ram.png | 1 + .../vendor/assets/images/emoji/ramen.png | 1 + .../vendor/assets/images/emoji/rat.png | 1 + .../vendor/assets/images/emoji/recycle.png | 1 + .../vendor/assets/images/emoji/red_car.png | 1 + .../vendor/assets/images/emoji/red_circle.png | 1 + .../vendor/assets/images/emoji/registered.png | 1 + .../vendor/assets/images/emoji/relaxed.png | 1 + .../vendor/assets/images/emoji/relieved.png | 1 + .../vendor/assets/images/emoji/repeat.png | 1 + .../vendor/assets/images/emoji/repeat_one.png | 1 + .../vendor/assets/images/emoji/restroom.png | 1 + .../assets/images/emoji/revolving_hearts.png | 1 + .../vendor/assets/images/emoji/rewind.png | 1 + .../vendor/assets/images/emoji/ribbon.png | 1 + .../vendor/assets/images/emoji/rice.png | 1 + .../vendor/assets/images/emoji/rice_ball.png | 1 + .../assets/images/emoji/rice_cracker.png | 1 + .../vendor/assets/images/emoji/rice_scene.png | 1 + .../vendor/assets/images/emoji/ring.png | 1 + .../vendor/assets/images/emoji/rocket.png | 1 + .../assets/images/emoji/roller_coaster.png | 1 + .../vendor/assets/images/emoji/rooster.png | 1 + .../vendor/assets/images/emoji/rose.png | 1 + .../assets/images/emoji/rotating_light.png | 1 + .../assets/images/emoji/round_pushpin.png | 1 + .../vendor/assets/images/emoji/rowboat.png | 1 + .../vendor/assets/images/emoji/ru.png | 1 + .../assets/images/emoji/rugby_football.png | 1 + .../vendor/assets/images/emoji/runner.png | 1 + .../vendor/assets/images/emoji/running.png | 1 + .../images/emoji/running_shirt_with_sash.png | 1 + .../vendor/assets/images/emoji/sa.png | 1 + .../assets/images/emoji/sagittarius.png | 1 + .../vendor/assets/images/emoji/sailboat.png | 1 + .../vendor/assets/images/emoji/sake.png | 1 + .../vendor/assets/images/emoji/sandal.png | 1 + .../vendor/assets/images/emoji/santa.png | 1 + .../vendor/assets/images/emoji/satellite.png | 1 + .../vendor/assets/images/emoji/satisfied.png | 1 + .../vendor/assets/images/emoji/saxophone.png | 1 + .../vendor/assets/images/emoji/school.png | 1 + .../assets/images/emoji/school_satchel.png | 1 + .../vendor/assets/images/emoji/scissors.png | 1 + .../vendor/assets/images/emoji/scorpius.png | 1 + .../vendor/assets/images/emoji/scream.png | 1 + .../vendor/assets/images/emoji/scream_cat.png | 1 + .../vendor/assets/images/emoji/scroll.png | 1 + .../vendor/assets/images/emoji/seat.png | 1 + .../vendor/assets/images/emoji/secret.png | 1 + .../assets/images/emoji/see_no_evil.png | 1 + .../vendor/assets/images/emoji/seedling.png | 1 + .../vendor/assets/images/emoji/seven.png | 1 + .../vendor/assets/images/emoji/shaved_ice.png | 1 + .../vendor/assets/images/emoji/sheep.png | 1 + .../vendor/assets/images/emoji/shell.png | 1 + .../vendor/assets/images/emoji/ship.png | 1 + .../vendor/assets/images/emoji/shipit.png | Bin 0 -> 9351 bytes .../vendor/assets/images/emoji/shirt.png | 1 + .../vendor/assets/images/emoji/shit.png | 1 + .../vendor/assets/images/emoji/shoe.png | 1 + .../vendor/assets/images/emoji/shower.png | 1 + .../assets/images/emoji/signal_strength.png | 1 + .../vendor/assets/images/emoji/six.png | 1 + .../assets/images/emoji/six_pointed_star.png | 1 + .../vendor/assets/images/emoji/ski.png | 1 + .../vendor/assets/images/emoji/skull.png | 1 + .../vendor/assets/images/emoji/sleepy.png | 1 + .../assets/images/emoji/slot_machine.png | 1 + .../images/emoji/small_blue_diamond.png | 1 + .../images/emoji/small_orange_diamond.png | 1 + .../images/emoji/small_red_triangle.png | 1 + .../images/emoji/small_red_triangle_down.png | 1 + .../vendor/assets/images/emoji/smile.png | 1 + .../vendor/assets/images/emoji/smile_cat.png | 1 + .../vendor/assets/images/emoji/smiley.png | 1 + .../vendor/assets/images/emoji/smiley_cat.png | 1 + .../assets/images/emoji/smiling_imp.png | 1 + .../vendor/assets/images/emoji/smirk.png | 1 + .../vendor/assets/images/emoji/smirk_cat.png | 1 + .../vendor/assets/images/emoji/smoking.png | 1 + .../vendor/assets/images/emoji/snail.png | 1 + .../vendor/assets/images/emoji/snake.png | 1 + .../assets/images/emoji/snowboarder.png | 1 + .../vendor/assets/images/emoji/snowflake.png | 1 + .../vendor/assets/images/emoji/snowman.png | 1 + .../vendor/assets/images/emoji/sob.png | 1 + .../vendor/assets/images/emoji/soccer.png | 1 + .../vendor/assets/images/emoji/soon.png | 1 + .../vendor/assets/images/emoji/sos.png | 1 + .../vendor/assets/images/emoji/sound.png | 1 + .../assets/images/emoji/space_invader.png | 1 + .../vendor/assets/images/emoji/spades.png | 1 + .../vendor/assets/images/emoji/spaghetti.png | 1 + .../vendor/assets/images/emoji/sparkler.png | 1 + .../vendor/assets/images/emoji/sparkles.png | 1 + .../assets/images/emoji/speak_no_evil.png | 1 + .../vendor/assets/images/emoji/speaker.png | 1 + .../assets/images/emoji/speech_balloon.png | 1 + .../vendor/assets/images/emoji/speedboat.png | 1 + .../vendor/assets/images/emoji/squirrel.png | Bin 0 -> 9351 bytes .../vendor/assets/images/emoji/star.png | 1 + .../vendor/assets/images/emoji/star2.png | 1 + .../vendor/assets/images/emoji/stars.png | 1 + .../vendor/assets/images/emoji/station.png | 1 + .../assets/images/emoji/statue_of_liberty.png | 1 + .../assets/images/emoji/steam_locomotive.png | 1 + .../vendor/assets/images/emoji/stew.png | 1 + .../assets/images/emoji/straight_ruler.png | 1 + .../vendor/assets/images/emoji/strawberry.png | 1 + .../assets/images/emoji/sun_with_face.png | 1 + .../vendor/assets/images/emoji/sunflower.png | 1 + .../vendor/assets/images/emoji/sunglasses.png | 1 + .../vendor/assets/images/emoji/sunny.png | 1 + .../vendor/assets/images/emoji/sunrise.png | 1 + .../images/emoji/sunrise_over_mountains.png | 1 + .../vendor/assets/images/emoji/surfer.png | 1 + .../vendor/assets/images/emoji/sushi.png | 1 + .../vendor/assets/images/emoji/suspect.png | Bin 0 -> 1016 bytes .../images/emoji/suspension_railway.png | 1 + .../vendor/assets/images/emoji/sweat.png | 1 + .../assets/images/emoji/sweat_drops.png | 1 + .../assets/images/emoji/sweat_smile.png | 1 + .../assets/images/emoji/sweet_potato.png | 1 + .../vendor/assets/images/emoji/swimmer.png | 1 + .../vendor/assets/images/emoji/symbols.png | 1 + .../vendor/assets/images/emoji/syringe.png | 1 + .../vendor/assets/images/emoji/tada.png | 1 + .../assets/images/emoji/tanabata_tree.png | 1 + .../vendor/assets/images/emoji/tangerine.png | 1 + .../vendor/assets/images/emoji/taurus.png | 1 + .../vendor/assets/images/emoji/taxi.png | 1 + .../vendor/assets/images/emoji/tea.png | 1 + .../vendor/assets/images/emoji/telephone.png | 1 + .../images/emoji/telephone_receiver.png | 1 + .../vendor/assets/images/emoji/telescope.png | 1 + .../vendor/assets/images/emoji/tennis.png | 1 + .../vendor/assets/images/emoji/tent.png | 1 + .../assets/images/emoji/thought_balloon.png | 1 + .../vendor/assets/images/emoji/three.png | 1 + .../vendor/assets/images/emoji/thumbsdown.png | 1 + .../vendor/assets/images/emoji/thumbsup.png | 1 + .../vendor/assets/images/emoji/ticket.png | 1 + .../vendor/assets/images/emoji/tiger.png | 1 + .../vendor/assets/images/emoji/tiger2.png | 1 + .../vendor/assets/images/emoji/tired_face.png | 1 + .../vendor/assets/images/emoji/tm.png | 1 + .../vendor/assets/images/emoji/toilet.png | 1 + .../assets/images/emoji/tokyo_tower.png | 1 + .../vendor/assets/images/emoji/tomato.png | 1 + .../vendor/assets/images/emoji/tongue.png | 1 + .../vendor/assets/images/emoji/tongue2.png | 1 + .../vendor/assets/images/emoji/top.png | 1 + .../vendor/assets/images/emoji/tophat.png | 1 + .../vendor/assets/images/emoji/tractor.png | 1 + .../assets/images/emoji/traffic_light.png | 1 + .../vendor/assets/images/emoji/train.png | 1 + .../vendor/assets/images/emoji/train2.png | 1 + .../vendor/assets/images/emoji/tram.png | 1 + .../images/emoji/triangular_flag_on_post.png | 1 + .../assets/images/emoji/triangular_ruler.png | 1 + .../vendor/assets/images/emoji/trident.png | 1 + .../vendor/assets/images/emoji/triumph.png | 1 + .../vendor/assets/images/emoji/trolleybus.png | 1 + .../vendor/assets/images/emoji/trollface.png | Bin 0 -> 2953 bytes .../vendor/assets/images/emoji/trophy.png | 1 + .../assets/images/emoji/tropical_drink.png | 1 + .../assets/images/emoji/tropical_fish.png | 1 + .../vendor/assets/images/emoji/truck.png | 1 + .../vendor/assets/images/emoji/trumpet.png | 1 + .../vendor/assets/images/emoji/tshirt.png | 1 + .../vendor/assets/images/emoji/tulip.png | 1 + .../vendor/assets/images/emoji/turtle.png | 1 + .../vendor/assets/images/emoji/tv.png | 1 + .../emoji/twisted_rightwards_arrows.png | 1 + .../vendor/assets/images/emoji/two.png | 1 + .../vendor/assets/images/emoji/two_hearts.png | 1 + .../images/emoji/two_men_holding_hands.png | 1 + .../images/emoji/two_women_holding_hands.png | 1 + .../vendor/assets/images/emoji/u5272.png | 1 + .../vendor/assets/images/emoji/u5408.png | 1 + .../vendor/assets/images/emoji/u55b6.png | 1 + .../vendor/assets/images/emoji/u6307.png | 1 + .../vendor/assets/images/emoji/u6708.png | 1 + .../vendor/assets/images/emoji/u6709.png | 1 + .../vendor/assets/images/emoji/u6e80.png | 1 + .../vendor/assets/images/emoji/u7121.png | 1 + .../vendor/assets/images/emoji/u7533.png | 1 + .../vendor/assets/images/emoji/u7981.png | 1 + .../vendor/assets/images/emoji/u7a7a.png | 1 + .../vendor/assets/images/emoji/uk.png | 1 + .../vendor/assets/images/emoji/umbrella.png | 1 + .../vendor/assets/images/emoji/unamused.png | 1 + .../vendor/assets/images/emoji/underage.png | 1 + .../assets/images/emoji/unicode/1f0cf.png | Bin 0 -> 3877 bytes .../assets/images/emoji/unicode/1f191.png | Bin 0 -> 3493 bytes .../assets/images/emoji/unicode/1f193.png | Bin 0 -> 3605 bytes .../assets/images/emoji/unicode/1f196.png | Bin 0 -> 4201 bytes .../assets/images/emoji/unicode/1f198.png | Bin 0 -> 4262 bytes .../assets/images/emoji/unicode/1f232.png | Bin 0 -> 5175 bytes .../assets/images/emoji/unicode/1f234.png | Bin 0 -> 3890 bytes .../assets/images/emoji/unicode/1f251.png | Bin 0 -> 4729 bytes .../assets/images/emoji/unicode/1f301.png | Bin 0 -> 4623 bytes .../assets/images/emoji/unicode/1f309.png | Bin 0 -> 5137 bytes .../assets/images/emoji/unicode/1f30b.png | Bin 0 -> 6167 bytes .../assets/images/emoji/unicode/1f30c.png | Bin 0 -> 5878 bytes .../assets/images/emoji/unicode/1f30d.png | Bin 0 -> 7164 bytes .../assets/images/emoji/unicode/1f30e.png | Bin 0 -> 7039 bytes .../assets/images/emoji/unicode/1f30f.png | Bin 0 -> 7303 bytes .../assets/images/emoji/unicode/1f310.png | Bin 0 -> 5837 bytes .../assets/images/emoji/unicode/1f311.png | Bin 0 -> 5371 bytes .../assets/images/emoji/unicode/1f312.png | Bin 0 -> 6198 bytes .../assets/images/emoji/unicode/1f313.png | Bin 0 -> 5967 bytes .../assets/images/emoji/unicode/1f314.png | Bin 0 -> 6455 bytes .../assets/images/emoji/unicode/1f315.png | Bin 0 -> 6458 bytes .../assets/images/emoji/unicode/1f316.png | Bin 0 -> 6510 bytes .../assets/images/emoji/unicode/1f317.png | Bin 0 -> 6176 bytes .../assets/images/emoji/unicode/1f318.png | Bin 0 -> 5885 bytes .../assets/images/emoji/unicode/1f31a.png | Bin 0 -> 6750 bytes .../assets/images/emoji/unicode/1f31b.png | Bin 0 -> 4280 bytes .../assets/images/emoji/unicode/1f31c.png | Bin 0 -> 4328 bytes .../assets/images/emoji/unicode/1f31d.png | Bin 0 -> 7224 bytes .../assets/images/emoji/unicode/1f31e.png | Bin 0 -> 7958 bytes .../assets/images/emoji/unicode/1f330.png | Bin 0 -> 5875 bytes .../assets/images/emoji/unicode/1f331.png | Bin 0 -> 2260 bytes .../assets/images/emoji/unicode/1f332.png | Bin 0 -> 4924 bytes .../assets/images/emoji/unicode/1f333.png | Bin 0 -> 7374 bytes .../assets/images/emoji/unicode/1f33c.png | Bin 0 -> 4232 bytes .../assets/images/emoji/unicode/1f33d.png | Bin 0 -> 6694 bytes .../assets/images/emoji/unicode/1f33f.png | Bin 0 -> 5889 bytes .../assets/images/emoji/unicode/1f344.png | Bin 0 -> 4887 bytes .../assets/images/emoji/unicode/1f347.png | Bin 0 -> 5423 bytes .../assets/images/emoji/unicode/1f348.png | Bin 0 -> 8233 bytes .../assets/images/emoji/unicode/1f34b.png | Bin 0 -> 6055 bytes .../assets/images/emoji/unicode/1f34c.png | Bin 0 -> 3915 bytes .../assets/images/emoji/unicode/1f34d.png | Bin 0 -> 5634 bytes .../assets/images/emoji/unicode/1f34f.png | Bin 0 -> 6205 bytes .../assets/images/emoji/unicode/1f350.png | Bin 0 -> 6936 bytes .../assets/images/emoji/unicode/1f351.png | Bin 0 -> 5920 bytes .../assets/images/emoji/unicode/1f352.png | Bin 0 -> 5604 bytes .../assets/images/emoji/unicode/1f355.png | Bin 0 -> 5273 bytes .../assets/images/emoji/unicode/1f356.png | Bin 0 -> 5534 bytes .../assets/images/emoji/unicode/1f357.png | Bin 0 -> 4200 bytes .../assets/images/emoji/unicode/1f360.png | Bin 0 -> 5684 bytes .../assets/images/emoji/unicode/1f364.png | Bin 0 -> 7550 bytes .../assets/images/emoji/unicode/1f365.png | Bin 0 -> 5818 bytes .../assets/images/emoji/unicode/1f368.png | Bin 0 -> 5469 bytes .../assets/images/emoji/unicode/1f369.png | Bin 0 -> 5209 bytes .../assets/images/emoji/unicode/1f36a.png | Bin 0 -> 8149 bytes .../assets/images/emoji/unicode/1f36b.png | Bin 0 -> 5249 bytes .../assets/images/emoji/unicode/1f36c.png | Bin 0 -> 4502 bytes .../assets/images/emoji/unicode/1f36d.png | Bin 0 -> 5771 bytes .../assets/images/emoji/unicode/1f36e.png | Bin 0 -> 5810 bytes .../assets/images/emoji/unicode/1f36f.png | Bin 0 -> 5830 bytes .../assets/images/emoji/unicode/1f377.png | Bin 0 -> 3151 bytes .../assets/images/emoji/unicode/1f379.png | Bin 0 -> 4189 bytes .../assets/images/emoji/unicode/1f37c.png | Bin 0 -> 4461 bytes .../assets/images/emoji/unicode/1f38a.png | Bin 0 -> 5521 bytes .../assets/images/emoji/unicode/1f38b.png | Bin 0 -> 4409 bytes .../assets/images/emoji/unicode/1f3a0.png | Bin 0 -> 5893 bytes .../assets/images/emoji/unicode/1f3a3.png | Bin 0 -> 4470 bytes .../assets/images/emoji/unicode/1f3aa.png | Bin 0 -> 4683 bytes .../assets/images/emoji/unicode/1f3ad.png | Bin 0 -> 6287 bytes .../assets/images/emoji/unicode/1f3ae.png | Bin 0 -> 4957 bytes .../assets/images/emoji/unicode/1f3b2.png | Bin 0 -> 2957 bytes .../assets/images/emoji/unicode/1f3b3.png | Bin 0 -> 4184 bytes .../assets/images/emoji/unicode/1f3b4.png | Bin 0 -> 3434 bytes .../assets/images/emoji/unicode/1f3b9.png | Bin 0 -> 1944 bytes .../assets/images/emoji/unicode/1f3bb.png | Bin 0 -> 5020 bytes .../assets/images/emoji/unicode/1f3bc.png | Bin 0 -> 1576 bytes .../assets/images/emoji/unicode/1f3bd.png | Bin 0 -> 5701 bytes .../assets/images/emoji/unicode/1f3c2.png | Bin 0 -> 5356 bytes .../assets/images/emoji/unicode/1f3c7.png | Bin 0 -> 5905 bytes .../assets/images/emoji/unicode/1f3c9.png | Bin 0 -> 7781 bytes .../assets/images/emoji/unicode/1f3e4.png | Bin 0 -> 4816 bytes .../assets/images/emoji/unicode/1f3ee.png | Bin 0 -> 4064 bytes .../assets/images/emoji/unicode/1f400.png | Bin 0 -> 5441 bytes .../assets/images/emoji/unicode/1f401.png | Bin 0 -> 4087 bytes .../assets/images/emoji/unicode/1f402.png | Bin 0 -> 6079 bytes .../assets/images/emoji/unicode/1f403.png | Bin 0 -> 4774 bytes .../assets/images/emoji/unicode/1f404.png | Bin 0 -> 5303 bytes .../assets/images/emoji/unicode/1f405.png | Bin 0 -> 5744 bytes .../assets/images/emoji/unicode/1f406.png | Bin 0 -> 5384 bytes .../assets/images/emoji/unicode/1f407.png | Bin 0 -> 4517 bytes .../assets/images/emoji/unicode/1f408.png | Bin 0 -> 5723 bytes .../assets/images/emoji/unicode/1f409.png | Bin 0 -> 7828 bytes .../assets/images/emoji/unicode/1f40a.png | Bin 0 -> 6125 bytes .../assets/images/emoji/unicode/1f40b.png | Bin 0 -> 6032 bytes .../assets/images/emoji/unicode/1f40c.png | Bin 0 -> 6657 bytes .../assets/images/emoji/unicode/1f40f.png | Bin 0 -> 6531 bytes .../assets/images/emoji/unicode/1f410.png | Bin 0 -> 4889 bytes .../assets/images/emoji/unicode/1f413.png | Bin 0 -> 6168 bytes .../assets/images/emoji/unicode/1f415.png | Bin 0 -> 5931 bytes .../assets/images/emoji/unicode/1f416.png | Bin 0 -> 4797 bytes .../assets/images/emoji/unicode/1f41c.png | Bin 0 -> 2851 bytes .../assets/images/emoji/unicode/1f41d.png | Bin 0 -> 5851 bytes .../assets/images/emoji/unicode/1f41e.png | Bin 0 -> 5255 bytes .../assets/images/emoji/unicode/1f421.png | Bin 0 -> 3751 bytes .../assets/images/emoji/unicode/1f422.png | Bin 0 -> 5336 bytes .../assets/images/emoji/unicode/1f423.png | Bin 0 -> 5928 bytes .../assets/images/emoji/unicode/1f425.png | Bin 0 -> 5646 bytes .../assets/images/emoji/unicode/1f429.png | Bin 0 -> 6852 bytes .../assets/images/emoji/unicode/1f42a.png | Bin 0 -> 5139 bytes .../assets/images/emoji/unicode/1f432.png | Bin 0 -> 6737 bytes .../assets/images/emoji/unicode/1f43c.png | Bin 0 -> 4814 bytes .../assets/images/emoji/unicode/1f43d.png | Bin 0 -> 4761 bytes .../assets/images/emoji/unicode/1f43e.png | Bin 0 -> 2471 bytes .../assets/images/emoji/unicode/1f445.png | Bin 0 -> 3662 bytes .../assets/images/emoji/unicode/1f453.png | Bin 0 -> 4929 bytes .../assets/images/emoji/unicode/1f456.png | Bin 0 -> 3470 bytes .../assets/images/emoji/unicode/1f45a.png | Bin 0 -> 4075 bytes .../assets/images/emoji/unicode/1f45b.png | Bin 0 -> 5033 bytes .../assets/images/emoji/unicode/1f45d.png | Bin 0 -> 4691 bytes .../assets/images/emoji/unicode/1f45e.png | Bin 0 -> 4749 bytes .../assets/images/emoji/unicode/1f464.png | Bin 0 -> 2007 bytes .../assets/images/emoji/unicode/1f465.png | Bin 0 -> 3021 bytes .../assets/images/emoji/unicode/1f46a.png | Bin 0 -> 7211 bytes .../assets/images/emoji/unicode/1f46c.png | Bin 0 -> 6994 bytes .../assets/images/emoji/unicode/1f46d.png | Bin 0 -> 7633 bytes .../assets/images/emoji/unicode/1f470.png | Bin 0 -> 8515 bytes .../assets/images/emoji/unicode/1f479.png | Bin 0 -> 7147 bytes .../assets/images/emoji/unicode/1f47a.png | Bin 0 -> 5159 bytes .../assets/images/emoji/unicode/1f48c.png | Bin 0 -> 2467 bytes .../assets/images/emoji/unicode/1f495.png | Bin 0 -> 3565 bytes .../assets/images/emoji/unicode/1f49e.png | Bin 0 -> 5472 bytes .../assets/images/emoji/unicode/1f4a0.png | Bin 0 -> 5698 bytes .../assets/images/emoji/unicode/1f4a5.png | Bin 0 -> 3781 bytes .../assets/images/emoji/unicode/1f4a7.png | Bin 0 -> 3278 bytes .../assets/images/emoji/unicode/1f4ab.png | Bin 0 -> 3044 bytes .../assets/images/emoji/unicode/1f4ac.png | Bin 0 -> 2130 bytes .../assets/images/emoji/unicode/1f4ad.png | Bin 0 -> 2582 bytes .../assets/images/emoji/unicode/1f4ae.png | Bin 0 -> 4391 bytes .../assets/images/emoji/unicode/1f4af.png | Bin 0 -> 3302 bytes .../assets/images/emoji/unicode/1f4b2.png | Bin 0 -> 1416 bytes .../assets/images/emoji/unicode/1f4b3.png | Bin 0 -> 2648 bytes .../assets/images/emoji/unicode/1f4b4.png | Bin 0 -> 4989 bytes .../assets/images/emoji/unicode/1f4b5.png | Bin 0 -> 4622 bytes .../assets/images/emoji/unicode/1f4b6.png | Bin 0 -> 3942 bytes .../assets/images/emoji/unicode/1f4b7.png | Bin 0 -> 4235 bytes .../assets/images/emoji/unicode/1f4b8.png | Bin 0 -> 7586 bytes .../assets/images/emoji/unicode/1f4be.png | Bin 0 -> 3215 bytes .../assets/images/emoji/unicode/1f4c1.png | Bin 0 -> 4013 bytes .../assets/images/emoji/unicode/1f4c2.png | Bin 0 -> 4292 bytes .../assets/images/emoji/unicode/1f4c3.png | Bin 0 -> 3729 bytes .../assets/images/emoji/unicode/1f4c4.png | Bin 0 -> 2183 bytes .../assets/images/emoji/unicode/1f4c5.png | Bin 0 -> 2977 bytes .../assets/images/emoji/unicode/1f4c6.png | Bin 0 -> 2920 bytes .../assets/images/emoji/unicode/1f4c7.png | Bin 0 -> 3749 bytes .../assets/images/emoji/unicode/1f4c8.png | Bin 0 -> 2939 bytes .../assets/images/emoji/unicode/1f4c9.png | Bin 0 -> 2910 bytes .../assets/images/emoji/unicode/1f4ca.png | Bin 0 -> 2460 bytes .../assets/images/emoji/unicode/1f4cb.png | Bin 0 -> 4663 bytes .../assets/images/emoji/unicode/1f4cc.png | Bin 0 -> 3793 bytes .../assets/images/emoji/unicode/1f4cd.png | Bin 0 -> 1936 bytes .../assets/images/emoji/unicode/1f4ce.png | Bin 0 -> 2558 bytes .../assets/images/emoji/unicode/1f4cf.png | Bin 0 -> 3832 bytes .../assets/images/emoji/unicode/1f4d0.png | Bin 0 -> 2706 bytes .../assets/images/emoji/unicode/1f4d1.png | Bin 0 -> 3162 bytes .../assets/images/emoji/unicode/1f4d2.png | Bin 0 -> 5921 bytes .../assets/images/emoji/unicode/1f4d3.png | Bin 0 -> 6036 bytes .../assets/images/emoji/unicode/1f4d4.png | Bin 0 -> 5329 bytes .../assets/images/emoji/unicode/1f4d5.png | Bin 0 -> 4847 bytes .../assets/images/emoji/unicode/1f4d7.png | Bin 0 -> 5090 bytes .../assets/images/emoji/unicode/1f4d8.png | Bin 0 -> 5092 bytes .../assets/images/emoji/unicode/1f4d9.png | Bin 0 -> 5085 bytes .../assets/images/emoji/unicode/1f4da.png | Bin 0 -> 6539 bytes .../assets/images/emoji/unicode/1f4db.png | Bin 0 -> 3985 bytes .../assets/images/emoji/unicode/1f4dc.png | Bin 0 -> 6749 bytes .../assets/images/emoji/unicode/1f4de.png | Bin 0 -> 2001 bytes .../assets/images/emoji/unicode/1f4df.png | Bin 0 -> 4022 bytes .../assets/images/emoji/unicode/1f4e4.png | Bin 0 -> 3683 bytes .../assets/images/emoji/unicode/1f4e5.png | Bin 0 -> 3700 bytes .../assets/images/emoji/unicode/1f4e7.png | Bin 0 -> 2128 bytes .../assets/images/emoji/unicode/1f4e8.png | Bin 0 -> 2206 bytes .../assets/images/emoji/unicode/1f4ea.png | Bin 0 -> 4360 bytes .../assets/images/emoji/unicode/1f4ec.png | Bin 0 -> 4581 bytes .../assets/images/emoji/unicode/1f4ed.png | Bin 0 -> 3101 bytes .../assets/images/emoji/unicode/1f4ef.png | Bin 0 -> 4819 bytes .../assets/images/emoji/unicode/1f4f0.png | Bin 0 -> 5198 bytes .../assets/images/emoji/unicode/1f4f5.png | Bin 0 -> 5083 bytes .../assets/images/emoji/unicode/1f4f9.png | Bin 0 -> 5090 bytes .../assets/images/emoji/unicode/1f500.png | Bin 0 -> 4313 bytes .../assets/images/emoji/unicode/1f501.png | Bin 0 -> 4009 bytes .../assets/images/emoji/unicode/1f502.png | Bin 0 -> 4287 bytes .../assets/images/emoji/unicode/1f503.png | Bin 0 -> 1399 bytes .../assets/images/emoji/unicode/1f504.png | Bin 0 -> 4823 bytes .../assets/images/emoji/unicode/1f505.png | Bin 0 -> 2498 bytes .../assets/images/emoji/unicode/1f506.png | Bin 0 -> 4060 bytes .../assets/images/emoji/unicode/1f507.png | Bin 0 -> 6635 bytes .../assets/images/emoji/unicode/1f509.png | Bin 0 -> 5024 bytes .../assets/images/emoji/unicode/1f50b.png | Bin 0 -> 3812 bytes .../assets/images/emoji/unicode/1f50c.png | Bin 0 -> 2819 bytes .../assets/images/emoji/unicode/1f50e.png | Bin 0 -> 3629 bytes .../assets/images/emoji/unicode/1f50f.png | Bin 0 -> 4967 bytes .../assets/images/emoji/unicode/1f510.png | Bin 0 -> 5701 bytes .../assets/images/emoji/unicode/1f515.png | Bin 0 -> 5944 bytes .../assets/images/emoji/unicode/1f516.png | Bin 0 -> 4696 bytes .../assets/images/emoji/unicode/1f517.png | Bin 0 -> 2652 bytes .../assets/images/emoji/unicode/1f518.png | Bin 0 -> 2198 bytes .../assets/images/emoji/unicode/1f51a.png | Bin 0 -> 1475 bytes .../assets/images/emoji/unicode/1f51b.png | Bin 0 -> 1806 bytes .../assets/images/emoji/unicode/1f51c.png | Bin 0 -> 1911 bytes .../assets/images/emoji/unicode/1f51f.png | Bin 0 -> 4095 bytes .../assets/images/emoji/unicode/1f520.png | Bin 0 -> 5136 bytes .../assets/images/emoji/unicode/1f521.png | Bin 0 -> 4471 bytes .../assets/images/emoji/unicode/1f522.png | Bin 0 -> 4751 bytes .../assets/images/emoji/unicode/1f523.png | Bin 0 -> 5434 bytes .../assets/images/emoji/unicode/1f524.png | Bin 0 -> 4247 bytes .../assets/images/emoji/unicode/1f526.png | Bin 0 -> 5024 bytes .../assets/images/emoji/unicode/1f527.png | Bin 0 -> 2775 bytes .../assets/images/emoji/unicode/1f529.png | Bin 0 -> 2169 bytes .../assets/images/emoji/unicode/1f52a.png | Bin 0 -> 2506 bytes .../assets/images/emoji/unicode/1f52c.png | Bin 0 -> 4141 bytes .../assets/images/emoji/unicode/1f52d.png | Bin 0 -> 3322 bytes .../assets/images/emoji/unicode/1f52e.png | Bin 0 -> 6236 bytes .../assets/images/emoji/unicode/1f535.png | Bin 0 -> 4637 bytes .../assets/images/emoji/unicode/1f536.png | Bin 0 -> 3899 bytes .../assets/images/emoji/unicode/1f537.png | Bin 0 -> 3790 bytes .../assets/images/emoji/unicode/1f538.png | Bin 0 -> 1944 bytes .../assets/images/emoji/unicode/1f539.png | Bin 0 -> 1898 bytes .../assets/images/emoji/unicode/1f53a.png | Bin 0 -> 2054 bytes .../assets/images/emoji/unicode/1f53b.png | Bin 0 -> 2157 bytes .../assets/images/emoji/unicode/1f53c.png | Bin 0 -> 3198 bytes .../assets/images/emoji/unicode/1f53d.png | Bin 0 -> 2934 bytes .../assets/images/emoji/unicode/1f55c.png | Bin 0 -> 2842 bytes .../assets/images/emoji/unicode/1f55d.png | Bin 0 -> 2853 bytes .../assets/images/emoji/unicode/1f55e.png | Bin 0 -> 2739 bytes .../assets/images/emoji/unicode/1f55f.png | Bin 0 -> 2847 bytes .../assets/images/emoji/unicode/1f560.png | Bin 0 -> 2832 bytes .../assets/images/emoji/unicode/1f561.png | Bin 0 -> 2730 bytes .../assets/images/emoji/unicode/1f562.png | Bin 0 -> 2820 bytes .../assets/images/emoji/unicode/1f563.png | Bin 0 -> 2847 bytes .../assets/images/emoji/unicode/1f564.png | Bin 0 -> 2746 bytes .../assets/images/emoji/unicode/1f565.png | Bin 0 -> 2864 bytes .../assets/images/emoji/unicode/1f566.png | Bin 0 -> 2854 bytes .../assets/images/emoji/unicode/1f567.png | Bin 0 -> 2797 bytes .../assets/images/emoji/unicode/1f5fe.png | Bin 0 -> 4085 bytes .../assets/images/emoji/unicode/1f5ff.png | Bin 0 -> 2166 bytes .../assets/images/emoji/unicode/1f605.png | Bin 0 -> 6519 bytes .../assets/images/emoji/unicode/1f606.png | Bin 0 -> 6347 bytes .../assets/images/emoji/unicode/1f607.png | Bin 0 -> 7000 bytes .../assets/images/emoji/unicode/1f608.png | Bin 0 -> 7189 bytes .../assets/images/emoji/unicode/1f60b.png | Bin 0 -> 5886 bytes .../assets/images/emoji/unicode/1f60e.png | Bin 0 -> 5749 bytes .../assets/images/emoji/unicode/1f610.png | Bin 0 -> 4843 bytes .../assets/images/emoji/unicode/1f624.png | Bin 0 -> 6164 bytes .../assets/images/emoji/unicode/1f629.png | Bin 0 -> 6279 bytes .../assets/images/emoji/unicode/1f62b.png | Bin 0 -> 6178 bytes .../assets/images/emoji/unicode/1f635.png | Bin 0 -> 6278 bytes .../assets/images/emoji/unicode/1f636.png | Bin 0 -> 4732 bytes .../assets/images/emoji/unicode/1f638.png | Bin 0 -> 6117 bytes .../assets/images/emoji/unicode/1f639.png | Bin 0 -> 7190 bytes .../assets/images/emoji/unicode/1f63a.png | Bin 0 -> 6083 bytes .../assets/images/emoji/unicode/1f63b.png | Bin 0 -> 6176 bytes .../assets/images/emoji/unicode/1f63c.png | Bin 0 -> 6062 bytes .../assets/images/emoji/unicode/1f63d.png | Bin 0 -> 6801 bytes .../assets/images/emoji/unicode/1f63e.png | Bin 0 -> 4918 bytes .../assets/images/emoji/unicode/1f63f.png | Bin 0 -> 6682 bytes .../assets/images/emoji/unicode/1f640.png | Bin 0 -> 6844 bytes .../assets/images/emoji/unicode/1f648.png | Bin 0 -> 6828 bytes .../assets/images/emoji/unicode/1f649.png | Bin 0 -> 6550 bytes .../assets/images/emoji/unicode/1f64a.png | Bin 0 -> 5977 bytes .../assets/images/emoji/unicode/1f64b.png | Bin 0 -> 6177 bytes .../assets/images/emoji/unicode/1f64d.png | Bin 0 -> 4826 bytes .../assets/images/emoji/unicode/1f64e.png | Bin 0 -> 5428 bytes .../assets/images/emoji/unicode/1f681.png | Bin 0 -> 4100 bytes .../assets/images/emoji/unicode/1f682.png | Bin 0 -> 5159 bytes .../assets/images/emoji/unicode/1f683.png | Bin 0 -> 3648 bytes .../assets/images/emoji/unicode/1f686.png | Bin 0 -> 4817 bytes .../assets/images/emoji/unicode/1f688.png | Bin 0 -> 3792 bytes .../assets/images/emoji/unicode/1f68a.png | Bin 0 -> 4869 bytes .../assets/images/emoji/unicode/1f68d.png | Bin 0 -> 5305 bytes .../assets/images/emoji/unicode/1f68e.png | Bin 0 -> 4431 bytes .../assets/images/emoji/unicode/1f690.png | Bin 0 -> 3113 bytes .../assets/images/emoji/unicode/1f694.png | Bin 0 -> 5683 bytes .../assets/images/emoji/unicode/1f696.png | Bin 0 -> 6287 bytes .../assets/images/emoji/unicode/1f698.png | Bin 0 -> 7469 bytes .../assets/images/emoji/unicode/1f69b.png | Bin 0 -> 2938 bytes .../assets/images/emoji/unicode/1f69c.png | Bin 0 -> 5671 bytes .../assets/images/emoji/unicode/1f69d.png | Bin 0 -> 4311 bytes .../assets/images/emoji/unicode/1f69e.png | Bin 0 -> 7448 bytes .../assets/images/emoji/unicode/1f69f.png | Bin 0 -> 3937 bytes .../assets/images/emoji/unicode/1f6a0.png | Bin 0 -> 4405 bytes .../assets/images/emoji/unicode/1f6a1.png | Bin 0 -> 3489 bytes .../assets/images/emoji/unicode/1f6a3.png | Bin 0 -> 5433 bytes .../assets/images/emoji/unicode/1f6a6.png | Bin 0 -> 3422 bytes .../assets/images/emoji/unicode/1f6a8.png | Bin 0 -> 6620 bytes .../assets/images/emoji/unicode/1f6a9.png | Bin 0 -> 1399 bytes .../assets/images/emoji/unicode/1f6aa.png | Bin 0 -> 3310 bytes .../assets/images/emoji/unicode/1f6ab.png | Bin 0 -> 3288 bytes .../assets/images/emoji/unicode/1f6ae.png | Bin 0 -> 4091 bytes .../assets/images/emoji/unicode/1f6af.png | Bin 0 -> 5277 bytes .../assets/images/emoji/unicode/1f6b0.png | Bin 0 -> 3934 bytes .../assets/images/emoji/unicode/1f6b1.png | Bin 0 -> 5202 bytes .../assets/images/emoji/unicode/1f6b3.png | Bin 0 -> 5661 bytes .../assets/images/emoji/unicode/1f6b4.png | Bin 0 -> 6484 bytes .../assets/images/emoji/unicode/1f6b5.png | Bin 0 -> 9511 bytes .../assets/images/emoji/unicode/1f6b7.png | Bin 0 -> 5487 bytes .../assets/images/emoji/unicode/1f6b8.png | Bin 0 -> 3460 bytes .../assets/images/emoji/unicode/1f6bf.png | Bin 0 -> 7583 bytes .../assets/images/emoji/unicode/1f6c1.png | Bin 0 -> 2784 bytes .../assets/images/emoji/unicode/1f6c2.png | Bin 0 -> 4018 bytes .../assets/images/emoji/unicode/1f6c3.png | Bin 0 -> 3899 bytes .../assets/images/emoji/unicode/1f6c4.png | Bin 0 -> 3502 bytes .../assets/images/emoji/unicode/1f6c5.png | Bin 0 -> 4025 bytes .../assets/images/emoji/unicode/203c.png | Bin 0 -> 1387 bytes .../assets/images/emoji/unicode/2049.png | Bin 0 -> 2875 bytes .../assets/images/emoji/unicode/2139.png | Bin 0 -> 3670 bytes .../assets/images/emoji/unicode/2194.png | Bin 0 -> 3413 bytes .../assets/images/emoji/unicode/2195.png | Bin 0 -> 3544 bytes .../assets/images/emoji/unicode/21a9.png | Bin 0 -> 3775 bytes .../assets/images/emoji/unicode/21aa.png | Bin 0 -> 3712 bytes .../assets/images/emoji/unicode/231a.png | Bin 0 -> 5189 bytes .../assets/images/emoji/unicode/231b.png | Bin 0 -> 4492 bytes .../assets/images/emoji/unicode/23eb.png | Bin 0 -> 3613 bytes .../assets/images/emoji/unicode/23ec.png | Bin 0 -> 3179 bytes .../assets/images/emoji/unicode/23f0.png | Bin 0 -> 7062 bytes .../assets/images/emoji/unicode/24c2.png | Bin 0 -> 4737 bytes .../assets/images/emoji/unicode/2611.png | Bin 0 -> 1829 bytes .../assets/images/emoji/unicode/267b.png | Bin 0 -> 3704 bytes .../assets/images/emoji/unicode/2693.png | Bin 0 -> 4479 bytes .../assets/images/emoji/unicode/26aa.png | Bin 0 -> 2506 bytes .../assets/images/emoji/unicode/26ab.png | Bin 0 -> 2369 bytes .../assets/images/emoji/unicode/26c5.png | Bin 0 -> 5181 bytes .../assets/images/emoji/unicode/26d4.png | Bin 0 -> 3514 bytes .../assets/images/emoji/unicode/2705.png | Bin 0 -> 3445 bytes .../assets/images/emoji/unicode/2709.png | Bin 0 -> 1655 bytes .../assets/images/emoji/unicode/270f.png | Bin 0 -> 4450 bytes .../assets/images/emoji/unicode/2712.png | Bin 0 -> 2352 bytes .../assets/images/emoji/unicode/2714.png | Bin 0 -> 1103 bytes .../assets/images/emoji/unicode/2716.png | Bin 0 -> 591 bytes .../assets/images/emoji/unicode/2744.png | Bin 0 -> 5637 bytes .../assets/images/emoji/unicode/274e.png | Bin 0 -> 3853 bytes .../assets/images/emoji/unicode/2757.png | Bin 0 -> 1315 bytes .../assets/images/emoji/unicode/2795.png | Bin 0 -> 315 bytes .../assets/images/emoji/unicode/2796.png | Bin 0 -> 197 bytes .../assets/images/emoji/unicode/2797.png | Bin 0 -> 340 bytes .../assets/images/emoji/unicode/27b0.png | Bin 0 -> 1264 bytes .../assets/images/emoji/unicode/2934.png | Bin 0 -> 3520 bytes .../assets/images/emoji/unicode/2935.png | Bin 0 -> 3521 bytes .../assets/images/emoji/unicode/3030.png | Bin 0 -> 872 bytes .../assets/images/emoji/unicode/e001.png | Bin 0 -> 5946 bytes .../assets/images/emoji/unicode/e002.png | Bin 0 -> 6314 bytes .../assets/images/emoji/unicode/e003.png | Bin 0 -> 6295 bytes .../assets/images/emoji/unicode/e004.png | Bin 0 -> 6023 bytes .../assets/images/emoji/unicode/e005.png | Bin 0 -> 6895 bytes .../assets/images/emoji/unicode/e006.png | Bin 0 -> 4676 bytes .../assets/images/emoji/unicode/e007.png | Bin 0 -> 4799 bytes .../assets/images/emoji/unicode/e008.png | Bin 0 -> 4661 bytes .../assets/images/emoji/unicode/e009.png | Bin 0 -> 5495 bytes .../assets/images/emoji/unicode/e00a.png | Bin 0 -> 3499 bytes .../assets/images/emoji/unicode/e00b.png | Bin 0 -> 4650 bytes .../assets/images/emoji/unicode/e00c.png | Bin 0 -> 1705 bytes .../assets/images/emoji/unicode/e00d.png | Bin 0 -> 4873 bytes .../assets/images/emoji/unicode/e00e.png | Bin 0 -> 5135 bytes .../assets/images/emoji/unicode/e00f.png | Bin 0 -> 3431 bytes .../assets/images/emoji/unicode/e010.png | Bin 0 -> 5880 bytes .../assets/images/emoji/unicode/e011.png | Bin 0 -> 4669 bytes .../assets/images/emoji/unicode/e012.png | Bin 0 -> 4161 bytes .../assets/images/emoji/unicode/e013.png | Bin 0 -> 4247 bytes .../assets/images/emoji/unicode/e014.png | Bin 0 -> 3548 bytes .../assets/images/emoji/unicode/e015.png | Bin 0 -> 5976 bytes .../assets/images/emoji/unicode/e016.png | Bin 0 -> 6032 bytes .../assets/images/emoji/unicode/e017.png | Bin 0 -> 6259 bytes .../assets/images/emoji/unicode/e018.png | Bin 0 -> 4878 bytes .../assets/images/emoji/unicode/e019.png | Bin 0 -> 4743 bytes .../assets/images/emoji/unicode/e01a.png | Bin 0 -> 4582 bytes .../assets/images/emoji/unicode/e01b.png | Bin 0 -> 4278 bytes .../assets/images/emoji/unicode/e01c.png | Bin 0 -> 3833 bytes .../assets/images/emoji/unicode/e01d.png | Bin 0 -> 4740 bytes .../assets/images/emoji/unicode/e01e.png | Bin 0 -> 3905 bytes .../assets/images/emoji/unicode/e01f.png | Bin 0 -> 4992 bytes .../assets/images/emoji/unicode/e020.png | Bin 0 -> 1740 bytes .../assets/images/emoji/unicode/e021.png | Bin 0 -> 1175 bytes .../assets/images/emoji/unicode/e022.png | Bin 0 -> 3302 bytes .../assets/images/emoji/unicode/e023.png | Bin 0 -> 4118 bytes .../assets/images/emoji/unicode/e024.png | Bin 0 -> 2641 bytes .../assets/images/emoji/unicode/e025.png | Bin 0 -> 2651 bytes .../assets/images/emoji/unicode/e026.png | Bin 0 -> 2544 bytes .../assets/images/emoji/unicode/e027.png | Bin 0 -> 2684 bytes .../assets/images/emoji/unicode/e028.png | Bin 0 -> 2664 bytes .../assets/images/emoji/unicode/e029.png | Bin 0 -> 2630 bytes .../assets/images/emoji/unicode/e02a.png | Bin 0 -> 2667 bytes .../assets/images/emoji/unicode/e02b.png | Bin 0 -> 2661 bytes .../assets/images/emoji/unicode/e02c.png | Bin 0 -> 2543 bytes .../assets/images/emoji/unicode/e02d.png | Bin 0 -> 2639 bytes .../assets/images/emoji/unicode/e02e.png | Bin 0 -> 2633 bytes .../assets/images/emoji/unicode/e02f.png | Bin 0 -> 2556 bytes .../assets/images/emoji/unicode/e030.png | Bin 0 -> 7174 bytes .../assets/images/emoji/unicode/e031.png | Bin 0 -> 4833 bytes .../assets/images/emoji/unicode/e032.png | Bin 0 -> 4202 bytes .../assets/images/emoji/unicode/e033.png | Bin 0 -> 4721 bytes .../assets/images/emoji/unicode/e034.png | Bin 0 -> 5232 bytes .../assets/images/emoji/unicode/e035.png | Bin 0 -> 4855 bytes .../assets/images/emoji/unicode/e036.png | Bin 0 -> 3510 bytes .../assets/images/emoji/unicode/e037.png | Bin 0 -> 4653 bytes .../assets/images/emoji/unicode/e038.png | Bin 0 -> 5171 bytes .../assets/images/emoji/unicode/e039.png | Bin 0 -> 4836 bytes .../assets/images/emoji/unicode/e03a.png | Bin 0 -> 4296 bytes .../assets/images/emoji/unicode/e03b.png | Bin 0 -> 5004 bytes .../assets/images/emoji/unicode/e03c.png | Bin 0 -> 3741 bytes .../assets/images/emoji/unicode/e03d.png | Bin 0 -> 4081 bytes .../assets/images/emoji/unicode/e03e.png | Bin 0 -> 3188 bytes .../assets/images/emoji/unicode/e03f.png | Bin 0 -> 3452 bytes .../assets/images/emoji/unicode/e040.png | Bin 0 -> 4252 bytes .../assets/images/emoji/unicode/e041.png | Bin 0 -> 4382 bytes .../assets/images/emoji/unicode/e042.png | Bin 0 -> 4453 bytes .../assets/images/emoji/unicode/e043.png | Bin 0 -> 3608 bytes .../assets/images/emoji/unicode/e044.png | Bin 0 -> 2949 bytes .../assets/images/emoji/unicode/e045.png | Bin 0 -> 4306 bytes .../assets/images/emoji/unicode/e046.png | Bin 0 -> 6129 bytes .../assets/images/emoji/unicode/e047.png | Bin 0 -> 6097 bytes .../assets/images/emoji/unicode/e048.png | Bin 0 -> 4658 bytes .../assets/images/emoji/unicode/e049.png | Bin 0 -> 3860 bytes .../assets/images/emoji/unicode/e04a.png | Bin 0 -> 3802 bytes .../assets/images/emoji/unicode/e04b.png | Bin 0 -> 4745 bytes .../assets/images/emoji/unicode/e04c.png | Bin 0 -> 3541 bytes .../assets/images/emoji/unicode/e04d.png | Bin 0 -> 6594 bytes .../assets/images/emoji/unicode/e04e.png | Bin 0 -> 6672 bytes .../assets/images/emoji/unicode/e04f.png | Bin 0 -> 5987 bytes .../assets/images/emoji/unicode/e050.png | Bin 0 -> 6051 bytes .../assets/images/emoji/unicode/e051.png | Bin 0 -> 5561 bytes .../assets/images/emoji/unicode/e052.png | Bin 0 -> 5945 bytes .../assets/images/emoji/unicode/e053.png | Bin 0 -> 6625 bytes .../assets/images/emoji/unicode/e054.png | Bin 0 -> 4940 bytes .../assets/images/emoji/unicode/e055.png | Bin 0 -> 4746 bytes .../assets/images/emoji/unicode/e056.png | Bin 0 -> 5284 bytes .../assets/images/emoji/unicode/e057.png | Bin 0 -> 5794 bytes .../assets/images/emoji/unicode/e058.png | Bin 0 -> 4764 bytes .../assets/images/emoji/unicode/e059.png | Bin 0 -> 5088 bytes .../assets/images/emoji/unicode/e05a.png | Bin 0 -> 4754 bytes .../assets/images/emoji/unicode/e101.png | Bin 0 -> 4196 bytes .../assets/images/emoji/unicode/e102.png | Bin 0 -> 3388 bytes .../assets/images/emoji/unicode/e103.png | Bin 0 -> 2697 bytes .../assets/images/emoji/unicode/e104.png | Bin 0 -> 4037 bytes .../assets/images/emoji/unicode/e105.png | Bin 0 -> 6007 bytes .../assets/images/emoji/unicode/e106.png | Bin 0 -> 5758 bytes .../assets/images/emoji/unicode/e107.png | Bin 0 -> 6503 bytes .../assets/images/emoji/unicode/e108.png | Bin 0 -> 5576 bytes .../assets/images/emoji/unicode/e109.png | Bin 0 -> 5348 bytes .../assets/images/emoji/unicode/e10a.png | Bin 0 -> 5779 bytes .../assets/images/emoji/unicode/e10b.png | Bin 0 -> 5996 bytes .../assets/images/emoji/unicode/e10c.png | Bin 0 -> 5478 bytes .../assets/images/emoji/unicode/e10d.png | Bin 0 -> 5388 bytes .../assets/images/emoji/unicode/e10e.png | Bin 0 -> 5655 bytes .../assets/images/emoji/unicode/e10f.png | Bin 0 -> 4490 bytes .../assets/images/emoji/unicode/e110.png | Bin 0 -> 5995 bytes .../assets/images/emoji/unicode/e111.png | Bin 0 -> 7219 bytes .../assets/images/emoji/unicode/e112.png | Bin 0 -> 6712 bytes .../assets/images/emoji/unicode/e113.png | Bin 0 -> 3161 bytes .../assets/images/emoji/unicode/e114.png | Bin 0 -> 3040 bytes .../assets/images/emoji/unicode/e115.png | Bin 0 -> 3214 bytes .../assets/images/emoji/unicode/e116.png | Bin 0 -> 3812 bytes .../assets/images/emoji/unicode/e117.png | Bin 0 -> 6269 bytes .../assets/images/emoji/unicode/e118.png | Bin 0 -> 4450 bytes .../assets/images/emoji/unicode/e119.png | Bin 0 -> 4890 bytes .../assets/images/emoji/unicode/e11a.png | Bin 0 -> 6652 bytes .../assets/images/emoji/unicode/e11b.png | Bin 0 -> 4513 bytes .../assets/images/emoji/unicode/e11c.png | Bin 0 -> 2428 bytes .../assets/images/emoji/unicode/e11d.png | Bin 0 -> 3886 bytes .../assets/images/emoji/unicode/e11e.png | Bin 0 -> 2698 bytes .../assets/images/emoji/unicode/e11f.png | Bin 0 -> 6059 bytes .../assets/images/emoji/unicode/e120.png | Bin 0 -> 5706 bytes .../assets/images/emoji/unicode/e121.png | Bin 0 -> 5087 bytes .../assets/images/emoji/unicode/e122.png | Bin 0 -> 4482 bytes .../assets/images/emoji/unicode/e123.png | Bin 0 -> 3538 bytes .../assets/images/emoji/unicode/e124.png | Bin 0 -> 6213 bytes .../assets/images/emoji/unicode/e125.png | Bin 0 -> 3091 bytes .../assets/images/emoji/unicode/e126.png | Bin 0 -> 6718 bytes .../assets/images/emoji/unicode/e127.png | Bin 0 -> 6993 bytes .../assets/images/emoji/unicode/e128.png | Bin 0 -> 6150 bytes .../assets/images/emoji/unicode/e129.png | Bin 0 -> 3145 bytes .../assets/images/emoji/unicode/e12a.png | Bin 0 -> 5242 bytes .../assets/images/emoji/unicode/e12b.png | Bin 0 -> 4353 bytes .../assets/images/emoji/unicode/e12c.png | Bin 0 -> 2685 bytes .../assets/images/emoji/unicode/e12d.png | Bin 0 -> 3309 bytes .../assets/images/emoji/unicode/e12e.png | Bin 0 -> 3424 bytes .../assets/images/emoji/unicode/e12f.png | Bin 0 -> 5500 bytes .../assets/images/emoji/unicode/e130.png | Bin 0 -> 5462 bytes .../assets/images/emoji/unicode/e131.png | Bin 0 -> 5520 bytes .../assets/images/emoji/unicode/e132.png | Bin 0 -> 1675 bytes .../assets/images/emoji/unicode/e133.png | Bin 0 -> 4605 bytes .../assets/images/emoji/unicode/e134.png | Bin 0 -> 4735 bytes .../assets/images/emoji/unicode/e135.png | Bin 0 -> 3512 bytes .../assets/images/emoji/unicode/e136.png | Bin 0 -> 4722 bytes .../assets/images/emoji/unicode/e137.png | Bin 0 -> 3700 bytes .../assets/images/emoji/unicode/e138.png | Bin 0 -> 3368 bytes .../assets/images/emoji/unicode/e139.png | Bin 0 -> 3908 bytes .../assets/images/emoji/unicode/e13a.png | Bin 0 -> 2967 bytes .../assets/images/emoji/unicode/e13b.png | Bin 0 -> 3078 bytes .../assets/images/emoji/unicode/e13c.png | Bin 0 -> 2027 bytes .../assets/images/emoji/unicode/e13d.png | Bin 0 -> 2233 bytes .../assets/images/emoji/unicode/e13e.png | Bin 0 -> 4557 bytes .../assets/images/emoji/unicode/e13f.png | Bin 0 -> 3210 bytes .../assets/images/emoji/unicode/e140.png | Bin 0 -> 1733 bytes .../assets/images/emoji/unicode/e141.png | Bin 0 -> 5309 bytes .../assets/images/emoji/unicode/e142.png | Bin 0 -> 6001 bytes .../assets/images/emoji/unicode/e143.png | Bin 0 -> 4036 bytes .../assets/images/emoji/unicode/e144.png | Bin 0 -> 3676 bytes .../assets/images/emoji/unicode/e145.png | Bin 0 -> 3551 bytes .../assets/images/emoji/unicode/e146.png | Bin 0 -> 3841 bytes .../assets/images/emoji/unicode/e147.png | Bin 0 -> 5211 bytes .../assets/images/emoji/unicode/e148.png | Bin 0 -> 6050 bytes .../assets/images/emoji/unicode/e149.png | Bin 0 -> 1981 bytes .../assets/images/emoji/unicode/e14a.png | Bin 0 -> 4331 bytes .../assets/images/emoji/unicode/e14b.png | Bin 0 -> 4867 bytes .../assets/images/emoji/unicode/e14c.png | Bin 0 -> 4672 bytes .../assets/images/emoji/unicode/e14d.png | Bin 0 -> 5583 bytes .../assets/images/emoji/unicode/e14e.png | Bin 0 -> 3603 bytes .../assets/images/emoji/unicode/e14f.png | Bin 0 -> 3083 bytes .../assets/images/emoji/unicode/e150.png | Bin 0 -> 1715 bytes .../assets/images/emoji/unicode/e151.png | Bin 0 -> 4162 bytes .../assets/images/emoji/unicode/e152.png | Bin 0 -> 7141 bytes .../assets/images/emoji/unicode/e153.png | Bin 0 -> 5136 bytes .../assets/images/emoji/unicode/e154.png | Bin 0 -> 4072 bytes .../assets/images/emoji/unicode/e155.png | Bin 0 -> 4887 bytes .../assets/images/emoji/unicode/e156.png | Bin 0 -> 4073 bytes .../assets/images/emoji/unicode/e157.png | Bin 0 -> 5446 bytes .../assets/images/emoji/unicode/e158.png | Bin 0 -> 5123 bytes .../assets/images/emoji/unicode/e159.png | Bin 0 -> 4065 bytes .../assets/images/emoji/unicode/e15a.png | Bin 0 -> 3744 bytes .../assets/images/emoji/unicode/e201.png | Bin 0 -> 2519 bytes .../assets/images/emoji/unicode/e202.png | Bin 0 -> 4233 bytes .../assets/images/emoji/unicode/e203.png | Bin 0 -> 2854 bytes .../assets/images/emoji/unicode/e204.png | Bin 0 -> 3534 bytes .../assets/images/emoji/unicode/e205.png | Bin 0 -> 3312 bytes .../assets/images/emoji/unicode/e206.png | Bin 0 -> 4012 bytes .../assets/images/emoji/unicode/e207.png | Bin 0 -> 5722 bytes .../assets/images/emoji/unicode/e208.png | Bin 0 -> 4228 bytes .../assets/images/emoji/unicode/e209.png | Bin 0 -> 2761 bytes .../assets/images/emoji/unicode/e20a.png | Bin 0 -> 4224 bytes .../assets/images/emoji/unicode/e20b.png | Bin 0 -> 3231 bytes .../assets/images/emoji/unicode/e20c.png | Bin 0 -> 2925 bytes .../assets/images/emoji/unicode/e20d.png | Bin 0 -> 2785 bytes .../assets/images/emoji/unicode/e20e.png | Bin 0 -> 1719 bytes .../assets/images/emoji/unicode/e20f.png | Bin 0 -> 1685 bytes .../assets/images/emoji/unicode/e210.png | Bin 0 -> 3742 bytes .../assets/images/emoji/unicode/e211.png | Bin 0 -> 3417 bytes .../assets/images/emoji/unicode/e212.png | Bin 0 -> 3927 bytes .../assets/images/emoji/unicode/e213.png | Bin 0 -> 3721 bytes .../assets/images/emoji/unicode/e214.png | Bin 0 -> 4182 bytes .../assets/images/emoji/unicode/e215.png | Bin 0 -> 3198 bytes .../assets/images/emoji/unicode/e216.png | Bin 0 -> 3942 bytes .../assets/images/emoji/unicode/e217.png | Bin 0 -> 3011 bytes .../assets/images/emoji/unicode/e218.png | Bin 0 -> 3048 bytes .../assets/images/emoji/unicode/e219.png | Bin 0 -> 3946 bytes .../assets/images/emoji/unicode/e21a.png | Bin 0 -> 1332 bytes .../assets/images/emoji/unicode/e21b.png | Bin 0 -> 1411 bytes .../assets/images/emoji/unicode/e21c.png | Bin 0 -> 2825 bytes .../assets/images/emoji/unicode/e21d.png | Bin 0 -> 3518 bytes .../assets/images/emoji/unicode/e21e.png | Bin 0 -> 3758 bytes .../assets/images/emoji/unicode/e21f.png | Bin 0 -> 3176 bytes .../assets/images/emoji/unicode/e220.png | Bin 0 -> 3593 bytes .../assets/images/emoji/unicode/e221.png | Bin 0 -> 3791 bytes .../assets/images/emoji/unicode/e222.png | Bin 0 -> 3055 bytes .../assets/images/emoji/unicode/e223.png | Bin 0 -> 3844 bytes .../assets/images/emoji/unicode/e224.png | Bin 0 -> 3776 bytes .../assets/images/emoji/unicode/e225.png | Bin 0 -> 3611 bytes .../assets/images/emoji/unicode/e226.png | Bin 0 -> 3095 bytes .../assets/images/emoji/unicode/e227.png | Bin 0 -> 4533 bytes .../assets/images/emoji/unicode/e228.png | Bin 0 -> 3556 bytes .../assets/images/emoji/unicode/e229.png | Bin 0 -> 3905 bytes .../assets/images/emoji/unicode/e22a.png | Bin 0 -> 4419 bytes .../assets/images/emoji/unicode/e22b.png | Bin 0 -> 4180 bytes .../assets/images/emoji/unicode/e22c.png | Bin 0 -> 4103 bytes .../assets/images/emoji/unicode/e22d.png | Bin 0 -> 3411 bytes .../assets/images/emoji/unicode/e22e.png | Bin 0 -> 3207 bytes .../assets/images/emoji/unicode/e22f.png | Bin 0 -> 3225 bytes .../assets/images/emoji/unicode/e230.png | Bin 0 -> 3113 bytes .../assets/images/emoji/unicode/e231.png | Bin 0 -> 3122 bytes .../assets/images/emoji/unicode/e232.png | Bin 0 -> 3093 bytes .../assets/images/emoji/unicode/e233.png | Bin 0 -> 3024 bytes .../assets/images/emoji/unicode/e234.png | Bin 0 -> 3034 bytes .../assets/images/emoji/unicode/e235.png | Bin 0 -> 3053 bytes .../assets/images/emoji/unicode/e236.png | Bin 0 -> 3249 bytes .../assets/images/emoji/unicode/e237.png | Bin 0 -> 3240 bytes .../assets/images/emoji/unicode/e238.png | Bin 0 -> 3351 bytes .../assets/images/emoji/unicode/e239.png | Bin 0 -> 3360 bytes .../assets/images/emoji/unicode/e23a.png | Bin 0 -> 3201 bytes .../assets/images/emoji/unicode/e23b.png | Bin 0 -> 3202 bytes .../assets/images/emoji/unicode/e23c.png | Bin 0 -> 3124 bytes .../assets/images/emoji/unicode/e23d.png | Bin 0 -> 3068 bytes .../assets/images/emoji/unicode/e23e.png | Bin 0 -> 4859 bytes .../assets/images/emoji/unicode/e23f.png | Bin 0 -> 4359 bytes .../assets/images/emoji/unicode/e240.png | Bin 0 -> 4733 bytes .../assets/images/emoji/unicode/e241.png | Bin 0 -> 4296 bytes .../assets/images/emoji/unicode/e242.png | Bin 0 -> 5384 bytes .../assets/images/emoji/unicode/e243.png | Bin 0 -> 4913 bytes .../assets/images/emoji/unicode/e244.png | Bin 0 -> 4869 bytes .../assets/images/emoji/unicode/e245.png | Bin 0 -> 4229 bytes .../assets/images/emoji/unicode/e246.png | Bin 0 -> 4566 bytes .../assets/images/emoji/unicode/e247.png | Bin 0 -> 4505 bytes .../assets/images/emoji/unicode/e248.png | Bin 0 -> 4670 bytes .../assets/images/emoji/unicode/e249.png | Bin 0 -> 5096 bytes .../assets/images/emoji/unicode/e24a.png | Bin 0 -> 4458 bytes .../assets/images/emoji/unicode/e24b.png | Bin 0 -> 4434 bytes .../assets/images/emoji/unicode/e24c.png | Bin 0 -> 3785 bytes .../assets/images/emoji/unicode/e24d.png | Bin 0 -> 4158 bytes .../assets/images/emoji/unicode/e24e.png | Bin 0 -> 1600 bytes .../assets/images/emoji/unicode/e24f.png | Bin 0 -> 1634 bytes .../assets/images/emoji/unicode/e250.png | Bin 0 -> 3906 bytes .../assets/images/emoji/unicode/e251.png | Bin 0 -> 3521 bytes .../assets/images/emoji/unicode/e252.png | Bin 0 -> 3177 bytes .../assets/images/emoji/unicode/e253.png | Bin 0 -> 6605 bytes .../assets/images/emoji/unicode/e301.png | Bin 0 -> 4945 bytes .../assets/images/emoji/unicode/e302.png | Bin 0 -> 6116 bytes .../assets/images/emoji/unicode/e303.png | Bin 0 -> 8352 bytes .../assets/images/emoji/unicode/e304.png | Bin 0 -> 6065 bytes .../assets/images/emoji/unicode/e305.png | Bin 0 -> 6567 bytes .../assets/images/emoji/unicode/e306.png | Bin 0 -> 6915 bytes .../assets/images/emoji/unicode/e307.png | Bin 0 -> 3664 bytes .../assets/images/emoji/unicode/e308.png | Bin 0 -> 4509 bytes .../assets/images/emoji/unicode/e309.png | Bin 0 -> 4088 bytes .../assets/images/emoji/unicode/e30a.png | Bin 0 -> 1910 bytes .../assets/images/emoji/unicode/e30b.png | Bin 0 -> 5073 bytes .../assets/images/emoji/unicode/e30c.png | Bin 0 -> 6591 bytes .../assets/images/emoji/unicode/e30d.png | Bin 0 -> 4883 bytes .../assets/images/emoji/unicode/e30e.png | Bin 0 -> 2875 bytes .../assets/images/emoji/unicode/e30f.png | Bin 0 -> 5022 bytes .../assets/images/emoji/unicode/e310.png | Bin 0 -> 2417 bytes .../assets/images/emoji/unicode/e311.png | Bin 0 -> 5208 bytes .../assets/images/emoji/unicode/e312.png | Bin 0 -> 5945 bytes .../assets/images/emoji/unicode/e313.png | Bin 0 -> 3900 bytes .../assets/images/emoji/unicode/e314.png | Bin 0 -> 5581 bytes .../assets/images/emoji/unicode/e315.png | Bin 0 -> 5364 bytes .../assets/images/emoji/unicode/e316.png | Bin 0 -> 5594 bytes .../assets/images/emoji/unicode/e317.png | Bin 0 -> 4821 bytes .../assets/images/emoji/unicode/e318.png | Bin 0 -> 8101 bytes .../assets/images/emoji/unicode/e319.png | Bin 0 -> 3631 bytes .../assets/images/emoji/unicode/e31a.png | Bin 0 -> 4061 bytes .../assets/images/emoji/unicode/e31b.png | Bin 0 -> 3327 bytes .../assets/images/emoji/unicode/e31c.png | Bin 0 -> 3384 bytes .../assets/images/emoji/unicode/e31d.png | Bin 0 -> 5814 bytes .../assets/images/emoji/unicode/e31e.png | Bin 0 -> 6036 bytes .../assets/images/emoji/unicode/e31f.png | Bin 0 -> 7100 bytes .../assets/images/emoji/unicode/e320.png | Bin 0 -> 4252 bytes .../assets/images/emoji/unicode/e321.png | Bin 0 -> 4938 bytes .../assets/images/emoji/unicode/e322.png | Bin 0 -> 3890 bytes .../assets/images/emoji/unicode/e323.png | Bin 0 -> 5449 bytes .../assets/images/emoji/unicode/e324.png | Bin 0 -> 4192 bytes .../assets/images/emoji/unicode/e325.png | Bin 0 -> 4859 bytes .../assets/images/emoji/unicode/e326.png | Bin 0 -> 1614 bytes .../assets/images/emoji/unicode/e327.png | Bin 0 -> 4052 bytes .../assets/images/emoji/unicode/e328.png | Bin 0 -> 6269 bytes .../assets/images/emoji/unicode/e329.png | Bin 0 -> 5413 bytes .../assets/images/emoji/unicode/e32a.png | Bin 0 -> 4094 bytes .../assets/images/emoji/unicode/e32b.png | Bin 0 -> 4432 bytes .../assets/images/emoji/unicode/e32c.png | Bin 0 -> 4414 bytes .../assets/images/emoji/unicode/e32d.png | Bin 0 -> 4295 bytes .../assets/images/emoji/unicode/e32e.png | Bin 0 -> 2212 bytes .../assets/images/emoji/unicode/e32f.png | Bin 0 -> 3628 bytes .../assets/images/emoji/unicode/e330.png | Bin 0 -> 5448 bytes .../assets/images/emoji/unicode/e331.png | Bin 0 -> 4782 bytes .../assets/images/emoji/unicode/e332.png | Bin 0 -> 2542 bytes .../assets/images/emoji/unicode/e333.png | Bin 0 -> 2118 bytes .../assets/images/emoji/unicode/e334.png | Bin 0 -> 3079 bytes .../assets/images/emoji/unicode/e335.png | Bin 0 -> 4068 bytes .../assets/images/emoji/unicode/e336.png | Bin 0 -> 1078 bytes .../assets/images/emoji/unicode/e337.png | Bin 0 -> 1142 bytes .../assets/images/emoji/unicode/e338.png | Bin 0 -> 5954 bytes .../assets/images/emoji/unicode/e339.png | Bin 0 -> 6214 bytes .../assets/images/emoji/unicode/e33a.png | Bin 0 -> 4603 bytes .../assets/images/emoji/unicode/e33b.png | Bin 0 -> 6405 bytes .../assets/images/emoji/unicode/e33c.png | Bin 0 -> 4449 bytes .../assets/images/emoji/unicode/e33d.png | Bin 0 -> 7787 bytes .../assets/images/emoji/unicode/e33e.png | Bin 0 -> 4743 bytes .../assets/images/emoji/unicode/e33f.png | Bin 0 -> 6955 bytes .../assets/images/emoji/unicode/e340.png | Bin 0 -> 6574 bytes .../assets/images/emoji/unicode/e341.png | Bin 0 -> 5336 bytes .../assets/images/emoji/unicode/e342.png | Bin 0 -> 5408 bytes .../assets/images/emoji/unicode/e343.png | Bin 0 -> 5543 bytes .../assets/images/emoji/unicode/e344.png | Bin 0 -> 5257 bytes .../assets/images/emoji/unicode/e345.png | Bin 0 -> 5630 bytes .../assets/images/emoji/unicode/e346.png | Bin 0 -> 6645 bytes .../assets/images/emoji/unicode/e347.png | Bin 0 -> 5477 bytes .../assets/images/emoji/unicode/e348.png | Bin 0 -> 5501 bytes .../assets/images/emoji/unicode/e349.png | Bin 0 -> 5748 bytes .../assets/images/emoji/unicode/e34a.png | Bin 0 -> 4800 bytes .../assets/images/emoji/unicode/e34b.png | Bin 0 -> 5404 bytes .../assets/images/emoji/unicode/e34c.png | Bin 0 -> 5732 bytes .../assets/images/emoji/unicode/e34d.png | Bin 0 -> 5612 bytes .../assets/images/emoji/unicode/e401.png | Bin 0 -> 5648 bytes .../assets/images/emoji/unicode/e402.png | Bin 0 -> 5307 bytes .../assets/images/emoji/unicode/e403.png | Bin 0 -> 5119 bytes .../assets/images/emoji/unicode/e404.png | Bin 0 -> 5721 bytes .../assets/images/emoji/unicode/e405.png | Bin 0 -> 5253 bytes .../assets/images/emoji/unicode/e406.png | Bin 0 -> 5540 bytes .../assets/images/emoji/unicode/e407.png | Bin 0 -> 5881 bytes .../assets/images/emoji/unicode/e408.png | Bin 0 -> 5837 bytes .../assets/images/emoji/unicode/e409.png | Bin 0 -> 5785 bytes .../assets/images/emoji/unicode/e40a.png | Bin 0 -> 5440 bytes .../assets/images/emoji/unicode/e40b.png | Bin 0 -> 5600 bytes .../assets/images/emoji/unicode/e40c.png | Bin 0 -> 5235 bytes .../assets/images/emoji/unicode/e40d.png | Bin 0 -> 5866 bytes .../assets/images/emoji/unicode/e40e.png | Bin 0 -> 5315 bytes .../assets/images/emoji/unicode/e40f.png | Bin 0 -> 5972 bytes .../assets/images/emoji/unicode/e410.png | Bin 0 -> 6043 bytes .../assets/images/emoji/unicode/e411.png | Bin 0 -> 5730 bytes .../assets/images/emoji/unicode/e412.png | Bin 0 -> 6339 bytes .../assets/images/emoji/unicode/e413.png | Bin 0 -> 5699 bytes .../assets/images/emoji/unicode/e414.png | Bin 0 -> 5455 bytes .../assets/images/emoji/unicode/e415.png | Bin 0 -> 5890 bytes .../assets/images/emoji/unicode/e416.png | Bin 0 -> 5410 bytes .../assets/images/emoji/unicode/e417.png | Bin 0 -> 5563 bytes .../assets/images/emoji/unicode/e418.png | Bin 0 -> 5767 bytes .../assets/images/emoji/unicode/e419.png | Bin 0 -> 4398 bytes .../assets/images/emoji/unicode/e41a.png | Bin 0 -> 3703 bytes .../assets/images/emoji/unicode/e41b.png | Bin 0 -> 4335 bytes .../assets/images/emoji/unicode/e41c.png | Bin 0 -> 3738 bytes .../assets/images/emoji/unicode/e41d.png | Bin 0 -> 6203 bytes .../assets/images/emoji/unicode/e41e.png | Bin 0 -> 5048 bytes .../assets/images/emoji/unicode/e41f.png | Bin 0 -> 7110 bytes .../assets/images/emoji/unicode/e420.png | Bin 0 -> 4696 bytes .../assets/images/emoji/unicode/e421.png | Bin 0 -> 5129 bytes .../assets/images/emoji/unicode/e422.png | Bin 0 -> 4951 bytes .../assets/images/emoji/unicode/e423.png | Bin 0 -> 7034 bytes .../assets/images/emoji/unicode/e424.png | Bin 0 -> 7527 bytes .../assets/images/emoji/unicode/e425.png | Bin 0 -> 7370 bytes .../assets/images/emoji/unicode/e426.png | Bin 0 -> 5143 bytes .../assets/images/emoji/unicode/e427.png | Bin 0 -> 5375 bytes .../assets/images/emoji/unicode/e428.png | Bin 0 -> 7615 bytes .../assets/images/emoji/unicode/e429.png | Bin 0 -> 7918 bytes .../assets/images/emoji/unicode/e42a.png | Bin 0 -> 6386 bytes .../assets/images/emoji/unicode/e42b.png | Bin 0 -> 6712 bytes .../assets/images/emoji/unicode/e42c.png | Bin 0 -> 4141 bytes .../assets/images/emoji/unicode/e42d.png | Bin 0 -> 4378 bytes .../assets/images/emoji/unicode/e42e.png | Bin 0 -> 4081 bytes .../assets/images/emoji/unicode/e42f.png | Bin 0 -> 3721 bytes .../assets/images/emoji/unicode/e430.png | Bin 0 -> 4862 bytes .../assets/images/emoji/unicode/e431.png | Bin 0 -> 3708 bytes .../assets/images/emoji/unicode/e432.png | Bin 0 -> 3349 bytes .../assets/images/emoji/unicode/e433.png | Bin 0 -> 5148 bytes .../assets/images/emoji/unicode/e434.png | Bin 0 -> 3423 bytes .../assets/images/emoji/unicode/e435.png | Bin 0 -> 3842 bytes .../assets/images/emoji/unicode/e436.png | Bin 0 -> 4672 bytes .../assets/images/emoji/unicode/e437.png | Bin 0 -> 6013 bytes .../assets/images/emoji/unicode/e438.png | Bin 0 -> 7138 bytes .../assets/images/emoji/unicode/e439.png | Bin 0 -> 4165 bytes .../assets/images/emoji/unicode/e43a.png | Bin 0 -> 5741 bytes .../assets/images/emoji/unicode/e43b.png | Bin 0 -> 6124 bytes .../assets/images/emoji/unicode/e43c.png | Bin 0 -> 3964 bytes .../assets/images/emoji/unicode/e43d.png | Bin 0 -> 5847 bytes .../assets/images/emoji/unicode/e43e.png | Bin 0 -> 5777 bytes .../assets/images/emoji/unicode/e43f.png | Bin 0 -> 5908 bytes .../assets/images/emoji/unicode/e440.png | Bin 0 -> 5696 bytes .../assets/images/emoji/unicode/e441.png | Bin 0 -> 5115 bytes .../assets/images/emoji/unicode/e442.png | Bin 0 -> 3487 bytes .../assets/images/emoji/unicode/e443.png | Bin 0 -> 4986 bytes .../assets/images/emoji/unicode/e444.png | Bin 0 -> 4758 bytes .../assets/images/emoji/unicode/e445.png | Bin 0 -> 5633 bytes .../assets/images/emoji/unicode/e446.png | Bin 0 -> 6261 bytes .../assets/images/emoji/unicode/e447.png | Bin 0 -> 5649 bytes .../assets/images/emoji/unicode/e448.png | Bin 0 -> 6271 bytes .../assets/images/emoji/unicode/e449.png | Bin 0 -> 3914 bytes .../assets/images/emoji/unicode/e44a.png | Bin 0 -> 4312 bytes .../assets/images/emoji/unicode/e44b.png | Bin 0 -> 4366 bytes .../assets/images/emoji/unicode/e44c.png | Bin 0 -> 5314 bytes .../assets/images/emoji/unicode/e501.png | Bin 0 -> 5941 bytes .../assets/images/emoji/unicode/e502.png | Bin 0 -> 6744 bytes .../assets/images/emoji/unicode/e503.png | Bin 0 -> 3009 bytes .../assets/images/emoji/unicode/e504.png | Bin 0 -> 5159 bytes .../assets/images/emoji/unicode/e505.png | Bin 0 -> 4939 bytes .../assets/images/emoji/unicode/e506.png | Bin 0 -> 5427 bytes .../assets/images/emoji/unicode/e507.png | Bin 0 -> 3573 bytes .../assets/images/emoji/unicode/e508.png | Bin 0 -> 5558 bytes .../assets/images/emoji/unicode/e509.png | Bin 0 -> 4802 bytes .../assets/images/emoji/unicode/e50a.png | Bin 0 -> 3698 bytes .../assets/images/emoji/unicode/e50b.png | Bin 0 -> 2827 bytes .../assets/images/emoji/unicode/e50c.png | Bin 0 -> 6285 bytes .../assets/images/emoji/unicode/e50d.png | Bin 0 -> 3398 bytes .../assets/images/emoji/unicode/e50e.png | Bin 0 -> 2640 bytes .../assets/images/emoji/unicode/e50f.png | Bin 0 -> 3495 bytes .../assets/images/emoji/unicode/e510.png | Bin 0 -> 5894 bytes .../assets/images/emoji/unicode/e511.png | Bin 0 -> 4302 bytes .../assets/images/emoji/unicode/e512.png | Bin 0 -> 3920 bytes .../assets/images/emoji/unicode/e513.png | Bin 0 -> 3634 bytes .../assets/images/emoji/unicode/e514.png | Bin 0 -> 5105 bytes .../assets/images/emoji/unicode/e515.png | Bin 0 -> 6622 bytes .../assets/images/emoji/unicode/e516.png | Bin 0 -> 5324 bytes .../assets/images/emoji/unicode/e517.png | Bin 0 -> 6528 bytes .../assets/images/emoji/unicode/e518.png | Bin 0 -> 6733 bytes .../assets/images/emoji/unicode/e519.png | Bin 0 -> 5977 bytes .../assets/images/emoji/unicode/e51a.png | Bin 0 -> 5921 bytes .../assets/images/emoji/unicode/e51b.png | Bin 0 -> 6193 bytes .../assets/images/emoji/unicode/e51c.png | Bin 0 -> 7920 bytes .../assets/images/emoji/unicode/e51d.png | Bin 0 -> 6075 bytes .../assets/images/emoji/unicode/e51e.png | Bin 0 -> 3587 bytes .../assets/images/emoji/unicode/e51f.png | Bin 0 -> 3737 bytes .../assets/images/emoji/unicode/e520.png | Bin 0 -> 4343 bytes .../assets/images/emoji/unicode/e521.png | Bin 0 -> 4878 bytes .../assets/images/emoji/unicode/e522.png | Bin 0 -> 5846 bytes .../assets/images/emoji/unicode/e523.png | Bin 0 -> 3961 bytes .../assets/images/emoji/unicode/e524.png | Bin 0 -> 7371 bytes .../assets/images/emoji/unicode/e525.png | Bin 0 -> 5945 bytes .../assets/images/emoji/unicode/e526.png | Bin 0 -> 5086 bytes .../assets/images/emoji/unicode/e527.png | Bin 0 -> 5687 bytes .../assets/images/emoji/unicode/e528.png | Bin 0 -> 4973 bytes .../assets/images/emoji/unicode/e529.png | Bin 0 -> 4732 bytes .../assets/images/emoji/unicode/e52a.png | Bin 0 -> 4845 bytes .../assets/images/emoji/unicode/e52b.png | Bin 0 -> 5745 bytes .../assets/images/emoji/unicode/e52c.png | Bin 0 -> 5677 bytes .../assets/images/emoji/unicode/e52d.png | Bin 0 -> 4069 bytes .../assets/images/emoji/unicode/e52e.png | Bin 0 -> 3988 bytes .../assets/images/emoji/unicode/e52f.png | Bin 0 -> 4840 bytes .../assets/images/emoji/unicode/e530.png | Bin 0 -> 4485 bytes .../assets/images/emoji/unicode/e531.png | Bin 0 -> 4823 bytes .../assets/images/emoji/unicode/e532.png | Bin 0 -> 3175 bytes .../assets/images/emoji/unicode/e533.png | Bin 0 -> 3025 bytes .../assets/images/emoji/unicode/e534.png | Bin 0 -> 3859 bytes .../assets/images/emoji/unicode/e535.png | Bin 0 -> 3498 bytes .../assets/images/emoji/unicode/e536.png | Bin 0 -> 1604 bytes .../assets/images/emoji/unicode/e537.png | Bin 0 -> 870 bytes .../vendor/assets/images/emoji/unlock.png | 1 + .../vendor/assets/images/emoji/up.png | 1 + .../vendor/assets/images/emoji/us.png | 1 + .../vendor/assets/images/emoji/v.png | 1 + .../images/emoji/vertical_traffic_light.png | 1 + .../vendor/assets/images/emoji/vhs.png | 1 + .../assets/images/emoji/vibration_mode.png | 1 + .../assets/images/emoji/video_camera.png | 1 + .../vendor/assets/images/emoji/video_game.png | 1 + .../vendor/assets/images/emoji/violin.png | 1 + .../vendor/assets/images/emoji/virgo.png | 1 + .../vendor/assets/images/emoji/volcano.png | 1 + .../vendor/assets/images/emoji/vs.png | 1 + .../vendor/assets/images/emoji/walking.png | 1 + .../images/emoji/waning_crescent_moon.png | 1 + .../images/emoji/waning_gibbous_moon.png | 1 + .../vendor/assets/images/emoji/warning.png | 1 + .../vendor/assets/images/emoji/watch.png | 1 + .../assets/images/emoji/water_buffalo.png | 1 + .../vendor/assets/images/emoji/watermelon.png | 1 + .../vendor/assets/images/emoji/wave.png | 1 + .../vendor/assets/images/emoji/wavy_dash.png | 1 + .../images/emoji/waxing_crescent_moon.png | 1 + .../images/emoji/waxing_gibbous_moon.png | 1 + .../vendor/assets/images/emoji/wc.png | 1 + .../vendor/assets/images/emoji/weary.png | 1 + .../vendor/assets/images/emoji/wedding.png | 1 + .../vendor/assets/images/emoji/whale.png | 1 + .../vendor/assets/images/emoji/whale2.png | 1 + .../vendor/assets/images/emoji/wheelchair.png | 1 + .../assets/images/emoji/white_circle.png | 1 + .../assets/images/emoji/white_flower.png | 1 + .../assets/images/emoji/white_square.png | 1 + .../vendor/assets/images/emoji/wind_chime.png | 1 + .../vendor/assets/images/emoji/wine_glass.png | 1 + .../vendor/assets/images/emoji/wink.png | 1 + .../vendor/assets/images/emoji/wink2.png | 1 + .../vendor/assets/images/emoji/wolf.png | 1 + .../vendor/assets/images/emoji/woman.png | 1 + .../assets/images/emoji/womans_clothes.png | 1 + .../vendor/assets/images/emoji/womans_hat.png | 1 + .../vendor/assets/images/emoji/womens.png | 1 + .../vendor/assets/images/emoji/wrench.png | 1 + .../vendor/assets/images/emoji/x.png | 1 + .../assets/images/emoji/yellow_heart.png | 1 + .../vendor/assets/images/emoji/yen.png | 1 + .../vendor/assets/images/emoji/yum.png | 1 + .../vendor/assets/images/emoji/zap.png | 1 + .../vendor/assets/images/emoji/zero.png | 1 + .../vendor/assets/images/emoji/zzz.png | 1 + .../assets/javascripts/discourse_emoji.js | 75 + .../stylesheets/discourse_emoji.css.sass | 5 + vendor/gems/discourse_plugin/Gemfile | 10 + vendor/gems/discourse_plugin/Gemfile.lock | 105 + vendor/gems/discourse_plugin/LICENSE | 22 + vendor/gems/discourse_plugin/README.md | 3 + vendor/gems/discourse_plugin/Rakefile | 7 + .../discourse_plugin/discourse_plugin.gemspec | 20 + .../discourse_plugin/lib/discourse_event.rb | 28 + .../discourse_plugin/lib/discourse_plugin.rb | 3 + .../lib/discourse_plugin/discourse_plugin.rb | 48 + .../lib/discourse_plugin/version.rb | 3 + .../spec/discourse_event_spec.rb | 49 + .../spec/discourse_plugin_spec.rb | 42 + .../gems/discourse_plugin/spec/spec_helper.rb | 18 + vendor/gems/discourse_poll/Gemfile | 13 + vendor/gems/discourse_poll/Gemfile.lock | 111 + vendor/gems/discourse_poll/LICENSE | 22 + vendor/gems/discourse_poll/README.md | 3 + vendor/gems/discourse_poll/Rakefile | 7 + .../discourse_poll/discourse_poll.gemspec | 20 + .../gems/discourse_poll/lib/discourse_poll.rb | 5 + .../lib/discourse_poll/engine.rb | 21 + .../lib/discourse_poll/locale/en.yml | 47 + .../lib/discourse_poll/plugin.rb | 49 + .../lib/discourse_poll/version.rb | 3 + .../gems/discourse_poll/spec/plugin_spec.rb | 66 + .../gems/discourse_poll/spec/spec_helper.rb | 13 + .../assets/javascripts/discourse_poll.js | 3 + .../javascripts/discourse_poll/models/post.js | 45 + .../discourse_poll/models/post_action_type.js | 9 + .../templates/about_poll.js.handlebars | 15 + .../templates/poll_controls.js.handlebars | 17 + .../discourse_poll/views/post_view.js | 18 + .../discourse_poll/views/prepend_post_view.js | 12 + .../views/topic_footer_buttons_view.js | 9 + .../views/topic_information_view.js | 14 + .../discourse_poll/views/topic_status_view.js | 12 + .../views/vote_controls_view.js | 41 + .../stylesheets/discourse_poll.css.sass | 53 + vendor/gems/discourse_task/Gemfile | 13 + vendor/gems/discourse_task/Gemfile.lock | 111 + vendor/gems/discourse_task/LICENSE | 22 + vendor/gems/discourse_task/README.md | 3 + vendor/gems/discourse_task/Rakefile | 7 + vendor/gems/discourse_task/config/routes.rb | 5 + .../discourse_task/discourse_task.gemspec | 19 + .../gems/discourse_task/lib/discourse_task.rb | 4 + .../lib/discourse_task/engine.rb | 20 + .../lib/discourse_task/locale/en.yml | 21 + .../lib/discourse_task/plugin.rb | 94 + .../lib/discourse_task/version.rb | 3 + .../gems/discourse_task/spec/plugin_spec.rb | 28 + .../gems/discourse_task/spec/spec_helper.rb | 13 + .../assets/javascripts/discourse_task.js | 1 + .../controllers/topic_controller.js | 15 + .../discourse_task/models/topic.js | 23 + .../templates/about_task.js.handlebars | 15 + .../views/topic_footer_buttons_view.js | 40 + .../discourse_task/views/topic_status_view.js | 21 + .../views/topic_summary_view.js | 14 + .../stylesheets/discourse_task.css.sass | 15 + vendor/gems/message_bus/.gitignore | 17 + vendor/gems/message_bus/Gemfile | 16 + vendor/gems/message_bus/Guardfile | 7 + vendor/gems/message_bus/LICENSE | 22 + vendor/gems/message_bus/README.md | 27 + vendor/gems/message_bus/Rakefile | 14 + vendor/gems/message_bus/autotest/discover.rb | 1 + vendor/gems/message_bus/lib/message_bus.rb | 240 + .../message_bus/lib/message_bus/client.rb | 71 + .../lib/message_bus/connection_manager.rb | 69 + .../message_bus/lib/message_bus/message.rb | 17 + .../lib/message_bus/message_handler.rb | 26 + .../lib/message_bus/rack/middleware.rb | 163 + .../lib/message_bus/rails/railtie.rb | 9 + .../lib/message_bus/reliable_pub_sub.rb | 242 + .../message_bus/lib/message_bus/version.rb | 3 + vendor/gems/message_bus/message_bus.gemspec | 23 + .../gems/message_bus/spec/lib/client_spec.rb | 27 + .../spec/lib/connection_manager_spec.rb | 83 + .../spec/lib/handlers/demo_message_handler.rb | 5 + .../message_bus/spec/lib/message_bus_spec.rb | 78 + .../spec/lib/message_handler_spec.rb | 39 + .../message_bus/spec/lib/middleware_spec.rb | 180 + .../spec/lib/reliable_pub_sub_spec.rb | 167 + vendor/gems/message_bus/spec/spec_helper.rb | 16 + vendor/gems/rails_multisite/.gitignore | 17 + vendor/gems/rails_multisite/Gemfile | 11 + vendor/gems/rails_multisite/LICENSE | 22 + vendor/gems/rails_multisite/README.md | 29 + vendor/gems/rails_multisite/Rakefile | 7 + .../rails_multisite/lib/rails_multisite.rb | 3 + .../rails_multisite/connection_management.rb | 147 + .../lib/rails_multisite/railtie.rb | 21 + .../lib/rails_multisite/version.rb | 3 + vendor/gems/rails_multisite/lib/tasks/db.rake | 20 + .../rails_multisite/lib/tasks/generators.rake | 26 + .../rails_multisite/rails_multisite.gemspec | 20 + .../spec/connection_management_rack_spec.rb | 47 + .../spec/connection_management_spec.rb | 41 + .../spec/fixtures/database.yml | 6 + .../rails_multisite/spec/fixtures/two_dbs.yml | 9 + .../gems/rails_multisite/spec/spec_helper.rb | 17 + .../lib/simple_handlebars_rails.rb | 10 + .../simple_handlebars_template.rb | 38 + .../simple_handlebars_rails.gemspec | 18 + 2932 files changed, 143949 insertions(+) create mode 100644 .autotest create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .rspec create mode 100644 AUTHORS.md create mode 100644 CONTRIBUTING.md create mode 100644 COPYRIGHT.txt create mode 100644 DEVELOPMENT.md create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 Guardfile create mode 100644 INSTALL.md create mode 100644 LICENSE.txt create mode 100644 PLUGINS.md create mode 100644 README.md create mode 100644 Rakefile create mode 100644 SOFTWARE.md create mode 100644 Vagrantfile create mode 120000 adminjs create mode 100755 app/assets/fonts/FontAwesome.otf create mode 100755 app/assets/fonts/fontawesome-webfont.eot create mode 100755 app/assets/fonts/fontawesome-webfont.ttf create mode 100755 app/assets/fonts/fontawesome-webfont.woff create mode 100644 app/assets/fonts/zocial-regular-webfont.eot create mode 100644 app/assets/fonts/zocial-regular-webfont.svg create mode 100644 app/assets/fonts/zocial-regular-webfont.ttf create mode 100644 app/assets/fonts/zocial-regular-webfont.woff create mode 100644 app/assets/images/auth/facebook.gif create mode 100644 app/assets/images/auth/google.gif create mode 100644 app/assets/images/auth/twitter.png create mode 100644 app/assets/images/auth/yahoo.gif create mode 100644 app/assets/images/avatars/0.jpg create mode 100644 app/assets/images/avatars/1.jpg create mode 100644 app/assets/images/avatars/10.jpg create mode 100644 app/assets/images/avatars/100.jpg create mode 100644 app/assets/images/avatars/101.jpg create mode 100644 app/assets/images/avatars/102.jpg create mode 100644 app/assets/images/avatars/103.jpg create mode 100644 app/assets/images/avatars/104.jpg create mode 100644 app/assets/images/avatars/105.jpg create mode 100644 app/assets/images/avatars/106.jpg create mode 100644 app/assets/images/avatars/107.jpg create mode 100644 app/assets/images/avatars/108.jpg create mode 100644 app/assets/images/avatars/109.jpg create mode 100644 app/assets/images/avatars/11.jpg create mode 100644 app/assets/images/avatars/110.jpg create mode 100644 app/assets/images/avatars/111.jpg create mode 100644 app/assets/images/avatars/112.jpg create mode 100644 app/assets/images/avatars/113.jpg create mode 100644 app/assets/images/avatars/114.jpg create mode 100644 app/assets/images/avatars/115.jpg create mode 100644 app/assets/images/avatars/116.jpg create mode 100644 app/assets/images/avatars/117.jpg create mode 100644 app/assets/images/avatars/118.jpg create mode 100644 app/assets/images/avatars/119.jpg create mode 100644 app/assets/images/avatars/12.jpg create mode 100644 app/assets/images/avatars/120.jpg create mode 100644 app/assets/images/avatars/121.jpg create mode 100644 app/assets/images/avatars/122.jpg create mode 100644 app/assets/images/avatars/123.jpg create mode 100644 app/assets/images/avatars/124.jpg create mode 100644 app/assets/images/avatars/125.jpg create mode 100644 app/assets/images/avatars/126.jpg create mode 100644 app/assets/images/avatars/127.jpg create mode 100644 app/assets/images/avatars/128.jpg create mode 100644 app/assets/images/avatars/129.jpg create mode 100644 app/assets/images/avatars/13.jpg create mode 100644 app/assets/images/avatars/130.jpg create mode 100644 app/assets/images/avatars/131.jpg create mode 100644 app/assets/images/avatars/132.jpg create mode 100644 app/assets/images/avatars/133.jpg create mode 100644 app/assets/images/avatars/134.jpg create mode 100644 app/assets/images/avatars/135.jpg create mode 100644 app/assets/images/avatars/136.jpg create mode 100644 app/assets/images/avatars/137.jpg create mode 100644 app/assets/images/avatars/138.jpg create mode 100644 app/assets/images/avatars/14.jpg create mode 100644 app/assets/images/avatars/15.jpg create mode 100644 app/assets/images/avatars/16.jpg create mode 100644 app/assets/images/avatars/17.jpg create mode 100644 app/assets/images/avatars/18.jpg create mode 100644 app/assets/images/avatars/19.jpg create mode 100644 app/assets/images/avatars/2.jpg create mode 100644 app/assets/images/avatars/20.jpg create mode 100644 app/assets/images/avatars/21.jpg create mode 100644 app/assets/images/avatars/22.jpg create mode 100644 app/assets/images/avatars/23.jpg create mode 100644 app/assets/images/avatars/24.jpg create mode 100644 app/assets/images/avatars/25.jpg create mode 100644 app/assets/images/avatars/26.jpg create mode 100644 app/assets/images/avatars/27.jpg create mode 100644 app/assets/images/avatars/28.jpg create mode 100644 app/assets/images/avatars/29.jpg create mode 100644 app/assets/images/avatars/3.jpg create mode 100644 app/assets/images/avatars/30.jpg create mode 100644 app/assets/images/avatars/31.jpg create mode 100644 app/assets/images/avatars/32.jpg create mode 100644 app/assets/images/avatars/33.jpg create mode 100644 app/assets/images/avatars/34.jpg create mode 100644 app/assets/images/avatars/35.jpg create mode 100644 app/assets/images/avatars/36.jpg create mode 100644 app/assets/images/avatars/37.jpg create mode 100644 app/assets/images/avatars/38.jpg create mode 100644 app/assets/images/avatars/39.jpg create mode 100644 app/assets/images/avatars/4.jpg create mode 100644 app/assets/images/avatars/40.jpg create mode 100644 app/assets/images/avatars/41.jpg create mode 100644 app/assets/images/avatars/42.jpg create mode 100644 app/assets/images/avatars/43.jpg create mode 100644 app/assets/images/avatars/44.jpg create mode 100644 app/assets/images/avatars/45.jpg create mode 100644 app/assets/images/avatars/46.jpg create mode 100644 app/assets/images/avatars/47.jpg create mode 100644 app/assets/images/avatars/48.jpg create mode 100644 app/assets/images/avatars/49.jpg create mode 100644 app/assets/images/avatars/5.jpg create mode 100644 app/assets/images/avatars/50.jpg create mode 100644 app/assets/images/avatars/51.jpg create mode 100644 app/assets/images/avatars/52.jpg create mode 100644 app/assets/images/avatars/53.jpg create mode 100644 app/assets/images/avatars/54.jpg create mode 100644 app/assets/images/avatars/55.jpg create mode 100644 app/assets/images/avatars/56.jpg create mode 100644 app/assets/images/avatars/57.jpg create mode 100644 app/assets/images/avatars/58.jpg create mode 100644 app/assets/images/avatars/59.jpg create mode 100644 app/assets/images/avatars/6.jpg create mode 100644 app/assets/images/avatars/60.jpg create mode 100644 app/assets/images/avatars/61.jpg create mode 100644 app/assets/images/avatars/62.jpg create mode 100644 app/assets/images/avatars/63.jpg create mode 100644 app/assets/images/avatars/64.jpg create mode 100644 app/assets/images/avatars/65.jpg create mode 100644 app/assets/images/avatars/66.jpg create mode 100644 app/assets/images/avatars/67.jpg create mode 100644 app/assets/images/avatars/68.jpg create mode 100644 app/assets/images/avatars/69.jpg create mode 100644 app/assets/images/avatars/7.jpg create mode 100644 app/assets/images/avatars/70.jpg create mode 100644 app/assets/images/avatars/71.jpg create mode 100644 app/assets/images/avatars/72.jpg create mode 100644 app/assets/images/avatars/73.jpg create mode 100644 app/assets/images/avatars/74.jpg create mode 100644 app/assets/images/avatars/75.jpg create mode 100644 app/assets/images/avatars/76.jpg create mode 100644 app/assets/images/avatars/77.jpg create mode 100644 app/assets/images/avatars/78.jpg create mode 100644 app/assets/images/avatars/79.jpg create mode 100644 app/assets/images/avatars/8.jpg create mode 100644 app/assets/images/avatars/80.jpg create mode 100644 app/assets/images/avatars/81.jpg create mode 100644 app/assets/images/avatars/82.jpg create mode 100644 app/assets/images/avatars/83.jpg create mode 100644 app/assets/images/avatars/84.jpg create mode 100644 app/assets/images/avatars/85.jpg create mode 100644 app/assets/images/avatars/86.jpg create mode 100644 app/assets/images/avatars/87.jpg create mode 100644 app/assets/images/avatars/88.jpg create mode 100644 app/assets/images/avatars/89.jpg create mode 100644 app/assets/images/avatars/9.jpg create mode 100644 app/assets/images/avatars/90.jpg create mode 100644 app/assets/images/avatars/91.jpg create mode 100644 app/assets/images/avatars/92.jpg create mode 100644 app/assets/images/avatars/93.jpg create mode 100644 app/assets/images/avatars/94.jpg create mode 100644 app/assets/images/avatars/95.jpg create mode 100644 app/assets/images/avatars/96.jpg create mode 100644 app/assets/images/avatars/97.jpg create mode 100644 app/assets/images/avatars/98.jpg create mode 100644 app/assets/images/avatars/99.jpg create mode 100644 app/assets/images/avatars/rename.rb create mode 100644 app/assets/images/chosen-sprite.png create mode 100644 app/assets/images/cool_avatars/coding_horror.png create mode 100644 app/assets/images/cool_avatars/evil_trout.jpg create mode 100644 app/assets/images/cool_avatars/hanzo.png create mode 100644 app/assets/images/cool_avatars/sam.png create mode 100644 app/assets/images/favicon.ico create mode 100644 app/assets/images/favicons/1282043220-favicon.ico create mode 100644 app/assets/images/favicons/amazon.png create mode 100644 app/assets/images/favicons/apple.png create mode 100644 app/assets/images/favicons/github.png create mode 100644 app/assets/images/favicons/google_play.png create mode 100644 app/assets/images/favicons/twitter.png create mode 100644 app/assets/images/favicons/wikipedia.png create mode 100644 app/assets/images/grippie.png create mode 100644 app/assets/images/logo-single.png create mode 100644 app/assets/images/logo.png create mode 100644 app/assets/images/posted.png create mode 100644 app/assets/images/spinner_96.gif create mode 100644 app/assets/images/spinner_96_w.gif create mode 100644 app/assets/images/thread-default.png create mode 100644 app/assets/images/wmd-buttons.png create mode 100644 app/assets/images/wmd-quote-post.gif create mode 100644 app/assets/javascripts/admin.js create mode 100644 app/assets/javascripts/admin/controllers/admin_customize_controller.js.coffee create mode 100644 app/assets/javascripts/admin/controllers/admin_email_logs_controller.js.coffee create mode 100644 app/assets/javascripts/admin/controllers/admin_flags_controller.js.coffee create mode 100644 app/assets/javascripts/admin/controllers/admin_site_settings_controller.js.coffee create mode 100644 app/assets/javascripts/admin/controllers/admin_users_list_controller.js.coffee create mode 100644 app/assets/javascripts/admin/models/admin_user.js.coffee create mode 100644 app/assets/javascripts/admin/models/email_log.js.coffee create mode 100644 app/assets/javascripts/admin/models/flagged_post.js.coffee create mode 100644 app/assets/javascripts/admin/models/site_customization.js.coffee create mode 100644 app/assets/javascripts/admin/models/site_setting.js.coffee create mode 100644 app/assets/javascripts/admin/routes/admin_customize_route.js.coffee create mode 100644 app/assets/javascripts/admin/routes/admin_email_logs_route.js.coffee create mode 100644 app/assets/javascripts/admin/routes/admin_flags_active_route.js.coffee create mode 100644 app/assets/javascripts/admin/routes/admin_flags_old_route.js.coffee create mode 100644 app/assets/javascripts/admin/routes/admin_routes.js.coffee create mode 100644 app/assets/javascripts/admin/routes/admin_site_settings_route.js.coffee create mode 100644 app/assets/javascripts/admin/routes/admin_user_route.js.coffee create mode 100644 app/assets/javascripts/admin/routes/admin_users_list_active_route.js.coffee create mode 100644 app/assets/javascripts/admin/routes/admin_users_list_new_route.js.coffee create mode 100644 app/assets/javascripts/admin/routes/admin_users_list_pending_route.js.coffee create mode 100644 app/assets/javascripts/admin/templates/admin.js.handlebars create mode 100644 app/assets/javascripts/admin/templates/customize.js.handlebars create mode 100644 app/assets/javascripts/admin/templates/dashboard.js.handlebars create mode 100644 app/assets/javascripts/admin/templates/email_logs.js.handlebars create mode 100644 app/assets/javascripts/admin/templates/flags.js.handlebars create mode 100644 app/assets/javascripts/admin/templates/site_settings.js.handlebars create mode 100644 app/assets/javascripts/admin/templates/user.js.handlebars create mode 100644 app/assets/javascripts/admin/templates/users_list.js.handlebars create mode 100644 app/assets/javascripts/admin/translations.js.erb create mode 100644 app/assets/javascripts/admin/views/ace_editor_view.js.coffee create mode 100644 app/assets/javascripts/admin/views/admin_customize_view.js.coffee create mode 100644 app/assets/javascripts/admin/views/admin_dashboard_view.js.coffee create mode 100644 app/assets/javascripts/admin/views/admin_email_logs_view.js.coffee create mode 100644 app/assets/javascripts/admin/views/admin_flags_view.js.coffee create mode 100644 app/assets/javascripts/admin/views/admin_site_settings_view.js.coffee create mode 100644 app/assets/javascripts/admin/views/admin_user_view.js.coffee create mode 100644 app/assets/javascripts/admin/views/admin_users_list_view.js.coffee create mode 100644 app/assets/javascripts/admin/views/admin_view.js.coffee create mode 100644 app/assets/javascripts/application.js.erb create mode 100644 app/assets/javascripts/discourse.js.coffee create mode 100644 app/assets/javascripts/discourse/components/autocomplete.js.coffee create mode 100644 app/assets/javascripts/discourse/components/bbcode.js.coffee create mode 100644 app/assets/javascripts/discourse/components/caret_position.js.coffee create mode 100644 app/assets/javascripts/discourse/components/click_track.js.coffee create mode 100644 app/assets/javascripts/discourse/components/debounce.js.coffee create mode 100644 app/assets/javascripts/discourse/components/discourse_text_field.js.coffee create mode 100644 app/assets/javascripts/discourse/components/div_resizer.js.coffee create mode 100644 app/assets/javascripts/discourse/components/eyeline.coffee create mode 100644 app/assets/javascripts/discourse/components/key_value_store.coffee create mode 100644 app/assets/javascripts/discourse/components/message_bus.js.coffee create mode 100644 app/assets/javascripts/discourse/components/pagedown_editor.js.coffee create mode 100644 app/assets/javascripts/discourse/components/probes.js create mode 100644 app/assets/javascripts/discourse/components/screen_track.js.coffee create mode 100644 app/assets/javascripts/discourse/components/syntax_highlighting.js.coffee create mode 100644 app/assets/javascripts/discourse/components/transition_helper.js.coffee create mode 100644 app/assets/javascripts/discourse/components/user_search.js.coffee create mode 100644 app/assets/javascripts/discourse/components/utilities.coffee create mode 100644 app/assets/javascripts/discourse/controllers/application_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/composer_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/header_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/list_categories_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/list_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/list_topics_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/modal_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/preferences_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/preferences_email_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/preferences_username_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/quote_button_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/share_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/static_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/topic_admin_menu_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/topic_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/user_activity_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/user_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/user_invited_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/controllers/user_private_messages_controller.js.coffee create mode 100644 app/assets/javascripts/discourse/helpers/application_helpers.js.coffee create mode 100644 app/assets/javascripts/discourse/helpers/i18n_helpers.js.coffee create mode 100644 app/assets/javascripts/discourse/mixins/presence.js.coffee create mode 100644 app/assets/javascripts/discourse/mixins/scrolling.js.coffee create mode 100644 app/assets/javascripts/discourse/models/action_summary.js.coffee create mode 100644 app/assets/javascripts/discourse/models/archetype.js.coffee create mode 100644 app/assets/javascripts/discourse/models/category.js.coffee.erb create mode 100644 app/assets/javascripts/discourse/models/category_list.js.coffee create mode 100644 app/assets/javascripts/discourse/models/composer.js.coffee create mode 100644 app/assets/javascripts/discourse/models/draft.js.coffee create mode 100644 app/assets/javascripts/discourse/models/input_validation.js.coffee create mode 100644 app/assets/javascripts/discourse/models/invite.js.coffee create mode 100644 app/assets/javascripts/discourse/models/invite_list.js.coffee create mode 100644 app/assets/javascripts/discourse/models/mention.js.coffee create mode 100644 app/assets/javascripts/discourse/models/model.js.coffee create mode 100644 app/assets/javascripts/discourse/models/nav_item.js.coffee create mode 100644 app/assets/javascripts/discourse/models/notification.js.coffee create mode 100644 app/assets/javascripts/discourse/models/onebox.js.coffee create mode 100644 app/assets/javascripts/discourse/models/post.js.coffee.erb create mode 100644 app/assets/javascripts/discourse/models/post_action_type.js.coffee create mode 100644 app/assets/javascripts/discourse/models/site.js.coffee.erb create mode 100644 app/assets/javascripts/discourse/models/topic.js.coffee create mode 100644 app/assets/javascripts/discourse/models/topic_list.js.coffee create mode 100644 app/assets/javascripts/discourse/models/user.js.coffee create mode 100644 app/assets/javascripts/discourse/models/user_action.js.coffee create mode 100644 app/assets/javascripts/discourse/models/user_action_stat.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/application_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/application_routes.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/discourse_location.js create mode 100644 app/assets/javascripts/discourse/routes/discourse_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/filtered_list_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/google_analytics.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/list_categories_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/list_category_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/preferences_email_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/preferences_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/preferences_username_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/static_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/topic_best_of_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/topic_from_params_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/topic_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/user_activity_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/user_invited_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/user_private_messages_route.js.coffee create mode 100644 app/assets/javascripts/discourse/routes/user_route.js.coffee create mode 100644 app/assets/javascripts/discourse/templates/application.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/composer.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/embedded_post.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/excerpt/category.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/excerpt/close.handlebars create mode 100644 app/assets/javascripts/discourse/templates/excerpt/post.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/excerpt/user.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/featured_topics.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/flag.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/header.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/history.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/image_selector.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/list/categories.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/list/list.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/list/topic_list_item.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/list/topics.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/archetype_options.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/create_account.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/edit_category.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/forgot_password.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/invite.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/invite_private.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/login.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/modal_errors.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/modal_header.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/move_selected.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/modal/option_boolean.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/participant.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/post.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/quote.js.shbrs create mode 100644 app/assets/javascripts/discourse/templates/search.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/search/category_result.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/search/topic_result.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/search/user_result.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/selected_posts.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/share.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/static.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/suggested_topic.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/topic.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/topic_admin_menu.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/topic_extra_info.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/topic_summary/best_of_toggle.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/topic_summary/private_message.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/user/activity.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/user/email.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/user/invited.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/user/preferences.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/user/private_messages.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/user/stream.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/user/user.js.handlebars create mode 100644 app/assets/javascripts/discourse/templates/user/username.js.handlebars create mode 100644 app/assets/javascripts/discourse/translations.js.erb create mode 100644 app/assets/javascripts/discourse/views/actions_history_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/application_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/archetype_options_modal_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/auto_sized_text_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/button_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/combobox_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/combobox_view_category.js.coffee create mode 100644 app/assets/javascripts/discourse/views/composer_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/dropdown_button_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/embedded_post_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/excerpt/excerpt_category_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/excerpt/excerpt_post_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/excerpt/excerpt_user_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/excerpt/excerpt_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/featured_threads_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/featured_topics_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/flag_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/header_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/history_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/image_selector.js.coffee create mode 100644 app/assets/javascripts/discourse/views/input_tip_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/list/list_categories_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/list/list_topics_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/list/list_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/list/topic_list_item_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/archetype_options_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/create_account_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/edit_category_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/forgot_password_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/invite_modal_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/invite_private_modal_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/login_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/modal_body_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/modal_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/move_selected_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/modal/option_boolean_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/nav_item_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/notifications_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/parent_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/participant_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/post_link_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/post_menu_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/post_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/prepend_post_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/quote_buton_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/replies_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/search/search_results_type_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/search/search_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/selected_posts_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/share_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/suggested_topic_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/topic_admin_menu_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/topic_extra_info_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/topic_footer_buttons_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/topic_posts_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/topic_status_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/topic_summary/topic_links_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/topic_summary/topic_summary_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/topic_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/user/activity_filter_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/user/preferences_email_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/user/preferences_username_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/user/preferences_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/user/user_activity_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/user/user_invited_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/user/user_private_messages_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/user/user_stream_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/user/user_view.js.coffee create mode 100644 app/assets/javascripts/discourse/views/view.js.coffee create mode 100644 app/assets/javascripts/env.js.coffee create mode 100644 app/assets/javascripts/external/LAB.js create mode 100644 app/assets/javascripts/external/Markdown.Converter.js create mode 100644 app/assets/javascripts/external/Markdown.Editor.js create mode 100644 app/assets/javascripts/external/Markdown.Sanitizer.js create mode 100644 app/assets/javascripts/external/bootbox.js create mode 100644 app/assets/javascripts/external/bootstrap-alert.js create mode 100644 app/assets/javascripts/external/bootstrap-button.js create mode 100644 app/assets/javascripts/external/bootstrap-dropdown.js create mode 100644 app/assets/javascripts/external/bootstrap-modal.js create mode 100644 app/assets/javascripts/external/bootstrap-transition.js create mode 100644 app/assets/javascripts/external/chosen.jquery.js create mode 100644 app/assets/javascripts/external/ember.js create mode 100644 app/assets/javascripts/external/group-helper.js create mode 100644 app/assets/javascripts/external/handlebars-1.0.rc.2.js create mode 100644 app/assets/javascripts/external/humane.js create mode 100644 app/assets/javascripts/external/jquery-1.8.2.js create mode 100644 app/assets/javascripts/external/jquery.ba-replacetext.js create mode 100644 app/assets/javascripts/external/jquery.ba-resize.min.js create mode 100644 app/assets/javascripts/external/jquery.color.js create mode 100644 app/assets/javascripts/external/jquery.cookie.js create mode 100644 app/assets/javascripts/external/jquery.fileupload.js create mode 100644 app/assets/javascripts/external/jquery.iframe-transport.js create mode 100644 app/assets/javascripts/external/jquery.putcursoratend.js create mode 100644 app/assets/javascripts/external/jquery.tagsinput.js create mode 100644 app/assets/javascripts/external/jquery.ui.widget.js create mode 100644 app/assets/javascripts/external/modernizr.custom.95264.js create mode 100644 app/assets/javascripts/external/mousetrap.js create mode 100644 app/assets/javascripts/external/respond.min.js create mode 100644 app/assets/javascripts/external/rsvp.js create mode 100644 app/assets/javascripts/external/show-html.js create mode 100644 app/assets/javascripts/external/sugar-1.3.5.js create mode 100644 app/assets/javascripts/external/twitter-text-1.5.0.js create mode 100644 app/assets/javascripts/external_production/ember.js create mode 100644 app/assets/javascripts/external_production/group-helper.js create mode 100644 app/assets/javascripts/external_production/sugar-1.3.5.js create mode 100644 app/assets/javascripts/jquery.js.erb create mode 100644 app/assets/javascripts/pagedown_custom.js.coffee create mode 100644 app/assets/javascripts/preload_store.js.coffee create mode 100644 app/assets/stylesheets/admin.css create mode 100644 app/assets/stylesheets/admin/admin_base.scss create mode 100644 app/assets/stylesheets/application.css.erb create mode 100644 app/assets/stylesheets/application/activation.css.scss create mode 100644 app/assets/stylesheets/application/bbcode.css.scss create mode 100644 app/assets/stylesheets/application/code_highlighting.css.scss create mode 100644 app/assets/stylesheets/application/compose.css.scss create mode 100644 app/assets/stylesheets/application/discourse.css.scss create mode 100755 app/assets/stylesheets/application/faqs.css.scss create mode 100644 app/assets/stylesheets/application/header.css.scss create mode 100644 app/assets/stylesheets/application/history.css.scss create mode 100644 app/assets/stylesheets/application/image-upload.scss create mode 100644 app/assets/stylesheets/application/login.css.scss create mode 100644 app/assets/stylesheets/application/modal.css.scss create mode 100644 app/assets/stylesheets/application/onebox.scss create mode 100644 app/assets/stylesheets/application/pagedown.css.scss create mode 100644 app/assets/stylesheets/application/request_access.css.scss create mode 100644 app/assets/stylesheets/application/share_link.css.scss create mode 100644 app/assets/stylesheets/application/topic-admin-menu.css.scss create mode 100755 app/assets/stylesheets/application/topic-list.css.scss create mode 100644 app/assets/stylesheets/application/topic-post.css.scss create mode 100644 app/assets/stylesheets/application/topic.css.scss create mode 100644 app/assets/stylesheets/application/user.css.scss create mode 100644 app/assets/stylesheets/application/username_tagsinput.css create mode 100755 app/assets/stylesheets/components/badges.css.scss create mode 100755 app/assets/stylesheets/components/buttons.css.scss create mode 100755 app/assets/stylesheets/components/navs.css.scss create mode 100644 app/assets/stylesheets/components/tooltips.css.scss create mode 100755 app/assets/stylesheets/foundation/base.css.scss create mode 100755 app/assets/stylesheets/foundation/helpers.css.scss create mode 100644 app/assets/stylesheets/foundation/mixins.scss create mode 100644 app/assets/stylesheets/foundation/variables.scss create mode 100644 app/assets/stylesheets/vendor/bootstrap.css.scss create mode 100644 app/assets/stylesheets/vendor/chosen.css.erb create mode 100755 app/assets/stylesheets/vendor/font-awesome.css.erb create mode 100755 app/assets/stylesheets/vendor/normalize.css create mode 100644 app/controllers/admin/admin_controller.rb create mode 100644 app/controllers/admin/email_logs_controller.rb create mode 100644 app/controllers/admin/export_controller.rb create mode 100644 app/controllers/admin/flags_controller.rb create mode 100644 app/controllers/admin/impersonate_controller.rb create mode 100644 app/controllers/admin/site_customizations_controller.rb create mode 100644 app/controllers/admin/site_settings_controller.rb create mode 100644 app/controllers/admin/users_controller.rb create mode 100644 app/controllers/admin/versions_controller.rb create mode 100644 app/controllers/application_controller.rb create mode 100644 app/controllers/categories_controller.rb create mode 100644 app/controllers/clicks_controller.rb create mode 100644 app/controllers/draft_controller.rb create mode 100644 app/controllers/email_controller.rb create mode 100644 app/controllers/exceptions_controller.rb create mode 100644 app/controllers/excerpt_controller.rb create mode 100644 app/controllers/facebook_controller.rb create mode 100644 app/controllers/faq_controller.rb create mode 100644 app/controllers/forums_controller.rb create mode 100644 app/controllers/invites_controller.rb create mode 100644 app/controllers/list_controller.rb create mode 100644 app/controllers/notifications_controller.rb create mode 100644 app/controllers/onebox_controller.rb create mode 100644 app/controllers/post_actions_controller.rb create mode 100644 app/controllers/posts_controller.rb create mode 100644 app/controllers/privacy_controller.rb create mode 100644 app/controllers/request_access_controller.rb create mode 100644 app/controllers/search_controller.rb create mode 100644 app/controllers/session_controller.rb create mode 100644 app/controllers/static_controller.rb create mode 100644 app/controllers/topics_controller.rb create mode 100644 app/controllers/tos_controller.rb create mode 100644 app/controllers/twitter_controller.rb create mode 100644 app/controllers/uploads_controller.rb create mode 100644 app/controllers/user_actions_controller.rb create mode 100644 app/controllers/user_open_ids_controller.rb create mode 100644 app/controllers/users_controller.rb create mode 100644 app/helpers/application_helper.rb create mode 100644 app/helpers/forum_helper.rb create mode 100644 app/helpers/list_helper.rb create mode 100644 app/helpers/notifications_helper.rb create mode 100644 app/helpers/user_notifications_helper.rb create mode 100644 app/mailers/.gitkeep create mode 100644 app/mailers/invite_mailer.rb create mode 100644 app/mailers/test_mailer.rb create mode 100644 app/mailers/user_notifications.rb create mode 100644 app/models/.gitkeep create mode 100644 app/models/category.rb create mode 100644 app/models/category_featured_topic.rb create mode 100644 app/models/category_featured_user.rb create mode 100644 app/models/category_list.rb create mode 100644 app/models/draft.rb create mode 100644 app/models/draft_sequence.rb create mode 100644 app/models/email_log.rb create mode 100644 app/models/email_token.rb create mode 100644 app/models/error_log.rb create mode 100644 app/models/facebook_user_info.rb create mode 100644 app/models/incoming_link.rb create mode 100644 app/models/invite.rb create mode 100644 app/models/invited_list.rb create mode 100644 app/models/message_bus_observer.rb create mode 100644 app/models/notification.rb create mode 100644 app/models/onebox_render.rb create mode 100644 app/models/post.rb create mode 100644 app/models/post_action.rb create mode 100644 app/models/post_action_type.rb create mode 100644 app/models/post_alert_observer.rb create mode 100644 app/models/post_onebox_render.rb create mode 100644 app/models/post_reply.rb create mode 100644 app/models/post_timing.rb create mode 100644 app/models/search_observer.rb create mode 100644 app/models/site.rb create mode 100644 app/models/site_customization.rb create mode 100644 app/models/site_setting.rb create mode 100644 app/models/topic.rb create mode 100644 app/models/topic_allowed_user.rb create mode 100644 app/models/topic_invite.rb create mode 100644 app/models/topic_link.rb create mode 100644 app/models/topic_link_click.rb create mode 100644 app/models/topic_list.rb create mode 100644 app/models/topic_poster.rb create mode 100644 app/models/topic_user.rb create mode 100644 app/models/twitter_user_info.rb create mode 100644 app/models/upload.rb create mode 100644 app/models/user.rb create mode 100644 app/models/user_action.rb create mode 100644 app/models/user_action_observer.rb create mode 100644 app/models/user_email_observer.rb create mode 100644 app/models/user_open_id.rb create mode 100644 app/models/user_visit.rb create mode 100644 app/models/view.rb create mode 100644 app/serializers/admin_detailed_user_serializer.rb create mode 100644 app/serializers/admin_user_serializer.rb create mode 100644 app/serializers/application_serializer.rb create mode 100644 app/serializers/archetype_serializer.rb create mode 100644 app/serializers/basic_topic_serializer.rb create mode 100644 app/serializers/basic_user_serializer.rb create mode 100644 app/serializers/category_detailed_serializer.rb create mode 100644 app/serializers/category_excerpt_serializer.rb create mode 100644 app/serializers/category_featured_users_serializer.rb create mode 100644 app/serializers/category_list_serializer.rb create mode 100644 app/serializers/category_serializer.rb create mode 100644 app/serializers/category_topic_serializer.rb create mode 100644 app/serializers/current_user_serializer.rb create mode 100644 app/serializers/email_log_serializer.rb create mode 100644 app/serializers/excerpt_type.rb create mode 100644 app/serializers/invite_serializer.rb create mode 100644 app/serializers/invited_list_serializer.rb create mode 100644 app/serializers/invited_user_serializer.rb create mode 100644 app/serializers/notification_serializer.rb create mode 100644 app/serializers/post_action_type_serializer.rb create mode 100644 app/serializers/post_excerpt_serializer.rb create mode 100644 app/serializers/post_serializer.rb create mode 100644 app/serializers/site_serializer.rb create mode 100644 app/serializers/suggested_topic_serializer.rb create mode 100644 app/serializers/topic_link_serializer.rb create mode 100644 app/serializers/topic_list_item_serializer.rb create mode 100644 app/serializers/topic_list_serializer.rb create mode 100644 app/serializers/topic_post_count_serializer.rb create mode 100644 app/serializers/topic_poster_serializer.rb create mode 100644 app/serializers/topic_view_serializer.rb create mode 100644 app/serializers/trust_level_serializer.rb create mode 100644 app/serializers/upload_serializer.rb create mode 100644 app/serializers/user_excerpt_serializer.rb create mode 100644 app/serializers/user_serializer.rb create mode 100644 app/serializers/version_serializer.rb create mode 100644 app/views/default/empty.html.erb create mode 100644 app/views/email/resubscribe.html.erb create mode 100644 app/views/email/unsubscribe.html.erb create mode 100644 app/views/exceptions/not_found.html.erb create mode 100644 app/views/facebook/complete.haml create mode 100644 app/views/layouts/application.html.erb create mode 100644 app/views/layouts/no_js.html.erb create mode 100644 app/views/list/list.erb create mode 100644 app/views/request_access/new.html.erb create mode 100644 app/views/static/faq.html.erb create mode 100644 app/views/static/privacy.html.erb create mode 100644 app/views/static/tos.html.erb create mode 100644 app/views/topics/show.html.erb create mode 100644 app/views/twitter/complete.haml create mode 100644 app/views/user_notifications/digest.text.erb create mode 100644 app/views/user_open_ids/complete.haml create mode 100644 app/views/users/activate_account.html.erb create mode 100644 app/views/users/authorize_email.html.erb create mode 100644 app/views/users/password_reset.html.erb create mode 100644 config.ru create mode 100644 config/application.rb create mode 100644 config/boot.rb create mode 100644 config/cdn.yml.sample create mode 100644 config/clock.rb create mode 100644 config/database.yml create mode 100644 config/environment.rb create mode 100644 config/environments/development.rb create mode 100644 config/environments/production.rb create mode 100644 config/environments/test.rb create mode 100644 config/fog_credentials.yml.sample create mode 100644 config/i18n-js.yml create mode 100644 config/initializers/backtrace_silencers.rb create mode 100644 config/initializers/freedom_patches.rb create mode 100644 config/initializers/inflections.rb create mode 100644 config/initializers/message_bus.rb create mode 100644 config/initializers/mime_types.rb create mode 100644 config/initializers/mini_profiler.rb create mode 100644 config/initializers/oj.rb create mode 100644 config/initializers/quiet_logger.rb create mode 100644 config/initializers/rails3_ar_after_commit_tests.rb create mode 100644 config/initializers/secret_token.rb create mode 100644 config/initializers/session_store.rb create mode 100644 config/initializers/sidekiq.rb create mode 100644 config/initializers/silence_logger.rb create mode 100644 config/initializers/site_settings.rb create mode 100644 config/initializers/vestal_versions.rb create mode 100644 config/initializers/watch_for_restart.rb create mode 100644 config/initializers/wrap_parameters.rb create mode 100644 config/locales/en.yml create mode 100644 config/nginx.sample.conf create mode 100644 config/redis.yml create mode 100644 config/routes.rb create mode 100644 db/fixtures/post_action_types.rb create mode 100644 db/migrate/20120311163914_create_forum_threads.rb create mode 100644 db/migrate/20120311164326_create_posts.rb create mode 100644 db/migrate/20120311170118_create_users.rb create mode 100644 db/migrate/20120311201341_create_forums.rb create mode 100644 db/migrate/20120311210245_create_sites.rb create mode 100644 db/migrate/20120416201606_add_reply_to_to_posts.rb create mode 100644 db/migrate/20120420183447_add_views_to_forum_threads.rb create mode 100644 db/migrate/20120423140906_add_posts_count_to_forum_threads.rb create mode 100644 db/migrate/20120423142820_fix_post_indices.rb create mode 100644 db/migrate/20120423151548_remove_last_post_id.rb create mode 100644 db/migrate/20120425145456_add_display_username_to_users.rb create mode 100644 db/migrate/20120427150624_add_user_id_index_to_posts.rb create mode 100644 db/migrate/20120427151452_cooked_migration.rb create mode 100644 db/migrate/20120427154330_create_vestal_versions.rb create mode 100644 db/migrate/20120427172031_add_version_to_posts.rb create mode 100644 db/migrate/20120502183240_add_created_by_to_forum_threads.rb create mode 100644 db/migrate/20120502192121_add_last_post_user_id_to_forum_threads.rb create mode 100644 db/migrate/20120503205521_add_site_id_to_users.rb create mode 100644 db/migrate/20120507144132_create_expressions.rb create mode 100644 db/migrate/20120507144222_create_expression_types.rb create mode 100644 db/migrate/20120514144549_add_reply_count_to_posts.rb create mode 100644 db/migrate/20120514173920_add_flag_to_expression_types.rb create mode 100644 db/migrate/20120514204934_add_description_to_expression_types.rb create mode 100644 db/migrate/20120517200130_add_quoteless_to_post.rb create mode 100644 db/migrate/20120518200115_create_read_posts.rb create mode 100644 db/migrate/20120519182212_create_last_read_posts.rb create mode 100644 db/migrate/20120523180723_create_views.rb create mode 100644 db/migrate/20120523184307_add_replies_to_forum_threads.rb create mode 100644 db/migrate/20120523201329_add_featured_to_forum_threads.rb create mode 100644 db/migrate/20120525194845_add_avg_time_to_forum_threads.rb create mode 100644 db/migrate/20120529175956_create_uploads.rb create mode 100644 db/migrate/20120529202707_create_stars.rb create mode 100644 db/migrate/20120530150726_create_forum_thread_user.rb create mode 100644 db/migrate/20120530160745_migrate_posted.rb create mode 100644 db/migrate/20120530200724_add_index_to_forum_threads.rb create mode 100644 db/migrate/20120530212912_create_forum_thread_links.rb create mode 100644 db/migrate/20120614190726_add_tags_to_forum_threads.rb create mode 100644 db/migrate/20120614202024_add_quote_count_to_posts.rb create mode 100644 db/migrate/20120615180517_create_bookmarks.rb create mode 100644 db/migrate/20120618152946_add_reply_below_to_posts.rb create mode 100644 db/migrate/20120618212349_create_post_timings.rb create mode 100644 db/migrate/20120618214856_create_message_bus.rb create mode 100644 db/migrate/20120619150807_fix_post_timings.rb create mode 100644 db/migrate/20120619153349_drop_read_posts.rb create mode 100644 db/migrate/20120619172714_add_post_number_to_bookmarks.rb create mode 100644 db/migrate/20120621155351_add_seen_post_count_to_forum_thread_users.rb create mode 100644 db/migrate/20120621190310_add_deleted_at_to_forum_threads.rb create mode 100644 db/migrate/20120622200242_create_notifications.rb create mode 100644 db/migrate/20120625145714_add_seen_notification_id_to_users.rb create mode 100644 db/migrate/20120625162318_add_deleted_at_to_posts.rb create mode 100644 db/migrate/20120625174544_add_highest_post_number_to_forum_threads.rb create mode 100644 db/migrate/20120625195326_add_image_url_to_forum_threads.rb create mode 100644 db/migrate/20120629143908_rename_expression_type_id.rb create mode 100644 db/migrate/20120629150253_denormalize_expressions.rb create mode 100644 db/migrate/20120629151243_make_expressions_less_generic.rb create mode 100644 db/migrate/20120629182637_create_incoming_links.rb create mode 100644 db/migrate/20120702211427_create_replies.rb create mode 100644 db/migrate/20120703184734_add_reflection_to_forum_thread_links.rb create mode 100644 db/migrate/20120703201312_add_incoming_link_count_to_posts.rb create mode 100644 db/migrate/20120703203623_add_incoming_link_count_to_forum_threads.rb create mode 100644 db/migrate/20120703210004_add_bookmark_count_to_posts.rb create mode 100644 db/migrate/20120704160659_add_avg_time_to_posts.rb create mode 100644 db/migrate/20120704201743_add_view_count_to_posts.rb create mode 100644 db/migrate/20120705181724_add_user_to_versions.rb create mode 100644 db/migrate/20120708210305_add_last_posted_at_to_users.rb create mode 100644 db/migrate/20120712150500_create_categories.rb create mode 100644 db/migrate/20120712151934_add_category_id_to_forum_threads.rb create mode 100644 db/migrate/20120713201324_create_category_featured_threads.rb create mode 100644 db/migrate/20120716020835_create_site_settings.rb create mode 100644 db/migrate/20120716173544_add_stats_to_categories.rb create mode 100644 db/migrate/20120718044955_create_user_open_ids.rb create mode 100644 db/migrate/20120719004636_add_email_hashed_password_name_salt_to_users.rb create mode 100644 db/migrate/20120720013733_add_username_lower_to_users.rb create mode 100644 db/migrate/20120720044246_add_auth_token_to_users.rb create mode 100644 db/migrate/20120720162422_add_forum_id_to_categories.rb create mode 100644 db/migrate/20120723051512_add_not_nulls_to_user_open_ids.rb create mode 100644 db/migrate/20120724234502_add_last_seen_at_to_users.rb create mode 100644 db/migrate/20120724234711_add_website_to_users.rb create mode 100644 db/migrate/20120725183347_add_excerpt_to_categories.rb create mode 100644 db/migrate/20120726201830_add_invisible_to_forum_thread.rb create mode 100644 db/migrate/20120726235129_add_user_id_to_categories.rb create mode 100644 db/migrate/20120727005556_remove_excerpt_from_categories.rb create mode 100644 db/migrate/20120727150428_rename_invisible.rb create mode 100644 db/migrate/20120727213543_add_thread_counts_to_categories.rb create mode 100644 db/migrate/20120802151210_add_icon_to_expression_types.rb create mode 100644 db/migrate/20120803191426_add_admin_flag_to_users.rb create mode 100644 db/migrate/20120806030641_add_new_password_new_salt_email_token_to_users.rb create mode 100644 db/migrate/20120806062617_remove_new_password_stuff_from_user.rb create mode 100644 db/migrate/20120807223020_create_actions.rb create mode 100644 db/migrate/20120809020415_remove_site_id.rb create mode 100644 db/migrate/20120809030647_remove_forum_id.rb create mode 100644 db/migrate/20120809053414_correct_indexing_on_posts.rb create mode 100644 db/migrate/20120809154750_remove_index_for_now.rb create mode 100644 db/migrate/20120809174649_create_post_actions.rb create mode 100644 db/migrate/20120809175110_create_post_action_types.rb create mode 100644 db/migrate/20120809201855_migrate_bookmarks_to_post_actions.rb create mode 100644 db/migrate/20120810064839_rename_actions_to_user_actions.rb create mode 100644 db/migrate/20120812235417_retire_expressions.rb create mode 100644 db/migrate/20120813004347_rename_expression_columns_in_forum_thread.rb create mode 100644 db/migrate/20120813042912_rename_expression_columns_in_posts.rb create mode 100644 db/migrate/20120813201426_create_forum_thread_link_clicks.rb create mode 100644 db/migrate/20120815004411_add_unique_index_to_forum_thread_links.rb create mode 100644 db/migrate/20120815180106_add_post_type_to_posts.rb create mode 100644 db/migrate/20120815204733_add_moderator_posts_count_to_forum_threads.rb create mode 100644 db/migrate/20120816050526_add_unique_constraint_to_user_actions.rb create mode 100644 db/migrate/20120816205537_add_forum_thread_states.rb create mode 100644 db/migrate/20120816205538_add_starred_at_to_forum_thread_user.rb create mode 100644 db/migrate/20120820191804_add_search_indices.rb create mode 100644 db/migrate/20120821191616_add_bumped_at_to_forum_threads.rb create mode 100644 db/migrate/20120823205956_add_slug_to_categories.rb create mode 100644 db/migrate/20120824171908_create_category_featured_users.rb create mode 100644 db/migrate/20120828204209_create_onebox_renders.rb create mode 100644 db/migrate/20120828204624_create_post_onebox_renders.rb create mode 100644 db/migrate/20120830182736_add_preview_to_onebox_renders.rb create mode 100644 db/migrate/20120910171504_remove_description_from_site_settings.rb create mode 100644 db/migrate/20120918152319_rename_views_to_reads.rb create mode 100644 db/migrate/20120918205931_add_sub_tag_to_forum_threads.rb create mode 100644 db/migrate/20120919152846_add_has_best_of_to_forum_threads.rb create mode 100644 db/migrate/20120921055428_add_twitter_user_info.rb create mode 100644 db/migrate/20120921155050_create_archetypes.rb create mode 100644 db/migrate/20120921162512_add_meta_data_to_forum_threads.rb create mode 100644 db/migrate/20120921163606_create_archetype_options.rb create mode 100644 db/migrate/20120924182000_add_hstore_extension.rb create mode 100644 db/migrate/20120924182031_add_vote_count_to_posts.rb create mode 100644 db/migrate/20120925171620_remove_english_from_post_action_types.rb create mode 100644 db/migrate/20120925190802_add_sequence_to_post_action_types.rb create mode 100644 db/migrate/20120928170023_add_sort_order_to_posts.rb create mode 100644 db/migrate/20121009161116_add_email_stuff_to_users.rb create mode 100644 db/migrate/20121011155904_create_email_logs.rb create mode 100644 db/migrate/20121017162924_convert_archetypes.rb create mode 100644 db/migrate/20121018103721_rename_forum_thread_tables.rb create mode 100644 db/migrate/20121018133039_create_topic_allowed_users.rb create mode 100644 db/migrate/20121018182709_fix_notification_data.rb create mode 100644 db/migrate/20121106015500_drop_avatar_url_from_users.rb create mode 100644 db/migrate/20121108193516_add_post_action_id_to_notifications.rb create mode 100644 db/migrate/20121109164630_create_trust_levels.rb create mode 100644 db/migrate/20121113200844_bio_markdown_support.rb create mode 100644 db/migrate/20121113200845_create_facebook_user_infos.rb create mode 100644 db/migrate/20121115172544_rename_sticky_to_pinned.rb create mode 100644 db/migrate/20121116212424_add_more_email_settings_to_user.rb create mode 100644 db/migrate/20121119190529_add_email_settings_to_users.rb create mode 100644 db/migrate/20121119200843_add_email_direct_to_users.rb create mode 100644 db/migrate/20121121202035_create_invites.rb create mode 100644 db/migrate/20121121205215_create_topic_invites.rb create mode 100644 db/migrate/20121122033316_add_muted_at_to_topic_user.rb create mode 100644 db/migrate/20121123054127_make_post_number_distinct.rb create mode 100644 db/migrate/20121123063630_create_user_visits.rb create mode 100644 db/migrate/20121129160035_create_email_tokens.rb create mode 100644 db/migrate/20121129184948_remove_email_token_from_users.rb create mode 100644 db/migrate/20121130010400_create_drafts.rb create mode 100644 db/migrate/20121130191818_add_link_post_id_to_topic_links.rb create mode 100644 db/migrate/20121202225421_add_visited_at_to_topic_user.rb create mode 100644 db/migrate/20121203181719_rename_seen_notificaiton_id.rb create mode 100644 db/migrate/20121204183855_fix_link_post_id.rb create mode 100644 db/migrate/20121204193747_add_another_featured_user_to_topics.rb create mode 100644 db/migrate/20121205162143_add_approved_to_users.rb create mode 100644 db/migrate/20121207000741_add_notifications_to_topic_users.rb create mode 100644 db/migrate/20121211233131_create_site_customizations.rb create mode 100644 db/migrate/20121216230719_add_override_default_style_to_site_customization.rb create mode 100644 db/migrate/20121218205642_add_topics_entered_to_users.rb create mode 100644 db/migrate/20121224072204_add_last_editor_id_to_posts.rb create mode 100644 db/migrate/20121224095139_create_draft_sequence.rb create mode 100644 db/migrate/20121224100650_add_sequence_to_drafts.rb create mode 100644 db/migrate/20121228192219_add_deleted_at_to_invites.rb create mode 100644 db/migrate/20130107165207_add_digest_after_days_to_users.rb create mode 100644 db/migrate/20130108195847_add_previous_visit_at_to_users.rb create mode 100644 db/migrate/20130115012140_merge_mute_options_on_topic_users.rb create mode 100644 db/migrate/20130115021937_correct_default_on_notification_level.rb create mode 100644 db/migrate/20130115043603_oops_unwatch_a_boat_of_watched_stuff.rb create mode 100644 db/migrate/20130116151829_remove_sub_tag_from_topics.rb create mode 100644 db/migrate/20130120222728_fix_search.rb create mode 100644 db/migrate/20130121231352_add_tracking_to_topic_users.rb create mode 100644 db/migrate/20130122051134_add_auto_track_topics_to_user.rb create mode 100644 db/migrate/20130122232825_add_auto_track_after_seconds_and_banning_and_dob_to_user.rb create mode 100644 db/migrate/20130123070909_auto_track_all_topics_replied_to.rb create mode 100644 db/migrate/20130125002652_add_hidden_to_posts.rb create mode 100644 db/migrate/20130125030305_add_fields_to_post_action.rb create mode 100644 db/migrate/20130125031122_correct_index_on_post_action.rb create mode 100644 db/migrate/20130127213646_remove_trust_levels.rb create mode 100644 db/migrate/20130128182013_trust_level_default_null.rb create mode 100644 db/migrate/20130129010625_remove_pm_reflections.rb create mode 100644 db/migrate/20130129163244_add_time_read_to_users.rb create mode 100644 db/migrate/20130129174845_add_days_visited_to_users.rb create mode 100644 db/migrate/20130130154611_remove_index_from_views.rb create mode 100644 db/migrate/20130131055710_add_custom_flag_count_to_topics.rb create mode 100644 db/migrate/20130201000828_add_column_summaries_to_posts_and_topics.rb create mode 100644 db/migrate/20130201023409_add_position_to_post_action_type.rb create mode 100644 db/migrate/20130203204338_add_last_version_at_to_posts.rb create mode 100644 db/migrate/20130204000159_add_ip_address_to_users.rb create mode 100644 db/migrate/20130205021905_alter_facebook_user_id.rb create mode 100644 db/schema.rb create mode 100644 db/seeds.rb create mode 100644 db/structure.sql create mode 100644 dbs/.gitignore create mode 100644 dbs/export/empty.tar.gz create mode 100644 dbs/export/try.tar.gz create mode 100644 dbs/sql/empty.sql.gz create mode 100644 images/discourse.png create mode 120000 jsapp create mode 100644 lib/admin_constraint.rb create mode 100644 lib/age_words.rb create mode 100644 lib/archetype.rb create mode 100644 lib/assets/.gitkeep create mode 100644 lib/assets/quote_email.js.shbrs create mode 100644 lib/avatar_lookup.rb create mode 100644 lib/content_buffer.rb create mode 100644 lib/cooked_post_processor.rb create mode 100644 lib/current_user.rb create mode 100644 lib/custom_renderer.rb create mode 100644 lib/discourse.rb create mode 100644 lib/discourse_observer.rb create mode 100644 lib/discourse_plugin_registry.rb create mode 100644 lib/discourse_redis.rb create mode 100644 lib/distributed_hash.rb create mode 100644 lib/email.rb create mode 100644 lib/email_builder.rb create mode 100644 lib/email_sender.rb create mode 100644 lib/export/export.rb create mode 100644 lib/export/json_encoder.rb create mode 100644 lib/freedom_patches/active_record_base.rb create mode 100644 lib/freedom_patches/rails4.rb create mode 100644 lib/guardian.rb create mode 100644 lib/headless-ember.js create mode 100644 lib/image_sizer.rb create mode 100644 lib/imgur.rb create mode 100644 lib/import/adapter/base.rb create mode 100644 lib/import/adapter/merge_mute_options_on_topic_users.rb create mode 100644 lib/import/adapter/remove_sub_tag_from_topics.rb create mode 100644 lib/import/import.rb create mode 100644 lib/import/json_decoder.rb create mode 100644 lib/jobs.rb create mode 100644 lib/jobs/calculate_avg_time.rb create mode 100644 lib/jobs/calculate_score.rb create mode 100644 lib/jobs/calculate_view_counts.rb create mode 100644 lib/jobs/category_stats.rb create mode 100644 lib/jobs/enqueue_digest_emails.rb create mode 100644 lib/jobs/exporter.rb create mode 100644 lib/jobs/feature_threads.rb create mode 100644 lib/jobs/feature_topic_users.rb create mode 100644 lib/jobs/importer.rb create mode 100644 lib/jobs/invite_email.rb create mode 100644 lib/jobs/notify_moved_posts.rb create mode 100644 lib/jobs/process_post.rb create mode 100644 lib/jobs/send_system_message.rb create mode 100644 lib/jobs/test_email.rb create mode 100644 lib/jobs/user_email.rb create mode 100644 lib/markdown_linker.rb create mode 100644 lib/mothership.rb create mode 100644 lib/oneboxer.rb create mode 100644 lib/oneboxer/amazon_onebox.rb create mode 100644 lib/oneboxer/android_app_store_onebox.rb create mode 100644 lib/oneboxer/apple_app_onebox.rb create mode 100644 lib/oneboxer/base.rb create mode 100644 lib/oneboxer/base_onebox.rb create mode 100644 lib/oneboxer/bliptv_onebox.rb create mode 100644 lib/oneboxer/clikthrough_onebox.rb create mode 100644 lib/oneboxer/college_humor_onebox.rb create mode 100644 lib/oneboxer/dailymotion_onebox.rb create mode 100644 lib/oneboxer/discourse_onebox.rb create mode 100644 lib/oneboxer/dotsub_onebox.rb create mode 100644 lib/oneboxer/flickr_onebox.rb create mode 100644 lib/oneboxer/funny_or_die_onebox.rb create mode 100644 lib/oneboxer/gist_onebox.rb create mode 100644 lib/oneboxer/github_blob_onebox.rb create mode 100644 lib/oneboxer/handlebars_onebox.rb create mode 100644 lib/oneboxer/hulu_onebox.rb create mode 100644 lib/oneboxer/image_onebox.rb create mode 100644 lib/oneboxer/imgur_onebox.rb create mode 100644 lib/oneboxer/kinomap_onebox.rb create mode 100644 lib/oneboxer/nfb_onebox.rb create mode 100644 lib/oneboxer/oembed_onebox.rb create mode 100644 lib/oneboxer/open_graph_onebox.rb create mode 100644 lib/oneboxer/qik_onebox.rb create mode 100644 lib/oneboxer/revision_onebox.rb create mode 100644 lib/oneboxer/smugmug_onebox.rb create mode 100644 lib/oneboxer/ted_onebox.rb create mode 100644 lib/oneboxer/templates/discourse_post_onebox.hbrs create mode 100644 lib/oneboxer/templates/discourse_topic_onebox.hbrs create mode 100644 lib/oneboxer/templates/discourse_user_onebox.hbrs create mode 100644 lib/oneboxer/templates/gist_onebox.hbrs create mode 100644 lib/oneboxer/templates/github_blob_onebox.hbrs create mode 100644 lib/oneboxer/templates/oembed_onebox.hbrs create mode 100644 lib/oneboxer/templates/simple_onebox.hbrs create mode 100644 lib/oneboxer/templates/twitter_onebox.hbrs create mode 100644 lib/oneboxer/twitter_onebox.rb create mode 100644 lib/oneboxer/viddler_onebox.rb create mode 100644 lib/oneboxer/vimeo_onebox.rb create mode 100644 lib/oneboxer/whitelist.rb create mode 100644 lib/oneboxer/wikipedia_onebox.rb create mode 100644 lib/oneboxer/yfrog_onebox.rb create mode 100644 lib/post_creator.rb create mode 100644 lib/pretty_text.rb create mode 100644 lib/promotion.rb create mode 100644 lib/rate_limiter.rb create mode 100644 lib/rate_limiter/limit_exceeded.rb create mode 100644 lib/rate_limiter/on_create_record.rb create mode 100644 lib/remote_ip_improved.rb create mode 100644 lib/score_calculator.rb create mode 100644 lib/search.rb create mode 100644 lib/site_setting_extension.rb create mode 100644 lib/slug.rb create mode 100644 lib/sql_builder.rb create mode 100644 lib/system_message.rb create mode 100644 lib/tasks/add_topic_to_quotes.rake create mode 100644 lib/tasks/build_test_topic.rake create mode 100644 lib/tasks/cdn.rake create mode 100644 lib/tasks/export.rake create mode 100644 lib/tasks/images.rake create mode 100644 lib/tasks/posts.rake create mode 100644 lib/tasks/search.rake create mode 100644 lib/tasks/user_actions.rake create mode 100644 lib/topic_query.rb create mode 100644 lib/topic_view.rb create mode 100644 lib/trust_level.rb create mode 100644 lib/unread.rb create mode 100644 lib/version.rb create mode 100644 log/.gitkeep create mode 100644 public/403.html create mode 100644 public/404.html create mode 100644 public/404.json create mode 100644 public/422.html create mode 100644 public/500.html create mode 100644 public/503.html create mode 100644 public/favicon.ico create mode 100644 public/javascripts/highlight-handlebars.pack.js create mode 100644 public/robots.txt create mode 100755 script/rails create mode 100644 spec/components/archetype_spec.rb create mode 100644 spec/components/category_list_spec.rb create mode 100644 spec/components/content_buffer_spec.rb create mode 100644 spec/components/cooked_post_processor_spec.rb create mode 100644 spec/components/discourse_plugin_registry_spec.rb create mode 100644 spec/components/discourse_spec.rb create mode 100644 spec/components/distributed_hash_spec.rb create mode 100644 spec/components/email_sender_spec.rb create mode 100644 spec/components/email_spec.rb create mode 100644 spec/components/export/export_spec.rb create mode 100644 spec/components/export/json_encoder_spec.rb create mode 100644 spec/components/guardian_spec.rb create mode 100644 spec/components/image_sizer_spec.rb create mode 100644 spec/components/import/adapter/base_spec.rb create mode 100644 spec/components/import/import_spec.rb create mode 100644 spec/components/import/json_decoder_spec.rb create mode 100644 spec/components/jobs/calculate_view_counts_spec.rb create mode 100644 spec/components/jobs/enqueue_digest_emails_spec.rb create mode 100644 spec/components/jobs/exporter_spec.rb create mode 100644 spec/components/jobs/feature_topic_users_spec.rb create mode 100644 spec/components/jobs/importer_spec.rb create mode 100644 spec/components/jobs/invite_email_spec.rb create mode 100644 spec/components/jobs/jobs_base_spec.rb create mode 100644 spec/components/jobs/notify_moved_posts_spec.rb create mode 100644 spec/components/jobs/process_post_spec.rb create mode 100644 spec/components/jobs/send_system_message_spec.rb create mode 100644 spec/components/jobs/test_email_spec.rb create mode 100644 spec/components/jobs/user_email_spec.rb create mode 100644 spec/components/jobs_spec.rb create mode 100644 spec/components/mothership_spec.rb create mode 100644 spec/components/oneboxer_spec.rb create mode 100644 spec/components/post_creator_spec.rb create mode 100644 spec/components/pretty_text_spec.rb create mode 100644 spec/components/promotion_spec.rb create mode 100644 spec/components/rate_limiter_spec.rb create mode 100644 spec/components/score_calculator_spec.rb create mode 100644 spec/components/search_spec.rb create mode 100644 spec/components/slug_spec.rb create mode 100644 spec/components/sql_builder_spec.rb create mode 100644 spec/components/system_message_spec.rb create mode 100644 spec/components/topic_query_spec.rb create mode 100644 spec/components/topic_view_spec.rb create mode 100644 spec/components/unread_spec.rb create mode 100644 spec/controllers/admin/admin_controller_spec.rb create mode 100644 spec/controllers/admin/email_logs_controller_spec.rb create mode 100644 spec/controllers/admin/export_controller_spec.rb create mode 100644 spec/controllers/admin/flags_controller_spec.rb create mode 100644 spec/controllers/admin/impersonate_controller_spec.rb create mode 100644 spec/controllers/admin/site_customizations_controller_spec.rb create mode 100644 spec/controllers/admin/site_settings_controller_spec.rb create mode 100644 spec/controllers/admin/users_controller_spec.rb create mode 100644 spec/controllers/admin/versions_controller_spec.rb create mode 100644 spec/controllers/categories_controller_spec.rb create mode 100644 spec/controllers/clicks_controller_spec.rb create mode 100644 spec/controllers/draft_controller_spec.rb create mode 100644 spec/controllers/email_controller_spec.rb create mode 100644 spec/controllers/excerpt_controller_spec.rb create mode 100644 spec/controllers/invites_controller_spec.rb create mode 100644 spec/controllers/list_controller_spec.rb create mode 100644 spec/controllers/notifications_controller_spec.rb create mode 100644 spec/controllers/onebox_controller_spec.rb create mode 100644 spec/controllers/post_actions_controller_spec.rb create mode 100644 spec/controllers/posts_controller_spec.rb create mode 100644 spec/controllers/request_access_controller_spec.rb create mode 100644 spec/controllers/search_controller_spec.rb create mode 100644 spec/controllers/session_controller_spec.rb create mode 100644 spec/controllers/static_controller_spec.rb create mode 100644 spec/controllers/topics_controller_spec.rb create mode 100644 spec/controllers/users_controller_spec.rb create mode 100644 spec/fabricators/category_fabricator.rb create mode 100644 spec/fabricators/incoming_link_fabricator.rb create mode 100644 spec/fabricators/invite_fabricator.rb create mode 100644 spec/fabricators/notification_fabricator.rb create mode 100644 spec/fabricators/post_fabricator.rb create mode 100644 spec/fabricators/topic_fabricator.rb create mode 100644 spec/fabricators/user_action_fabricator.rb create mode 100644 spec/fabricators/user_fabricator.rb create mode 100644 spec/integrity/i18n_spec.rb create mode 100644 spec/javascripts/bbcode_spec.js.coffee create mode 100644 spec/javascripts/key_value_store_spec.js.coffee create mode 100644 spec/javascripts/message_bus_spec.js.coffee create mode 100644 spec/javascripts/preload_store_spec.js.coffee create mode 100644 spec/javascripts/spec.css create mode 100644 spec/javascripts/spec.js create mode 100644 spec/javascripts/utilities_spec.js.coffee create mode 100644 spec/mailers/invite_mailer_spec.rb create mode 100644 spec/mailers/test_mailer_spec.rb create mode 100644 spec/mailers/user_notifications_spec.rb create mode 100644 spec/models/category_featured_topic_spec.rb create mode 100644 spec/models/category_featured_user_spec.rb create mode 100644 spec/models/category_spec.rb create mode 100644 spec/models/draft_sequence_spec.rb create mode 100644 spec/models/draft_spec.rb create mode 100644 spec/models/email_log_spec.rb create mode 100644 spec/models/email_token_spec.rb create mode 100644 spec/models/error_log_spec.rb create mode 100644 spec/models/incoming_link_spec.rb create mode 100644 spec/models/invite_spec.rb create mode 100644 spec/models/message_bus_observer_spec.rb create mode 100644 spec/models/notification_spec.rb create mode 100644 spec/models/onebox_render_spec.rb create mode 100644 spec/models/post_action_spec.rb create mode 100644 spec/models/post_action_type_spec.rb create mode 100644 spec/models/post_alert_observer_spec.rb create mode 100644 spec/models/post_onebox_render_spec.rb create mode 100644 spec/models/post_reply_spec.rb create mode 100644 spec/models/post_spec.rb create mode 100644 spec/models/post_timing_spec.rb create mode 100644 spec/models/site_customization_spec.rb create mode 100644 spec/models/site_setting_spec.rb create mode 100644 spec/models/topic_allowed_user_spec.rb create mode 100644 spec/models/topic_invite_spec.rb create mode 100644 spec/models/topic_link_click_spec.rb create mode 100644 spec/models/topic_link_spec.rb create mode 100644 spec/models/topic_spec.rb create mode 100644 spec/models/topic_user_spec.rb create mode 100644 spec/models/upload_spec.rb create mode 100644 spec/models/user_action_spec.rb create mode 100644 spec/models/user_email_observer_spec.rb create mode 100644 spec/models/user_open_id_spec.rb create mode 100644 spec/models/user_spec.rb create mode 100644 spec/models/user_visit_spec.rb create mode 100644 spec/models/view_spec.rb create mode 100644 spec/requests/store_incoming_spec.rb create mode 100644 spec/spec_helper.rb create mode 100644 spec/support/rate_limit_matcher.rb create mode 100644 sublime-project create mode 100644 vendor/backports/notification.rb create mode 100644 vendor/gems/discourse_emoji/Gemfile create mode 100644 vendor/gems/discourse_emoji/Gemfile.lock create mode 100644 vendor/gems/discourse_emoji/LICENSE create mode 100644 vendor/gems/discourse_emoji/README.md create mode 100644 vendor/gems/discourse_emoji/Rakefile create mode 100644 vendor/gems/discourse_emoji/discourse_emoji.gemspec create mode 100644 vendor/gems/discourse_emoji/lib/discourse_emoji.rb create mode 100644 vendor/gems/discourse_emoji/lib/discourse_emoji/engine.rb create mode 100644 vendor/gems/discourse_emoji/lib/discourse_emoji/plugin.rb create mode 100644 vendor/gems/discourse_emoji/lib/discourse_emoji/version.rb create mode 100644 vendor/gems/discourse_emoji/spec/plugin_spec.rb create mode 100644 vendor/gems/discourse_emoji/spec/spec_helper.rb create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/+1.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/-1.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/100.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/109.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/1234.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/8ball.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/a.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ab.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/abc.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/abcd.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/accept.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/aerial_tramway.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/airplane.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/alarm_clock.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/alien.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ambulance.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/anchor.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/angel.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/anger.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/angry.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ant.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/apple.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/aquarius.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/aries.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_backward.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_double_down.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_double_up.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_down.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_down_small.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_forward.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_heading_down.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_heading_up.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_left.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_lower_left.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_lower_right.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_right.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_right_hook.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_up.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_up_down.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_up_small.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_upper_left.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrow_upper_right.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrows_clockwise.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/arrows_counterclockwise.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/art.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/articulated_lorry.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/astonished.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/atm.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/b.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/baby.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/baby_bottle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/baby_chick.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/baby_symbol.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/baggage_claim.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/balloon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ballot_box_with_check.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bamboo.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/banana.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bangbang.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bank.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bar_chart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/barber.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/baseball.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/basketball.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bath.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bathtub.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/battery.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bear.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bee.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/beer.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/beers.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/beetle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/beginner.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bell.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bento.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bicyclist.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bike.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bikini.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bird.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/birthday.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/black_circle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/black_joker.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/black_nib.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/black_square.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/blossom.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/blowfish.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/blue_book.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/blue_car.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/blue_heart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/blush.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/boar.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/boat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bomb.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/book.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bookmark.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bookmark_tabs.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/books.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/boom.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/boot.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bouquet.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bow.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bowling.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bowtie.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/boy.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bread.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bride_with_veil.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bridge_at_night.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/briefcase.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/broken_heart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bug.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bulb.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bullettrain_front.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bullettrain_side.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bus.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/busstop.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/bust_in_silhouette.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/busts_in_silhouette.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cactus.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cake.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/calendar.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/calling.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/camel.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/camera.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cancer.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/candy.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/capital_abcd.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/capricorn.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/car.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/card_index.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/carousel_horse.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cat2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cd.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/chart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/chart_with_downwards_trend.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/chart_with_upwards_trend.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/checkered_flag.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cherries.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cherry_blossom.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/chestnut.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/chicken.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/children_crossing.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/chocolate_bar.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/christmas_tree.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/church.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cinema.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/circus_tent.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/city_sunrise.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/city_sunset.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cl.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clap.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clapper.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clipboard.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock1.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock10.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock1030.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock11.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock1130.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock12.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock1230.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock130.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock230.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock3.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock330.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock4.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock430.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock5.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock530.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock6.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock630.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock7.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock730.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock8.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock830.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock9.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clock930.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/closed_book.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/closed_lock_with_key.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/closed_umbrella.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cloud.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/clubs.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cn.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cocktail.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/coffee.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cold_sweat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/collision.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/computer.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/confetti_ball.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/confounded.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/congratulations.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/construction.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/construction_worker.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/convenience_store.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cookie.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cool.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cop.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/copyright.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/corn.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/couple.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/couple_with_heart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/couplekiss.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cow.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cow2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/credit_card.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/crocodile.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/crossed_flags.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/crown.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cry.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/crying_cat_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/crystal_ball.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cupid.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/curly_loop.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/currency_exchange.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/curry.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/custard.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/customs.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/cyclone.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dancer.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dancers.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dango.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dash.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/date.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/de.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/deciduous_tree.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/department_store.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/diamond_shape_with_a_dot_inside.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/diamonds.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/disappointed.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dizzy.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dizzy_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/do_not_litter.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dog.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dog2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dollar.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dolls.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dolphin.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/door.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/doughnut.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dragon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dragon_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dress.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dromedary_camel.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/droplet.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/dvd.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/e-mail.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ear.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ear_of_rice.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/earth_africa.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/earth_americas.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/earth_asia.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/egg.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/eggplant.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/eight.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/eight_pointed_black_star.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/eight_spoked_asterisk.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/electric_plug.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/elephant.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/email.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/end.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/envelope.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/es.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/euro.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/european_castle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/european_post_office.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/evergreen_tree.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/exclamation.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/eyeglasses.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/eyes.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/facepunch.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/factory.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fallen_leaf.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/family.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fast_forward.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fax.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fearful.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/feelsgood.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/feet.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ferris_wheel.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/file_folder.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/finnadie.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fire.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fire_engine.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fireworks.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/first_quarter_moon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/first_quarter_moon_with_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fish.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fish_cake.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fishing_pole_and_fish.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fist.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/five.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/flags.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/flashlight.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/floppy_disk.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/flower_playing_cards.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/flushed.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/foggy.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/football.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fork_and_knife.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fountain.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/four.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/four_leaf_clover.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fr.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/free.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fried_shrimp.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fries.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/frog.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/fuelpump.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/full_moon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/full_moon_with_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/game_die.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/gb.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/gem.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/gemini.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ghost.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/gift.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/gift_heart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/girl.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/globe_with_meridians.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/goat.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/goberserk.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/godmode.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/golf.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/grapes.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/green_apple.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/green_book.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/green_heart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/grey_exclamation.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/grey_question.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/grin.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/guardsman.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/guitar.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/gun.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/haircut.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hamburger.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hammer.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hamster.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hand.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/handbag.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hankey.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hash.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hatched_chick.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hatching_chick.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/headphones.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hear_no_evil.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heart_decoration.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heart_eyes.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heart_eyes_cat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heartbeat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heartpulse.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hearts.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heavy_check_mark.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heavy_division_sign.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heavy_dollar_sign.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heavy_exclamation_mark.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heavy_minus_sign.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heavy_multiplication_x.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/heavy_plus_sign.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/helicopter.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/herb.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hibiscus.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/high_brightness.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/high_heel.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hocho.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/honey_pot.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/honeybee.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/horse.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/horse_racing.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hospital.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hotel.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hotsprings.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hourglass.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/house.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/hurtrealbad.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ice_cream.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/icecream.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/id.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ideograph_advantage.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/imp.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/inbox_tray.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/incoming_envelope.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/information_desk_person.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/information_source.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/innocent.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/interrobang.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/iphone.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/it.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/izakaya_lantern.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/jack_o_lantern.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/japan.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/japanese_castle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/japanese_goblin.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/japanese_ogre.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/jeans.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/joy.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/joy_cat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/jp.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/key.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/keycap_ten.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/kimono.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/kiss.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/kissing_cat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/kissing_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/kissing_heart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/koala.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/koko.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/kr.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/large_blue_circle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/large_blue_diamond.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/large_orange_diamond.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/last_quarter_moon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/last_quarter_moon_with_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/laughing.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/leaves.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ledger.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/left_luggage.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/left_right_arrow.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/leftwards_arrow_with_hook.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/lemon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/leo.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/leopard.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/libra.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/light_rail.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/link.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/lips.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/lipstick.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/lock.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/lock_with_ink_pen.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/lollipop.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/loop.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/loudspeaker.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/love_hotel.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/love_letter.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/low_brightness.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/m.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mag.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mag_right.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mahjong.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mailbox.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mailbox_closed.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mailbox_with_mail.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mailbox_with_no_mail.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/man.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/man_with_gua_pi_mao.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/man_with_turban.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mans_shoe.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/maple_leaf.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mask.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/massage.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/meat_on_bone.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mega.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/melon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/memo.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mens.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/metal.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/metro.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/microphone.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/microscope.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/milky_way.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/minibus.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/minidisc.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mobile_phone_off.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/money_with_wings.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/moneybag.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/monkey.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/monkey_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/monorail.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/moon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mortar_board.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mount_fuji.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mountain_bicyclist.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mountain_cableway.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mountain_railway.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mouse.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mouse2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/movie_camera.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/moyai.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/muscle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mushroom.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/musical_keyboard.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/musical_note.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/musical_score.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/mute.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/nail_care.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/name_badge.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/neckbeard.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/necktie.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/negative_squared_cross_mark.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/neutral_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/new.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/new_moon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/new_moon_with_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/newspaper.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ng.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/nine.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/no_bell.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/no_bicycles.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/no_entry.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/no_entry_sign.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/no_good.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/no_mobile_phones.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/no_mouth.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/no_pedestrians.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/no_smoking.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/non-potable_water.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/nose.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/notebook.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/notebook_with_decorative_cover.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/notes.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/nut_and_bolt.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/o.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/o2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ocean.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/octocat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/octopus.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/oden.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/office.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ok.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ok_hand.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ok_woman.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/older_man.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/older_woman.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/on.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/oncoming_automobile.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/oncoming_bus.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/oncoming_police_car.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/oncoming_taxi.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/one.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/open_file_folder.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/open_hands.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ophiuchus.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/orange_book.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/outbox_tray.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ox.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/page_facing_up.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/page_with_curl.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pager.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/palm_tree.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/panda_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/paperclip.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/parking.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/part_alternation_mark.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/partly_sunny.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/passport_control.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/paw_prints.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/peach.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pear.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pencil.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pencil2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/penguin.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pensive.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/performing_arts.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/persevere.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/person_frowning.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/person_with_blond_hair.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/person_with_pouting_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/phone.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pig.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pig2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pig_nose.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pill.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pineapple.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pisces.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pizza.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/point_down.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/point_left.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/point_right.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/point_up.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/point_up_2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/police_car.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/poodle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/poop.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/post_office.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/postal_horn.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/postbox.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/potable_water.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pouch.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/poultry_leg.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pound.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pouting_cat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pray.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/princess.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/punch.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/purple_heart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/purse.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/pushpin.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/put_litter_in_its_place.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/question.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rabbit.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rabbit2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/racehorse.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/radio.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/radio_button.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rage.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rage1.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rage2.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rage3.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rage4.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/railway_car.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rainbow.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/raised_hand.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/raised_hands.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ram.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ramen.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/recycle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/red_car.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/red_circle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/registered.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/relaxed.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/relieved.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/repeat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/repeat_one.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/restroom.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/revolving_hearts.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rewind.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ribbon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rice.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rice_ball.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rice_cracker.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rice_scene.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ring.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rocket.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/roller_coaster.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rooster.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rose.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rotating_light.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/round_pushpin.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rowboat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ru.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/rugby_football.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/runner.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/running.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/running_shirt_with_sash.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sa.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sagittarius.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sailboat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sake.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sandal.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/santa.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/satellite.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/satisfied.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/saxophone.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/school.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/school_satchel.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/scissors.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/scorpius.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/scream.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/scream_cat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/scroll.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/seat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/secret.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/see_no_evil.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/seedling.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/seven.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/shaved_ice.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sheep.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/shell.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ship.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/shipit.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/shirt.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/shit.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/shoe.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/shower.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/signal_strength.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/six.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/six_pointed_star.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ski.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/skull.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sleepy.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/slot_machine.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/small_blue_diamond.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/small_orange_diamond.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/small_red_triangle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/small_red_triangle_down.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/smile.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/smile_cat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/smiley.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/smiley_cat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/smiling_imp.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/smirk.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/smirk_cat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/smoking.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/snail.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/snake.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/snowboarder.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/snowflake.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/snowman.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sob.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/soccer.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/soon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sos.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sound.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/space_invader.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/spades.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/spaghetti.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sparkler.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sparkles.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/speak_no_evil.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/speaker.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/speech_balloon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/speedboat.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/squirrel.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/star.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/star2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/stars.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/station.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/statue_of_liberty.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/steam_locomotive.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/stew.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/straight_ruler.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/strawberry.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sun_with_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sunflower.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sunglasses.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sunny.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sunrise.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sunrise_over_mountains.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/surfer.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sushi.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/suspect.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/suspension_railway.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sweat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sweat_drops.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sweat_smile.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/sweet_potato.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/swimmer.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/symbols.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/syringe.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tada.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tanabata_tree.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tangerine.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/taurus.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/taxi.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tea.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/telephone.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/telephone_receiver.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/telescope.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tennis.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tent.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/thought_balloon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/three.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/thumbsdown.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/thumbsup.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/ticket.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tiger.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tiger2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tired_face.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tm.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/toilet.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tokyo_tower.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tomato.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tongue.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tongue2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/top.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tophat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tractor.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/traffic_light.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/train.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/train2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tram.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/triangular_flag_on_post.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/triangular_ruler.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/trident.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/triumph.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/trolleybus.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/trollface.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/trophy.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tropical_drink.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tropical_fish.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/truck.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/trumpet.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tshirt.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tulip.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/turtle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/tv.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/twisted_rightwards_arrows.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/two.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/two_hearts.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/two_men_holding_hands.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/two_women_holding_hands.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u5272.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u5408.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u55b6.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u6307.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u6708.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u6709.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u6e80.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u7121.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u7533.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u7981.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/u7a7a.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/uk.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/umbrella.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unamused.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/underage.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f0cf.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f191.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f193.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f196.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f198.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f232.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f234.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f251.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f301.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f309.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f30b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f30c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f30d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f30e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f30f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f310.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f311.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f312.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f313.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f314.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f315.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f316.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f317.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f318.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f31a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f31b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f31c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f31d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f31e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f330.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f331.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f332.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f333.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f33c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f33d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f33f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f344.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f347.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f348.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f34b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f34c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f34d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f34f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f350.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f351.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f352.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f355.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f356.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f357.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f360.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f364.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f365.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f368.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f369.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f36a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f36b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f36c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f36d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f36e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f36f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f377.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f379.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f37c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f38a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f38b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3a0.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3a3.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3aa.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3ad.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3ae.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3b2.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3b3.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3b4.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3b9.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3bb.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3bc.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3bd.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3c2.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3c7.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3c9.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3e4.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f3ee.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f400.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f401.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f402.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f403.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f404.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f405.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f406.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f407.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f408.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f409.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f40a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f40b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f40c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f40f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f410.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f413.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f415.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f416.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f41c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f41d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f41e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f421.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f422.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f423.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f425.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f429.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f42a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f432.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f43c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f43d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f43e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f445.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f453.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f456.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f45a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f45b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f45d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f45e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f464.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f465.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f46a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f46c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f46d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f470.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f479.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f47a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f48c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f495.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f49e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4a0.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4a5.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4a7.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4ab.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4ac.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4ad.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4ae.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4af.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4b2.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4b3.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4b4.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4b5.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4b6.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4b7.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4b8.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4be.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4c1.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4c2.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4c3.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4c4.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4c5.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4c6.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4c7.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4c8.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4c9.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4ca.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4cb.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4cc.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4cd.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4ce.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4cf.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4d0.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4d1.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4d2.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4d3.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4d4.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4d5.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4d7.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4d8.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4d9.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4da.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4db.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4dc.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4de.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4df.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4e4.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4e5.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4e7.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4e8.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4ea.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4ec.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4ed.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4ef.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4f0.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4f5.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f4f9.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f500.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f501.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f502.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f503.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f504.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f505.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f506.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f507.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f509.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f50b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f50c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f50e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f50f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f510.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f515.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f516.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f517.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f518.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f51a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f51b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f51c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f51f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f520.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f521.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f522.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f523.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f524.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f526.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f527.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f529.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f52a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f52c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f52d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f52e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f535.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f536.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f537.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f538.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f539.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f53a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f53b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f53c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f53d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f55c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f55d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f55e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f55f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f560.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f561.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f562.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f563.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f564.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f565.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f566.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f567.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f5fe.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f5ff.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f605.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f606.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f607.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f608.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f60b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f60e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f610.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f624.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f629.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f62b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f635.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f636.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f638.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f639.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f63a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f63b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f63c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f63d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f63e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f63f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f640.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f648.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f649.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f64a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f64b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f64d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f64e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f681.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f682.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f683.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f686.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f688.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f68a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f68d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f68e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f690.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f694.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f696.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f698.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f69b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f69c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f69d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f69e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f69f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6a0.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6a1.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6a3.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6a6.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6a8.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6a9.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6aa.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6ab.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6ae.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6af.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6b0.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6b1.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6b3.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6b4.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6b5.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6b7.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6b8.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6bf.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6c1.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6c2.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6c3.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6c4.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/1f6c5.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/203c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2049.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2139.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2194.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2195.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/21a9.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/21aa.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/231a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/231b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/23eb.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/23ec.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/23f0.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/24c2.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2611.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/267b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2693.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/26aa.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/26ab.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/26c5.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/26d4.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2705.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2709.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/270f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2712.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2714.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2716.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2744.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/274e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2757.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2795.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2796.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2797.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/27b0.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2934.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/2935.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/3030.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e001.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e002.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e003.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e004.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e005.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e006.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e007.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e008.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e009.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e00a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e00b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e00c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e00d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e00e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e00f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e010.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e011.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e012.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e013.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e014.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e015.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e016.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e017.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e018.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e019.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e01a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e01b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e01c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e01d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e01e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e01f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e020.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e021.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e022.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e023.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e024.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e025.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e026.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e027.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e028.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e029.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e02a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e02b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e02c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e02d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e02e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e02f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e030.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e031.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e032.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e033.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e034.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e035.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e036.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e037.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e038.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e039.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e03a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e03b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e03c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e03d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e03e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e03f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e040.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e041.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e042.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e043.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e044.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e045.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e046.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e047.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e048.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e049.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e04a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e04b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e04c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e04d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e04e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e04f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e050.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e051.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e052.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e053.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e054.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e055.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e056.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e057.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e058.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e059.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e05a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e101.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e102.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e103.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e104.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e105.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e106.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e107.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e108.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e109.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e10a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e10b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e10c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e10d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e10e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e10f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e110.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e111.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e112.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e113.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e114.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e115.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e116.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e117.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e118.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e119.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e11a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e11b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e11c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e11d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e11e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e11f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e120.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e121.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e122.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e123.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e124.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e125.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e126.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e127.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e128.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e129.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e12a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e12b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e12c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e12d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e12e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e12f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e130.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e131.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e132.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e133.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e134.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e135.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e136.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e137.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e138.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e139.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e13a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e13b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e13c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e13d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e13e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e13f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e140.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e141.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e142.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e143.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e144.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e145.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e146.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e147.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e148.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e149.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e14a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e14b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e14c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e14d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e14e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e14f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e150.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e151.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e152.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e153.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e154.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e155.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e156.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e157.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e158.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e159.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e15a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e201.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e202.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e203.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e204.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e205.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e206.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e207.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e208.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e209.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e20a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e20b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e20c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e20d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e20e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e20f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e210.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e211.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e212.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e213.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e214.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e215.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e216.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e217.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e218.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e219.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e21a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e21b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e21c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e21d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e21e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e21f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e220.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e221.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e222.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e223.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e224.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e225.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e226.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e227.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e228.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e229.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e22a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e22b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e22c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e22d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e22e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e22f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e230.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e231.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e232.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e233.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e234.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e235.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e236.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e237.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e238.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e239.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e23a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e23b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e23c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e23d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e23e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e23f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e240.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e241.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e242.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e243.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e244.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e245.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e246.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e247.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e248.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e249.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e24a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e24b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e24c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e24d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e24e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e24f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e250.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e251.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e252.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e253.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e301.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e302.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e303.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e304.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e305.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e306.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e307.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e308.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e309.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e30a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e30b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e30c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e30d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e30e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e30f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e310.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e311.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e312.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e313.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e314.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e315.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e316.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e317.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e318.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e319.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e31a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e31b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e31c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e31d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e31e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e31f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e320.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e321.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e322.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e323.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e324.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e325.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e326.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e327.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e328.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e329.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e32a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e32b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e32c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e32d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e32e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e32f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e330.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e331.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e332.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e333.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e334.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e335.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e336.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e337.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e338.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e339.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e33a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e33b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e33c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e33d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e33e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e33f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e340.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e341.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e342.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e343.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e344.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e345.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e346.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e347.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e348.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e349.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e34a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e34b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e34c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e34d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e401.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e402.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e403.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e404.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e405.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e406.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e407.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e408.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e409.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e40a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e40b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e40c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e40d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e40e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e40f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e410.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e411.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e412.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e413.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e414.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e415.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e416.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e417.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e418.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e419.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e41a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e41b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e41c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e41d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e41e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e41f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e420.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e421.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e422.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e423.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e424.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e425.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e426.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e427.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e428.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e429.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e42a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e42b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e42c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e42d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e42e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e42f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e430.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e431.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e432.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e433.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e434.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e435.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e436.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e437.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e438.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e439.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e43a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e43b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e43c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e43d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e43e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e43f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e440.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e441.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e442.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e443.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e444.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e445.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e446.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e447.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e448.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e449.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e44a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e44b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e44c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e501.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e502.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e503.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e504.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e505.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e506.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e507.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e508.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e509.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e50a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e50b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e50c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e50d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e50e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e50f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e510.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e511.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e512.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e513.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e514.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e515.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e516.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e517.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e518.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e519.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e51a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e51b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e51c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e51d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e51e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e51f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e520.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e521.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e522.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e523.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e524.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e525.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e526.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e527.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e528.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e529.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e52a.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e52b.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e52c.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e52d.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e52e.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e52f.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e530.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e531.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e532.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e533.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e534.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e535.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e536.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unicode/e537.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/unlock.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/up.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/us.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/v.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/vertical_traffic_light.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/vhs.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/vibration_mode.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/video_camera.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/video_game.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/violin.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/virgo.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/volcano.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/vs.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/walking.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/waning_crescent_moon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/waning_gibbous_moon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/warning.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/watch.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/water_buffalo.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/watermelon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wave.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wavy_dash.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/waxing_crescent_moon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/waxing_gibbous_moon.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wc.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/weary.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wedding.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/whale.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/whale2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wheelchair.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/white_circle.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/white_flower.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/white_square.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wind_chime.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wine_glass.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wink.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wink2.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wolf.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/woman.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/womans_clothes.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/womans_hat.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/womens.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/wrench.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/x.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/yellow_heart.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/yen.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/yum.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/zap.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/zero.png create mode 120000 vendor/gems/discourse_emoji/vendor/assets/images/emoji/zzz.png create mode 100644 vendor/gems/discourse_emoji/vendor/assets/javascripts/discourse_emoji.js create mode 100644 vendor/gems/discourse_emoji/vendor/assets/stylesheets/discourse_emoji.css.sass create mode 100644 vendor/gems/discourse_plugin/Gemfile create mode 100644 vendor/gems/discourse_plugin/Gemfile.lock create mode 100644 vendor/gems/discourse_plugin/LICENSE create mode 100644 vendor/gems/discourse_plugin/README.md create mode 100644 vendor/gems/discourse_plugin/Rakefile create mode 100644 vendor/gems/discourse_plugin/discourse_plugin.gemspec create mode 100644 vendor/gems/discourse_plugin/lib/discourse_event.rb create mode 100644 vendor/gems/discourse_plugin/lib/discourse_plugin.rb create mode 100644 vendor/gems/discourse_plugin/lib/discourse_plugin/discourse_plugin.rb create mode 100644 vendor/gems/discourse_plugin/lib/discourse_plugin/version.rb create mode 100644 vendor/gems/discourse_plugin/spec/discourse_event_spec.rb create mode 100644 vendor/gems/discourse_plugin/spec/discourse_plugin_spec.rb create mode 100644 vendor/gems/discourse_plugin/spec/spec_helper.rb create mode 100644 vendor/gems/discourse_poll/Gemfile create mode 100644 vendor/gems/discourse_poll/Gemfile.lock create mode 100644 vendor/gems/discourse_poll/LICENSE create mode 100644 vendor/gems/discourse_poll/README.md create mode 100644 vendor/gems/discourse_poll/Rakefile create mode 100644 vendor/gems/discourse_poll/discourse_poll.gemspec create mode 100644 vendor/gems/discourse_poll/lib/discourse_poll.rb create mode 100644 vendor/gems/discourse_poll/lib/discourse_poll/engine.rb create mode 100644 vendor/gems/discourse_poll/lib/discourse_poll/locale/en.yml create mode 100644 vendor/gems/discourse_poll/lib/discourse_poll/plugin.rb create mode 100644 vendor/gems/discourse_poll/lib/discourse_poll/version.rb create mode 100644 vendor/gems/discourse_poll/spec/plugin_spec.rb create mode 100644 vendor/gems/discourse_poll/spec/spec_helper.rb create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll.js create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll/models/post.js create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll/models/post_action_type.js create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll/templates/about_poll.js.handlebars create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll/templates/poll_controls.js.handlebars create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll/views/post_view.js create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll/views/prepend_post_view.js create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll/views/topic_footer_buttons_view.js create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll/views/topic_information_view.js create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll/views/topic_status_view.js create mode 100644 vendor/gems/discourse_poll/vendor/assets/javascripts/discourse_poll/views/vote_controls_view.js create mode 100644 vendor/gems/discourse_poll/vendor/assets/stylesheets/discourse_poll.css.sass create mode 100644 vendor/gems/discourse_task/Gemfile create mode 100644 vendor/gems/discourse_task/Gemfile.lock create mode 100644 vendor/gems/discourse_task/LICENSE create mode 100644 vendor/gems/discourse_task/README.md create mode 100644 vendor/gems/discourse_task/Rakefile create mode 100644 vendor/gems/discourse_task/config/routes.rb create mode 100644 vendor/gems/discourse_task/discourse_task.gemspec create mode 100644 vendor/gems/discourse_task/lib/discourse_task.rb create mode 100644 vendor/gems/discourse_task/lib/discourse_task/engine.rb create mode 100644 vendor/gems/discourse_task/lib/discourse_task/locale/en.yml create mode 100644 vendor/gems/discourse_task/lib/discourse_task/plugin.rb create mode 100644 vendor/gems/discourse_task/lib/discourse_task/version.rb create mode 100644 vendor/gems/discourse_task/spec/plugin_spec.rb create mode 100644 vendor/gems/discourse_task/spec/spec_helper.rb create mode 100644 vendor/gems/discourse_task/vendor/assets/javascripts/discourse_task.js create mode 100644 vendor/gems/discourse_task/vendor/assets/javascripts/discourse_task/controllers/topic_controller.js create mode 100644 vendor/gems/discourse_task/vendor/assets/javascripts/discourse_task/models/topic.js create mode 100644 vendor/gems/discourse_task/vendor/assets/javascripts/discourse_task/templates/about_task.js.handlebars create mode 100644 vendor/gems/discourse_task/vendor/assets/javascripts/discourse_task/views/topic_footer_buttons_view.js create mode 100644 vendor/gems/discourse_task/vendor/assets/javascripts/discourse_task/views/topic_status_view.js create mode 100644 vendor/gems/discourse_task/vendor/assets/javascripts/discourse_task/views/topic_summary_view.js create mode 100644 vendor/gems/discourse_task/vendor/assets/stylesheets/discourse_task.css.sass create mode 100644 vendor/gems/message_bus/.gitignore create mode 100644 vendor/gems/message_bus/Gemfile create mode 100644 vendor/gems/message_bus/Guardfile create mode 100644 vendor/gems/message_bus/LICENSE create mode 100644 vendor/gems/message_bus/README.md create mode 100644 vendor/gems/message_bus/Rakefile create mode 100644 vendor/gems/message_bus/autotest/discover.rb create mode 100644 vendor/gems/message_bus/lib/message_bus.rb create mode 100644 vendor/gems/message_bus/lib/message_bus/client.rb create mode 100644 vendor/gems/message_bus/lib/message_bus/connection_manager.rb create mode 100644 vendor/gems/message_bus/lib/message_bus/message.rb create mode 100644 vendor/gems/message_bus/lib/message_bus/message_handler.rb create mode 100644 vendor/gems/message_bus/lib/message_bus/rack/middleware.rb create mode 100644 vendor/gems/message_bus/lib/message_bus/rails/railtie.rb create mode 100644 vendor/gems/message_bus/lib/message_bus/reliable_pub_sub.rb create mode 100644 vendor/gems/message_bus/lib/message_bus/version.rb create mode 100644 vendor/gems/message_bus/message_bus.gemspec create mode 100644 vendor/gems/message_bus/spec/lib/client_spec.rb create mode 100644 vendor/gems/message_bus/spec/lib/connection_manager_spec.rb create mode 100644 vendor/gems/message_bus/spec/lib/handlers/demo_message_handler.rb create mode 100644 vendor/gems/message_bus/spec/lib/message_bus_spec.rb create mode 100644 vendor/gems/message_bus/spec/lib/message_handler_spec.rb create mode 100644 vendor/gems/message_bus/spec/lib/middleware_spec.rb create mode 100644 vendor/gems/message_bus/spec/lib/reliable_pub_sub_spec.rb create mode 100644 vendor/gems/message_bus/spec/spec_helper.rb create mode 100644 vendor/gems/rails_multisite/.gitignore create mode 100644 vendor/gems/rails_multisite/Gemfile create mode 100644 vendor/gems/rails_multisite/LICENSE create mode 100644 vendor/gems/rails_multisite/README.md create mode 100644 vendor/gems/rails_multisite/Rakefile create mode 100644 vendor/gems/rails_multisite/lib/rails_multisite.rb create mode 100644 vendor/gems/rails_multisite/lib/rails_multisite/connection_management.rb create mode 100644 vendor/gems/rails_multisite/lib/rails_multisite/railtie.rb create mode 100644 vendor/gems/rails_multisite/lib/rails_multisite/version.rb create mode 100644 vendor/gems/rails_multisite/lib/tasks/db.rake create mode 100644 vendor/gems/rails_multisite/lib/tasks/generators.rake create mode 100644 vendor/gems/rails_multisite/rails_multisite.gemspec create mode 100644 vendor/gems/rails_multisite/spec/connection_management_rack_spec.rb create mode 100644 vendor/gems/rails_multisite/spec/connection_management_spec.rb create mode 100644 vendor/gems/rails_multisite/spec/fixtures/database.yml create mode 100644 vendor/gems/rails_multisite/spec/fixtures/two_dbs.yml create mode 100644 vendor/gems/rails_multisite/spec/spec_helper.rb create mode 100644 vendor/gems/simple_handlebars_rails/lib/simple_handlebars_rails.rb create mode 100644 vendor/gems/simple_handlebars_rails/lib/simple_handlebars_rails/simple_handlebars_template.rb create mode 100644 vendor/gems/simple_handlebars_rails/simple_handlebars_rails.gemspec diff --git a/.autotest b/.autotest new file mode 100644 index 00000000000..5d775fd5643 --- /dev/null +++ b/.autotest @@ -0,0 +1,5 @@ +Autotest.add_hook :initialize do |autotest| + %w{.git .svn .hg .DS_Store db log tmp vendor ._*}.each do |exception| + autotest.add_exception(exception) + end +end diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000000..176a458f94e --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..5a7d5419a1e --- /dev/null +++ b/.gitignore @@ -0,0 +1,61 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile ~/.gitignore_global + +tags + +.DS_Store +._.DS_Store +dump.rdb + +.sass-cache/* + +# Ignore bundler config +/.bundle +/.vagrant +/.vagrantfile +/cache +/coverage/* + +# Ignore the default SQLite database and db dumps +/db/*.sqlite3 +/dbs/*.sql +/dbs/*.sql.gz + +# Ignore all logfiles and tempfiles. +/log/*.log +/tmp + +# Ignore Eclipse .project file +/.project + +# Ignore Eclipse .buildpath file +/.buildpath + +# Ignore RubyMine settings +/.idea + +# Ignore gem that is copied in +MiniProfiler/Ruby/rack-mini-profiler-2.0.1a.gem + +sublime-project.sublime-workspace + +# Vim temp files +*~ +*.swp +*.swo + +# don't check in multisite config +config/multisite.yml +# don't check in my renamed multisite config as well :) +config/multisite1.yml +config/fog_credentials.yml + +/public/uploads +/public/stylesheet-cache/* + +# Scripts used for downloading/refshing db +script/download_db +script/refresh_db diff --git a/.rspec b/.rspec new file mode 100644 index 00000000000..53607ea52b7 --- /dev/null +++ b/.rspec @@ -0,0 +1 @@ +--colour diff --git a/AUTHORS.md b/AUTHORS.md new file mode 100644 index 00000000000..7a9c8fec28a --- /dev/null +++ b/AUTHORS.md @@ -0,0 +1,19 @@ +# The Discourse Team + +* Jeff Atwood - Founder, Principal Overlord, Lead Systems Design + +* Robin Ward - Co-Founder, Ruby developer + +* Sam Saffron - Co-Founder, Ruby developer + +* Neil Lalonde - Ruby Developer + +* Ryan Mudryk - UI Implementation, supplemental + +### Specials Thanks To + +* Nick Sahler - UI Implementation, supplemental + +* Don Petersen - Ruby developmer, installation scripts + +*For a more detailed list of the many individuals that contributed to the design and development of Discourse outside of GitHub, please refer to the official Discourse website.* diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000..e70e32f424a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,114 @@ +# Contributing to Discourse + +## Before You Start + +Anyone wishing to contribute to the **[Discourse/Core](https://github.com/discourse/core)** project **MUST read & sign the [Discourse Forums Contribution License Agreement](https://github.com/discourse/core-cla)**. The Discourse team is legally prevented from accepting any pull requests from users who have not signed the CLA first. + +## Reporting Bugs + +1. Update to the most recent master release; the bug may already be resolved. + +2. Search for similar issues on the Discourse development forums; it may already be an identified bug. + +3. On GitHub, provide the details of the issue, with any included workflows, screenshots, or links to examples on jsfiddle.net. If possible, submit a Pull Request with a failing test. If you'd rather take matters into your own hands, fix the bug yourself (jump down to the "Contributing (Step-by-step)" section). + +4. The Discourse team will work with you until your issue can be verified. Once verified, a team member will flag the issue appropriately, lock it, and create a new topic discussing the bug on the Discourse forums. + +5. Continue to monitor the progress/discussion surrounding the bug by reading the topic assigned to your bug on the Discourse forums. + +6. When the bug is fixed, the Discourse topic will be frozen, and the bug will be marked as fixed in the repo, with the appropriate commit assigned to the fix for tracking purposes. + +## Requesting New Features + +1. Do not submit a feature request on GitHub; all feature requests on GitHub will be closed. Instead, visit the Discourse development forums, and search for the "Feature Request" category, which will filter a list of outstanding requests. Review this list for similar feature requests. It's possible somebody has already asked for this feature or provided a pull request that we're still discussing. + +2. Provide a clear and detailed explanation of the feature you want and why it's important to add. The feature must apply to a wide array of users of Discourse; for smaller, more targeted "one-off" features, you might consider writing a plugin for Discourse. You may also want to provide us with some advance documentation on the feature, which will help the community to better understand where it will fit. + +3. If you're a Rock Star programmer, build the feature yourself (refer to the "Contributing (Step-by-step)" section below). + +## Contributing (Step-by-step) + +1. Clone the Repo: + + ``` + git clone git://github.com/discourse/core.git + ``` + +2. Create a new Branch: + + ``` + cd core + git checkout -b new_discourse_branch + ``` + +3. Code + + Make some magic happen! Remember to: + * Adhere to conventions. + * Update CHANGELOG with a description of your work. + * Include tests, and ensure they pass. + * Remember to check to see if your new functionality has an impact on our Documentation, and include updates as appropriate. + + Completing these steps will increase the chances of your code making it into **[Discourse/Core](https://github.com/discourse/core)**. + +4. Commit + + ``` + git commit -a + ``` + + **Do not leave the commit message blank!** Provide a detailed description of your commit! + + ### PRO TIP + + Ensure that if you supply a multitude of commits, they are **squashed into a single commit**: + + ``` + git remote add upstream https://github.com/discourse/core.git + git fetch upstream + git checkout new_discourse_branch + git rebase upstream/master + git rebase -i + + < Choose 'squash' for all of your commits except the first one. > + < Edit the commit message to make sense, and describe all your changes. > + + git push origin new_discourse_branch -f + ``` + +5. Update your branch + + ``` + git checkout master + git pull --rebase + ``` + +6. Fork + + ``` + git remote add mine git@github.com:/core.git + ``` + +7. Push to your remote + + ``` + git push mine new_discourse_branch + ``` + +8. Issue a Pull Request + + In order to make a pull request, + * Navigate to the Discourse repository you just pushed to (e.g. https://github.com/your-user-name/discourse) + * Click "Pull Request". + * Write your branch name in the branch field (this is filled with "master" by default) + * Click "Update Commit Range". + * Ensure the changesets you introduced are included in the "Commits" tab. + * Ensure that the "Files Changed" incorporate all of your changes. + * Fill in some details about your potential patch including a meaningful title. + * Click "Send pull request". + + Once these steps are done, you will soon receive feedback from The Discourse team! + +9. Responding to Feedback + + The Discourse team may recommend adjustments to your code, and this is perfectly normal. Part of interacting with a healthy open-source community requires you to be open to learning new techniques and strategies; *don't get discouraged!* Remember: if the Discourse team suggest changes to your code, **they care enough about your work that they want to include it**, and hope that you can assist by implementing those revisions on your own. diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt new file mode 100644 index 00000000000..8aa830b10d3 --- /dev/null +++ b/COPYRIGHT.txt @@ -0,0 +1,33 @@ +All Discourse code is Copyright 2013 by Civilized Discourse Construction Kit, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. + +This program 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 General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program as the file LICENSE.txt; if not, please see +http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. + +Discourse is a registered trademark of FIRSTNAME LASTNAME. + +Discourse includes works under other copyright notices and distributed +according to the terms of the GNU General Public License or a compatible +license (where indicated), including: + +Javascript + + Ember.js - Copyright (c) 2012-2013 Yehuda Katz, Tom Dale, Charles Jolley and Ember.js contributors + + jQuery - Copyright (c) 2010-2013 John Resig + +Ruby + + Rails - Copyright (c) 2005-2013 David Heinemeier Hansson, Rails Core Team contributors (MIT) + + Thin - Copyright (c) 2012-2013 Marc-Andre Cournoyer diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 00000000000..42448796da3 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,77 @@ +# Discourse Developer Install Guide + +If you'd like to set up a development environment for Discourse, the easiest way is by using a virtual machine. + +### Getting Started + +1. Install the Xcode tools: https://developer.apple.com/xcode/ +2. Install VirtualBox: https://www.virtualbox.org/wiki/Downloads +3. Install Ruby 1.9.3. We recommend RVM: https://rvm.io/ +4. Open a terminal +5. Clone the project: `git@github.com:discourse/core.git` +6. Enter the project directory: `cd core` +7. Install vagrant: `gem install vagrant` + +### Using Vagrant + +When you're ready to start working, boot the VM: +``` +vagrant up +``` + +It should prompt you for your admin password. This is so it can mount your local files inside the VM for an easy workflow. + +(The first time you do this, it will take a while as it downloads the VM image and installs it. Go grab a coffee.) + +Once the machine has booted up, you can shell into it by typing: + +``` +vagrant ssh +``` + +### Keeping your VM up to date + +Now you're in a virtual machine is almost ready to start developing. It's a good idea to perform the following instructions +*every time* you pull from master to ensure your environment is still up to date. + +``` +bundle install +bundle exec rake db:migrate +bundle exec rake db:seed_fu +``` + +### Starting Rails + +Once your VM is up to date, you can start a rails instance using the following command: + +``` +bundle exec rails server +``` + +In a few seconds, rails will start server pages. To access them, open a web browser to http://localhost:4000 - if it all worked you should see discourse! Congratulations, you are ready to start working! + +You can now edit files on your local file system, using your favorite text editor or IDE. When you reload your web browser, it should have the latest changed. + +### Guard + Rspec + +If you're actively working on Discourse, we recommend that you run Guard. It'll automatically run our unit tests over and over, and includes support +for live CSS reloading. + +To use it, follow all the above steps. Once rails is running, open a new terminal window or tab, and then do this: + +``` +vagrant ssh +bundle exec guard -p +``` + +Wait a minute while it runs all our unit tests. Once it has completed, live reloading should start working. Simply save a file locally, wait a couple of seconds and you'll see it change in your browser. No reloading of pages should be necessary for the most part, although if something doesn't update you should refresh to confirm. + + +### Shutting down the VM + +When you're done working on Discourse, you can shut down Vagrant like so: + +``` +vagrant halt +``` + diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000000..e8703abb8f9 --- /dev/null +++ b/Gemfile @@ -0,0 +1,115 @@ +source 'http://rubygems.org' + +gem 'redis' +gem 'redis-rails' +gem 'hiredis' +gem 'em-redis' +gem 'rails' +gem 'pg' +gem 'haml' +gem 'sass' +gem 'rake' +# errbit is broken with 3.1.3 for now +gem 'airbrake', "3.1.2" +gem 'rest-client' +gem 'rails3_acts_as_paranoid', "~>0.2.0" +gem 'activerecord-postgres-hstore' +gem 'sidekiq' +gem 'fastimage' +gem 'nokogiri' +gem 'seed-fu' +gem 'sanitize' + + +gem 'slim', '<= 1.3.0' +gem 'sinatra', :require => nil +gem 'clockwork', :require => false + +gem 'i18n-js' +# gem 'rack-mini-profiler', '0.1.21' +# gem 'rack-mini-profiler', :path => '/home/sam/Source/MiniProfiler' +gem 'rack-mini-profiler', :git => 'git://github.com/SamSaffron/MiniProfiler' +gem 'oauth', :require => false +gem 'fast_xs' +gem 'pbkdf2' +gem 'simple_handlebars_rails', path: 'vendor/gems/simple_handlebars_rails' + +# Gem that enables support for plugins. It is required +gem 'discourse_plugin', path: 'vendor/gems/discourse_plugin' + +# Discourse Plugins (optional) +# Polls and Tasks have been disabled for launch, we need think all sorts of stuff through before adding them back in +# biggest concern is core support for custom sort orders, but there is also styling that just gets mishmashed into our core theme. +# gem 'discourse_poll', path: 'vendor/gems/discourse_poll' +gem 'discourse_emoji', path: 'vendor/gems/discourse_emoji' +# gem 'discourse_task', path: 'vendor/gems/discourse_task' + +gem 'rails_multisite', path: 'vendor/gems/rails_multisite' +gem 'message_bus', path: 'vendor/gems/message_bus' + +gem 'koala', :require => false +gem 'multi_json' +gem 'oj' +gem 'eventmachine' +gem 'thin' + +gem "active_model_serializers", :git => "git://github.com/rails-api/active_model_serializers.git" +gem 'has_ip_address' + +gem 'vestal_versions', :git => 'git://github.com/zhangyuan/vestal_versions' + +gem 'fog', :require => false + +# Gems used only for assets and not required +# in production environments by default. +# allow everywhere for now cause we are allowing asset debugging in prd +group :assets do + gem 'sass' + gem 'sass-rails' + gem 'coffee-rails' + gem 'uglifier' + # gem "asset_sync" + gem 'turbo-sprockets-rails3' +end + +# need this to compile coffee on the fly +gem 'coffee-script' + +gem 'hpricot' +gem 'jquery-rails' + +gem "ember-rails", :git => 'git://github.com/emberjs/ember-rails.git' # so we get the pre version +gem 'mustache' +gem 'therubyracer', :require => 'v8' +gem 'rinku' + + +gem 'ruby-openid', :require => 'openid' + +group :test, :development do + # Pretty printed test output + gem 'rspec-rails' + gem 'shoulda' + #gem 'turn', :require => false + gem 'jasminerice' + gem 'fabrication' + gem 'guard-jasmine' + gem 'guard-rspec' + gem 'guard-spork' + gem 'mocha', :require => false + gem 'test-unit', :require => "test/unit" + gem 'simplecov', :require => false + gem 'image_optim' + gem 'certified' + gem 'rb-fsevent' + gem 'rb-inotify', :require => RUBY_PLATFORM.include?('linux') && 'rb-inotify' + gem 'terminal-notifier-guard', :require => RUBY_PLATFORM.include?('darwin') && 'terminal-notifier-guard' +end + +group :development do + gem 'pry-rails' + gem 'better_errors' + gem 'binding_of_caller' # I tried adding this and got an occational crash +end + +# gem 'stacktrace', :require => false diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 00000000000..1a27a174107 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,442 @@ +GIT + remote: git://github.com/SamSaffron/MiniProfiler + revision: 8fa1391e1eda809d4e7d0f2c307ac8cea11ef540 + specs: + rack-mini-profiler (0.1.23) + rack (>= 1.1.3) + +GIT + remote: git://github.com/emberjs/ember-rails.git + revision: 587a55a8c53aae2193a3602895e89311eb8544b0 + specs: + ember-rails (0.9.2) + active_model_serializers + barber + execjs (>= 1.2) + railties (>= 3.1) + +GIT + remote: git://github.com/rails-api/active_model_serializers.git + revision: cef10cf01dfe18f72060bda279d5246c156ae737 + specs: + active_model_serializers (0.5.2) + activemodel (>= 3.0) + +GIT + remote: git://github.com/zhangyuan/vestal_versions + revision: 0ea75ec4e269b5a9e609639919ade0f36381a446 + specs: + vestal_versions (1.2.2) + activerecord (>= 3.0.0) + activesupport (>= 3.0.0) + +PATH + remote: vendor/gems/discourse_emoji + specs: + discourse_emoji (0.0.1) + +PATH + remote: vendor/gems/discourse_plugin + specs: + discourse_plugin (0.0.1) + +PATH + remote: vendor/gems/message_bus + specs: + message_bus (0.0.1) + eventmachine + rack (>= 1.1.3) + redis + thin + +PATH + remote: vendor/gems/rails_multisite + specs: + rails_multisite (0.0.1) + +PATH + remote: vendor/gems/simple_handlebars_rails + specs: + simple_handlebars_rails (0.0.1) + rails (~> 3.1) + +GEM + remote: http://rubygems.org/ + specs: + actionmailer (3.2.11) + actionpack (= 3.2.11) + mail (~> 2.4.4) + actionpack (3.2.11) + activemodel (= 3.2.11) + activesupport (= 3.2.11) + builder (~> 3.0.0) + erubis (~> 2.7.0) + journey (~> 1.0.4) + rack (~> 1.4.0) + rack-cache (~> 1.2) + rack-test (~> 0.6.1) + sprockets (~> 2.2.1) + activemodel (3.2.11) + activesupport (= 3.2.11) + builder (~> 3.0.0) + activerecord (3.2.11) + activemodel (= 3.2.11) + activesupport (= 3.2.11) + arel (~> 3.0.2) + tzinfo (~> 0.3.29) + activerecord-postgres-hstore (0.7.0) + rails + rake + activeresource (3.2.11) + activemodel (= 3.2.11) + activesupport (= 3.2.11) + activesupport (3.2.11) + i18n (~> 0.6) + multi_json (~> 1.0) + addressable (2.3.2) + airbrake (3.1.2) + activesupport + builder + arel (3.0.2) + barber (0.2.0) + execjs + better_errors (0.3.2) + coderay (>= 1.0.0) + erubis (>= 2.7.0) + binding_of_caller (0.6.8) + bourne (1.1.2) + mocha (= 0.10.5) + builder (3.0.4) + celluloid (0.12.4) + facter (>= 1.6.12) + timers (>= 1.0.0) + certified (0.1.1) + childprocess (0.3.7) + ffi (~> 1.0, >= 1.0.6) + clockwork (0.4.1) + tzinfo + coderay (1.0.8) + coffee-rails (3.2.2) + coffee-script (>= 2.2.0) + railties (~> 3.2.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.4.0) + connection_pool (1.0.0) + daemons (1.1.9) + diff-lcs (1.1.3) + em-redis (0.3.0) + eventmachine + erubis (2.7.0) + eventmachine (1.0.0) + excon (0.16.10) + execjs (1.4.0) + multi_json (~> 1.0) + fabrication (2.5.4) + facter (1.6.17) + faraday (0.8.5) + multipart-post (~> 1.1) + fast_xs (0.8.0) + fastimage (1.2.13) + ffi (1.3.1) + fog (1.9.0) + builder + excon (~> 0.14) + formatador (~> 0.2.0) + mime-types + multi_json (~> 1.0) + net-scp (~> 1.0.4) + net-ssh (>= 2.1.3) + nokogiri (~> 1.5.0) + ruby-hmac + formatador (0.2.4) + fspath (2.0.4) + guard (1.6.2) + listen (>= 0.6.0) + lumberjack (>= 1.0.2) + pry (>= 0.9.10) + terminal-table (>= 1.4.3) + thor (>= 0.14.6) + guard-jasmine (1.12.1) + childprocess + guard (>= 1.1.0) + multi_json + thor + guard-rspec (2.4.0) + guard (>= 1.1) + rspec (~> 2.11) + guard-spork (1.4.2) + childprocess (>= 0.2.3) + guard (>= 1.1) + spork (>= 0.8.4) + haml (3.1.7) + has_ip_address (0.0.1) + hike (1.2.1) + hiredis (0.4.5) + hpricot (0.8.6) + i18n (0.6.1) + i18n-js (2.1.2) + i18n + image_optim (0.7.2) + fspath (~> 2.0.3) + image_size (~> 1.1) + in_threads (~> 1.1.1) + progress (~> 2.4.0) + image_size (1.1.1) + in_threads (1.1.1) + jasminerice (0.0.10) + coffee-rails + haml + journey (1.0.4) + jquery-rails (2.2.0) + railties (>= 3.0, < 5.0) + thor (>= 0.14, < 2.0) + json (1.7.6) + koala (1.6.0) + addressable (~> 2.2) + faraday (~> 0.8) + multi_json (~> 1.3) + libv8 (3.11.8.13) + listen (0.7.2) + lumberjack (1.0.2) + mail (2.4.4) + i18n (>= 0.4.0) + mime-types (~> 1.16) + treetop (~> 1.4.8) + metaclass (0.0.1) + method_source (0.8.1) + mime-types (1.20.1) + mocha (0.10.5) + metaclass (~> 0.0.1) + multi_json (1.5.0) + multipart-post (1.1.5) + mustache (0.99.4) + net-scp (1.0.4) + net-ssh (>= 1.99.1) + net-ssh (2.6.3) + nokogiri (1.5.6) + oauth (0.4.7) + oj (2.0.3) + pbkdf2 (0.1.0) + pg (0.14.1) + polyglot (0.3.3) + progress (2.4.0) + pry (0.9.11.4) + coderay (~> 1.0.5) + method_source (~> 0.8) + slop (~> 3.4) + pry-rails (0.2.2) + pry (>= 0.9.10) + rack (1.4.4) + rack-cache (1.2) + rack (>= 0.4) + rack-protection (1.3.2) + rack + rack-ssl (1.3.3) + rack + rack-test (0.6.2) + rack (>= 1.0) + rails (3.2.11) + actionmailer (= 3.2.11) + actionpack (= 3.2.11) + activerecord (= 3.2.11) + activeresource (= 3.2.11) + activesupport (= 3.2.11) + bundler (~> 1.0) + railties (= 3.2.11) + rails3_acts_as_paranoid (0.2.5) + activerecord (~> 3.2) + railties (3.2.11) + actionpack (= 3.2.11) + activesupport (= 3.2.11) + rack-ssl (~> 1.3.2) + rake (>= 0.8.7) + rdoc (~> 3.4) + thor (>= 0.14.6, < 2.0) + rake (10.0.3) + rb-fsevent (0.9.3) + rb-inotify (0.9.0) + ffi (>= 0.5.0) + rdoc (3.12) + json (~> 1.4) + redis (3.0.2) + redis-actionpack (3.2.3) + actionpack (~> 3.2.3) + redis-rack (~> 1.4.0) + redis-store (~> 1.1.0) + redis-activesupport (3.2.3) + activesupport (~> 3.2.3) + redis-store (~> 1.1.0) + redis-namespace (1.2.1) + redis (~> 3.0.0) + redis-rack (1.4.2) + rack (~> 1.4.1) + redis-store (~> 1.1.0) + redis-rails (3.2.3) + redis-actionpack (~> 3.2.3) + redis-activesupport (~> 3.2.3) + redis-store (~> 1.1.0) + redis-store (1.1.3) + redis (>= 2.2.0) + ref (1.0.2) + rest-client (1.6.7) + mime-types (>= 1.16) + rinku (1.7.2) + rspec (2.12.0) + rspec-core (~> 2.12.0) + rspec-expectations (~> 2.12.0) + rspec-mocks (~> 2.12.0) + rspec-core (2.12.2) + rspec-expectations (2.12.1) + diff-lcs (~> 1.1.3) + rspec-mocks (2.12.2) + rspec-rails (2.12.2) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 2.12.0) + rspec-expectations (~> 2.12.0) + rspec-mocks (~> 2.12.0) + ruby-hmac (0.4.0) + ruby-openid (2.2.2) + sanitize (2.0.3) + nokogiri (>= 1.4.4, < 1.6) + sass (3.2.5) + sass-rails (3.2.6) + railties (~> 3.2.0) + sass (>= 3.1.10) + tilt (~> 1.3) + seed-fu (2.2.0) + activerecord (~> 3.1) + activesupport (~> 3.1) + shoulda (3.3.2) + shoulda-context (~> 1.0.1) + shoulda-matchers (~> 1.4.1) + shoulda-context (1.0.2) + shoulda-matchers (1.4.2) + activesupport (>= 3.0.0) + bourne (~> 1.1.2) + sidekiq (2.7.0) + celluloid (~> 0.12.0) + connection_pool (~> 1.0) + multi_json (~> 1) + redis (~> 3) + redis-namespace + simplecov (0.7.1) + multi_json (~> 1.0) + simplecov-html (~> 0.7.1) + simplecov-html (0.7.1) + sinatra (1.3.4) + rack (~> 1.4) + rack-protection (~> 1.3) + tilt (~> 1.3, >= 1.3.3) + slim (1.3.0) + temple (~> 0.4.1) + tilt (~> 1.3.3) + slop (3.4.3) + spork (0.9.2) + sprockets (2.2.2) + hike (~> 1.2) + multi_json (~> 1.0) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + temple (0.4.1) + terminal-notifier-guard (1.5.3) + terminal-table (1.4.5) + test-unit (2.5.4) + therubyracer (0.11.3) + libv8 (~> 3.11.8.12) + ref + thin (1.5.0) + daemons (>= 1.0.9) + eventmachine (>= 0.12.6) + rack (>= 1.0.0) + thor (0.17.0) + tilt (1.3.3) + timers (1.1.0) + treetop (1.4.12) + polyglot + polyglot (>= 0.3.1) + turbo-sprockets-rails3 (0.3.6) + railties (> 3.2.8, < 4.0.0) + sprockets (>= 2.0.0) + tzinfo (0.3.35) + uglifier (1.3.0) + execjs (>= 0.3.0) + multi_json (~> 1.0, >= 1.0.2) + +PLATFORMS + ruby + +DEPENDENCIES + active_model_serializers! + activerecord-postgres-hstore + airbrake (= 3.1.2) + better_errors + binding_of_caller + certified + clockwork + coffee-rails + coffee-script + discourse_emoji! + discourse_plugin! + em-redis + ember-rails! + eventmachine + fabrication + fast_xs + fastimage + fog + guard-jasmine + guard-rspec + guard-spork + haml + has_ip_address + hiredis + hpricot + i18n-js + image_optim + jasminerice + jquery-rails + koala + message_bus! + mocha + multi_json + mustache + nokogiri + oauth + oj + pbkdf2 + pg + pry-rails + rack-mini-profiler! + rails + rails3_acts_as_paranoid (~> 0.2.0) + rails_multisite! + rake + rb-fsevent + rb-inotify + redis + redis-rails + rest-client + rinku + rspec-rails + ruby-openid + sanitize + sass + sass-rails + seed-fu + shoulda + sidekiq + simple_handlebars_rails! + simplecov + sinatra + slim (<= 1.3.0) + terminal-notifier-guard + test-unit + therubyracer + thin + turbo-sprockets-rails3 + uglifier + vestal_versions! diff --git a/Guardfile b/Guardfile new file mode 100644 index 00000000000..0fcebb98d8a --- /dev/null +++ b/Guardfile @@ -0,0 +1,87 @@ +guard 'spork' do + watch('config/application.rb') + watch('config/environment.rb') + watch(%r{^config/environments/.*\.rb$}) + watch(%r{^config/initializers/.*\.rb$}) + watch('Gemfile') + watch('Gemfile.lock') + watch('spec/spec_helper.rb') { :rspec } +end + +phantom_path = File.expand_path('~/phantomjs/bin/phantomjs') +phantom_path = nil unless File.exists?(phantom_path) + +jasmine_options = {:phantomjs_bin => phantom_path} + +if ENV['JASMINE_URL'] + jasmine_options[:jasmine_url] = ENV['JASMINE_URL'] + jasmine_options[:server] = :none +else + jasmine_options[:server] = :thin + jasmine_options[:port] = 8888 + jasmine_options[:server_timeout] = 300 +end + +guard 'jasmine', jasmine_options do watch(%r{spec/javascripts/spec\.(js\.coffee|js|coffee)$}) { "spec/javascripts" } + watch(%r{spec/javascripts/.+_spec\.(js\.coffee|js|coffee)$}) + watch(%r{app/assets/javascripts/(.+?)\.(js\.coffee|js|coffee)$}) { "spec/javascripts" } +end + +guard 'rspec', :focus_on_failed => true, :version => 2, :cli => "--drb" do + watch(%r{^spec/.+_spec\.rb$}) + #watch(%r{^lib/jobs/(.+)\.rb$}) { |m| "spec/components/jobs/#{m[1]}_spec.rb" } + watch(%r{^lib/(.+)\.rb$}) { |m| "spec/components/#{m[1]}_spec.rb" } + watch('spec/spec_helper.rb') { "spec" } + + # Rails example + watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } + watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" } + watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb" } + watch(%r{^spec/support/(.+)\.rb$}) { "spec" } + watch('app/controllers/application_controller.rb') { "spec/controllers" } + + # Capybara request specs + watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" } + +end + +module ::Guard + class AutoReload < ::Guard::Guard + + require File.dirname(__FILE__) + '/config/environment' + def run_on_change(paths) + paths.map! do |p| + hash = nil + fullpath = Rails.root.to_s + "/" + p + hash = Digest::MD5.hexdigest(File.read(fullpath)) if File.exists? fullpath + p = p.sub /\.sass\.erb/, "" + p = p.sub /\.sass/, "" + p = p.sub /\.scss/, "" + p = p.sub /^app\/assets\/stylesheets/, "assets" + {name: p, hash: hash} + end + # target dev + MessageBus::Instance.new.publish "/file-change", paths + end + + def run_all + end + end +end + +Thread.new do + Listen.to('tmp/') do |modified,added,removed| + modified.each do |m| + MessageBus::Instance.new.publish "/file-change", ["refresh"] if m =~ /refresh_browser/ + end + end +end + +guard :autoreload do + watch(/tmp\/refresh_browser/) + watch(/\.css$/) + watch(/\.sass$/) + watch(/\.scss$/) + watch(/\.sass\.erb$/) + watch(/\.handlebars$/) +end diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 00000000000..52739bb2d86 --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,27 @@ +# Discourse "Quick-and-Dirty" Install Guide + +We have deliberately left this section lacking. From our FAQ: + +> Discourse is brand new. Discourse is early beta software, and likely to remain so for many months. +> Please experiment with it, play with it, give us feedback, submit pull requests – but any consideration +> of fully adopting Discourse is for people and organizations who are eager to live on the bleeding and broken edge. + +When Discourse is ready for primetime we're going to provide several robust and easy ways to install it. +Until then, if you are feeling adventurous you can try to set up following components. + +- Postgres 9.1 + - Enable support for HSTORE + - Create a discourse database and seed it with a basic image +- Redis 2.6 +- Ruby 1.9.3 + - Install all rubygems via bundler + - Edit database.yml and redis.yml and point them at your databases. + - Prepackage all assets using rake + - Run the Rails database migrations + - Run a sidekiq process for background jobs + - Run a clockwork process for enqueing scheduled jobs + - Run several Rails processes, preferably behind a proxy like Nginx. + + + + diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000000..94fb84639c4 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/PLUGINS.md b/PLUGINS.md new file mode 100644 index 00000000000..19255581d98 --- /dev/null +++ b/PLUGINS.md @@ -0,0 +1,6 @@ +# Discourse Plugin Architecture + +**Note: This is a work in progress!** + + + diff --git a/README.md b/README.md new file mode 100644 index 00000000000..5dbf528ecf6 --- /dev/null +++ b/README.md @@ -0,0 +1,116 @@ +![Logo](https://raw.github.com/discourse/core/master/images/discourse.png) + +Discourse is the 100% open source, next-generation discussion platform built for the next 10 years of the Internet. + +Whenever you need ... + +* a mailing list +* a forum to discuss something +* a chat room where you can type paragraphs + +... consider Discourse. + + +## Getting Started + +If you're interested in helping us develop Discourse, please start with our **[Discourse Developer Install Guide](https://github.com/discourse/core/blob/master/DEVELOPMENT.md)**, which includes instructions to get up and running in a development environment. + +We also have a **[Discourse "Quick-and-Dirty" Install Guide](https://github.com/discourse/core/blob/master/INSTALL.md)**. + +## Vision + +This is the **Civilized Discourse Construction Kit**, a fully open-source package of forum software that is free to use and contribute to. Discourse embraces the changes that are necessary to evolve forum software, namely: + +* A **flattened discussion**, which avoids the pains of threaded forums, and delivers a more robust, intuitive interface to join a conversation at any point. +* A **self-learning system**, capable of examining the behavior of the community, and adapting to budding moderators and forum trolls alike. +* A **seamless web-only** interface that delivers usability on both the desktop and the tablet, without the need for a native app. +* A **contemporary, robust technology stack**, so that both users and administrators alike have another choice BESIDES php. + +The Discourse team wishes to **foster an active community of contributors**, all of whom commit to delivering this continued vision, and ensure that online discussions can grow and thrive in an Internet age dominated by micro-blogging and diminishing attention spans. + +This vision translates to the following functional commitments: + +1. Support all contemporary browsers on the desktop: + * Internet Explorer 9.0, 10.0+ + * Firefox 16+ + * Google Chrome *infinite* + +2. Supporting the latest generation of tablets: + * iPad 2+ + * Android 4.1+ on 7" and 10" + * Windows 8 + +3. Deliver support for mobile/smartphones *as soon as possible*: + * Windows Phone 8 + * iPhone 4+ + * Android 4.0+ + +## Contributing + +Discourse is **100% free** and **open-source**. We encourage and support an active, healthy community that +accepts contributions from the public, and we'd like you to be a part of that community. + +In order to be prepared for contributing to Discourse, please: + +1. Review the **VISION** section above, which will help you understand the needs of the team, and the focus of the project, +2. Read & sign the **[Discourse Forums Contribution License Agreement](https://github.com/discourse/core-cla)**, to confirm you've read and acknowledged the legal aspects of your contributions, and +3. Dig into **[CONTRIBUTING.MD](https://github.com/discourse/core/blob/master/CONTRIBUTING.md)**, which houses all of the necessary info to: + * submit bugs, + * request new features, and + * step you through the entire process of preparing your code for a Pull Request. + +**We look forward to seeing your cool stuff!** + +## Expertise + +Discourse implements a variety of open source tech. You may wish to familiarize yourself with the various components that Discourse is built on, in order to be an effective contributor: + +### Languages/Frameworks + +1. [Ruby on Rails](https://github.com/rails/rails) - Our back end API is a Rails app. It responds to requests RESTfully and responds in JSON. +2. [Ember.js](https://github.com/emberjs/ember.js) - Our front end interface is an Ember.js app that communicates the Rails API. + +### Databases + +1. [PostgreSQL](http://www.postgresql.org/) - Our main data store is Postgres. +2. [Redis](http://redis.io/) - We use Redis for our job queue, rate limiting, as a cache and for transient data. + +### Ruby Gems + +The complete list of Ruby Gems used by Discourse can be found in [SOFTWARE.md](https://github.com/discourse/core/blob/master/SOFTWARE.md). + +## Versioning + +Discourse implements the Semantic Versioning guidelines. + +Releases will be numbered with the following format: + +`..` + +And constructed with the following guidelines: + +* Breaking backward compatibility bumps the major (and resets the minor and patch) +* New additions without breaking backward compatibility bumps the minor (and resets the patch) +* Bug fixes and misc changes bumps the patch + +For more information on SemVer, please visit http://semver.org/. + +## The Discourse Team + +The Discourse code contributors can be found in [AUTHORS.MD](https://github.com/discourse/core/blob/master/AUTHORS.md). For a complete list of the many individuals that contributed to the design and implementation of Discourse, please refer to the official website. + +## Copyright / License + +Copyright 2013 Civilized Discourse Construction Kit, Inc. + +Licensed under the GNU General Public License Version 2.0 (or later); +you may not use this work except in compliance with the License. +You may obtain a copy of the License in the LICENSE file, or at: + + http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/Rakefile b/Rakefile new file mode 100644 index 00000000000..4a791a9b77d --- /dev/null +++ b/Rakefile @@ -0,0 +1,7 @@ +#!/usr/bin/env rake +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Discourse::Application.load_tasks diff --git a/SOFTWARE.md b/SOFTWARE.md new file mode 100644 index 00000000000..5919b682ee1 --- /dev/null +++ b/SOFTWARE.md @@ -0,0 +1,47 @@ +# Discourse Ruby Gems + +The following Ruby Gems are used in Discourse: + +* [pg](https://rubygems.org/gems/pg) +* [redis](https://rubygems.org/gems/redis) +* [em-redis](https://rubygems.org/gems/em-redis) +* [Event Machine](https://rubygems.org/gems/event_machine) +* [Active Model Serializers](https://rubygems.org/gems/active_model_serializers) +* [Sidekiq](https://rubygems.org/gems/sidekiq) +* [Therubyracer](https://rubygems.org/gems/therubyracer) +* [Guard](https://rubygems.org/gems/guard) +* [OJ](https://rubygems.org/gems/oj) +* [rack-mini-profiler](https://rubygems.org/gems/rack-mini-profiler) +* [sass](https://rubygems.org/gems/sass) +* [rest-client](https://rubygems.org/gems/rest-client) +* [rails3_acts_as_paranoid](https://rubygems.org/gems/rails3_acts_as_paranoid) +* [activerecord-postgres-hstore](https://rubygems.org/gems/activerecord-postgres-hstore) +* [fastimage](https://rubygems.org/gems/fastimage) +* [seed-fu](https://rubygems.org/gems/seed-fu) +* [sanitize](https://rubygems.org/gems/sanitize) +* [clockwork](https://rubygems.org/gems/clockwork) +* [i18n-js](https://rubygems.org/gems/i18n-js) +* [pbkdf2](https://rubygems.org/gems/pbkdf2) +* [fast_xs](https://rubygems.org/gems/fast_xs) +* [koala](https://rubygems.org/gems/koala) +* [has_ip_address](https://rubygems.org/gems/has_ip_address) +* [vestal_versions](https://rubygems.org/gems/vestal_versions) +* [coffee-rails](https://rubygems.org/gems/coffee-rails) +* [uglifier](https://rubygems.org/gems/uglifier) +* [hpricot](https://rubygems.org/gems/hpricot) +* [uuidtools](https://rubygems.org/gems/uuidtools) +* [rinku](https://rubygems.org/gems/rinku) +* [ruby-openid](https://rubygems.org/gems/ruby-openid) +* [rspec](https://rubygems.org/gems/rspec) +* [shoulda](https://rubygems.org/gems/shoulda) +* [turn](https://rubygems.org/gems/turn) +* [jasminerice](https://rubygems.org/gems/jasminerice) +* [fabrication](https://rubygems.org/gems/fabrication) +* [mocha](https://rubygems.org/gems/mocha) +* [simplecov](https://rubygems.org/gems/simplecov) +* [image_optim](https://rubygems.org/gems/image_optim) +* [certified](https://rubygems.org/gems/certified) +* [rb-fsevent](https://rubygems.org/gems/rb-fsevent) +* [rb-inotify](https://rubygems.org/gems/rb-inotify) +* [terminal-notifier-guard](https://rubygems.org/gems/terminal-notifier-guard) +* [pry-rails](https://rubygems.org/gems/pry-rails) diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 00000000000..f974697d1be --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,14 @@ +# See https://github.com/discourse/core/blob/master/DEVELOPMENT.md +# +Vagrant::Config.run do |config| + config.vm.box = 'discourse-pre' + config.vm.box_url = 'http://www.discourse.org/vms/discourse-pre.box' + config.vm.network :hostonly, '192.168.10.200' + + config.vm.forward_port 3000, 4000 + config.vm.forward_port 1080, 4080 # Mailcatcher + + if RUBY_PLATFORM =~ /darwin/ + config.vm.share_folder("v-root", "/vagrant", ".", :nfs => true) + end +end diff --git a/adminjs b/adminjs new file mode 120000 index 00000000000..d64fd7021f5 --- /dev/null +++ b/adminjs @@ -0,0 +1 @@ +app/assets/javascripts/admin \ No newline at end of file diff --git a/app/assets/fonts/FontAwesome.otf b/app/assets/fonts/FontAwesome.otf new file mode 100755 index 0000000000000000000000000000000000000000..64049bf2e79940063b59be135872baadc37df6f6 GIT binary patch literal 48748 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 Uxx)9Rl&I4BG*SZ+~220SCpu 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 literal 0 HcmV?d00001 diff --git a/app/assets/fonts/fontawesome-webfont.ttf b/app/assets/fonts/fontawesome-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..88ef262202b14b3aa64669e54c5fe034ea0a5cb6 GIT binary patch literal 60296 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 WZ~SLo*!%Av0|NtNz+=;&3=9BD6UD6n literal 0 HcmV?d00001 diff --git a/app/assets/fonts/zocial-regular-webfont.eot b/app/assets/fonts/zocial-regular-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..5db5d21666ac726ced538e062abb8ccab14336b5 GIT binary patch literal 29272 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 literal 0 HcmV?d00001 diff --git a/app/assets/fonts/zocial-regular-webfont.svg b/app/assets/fonts/zocial-regular-webfont.svg new file mode 100644 index 00000000000..130d83ca102 --- /dev/null +++ b/app/assets/fonts/zocial-regular-webfont.svg @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/assets/fonts/zocial-regular-webfont.ttf b/app/assets/fonts/zocial-regular-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a043566360a575dc8a88458636417efda8be3252 GIT binary patch literal 29040 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 L=@-nx!e9*m%uf-i literal 0 HcmV?d00001 diff --git a/app/assets/images/auth/google.gif b/app/assets/images/auth/google.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b6cd07bd8b9f27175e0a03be3b5849e0f5479c7 GIT binary patch literal 1596 zcmZ?wbhEHb^kz_C_|CwvZO5Lw_wM&FGu}A2(IIhbQ}<$qGzJZ~Squpbm!|ZWwQpq* zsW{r%^zzBwRa@2^J9p>9oe5s$=eWGCEZeZ+ zsLpHOe*Em5(Ya~*w7UTN!*V%nHer;lS z{qgIczyC@Z7}~wuCNncQ_*HK`@vPxQ{ju%a&rM~xwtMHK(-Y>eod4_Z|H-q~+`n__ z&XzTQ{{LSvG4-=i{}1=Zf3@);aPrH%}gWvW$U2dgagWUq75b^XSEw zzFB*IG_eL{(`ShYBfa%?vmkb&^U%hD#xL zZ{H{Ei9dPuh>Kfj9_ zb$|N$@NDDCi7O_4`}Squt_^E9?QfA0pX+2(AtByj zZgl(h%_~x@k5gCkBRKui`6IMNX`r=i7^{k#;iN~9So;-Uf;URHy?W#p< zPkh_Y`SbVxmyxb-UOoG;Tlm4l#|(PM890mV+wJ=f_w^*it=@e0!x0SzhL)G#UY1Tg zZx&~kJ^A_dMe~F$cSJBS{P_0q;GKgP*R1A?cy{B-jsO4uGYk+={K*2gSqDUd@&p6N ze}?s(G9DWi9Bk$g)`~f?Vd3F+0cEc_9vc@O?Updky3=9c-LEDio;Ry(>3OAWiRv{S z4h;-lkzPw$Y-S|Q+~~T=U|vN_M%w`%*EX3~9}<>1I!V;TOes>l;wWLzBca<7l6h3p zluLnSVq(@oZHWyLPc|xCJZ!SWqTs=#V+&+C3fN0@PqYa3GMJbc>?%9jaHCP>$|M1f z1qKX>3|veT1)eUHl;K%p(4d+weo$~K8;^ja=8c9%tB@@L3JY&3vu3ZGYGB~FK#5;^ zMedL0=962Gv~g#x2t1fLC$Nx>t)aQ4>wutQ4eyTFD+kzX6zN% za?&9-C8=#%oM#FbKl=%-33ASR7Pww9zFXj^&H7RCNM%gE$U*K-u`36!rRHC85)gZF wtTQq!lvNA9*GX(gAxH2#>FsymYy7n#my0={G-|}vFE4cBU#O8N$Ti+{g zd#}6egTd|(W_v$a@Bip{;G^rIkM4&*c^v-ab>vgvu}{$_KgXW>oOt?k@|n+RXTKC* z{91bHYt5CfATvktXb2325Lk6)E;|DQBST4$U-18t4H$yIv#T;NFmM)lL>4nJ@ErzW z#^d=bQWzK*q)J>PN`mv#O3D+9QW*jgGxJLH{9Hp6%8d0)^$ZORz7#EFU|^{5ba4#P z2u{5a&evkV!xGT8?EsVa`tSD33!^()_CH$gBB#D6+_ll?teWiQhqD+?te*Pv$f9ql zjFZCh7?)1q3ab6_Fxc#kTkECsQmdmhMLzf}Q#Ijse4K3Lv7+Y0Vxg}aAJ+(%x-Cwd p)_TkO>HHO^Elt@!an&Ds$y6mX>8GU2=ewXJ=jrO_vd$@?2>|+ZmMj1O literal 0 HcmV?d00001 diff --git a/app/assets/images/auth/yahoo.gif b/app/assets/images/auth/yahoo.gif new file mode 100644 index 0000000000000000000000000000000000000000..42adbfa57f86b8b2df5aa1b7fe90510a7d1fdfdd GIT binary patch literal 1682 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/1.jpg b/app/assets/images/avatars/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..baefa551c712e503e466684787231735b523a81e GIT binary patch literal 2150 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 bUy(4MC569g`1GWw{@%CmOQ5Ss;QyNd<8Zh^ literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/100.jpg b/app/assets/images/avatars/100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d799cd2acd42fb99c0043bfb937899529e4feb5c GIT binary patch literal 4041 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/103.jpg b/app/assets/images/avatars/103.jpg new file mode 100644 index 0000000000000000000000000000000000000000..277d481f4772e36bfcdf00c91442e4ea8fa20b93 GIT binary patch literal 2419 zcmex=$<%PwSRFvdYWaQ-KK!z}~va+(XvGZ|o z@X3h?ipY@+{vTivDPjT0wr zd8p#jwCLc)%m0rsNHH=nF*7oP^+E_1Rt9D^c97jVf((o-j7%)7%&ZV829RPFK~^C) zMZ-YH#Kw&m*_Dip3nwo8@c$MA4>KbJlOVGogFVBN?emMv)!06~_An^t4m;W@9pInZ zCb{Q?bFQM1m{7|SeNGPs26hEjmwjdC{;%~T|L#_QytsD1?yt|^CO!V^J(Xw0qM3i* z6}qd7F6-GBU2> z+!R;O zJ#Q-ezZYFznC@}M*S~7#?dutpyhmpjPgK?2d*2{vkL8r~_8um_s-JSH(bW|*^$YyL&G2a=XO_b)eKDUFoq=a_g{X44eY`8vwK!^+N!AG&{`^ZfgV{q+yU z&e|UTT)?eXmN8lFFx%6_LV?_J?k#Pz%O0CfeZ;J)#bQ-aAhM<+z~iLN>*R>!mvh;d z-rRO0?AFX6=I+TyM0RQ^f9wi)Qe>4pL4uiS$B~Qs)f#o%bY6Oki_D*TELAg;U&!#- z!&f2fUhA*ke3tRvCpNx%+onzaWz%Oq^stMWV6)=at}QMzdHA#EHq~9Kv2KlCpgiq? z!)L!;)1wMjW;r~vTV)!RC0lKKXwi`;+oV-i?+$qSe)&q_Wt{++fio1xl$_g2mF0tll}WzZr+V}92Pw9=fo2wi4z;z1chOJ@u{=TC`R;jXgkG z+o_X5rTCQa`3ti&W<1GhF6MJuc~;j#i+OL5B=AYEB-Xs#{hxfxlYJ%Y6l-^E=b_Yo%?c^^P?}9e#X%zR$9+ zs|4;$zUm>jZ<%!Bj*YiGZ6>s+@cd`Ua=Uug_k_`tl}0L$8Rjp#@x|lQ_ba*K5-+2s zY!_*rf8A+vf4X7Je+Ew1lS#Mo-h`5?{`5X~% zO}Bd$oG;7G`-&d^GdaC#>(tG@TUzhVpRimeOi;?o;;zl+^CxZg*0+X9FWwohol>sw zQf+3;9t~^TJjHnR<00F6p88dL9I9Quq~0MbBK*a5ZK0*+dco6{d{4??u?l$@{K{#{ z!uGE2^zIYP3tt@mP%uM9 z_scG^shSKtOFr2tPwaD%(p;V(n3wcf$;QQ!^CHW11&?h0EzUc%f;K)s@%R@1T+#h) z91jvwau2)_O5b_TvhdlQeDkEEpQ`gVR0OLY;P@=#wnOVR=ao8>1@l#T!u+mVPhO>4 zy?O0p=iMiq150_XUAR#)rKMBbLq_Ywmlv$IH@`Q1TUM-kyZDr!Mazso^6wm(->oao zZ`~Sp;ljuyrgvH z-?J7jGnMA>rANB5Ao%ML5$f?42JUcG3YaMc9GHjf;H)D0Uqrt?Q;5}KahG7#X)TnE_ z8`;*_?0wetLPmdO#FZ7?Vum{=Ur1EgFRU~@+e+(xg|%7K);GUfFIg?TnRiLP@XEQK z5bil%T8B?OJhb!YbGuv1CErZky>a)k*;lG8zxgqFPfA%D!NnrP%r0x|D-ycPr2kBh z$^_11ezn)9IUJ6CG~M`Sa7j}|?Cy;FU(Qbc&(K;{zG>bQi{Ii^MaoVxS3EFP?emi6#sh2qtaEtU#Q(x}(URZxH`f=Gl^h9ivrI-{5yZj-)l?X&HJ*qEqBv{C!Km5wya##AgwaziM)ZW#-gs5 XGUjnsUz(LABsEo!Pd`0r|Nol+s+Brk literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/104.jpg b/app/assets/images/avatars/104.jpg new file mode 100644 index 0000000000000000000000000000000000000000..787c4ab792cbc7a36ec8f74b88f63ef200059a23 GIT binary patch literal 1693 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/106.jpg b/app/assets/images/avatars/106.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04782209da6abc9bd7451746f28030703d2cb656 GIT binary patch literal 2190 zcmex=oIr{vTivKbJlOVGogFVBJ zUH6$y228%*B54$11?G_${a)|If1 zSG(lnFBIR~Q<@e2=4qwEJj1`4{k-Yhj?LxjTd;h>@0GPGWr3E*FN+p(<@K*Pc=?>w z$@@jSG~`4ct>b5^We68-uh|;=WmWGb)kiPQZqM=P`?GYd?~=byCKVsmF8kPad70`) zwvzBo0V3;Wd0N<&wm)+3_IHT!2)iL$F*)*H*fWPHf9b;h$lQ9c!}CzP zL~V3|Tao2@PODST)7!3u9jH7WtKt2A#foi)cmDimusV3@^PIWMm3IYf^WvJgwMNrA z#Et)H+^;61Wzp9jnYAuqT^RYi;FJAYsamEX(EE=Tmrucj0$7ul*g5zlv;Hvdn(Z7NHyL z5|Sq$&DyQ1wd+ohoqcBH`}upat+KfaH5sD=EZEO?iCG=AzEW((_o!jYg6ajewQ&vYg^%g|GJ?qo4cG8S(-yVpUEfEo! zd+K&`)4F=UtNqLJu4lV`Q{k?9yi>|~>AsdDrPBFLp8hk=S#xbK`&v9v>3NdtzU!HV zbJy;9%v&n5?OIRMq&3M3KQG1WNR>PP%5{HZHn(zbpIxYC2Kxg&p*3|jf>HcSEO`%v znCB|G#_qM7vLwh-Et17wsckW$olecK&i}#0_UYBbM#+`c> z8Rh0bA*#?-PJZc?*WH_@T=!j`)XwC2@?4PJoIp<*uBwVV-?{%DOttWjJ$QR^tCX)+ z)c3^`dxR!`ueH~D^-yK5bFpL4l=YbbT>TO@+N%JZC$ZTmMT2+tjo`znU*mcXx z@X#$8-)_!nX_tv!=wxNz^SR09z;Tn78OKs5Jh+3XWN`B zUKeLIujb6-u0H-Z!EB|2dR!^6v}Ydi-a|lvI|f%~eZ)4%LU{(Z*O_~W9sDB zzWW{pGG@Mf!}*4*p!h8J^|HzS7Q_`PMZk)!=oD!loq?+8jSc zJdF>09x%&2%w9++;pA+qTQjPIUQOs*?eLf})l!08_IIexTF;yvEKXZb7_Ip>?ab?z zt$gz3@0Pk0PFh#^Nn(}4hs%=_?oO7S$aK1}IE!gQr&iC_4+fJa8LX>*QtX*sU7VX` zvbiX=qgYQ<-q1rgZzp~hy9U09@ZDS*{PI9x*OC?dGlS|sb-mc_b~4ypeEE}AIqgk1Zawab zIBEIh`BU$hl07>&PPtLqGx6A?0(&ow6-z=l<=ubS{MLP9{?23DV|3R|&CM(ln{+eq z)D(mJ$LH_yXJCx%_)zweDQPm-Qy~{QFWV(6^%g(jWN5AW=qg$#FyC+LL*2W=E-OAg zR6H=L_u$i}pz7v#3H=AUp4GQY-70M@GdX#A9= z(!To?>(0q_J#O`HpL1v1IkN@-8QM?C{LK!!{4n&?txxy)qJv)jQ#D)q`SrU%*J3N3 k9UE>ejaJkA$!E0o?3Bb!{wmGS*iUt7tnHK4wf}z;03=@5CjbBd literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/107.jpg b/app/assets/images/avatars/107.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff5bfd7a2783a28ac6c2af7afa3efd1ded24b921 GIT binary patch literal 3966 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/108.jpg b/app/assets/images/avatars/108.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7011b72fcb0a6eff404aa87c50ce83916fe31aea GIT binary patch literal 2070 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 S)U{`mJa%5K?3lHdJy9 z6e(mkN^BIJxbUK~ld7?Ea8h#d#)A(({y)MXf@~y6Cj$dWR1nD`sOT*Q9%e=cCP8LF z2789hTO=1;4vqA6moHit+G)ddT+*KT$-icYqU|5~PJ1dJaapS*lY5I0jr+ zDv{IAcXiELvT$3}l-R(Qw*J03Xg7Qu=}dA=*KyCWxL7?wzDq!t6H`xXl{S7?cgy- z9gB~LWnS>OUOb<@Jv^j5W!B5xHKy58=gr(M$>g*CdEWEq1=pq0nk#F~uV2>QYU^UE zlo6a=>rmslWAfyEx{v2??`7T1^6|=HnGf53EDd;Z_-;gsEZbRz`XkzRwp_Xxc(Lzk z&`d4q{2AYlB|Crr&mgS)mDwTaddBAHh0ASSjTfJgJi1TdS=t@8o05xc^v)U7e_rsB zW#eVP+`m?jBD6d*wG~-q94EZLH}S@nYSF?T#`g>AFCNo$b#-O6zZ~Ux)5qiM`TlRM z{i`#+{hrHI%a)-nf8?}@z!`0&+FlF2lgEEu{m)>oQdjubz2Ayuu6ndB@3d)cYw}h! zdYnvXPAh7@Qu9{1KbNKV-(TK!O1lr8++J+?QEHyK%ujpf{|qh6{~6?#)n1)+^bW83 zr3*)ndP_=QH~Gx-yv(rY$9a1O<@MWd>K+y9JW_f!Cw;~0*5l<{8#k#<$UAN`x1A;V z4fA>btKo5)QMW#O>J*=-zId3^$RbB(%i^TBcRastmzU!9-m1H8l19Qbjg=2#Os=ZT zVf@A0EWhJ-hSDnitzTZLEnld$s#X_sa4 zBzNOu7bSkDvdLIT{5k%!aDm~q?HmtxUi$WGahm^mFNTTNIWUD5v?9M4ilC75o6?e@H5SsI!VYlxJ zyCc6}*j_&E9Uh*#t*v)q&*jd}17A;0ROFqXbbr6R6z^Vd$Kb%))oI;1m*Q9@fB1K*=<^?|rT(SZ!Mg*RQDW?v<-%&DtiY zdUUVI*B_^ab&@#Egc2m!E#)0aw(e?JM$yjt9N;xBAb}8>n0t$d&u%(y@@7=z9 zlV50sxxL-fyzPak^P#|vS<-&$u4JS zA}*oO)93i1M81Swzcws0>+GuQjB9rn#M-L_tbAUx$&9@}=Y>UPzB%ju3qj!lZl6Qf zto}ON>4b8Jc#PJb#gcZ;3D3V>kl26y`u$yVGc+Hi2g+=D)53Q1&Yzo_2X2HE)gEiy z>${A*)M%-#b?CV_=5ocYG4)dtcz)OCvX)-H5^%`%;&P6UZW~Q?X0)Dr&wC>8(VWT$ zADbUL>R&1K7hT4+s^F4NDC@lVs3U7$cXU~Pd0_B_|FRXwDl4hJjq4&Ns(R%yj$aA@x&%ZNtB$oDNT#A@o zQp9lL@Im$oCG1u0i&pBF#)n;EnVsP#q+ZH*pN02?<8vAFw+qa5*ZvZJomYEM$&>5S z1)Z#-bx$_$Qz_RHPpf(Gf-5?2lY3B>^?h%N*r~E}-cHdonpd{*d-C5eV*PG+)OSa* zOieD}@$svfYN@sSt3%;`hP|xzx*wPIZw-|%ycurvalc*hB;$|2pFelBPnx#ujh52# zvPpB9zAs)?Z+m&0socz>)&Cj9@6yyro&^5gl9$6qhl_EyM0)+aM(&9>8}d-u(hoZzj!rAB7um&RXDCe@k9 H|Gx$<%PwSRFvdYWaQ-KK!z}~va+(XvGZ|o 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/113.jpg b/app/assets/images/avatars/113.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65bfa5f2d1d08b2c390db0e8d7211a4908f8bcfa GIT binary patch literal 4317 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 Mvp3pTq4fVI0M(O39RL6T literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/114.jpg b/app/assets/images/avatars/114.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00889de5393cdb487bcb6affba10104a2c1ad662 GIT binary patch literal 19753 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/118.jpg b/app/assets/images/avatars/118.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c61aa71322a23b8c1904de8a9485fe1637ed3df6 GIT binary patch literal 3000 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/12.jpg b/app/assets/images/avatars/12.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46daa73ae4c2e9e50d2cc5fd3063d8918eb56b8c GIT binary patch literal 4551 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 NGq0>B7p4Ed2>|IJy&M1l literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/120.jpg b/app/assets/images/avatars/120.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4476eb4048bb5f8ceb8223023f6f4e049824921 GIT binary patch literal 7633 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 Qoa@6jhTWCYSpWYf07J=L1^@s6 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/122.jpg b/app/assets/images/avatars/122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87a1ca759b388b071b0a450a74eca552146a0bde GIT binary patch literal 3666 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/123.jpg b/app/assets/images/avatars/123.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21918bab528f0d466cd3e10cc4d8125c2b4700fa GIT binary patch literal 8441 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/124.jpg b/app/assets/images/avatars/124.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae3eb5765d1bae94c00a558a58dba1f55362281e GIT binary patch literal 2394 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/126.jpg b/app/assets/images/avatars/126.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce7d29b2125a82859883eb84612e34eb6ddaea99 GIT binary patch literal 3034 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/127.jpg b/app/assets/images/avatars/127.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddd555874ee41652165decc270e827f7ff55d631 GIT binary patch literal 38114 zcmex=_85ksPA;eS`Ffj19FfeR8kK`XQPP5`i&FEFQx(E8Q_C~+(iNQZ^HMTPGV}8kGV^f7Fqztr z+yG)i(lrAEgYc4n3?lJ*3!K{R|8YOvRb$;Pm4h6rzw^T2uy+2W3kJRt7Exeg+W+Nd`FvWd;ofT?Qit za|UY$2L@LLF9v^x5Qa#GIEG|~42E2WB8GB?8iq!OHimA72@F#iW--iXSi-Q9VI9LJ zhV2Y{7!EQVV>r!lf#E8{ZH5O7PZ?e_d|>#-@SBm5k)4s3QJ7JZQJztiQJc|-(Sp&A z(UsAMF^DmeF@Z6iF^{p7v4*jkv72!c<1EI7j4K&8GVWwN$as?RBI8ZQhm0>7KQaDd zVrJrD5@C{MQe)C*vS4y#@@5KQie*Y?DrBl+YGLYQn!&V)X${jhrh`nUnXWQDV0z8; zm6?H=n^}xmky)47g4vnbpE-&-jk$=qj=76@8uKFNbO`6mk-i!h4< zi!O^biw8?6OEOC#OC3uO%Pf`^EZbO)uv}(&$nt^ZA1g1b468P)6{{y}1Zz5LIcpp1 zG}dLTTUn2?US)mC`i+f^O^i*Q&794HEs`yZt(vWeZ7$n-wgYSz*&effWoKuXWY=c5 zW%p-KWG`WFW1q>shJ8Q#CHAN6KRCEKYpP7;ZG4yb-tlwttMWVY$MIM3PvhUrf1dx10H=VOfU`iNK%KyB zft>=^1-=Rj3mOXg3+4*;2(A)5DfmK&T}VyHRVYQMMQE|mVWG#u%)-jT&ceyU&B9BB zj|x8(VG~go@f67t=@wZla!%xfsF0|MXqae)=xouwq7THF#ni++#d5^@#Wsmu6Z<7D zEAA+sD&8r+PW+PicL`|;2Z>aPE{XLLS0#Q)DoDCYW=l?#+%9=nibYCGDp0CiYM#_l zsW;Lh($><+(p}PcUA91WrtD$aH*#Wf4suy?Q{?u^ zy_6T0x0BD5pCZ3s{*{8Lf}=u?!VHBY3Lg|@6g?D66&EU=Q~a%@t`w@&q_ke?t}>Uh zg>stm6y-z8A5`R3d{t^xR;%1nYnOV>Z{f7 zXz*&-YZPiM(zv3@rfH#>tvOfof);E$_HOMhoVsP6~$k5BM$#9q9CnGJR zWTV+eSB!a$-HhvvcNl*((KbmnnP+mtRM^zlwB7WO>0dK*vm&!~W-rZE%oEJ#m|wRL zu?Vo}u{dGLYUyNIZ@I_vrn`pbx_JN&( zU4q>Ly9f4)_KEh3>>oKOJES-)b9nBk>6qoX#_^q#fm4ywR;TaIR?fA~2V9t4++Dg{ z&bbP?hPuvjz2~OnmhQIN?Ss3id$s!k4^|IvkBJ`FJ!L(UJy&{u@G|$R^*Z9s;~nfh z%lna!mQRt-E?*{JFW#Zr0@q3`VqAerz52zGb49Iu}6hP zEsOdZ?HWBb`e}@5Ok2#gSoPS7*pqQmaXE2&vOi6i}YMVMK^?90Y+N87>>9*;U(_d!TXH3g@lj)o}EAwNPN7nqT z@7ey@%d`LIgy*c!<;YFQ-I*tpmz{ScUoO8Q|6+l5L0iFtLaV~5g&&H%i+RO<^E+5NGCR(78h6g@{MVJzb*kH-ds_FOp5&fWy@tIrdjI#O^_}ZC>z_A)Z9?9J zYZL7!u9ze^scO>W$-a}fO;MQAHRa3H_^BtSnM|8MoojmO^anG1X6%@$GIPSrKeIAs zU7hVTd;J`lIh}L9&rO+oX`aKpb@OHCchCQ|AalWuh3*TtEmB)FZ86*8vc=Dqge^I~ z)MDw%Wm3z!m;GIyxBS71pcO|}ny*~BN@i96YNpktt6#2(S#x2n%i105bk{9hFSfpW z1H*>W4X-vPY`nI~d()xK7Ms^?QQb0UtMJyYZH(J0w|&^2vHii0$Q>7VdhI;4%X-(= z-Fmy1?@`<{d#~u;{(W5gTK4_lU$y`1fr0~X4yGS`d?^0V?ZXj=uN(?_nZ98v%e#ZsN3%f4bT-P1{?+w{zZUyxa2L;r*Ep5g(p@Ec*EWQ_p9~&&$7js@IkV6c~AjACGxR&|$QVqjomV3A=mXW%e0Ff=qUH87Q7 zvSDB|G&VIhHI`wrLl(D(iG%F{x78W^|AJaJ43NglY6b>o1_mZjx5WP;g9HQP{~Q0` zG4MI2g%GYT>=2{JMZ zGXB5Iz`~&L{|MtE1_lOpMi2lw7=&3^nVHxa8Q3{Exwsh_n3$MBk|0llBpDf)m|0la zz>)$COpMITOe{=n?941oY)r+BOw58T46KSmhK_-3!ih?SjUq-97qW|PbW%PTbn&6F zSkecTqNb0k&L+W=7Hvu{K4j{mK6&wGGx3m=lEarCai}$Oa!E+GOmTHvvL)!`fRyGz6X69T* z1|~sf7Lbcs1BDZn*a{mb8ZF%TLFC}YhssW(K}kg)ja5vXo5Usst1e33bcnt9lIbIt zX7P~893ZEvnYl`-r<8=6e_Fixu!iR4$DdoKEZKtUWVbMcqj9hqndzC=!hBOM_?*dCQGE39Tdm#hXJWGQ9pyGQjwj|VVDOKQ7s~wXb3x(; zN60+(75UHDby+-Sc+}dT{m)Qxpl`u4vF$U-Hnft5j1P(dGowy+U|tGHs)8|tiSAPD{HNY zDRSlZooYRQxuCLSMAq|nnI?OKv^)NCf8E|ODU|;v%X{BVE7N66oQ3$!ylu~Z-P=e#<~d;gl?}lP&$_O>~oy=Nsq)Ma&FBH79BHdL|Sy0 zp3eOKF+S$lsh1L&YV3~{dl?s=%-3zUJkrE?lU03&@}B0@c*c4hhe5*8SkH zD#=O8R(HuX{oW|cl^R*hAJzwa`IkKXui>Vxo0QKOI~=;JxY;93gS$I9E+PDFy>`XZ z3f4)UPtFA~C!VxzShlRs1Ea9vuwFK5G(o<%H=YU_O#JxY1RGEvXdWzwCDZIfQkI%4x+xpb~$ z*w(m%CteiYP4Q@FIsP?muF1jaBEH@~7PW4lCLP`C-4%25L~HU)yIbual?@FVdww0i zBC}@R+C`yj-{oGg5jt|OGf&`@)wa8z{zN9Rden#i@{KG!F`KLEiNP<=uNfc;*=0|;q?R#uHAHeQT)**5%_Ie`R3V|K+2I-&*rGQpX4Pw5TeSSR zPRrAyITnH8QH>Qng$K{@-VDf-k(%st?&HH4h5AdraXfubKDp^+RJ?n zeY&8eaq;dae-3>QliyTV8M1VP$Q{KqxBp*wdU08a;-%FRLavVW*7t z+M%M!2eOtPKKkd|pJKsZ6DG$i>~QZ=`yxKcWB-;buWq(aZt>dKA0XdpUU1>gqJ>|U zT&~;Fc=ck}n$!;K`E_5;)ND&qsb4MsIeMX>+s<`+tx^O&&kCF55_rsD>)q|jFFu}P zFt2?h9_72tKUe##(SeH%b!)12EbmiNk@E|)DKy-jb#}p*Cn+W^mpk(gA4q+sP?RYo z8=70H)_KJ2t#YJs=mn_-`Gpe?w^u)5{A&1koySR@&pY!}ea;?O)!*JBEwilHcq;Qt zpQYEPCT!l(?Bn@#!RD#6X9fpVd<}l!7FzyJab2f|{@RnQSGJdZln{Oxu!Vi%3kLS* zQyV;%G%a81`Re|iPUXlTQPl?%CLFx~ZRI~dpGRs+ll-o9?!MB{C+XE#E;5Z=|&dorfi+E zt<$!;Gx|!#KMCPSHty#SE4EbaU;O9k=@}>9O*(0NX8%sXg9;HxJ>>U1_TM@)DUdnw zbGFdt)Dq5o<&HO&{a#&?jX_smY2TX}vdH7EaVyKw9Hsdo>8+6uTAA;9{!aMMpz+IC z+jGghh*>Wlr=Cy@zp6XwkB(nX;2G79Y0BSrgs%&I5P5S`$cZ;w_v_#4SaUa}hfRoC zVbx;$D8UP9@7-7R87Nw_@u~UPl(~n5zT3F$-kn+xk$G%4=5LX{QT;3}wj{+t-v8rA zQ)iFlozITxeJR_pZ{nATGZ$LzBeqOlApazMSwd}*oxqNE1@AWHUJlbxvtz0cRvn(L zc+2CC-0WvIy?K`Z8Fo&dEPJT;&aSmr;v*jZZk1v6<+QVO+2GTt$(O@&^n&A|mXqh) zv?W!{JCwEN7Z)rs(UmDrUHwX1NINQQ`MTKtGo~I>4xLh(yydh(;HfV5PU+N2ok-@% zY1U6VH}Cv1r(?p*36t29+_TcsCL2n-AED`_b_5D~|F+x^2|{xi%u z(U;2eEx)iT!2RVh<N`=&vw~) z>0Mq*%ctkEl^jR4eU6{BYV7={zbyWv@1{Flv9JFoJ@a2J-m`Ggf-KoR?lspt3$AXO zxObuzZ|~Z#Z41>F+ichqvusNv=a(B3!+5ILPIIzPju-TrrSV#)I7U){Wzs$0Q=Oa( z-IbS$znL>};YpQzN5>tDO`qr~PZ5yy7PG0IJnga2tBGZIF4yKgx_9r~(^|=X&E&gI zSN_CoIF}-{;xbj;cRX_#l#H}m_jbH9<};YmYy5a;q&M4&QWZ|ot$93i z4zTTaSeNoIHD0N^o%*2++AX}ncHJlNj3I4w``YD3;fD5`AmJ}9>cq?%e{GT@qd}doPStvijkLF zP)5%}0S1?wv6`(?Ujz$}t<3RdWq)gM!mCJWml+2`ZpQXV-A19nIlD#IJ^6GZRfM%( z{P$J%lGJ^ji7z`;Wx6k(jNh_oo~4bbMxWyKzui2u^SEM*Cb*x~jqC{8s*>yV^_P)k z(XqX@VQR4<&x$j?Og&*_k*xG}q3mWUmbr&>T61DPaWpU8SpMsT)*1KELv9DAiD#C) zI;}3Ll)}QaI*KWL{rzdjoEN>5|9|P}uHMH{Q5SOh4o`glCGBveMDj|G_xr`a)^{Gf z9CPj|)AjnW%ZoE+ru0R2O%2{*TQ0fw&wU=B1Y7xj=jjh(JwAu@2YwB2mUBJHclMjJ z{3iRW$N5%tRPS56|HiTanG1fbJ7-Edc1jc~=j{#kZ}Y26R7$GrU;QioYJ%Y`_ElO} z*QwS8?sDt==n^3ud?(x>D`2{qoy*_&OGUn3CK*BgmAq%J8=X^84f8UtwcT*)iNCPa z?X=kZ#hKSWOxZm(#dG>3+12~E_vL=@XO%s&t-y$B*EQhRuin#Kgag{&KnT6xbQ2S9IIGRiWSGWiSh+;OgTsWQYR--n1W-Y%-(3?NAAdfxUgku>mu;2?7q?7&P*^cPa*pJ^6aRtOrHcDN5zZ_ZzVOP7Hb?-WQ>hj{n4DMrOe~(o^9pY>AWgJ z;qzDe_Lj*TutgLHZWmW^y_8(Oa*g2{vz)y29+ouMAK?@3@P93qY1WLt)F@&%wLCpp z>P~IqyZq2In-19>TJN{qh~;eapDP{TmsLgVzq+;QGQZn3=U47IWvlw8)dTC825jk(LdvjuBnQz6Kln^rQCvEg11eDuT)Ih+wf0f=VOi* zN7f3WodCJ57ZE>0J6we%cE_kxU3Cm4Fe!6ehKbsY~FhMz0XQ{7M-wnm3a~5y^ zuwhEWjfIOGU#;@;)%IjHGkxR7k*sh-TIITG(gRPE;A4|qUp9#JUio)kc={EK^?y%G zMlC(JGNJQp#>3SNT7NYiFC?7g;FRN@%pn{W6n$*gr$Qrk1-&ER60heZ_P3cu7Uui^ zzx?canRh8iPvgnxN!OQV`rOSjS*$92&StKk&K>LW1@&%+`L8}~5K`ueUHNdM%8zZ? zTceUH66Kt)9{n3`%$6suKGQWKW8;il8Q+X9G?c&G_n*N}Mv60B#Q%!K`5;S?eZK0` zmx_KU4lDi;GIv+nj?Dhv!wNAE6(4?#vb%ozq-yh)x+R8%YgqSPby)V;tYS-3Oh1qN zhx&b!yC-Y*d;gonboumVSxZLu0#Cg|3p*{_e`ZQB3)J7QzodKNj80Rgbmj7seA5Lp zyS-0$v`$*H_{hW=l8)?c&M$w>UgR2)<*D)NAkV1dVx?GDBI<11MqvJD+wRPPUxGZ&*!>jbS z@$A}o@PO5?rGM3SxG;JAXE6Vz<-6+6);W`7HhMmeigtT_vSQs8_HBuC?UzV>nRfEY zzM2dAOQ&9ZRK}$~_2uh@HxElS6crpx@!8*|8#LV|ZYt~9{noKg@pm@pT_{Q1%J9#U zOZZonnOo7S7mHJu`PSN8pXUE^j}HG5Ury$w+1GWBp6Yu#ozrIW%F?-Z)~1=gdQ1|x z7_^rBnE0s3(y+(~4|=ItJ&ynD+G1GWVPT4D2bKRi`<$EwWIdGft$ zU3sNRbd}W7Jw>KF0%aB%hQ>cletYA=K`WE{D>|P^@ci;!dvyN$RlOpv)6z|T+ZLU1 zY05mR5`4v8=L>uDsY|hU7VBTX;j{3Yjl-js{|sw(KU2%B+P~`A%LEtme`=CzZaJ6N zR$U0#lHS3zxFfdlyXAzmB>Odwo-`P3*>>yNE9o+^w=Yh(OQx!bvV76*@32x9c<23A zC--5h=Y{sU@^iM{Tv3#ia+^WYZ|2&_h!c9cO4DB5a6R}$;Y0B4^^Q{m{;A5C?n;;a zD0b+LjlRj89f#^ZxP=v+f60F5ltPiB`o2Be_HCZIEMPlB=&k*{*)u<$m$C^zR%_$K zXT+iW(kox@%mPACUuK=0a-_&9Cg#MhDHo*9+)r(I?Ruu3xm}g_Ku(``@4VGIi^MN;7u^x_@31vr z@ph)*A=NVEnJt9=Iy_NyxP7VhIk?x__qX*^Oj|`{6M~LfVUz z6t~MA_;SLXg{7zAtLLVu&KVt(UvihKx8{Z!9W$HQw4S%u&)Mwa>W7bR7S1+1zP0;+ z&a>@NdrrHC|6T02)$ZoGY*ROtN4K2U{AcLAncT2Yr8AFp+w5X%V{r#TnLOW`q8>|C zKG%JV^%C{ltZ#1@HxE2%BG{*|uB5SiDSP2GC*?}Pqa1&OVrKFkkiDq(?bE%Z$q`)! zNns9ldbW)6ZrMFbzAe0yi*wWUdSp|J&g@|^5)92-GUx8gg^X=a_2%eCs_I#-^H8mL zepIchrOTb*uE|4`{pri+61>hkKLOpGIhYbYlNVaDi+(8BcygAZLb1-|PhBUx*TlX`Vu@cJy@Y9=k>L~n-y&zzyaj*k z{Bb}4CRFWypTSX@Vu`l%x%uQe40Ofazx*wCnvSop0dvF3)H^8Lgejl zn@#SDYiBK9-eLCTZB|ORZ^WSsEuu1+QPnan%?0|iOaF#d#~Z|OXYv$ua(`Ujxz^as z;@iG;n-#w*uQ9by-YEWS?J391g0-T%R*6pw3;sC8w^iirE92TV(_8%awgd+LoPO%F zL+*o3yGj#8JkGK@{LH`pH%ETDdCIg9VePYewfbJuKG_Fpdq3KEoaMwSPKH@)CBFPj z@so;LGVRi{!j-P7A0m}{Ggh&(R=w>}7UFj+n#lH2vSOFcwa@LnQaHb4?yyJAY+MUysGy zf3pAPoH;sKv6p#sm`?$F?Txc8&JPH$o0)Nj(YWKQfyJ7F$uEO9 z@0oF+?PkC!JJtzh>+6?1(_5^wbo+;GkB%{Zc6VJ9=bjSgAQv@D^Zui_E8oxTk!n(O zFaGgmOWM(*`u|s-+O^(YVjnR@)KUDssFsJy<@}oS5*4l|>iJh5>gnm_`{LTW<@EBI zQD$WUKAzuvJzf=@6OuU2Q?dWX=7Sm^h5UKdrFf@IyH%p8TN`J;XMJCKrb2QL^VvgJ zq-UCEuF^}{GWFwOnVk2Rr@istW*WWTWOdLLo%gxRwr@*Hi=C99!CWnK>D6y1;YQ}} z?z{i~o;%!dEbQpI_t9O-^MhVo^;S>5{PA3tc)5N+nG4rV;itVkai?v!e)0X9C8x8j zY57LUtruVP1s^@dE4jIYOFpPzm+LM^-F>s;gH)B)e+xhU^2}Tx12;BB@S86Se|t}rl$bl4#ijYO&C;iDr5!Im zo9$h>tUEBV@LUlmhn-01qW+urO@H=Xd6w9#ygvU~2HR25R!NULJ;#moLXw1d-9zWy zx+B^drK0fR5og?du^-GzOmCgf7{=-^)j#ls>)4jH?m3fVZJvF1xv=oF@7{GgY;~=^ zTwTYT;naMRUA{A7R{g=WGW~$vPhNj^zH)TG>DRqx|Gu3&ckGshZmyExZI0_59@i5V zx~Kh)oZgdj*)HGd&#X`G(;r-BTUwftS1K9GZ`~@tQzc}P<_rJ+TL)4z1(*G2Ff;wF z{rb!0+>U9sGM{&})@M0sI{sTUtA6cN?>bK%G0O_8J5vIdbSiiD*2(7_Wr&S(RMT7{ zwd++dcSP>v*5tm;)&a#US1RkZIrgd7c4qhFGOzG7{P(2A;ZCco7JGYNq~z&YHC8^l zCa)uZ-f2(H=P4-;(t4x)jTKo*R z#rms^{#4B}oa8C*ne=P<^r`C0<`->tRgKM^^L~5I(UV(N@XqNdy0fJ0)A?n0H~C9; z#=M)y%wUphE$Df!Kfme?3zv}O?M$mT%MZ&q9c0*~(EIyp`d7uS)J&1PDpNYXtom}| z$CCFoGYXE)|9?#_*Gk=KDXWd}~Sc5`}P*`t(JlkRDztCb!)J^yk@ z;7LI5@ojEJ9c(|<6ee$$xw_?LY@ooeum#5K-EWKjPIR2}Z@b7NhGVwo|EB-ayYGFV zeBz=hnF2A~fv=rxJ@_@fxlA2zTsLszYOcb^M&c(0mt~oHcS_#w<~p`U!}C@4^lv$Dgz7JC&1%?q_@wsy zkgh)x>!dGF*#9o3>)PCvQy-kHTug8K(fZn55dVdL4a{!toJiht~All71L zdC^($Y=@kju;9x=)d@*+<3*Q8&7WX1_t{L>Gx`EMWqdYhcPv{dztwsFdDE5&&jU2% ze}>PCxl}5xn(G#^aO=dF8=XR~#iv%OW`(!i7yoG~=`rP)$(Q^3Kc{=`+srfl+V{ex zVU~#r;Sb;X-&}Ym(tYnq_MN=XvX}kZby{%IR%gNOK1XL1DMVa-Q|`O$*Sc3M4U?8v zHE;VVcy`Mtk1uzlt}YGP>8d`X!}4`}*4uAxu@B!o{`hX@&+|Tg-yMtP7p&-hrSoYA z&m@HvhPfZjf7);T9a$$aAdDnXm34UnW`n=sosed(D~0H;+BM zJGFB9St^Szbf~9eKK8d zezNrKIB(@W!V^RmuC=jboVg@Pdh*$IPq>wGO=TApAHN)Q$Sl#fW7*G;Ek7+PS}pBt zJRdq_1@B!m;jinNYi~oQ7+qx6f1A)aWoMt9+M0=7mr^A9FI3*fT{oefPQg z^`JzyOV2x=$8SqlsHB{;e6n`+FW;EL){9;_%KMu>u9+8{uOcnBmhE`5^W#}Rn}wX` z_SHCutb|QNh~&8uvk?3 z`b*20(qaSC7xM3B$|${A`tAHGuSt@geUh(iqrT;SUzhm6c*+6u!~YpXZclPr%PG2T zd491}bcperby^{7%TNE2botQx*5_!XOE%NLqjR<_DOwnDKgq`H@jT-r6}g2cyvw$n zUXjvss!nsU=?c-?8&5oFsd@kN?4>y?MXOgI%q|vb6Z$ks@~(ST4&#Ye1t%uecXlW* z`pp}4&%J!sspy&MDr>`2zu%XU^60qv>$;hfhxi7UleNXkC$vrpMKSen&Hl4i${sDQ?rhoazb3Zu@O3don3>uj~4Tn;kKi(>k8S z_9<1i@A*0Fnr7~^CP8cBh%R zz4KYR`DE#=+5SGEdJEdGYAs=sa$@?t-YG=i=f>ma#z{HyUTwbvKeLGa+Vg3TVQ5FD z1gps3$?@&#vtkTx9#@&>TKbIhQE_VS>bT=eXRVBQI)U}A7n3ocTIOSi=(DMX`fOq4 zi7(q1s`fkf^E8(WD5!nAWZTlZTyDw7E`i-zYpvwPPJRfu{mNyD(C$gOTborjZN0l? zVq3zoJ+4{7HB%P9Sa^1s%5p*5eG8Li%s38(&P|!f^!D&t#*e2>Hl3(1WATo8#J*yA z@V@!E%d3Q%ZLe&qns99D*YK>u1!tFR`Pla4*V2DpI*M~n1jy{~)$;bY48^*?YFyntxyZ>R6$q<8;+dixZ4JhwF0HJl1&{x!o7Ao|-Rn zKqlg8t@Dhm!cY4DFLXy_dsk@!*1ELSLhO-xlQi(8whZ0*aK?ds_t3WdMS zig+%pv@N(#Vp$|tA{1^5W}PC zzr`MS_D+7uRUTFS>VwN_rQ1tVLIj;6q~vzkD6fz)vazubaQSqM?U6v#sgp7vZbq&w zZ_zec{o!)m4&&qw837qL&EGWu;u-HE)PnOB*)(s}IGshD*OSFVoQ7MQXj>cA_pOjebN zZC|4PonTsXvvbW=k0Xpyd6yrsx!k_+pF#iK+tP}yo^KavUA*fly1UuqOyER$|4%=P zp8g9<3cGUu>a;tr&5oT*+Y#^jKr<^P(W^a3_{9^WHSK99cyHv-+^R9zNvoydi`&Ze zx7C&{H+*1Tq<-?ruWPIGO|}OvNq;STX5FRh2^~z0-+692}H~j{f(zSp4zsI<1d@qrGuUo-7}eOiVau= z>reh?(62E(EtI>-XhGYoUvd5~EhdIEA3u8Xx6Ahv4W160RVh*^zIh+Tk<>Yc#xj}3+pLAKFf;fHBBz=Qd zdM5I9*&~+xbH0Zq@7z}3(iL&dsfS13S>W}N;F{acGL0&-`)55qud#sRuKw;z3+Eln z(2L>V)am2ZC=zP;m3rc@cFKFX#OBlDOKqcE4>(i!} zJ$f2HCt;rAuGJa~Pn#UGQR?k~Y5HuZ$JF|OXoesAV3iPqqjqA9xrclRC3 zSYY$4+Qu_iwB9v$)l^LS~Qt6}PraSLJOju4P%9xBB&}Us>nc z)^2-sq~zz*!nd5E93RCFFBjkGp=a-V?|w(Jt9Zt~`Aek*I_zg`ct0h7Li3js=3Ncz zI_3Ck{L|mcm4ap0Ejr6#%r!Md zRAr*y>?bT5n~gSndRt^MIdE#?ql>$gUA2S)uTFoMy6%hR^qx15&g3=zS777&sIJxkWn1*&+Mlg8O;7NA3dgj-rN@`XIqPs|25gwgzU+aaMxAb7=;M@M5evS?`Wa)v@^Ut{1`YLj~oh9#RFs-U`{|Ua?Q+dojD;_iW#6)wsPWrenD2LS zT1QXT?cAtm3|Bl{nqNICvN7~{ukxx~=;eQgu$>7HWvA@OnxMVm?EUmCmE^-04_--< zxolhFuDgH1`h%SE9Ivv<&fImeSR8h-EzRhr_V$Z!au&{d^kmwX8#^X^W!@LsCGhZT zG4D=Q?c1yQcWs^*?R_$LZI`d=fsEL1iuNfzivo7cl0W*N!DE}7i(vYqy~k&K6aeAD9^>_D}oLOexz8ON!{OI@iP`O$_)b#KxET=kDjq=?qgNt>x4s zy91I-*dDiXE^%MB#3*_t!_Gtn>#(+#XLg*A8VuFeoPL!$yU*?K$-7$w-MUuTiT<{n z*)5YSp!{XWrHSe#Q9N6l!#TNr<(ibT{88y$J@s7R>)nPzld^rYWhQxXbS8)DE8dZs zH*?9=r%GwZwZ8sma6Nxmx`QV%f9=|>8P9qT_W!-Hs@(eevh2hu$rBVlPhWf5;E|~3 z?pL3)lq~+1ZEc-1rSx}*{BArftXjVXPfYBlr!P6e@W@v1{w(pp%(}p4pY06NouL7B*OxLp ziI{wC{h^(C^K^<&-F;%O7JKg}cjzQfm919;YKzWrt!C}bJbJvPAzWAObZCH2{-0&j zJ4MPjnR71kcr<$gPu~H#&|j9<4U;FWyED`2z%t8~Kc$17zIY{m;p}2pWv`8HvZ>m} z4dI=)AN{s}vnk+;%O{bD^PDm_p3h#;?YE=*bvd_UW&69uQ5=i8n2vE+|JaS%gV+K9TtO7Gt zE^A*}cl5AM`C6HrRhCi==l9(;)>qqHEZMt%?w@BX5?;-)+sYEYKI>eB$DF`_Cu~<3 zxQ7`Yzr^=;(&6+n^TNu~Y~wXL$pT_u9;-i0sxcN5*yL*|#Lzq0e#MPfViSvZ%uJlf z_n>6*t~vYJnu_ks_wLtuWL=u)uPL!ss8;Tkcje)b=5LYhpP6T8yjaXwXtbRti_^sI zWcBM`%`qp_S6bDkdR?5HYGeCZ=GD@Y>f6TzTw8OKBcH2?^<|1Yv1u$<(fjht&tK2u z<4?~XrHYzE>6t>lIz_P)4^EMoyzJ-HF1yt;pMTksVk*@Y|Eylu^zUbH*^r~6F3l@b ze=D=)T1@GbwZE$@mn`w_Kg0ja&u_h3pPkFSvh3^Bve1_wbNA(#{+h_(px(D%#*b~j zq^()7Y#7Kz0maR z!na11aN+Y$>s^UG^ngg@DH5)`}teHo9#!n{%xKpEZ>#Odv}l7x6ex!St_sEf)h$TQdjCOo>`GJ^={sg6QM#2Kc4&GzADDrgEz%XfR)w3 z(k*6_a$aWVPpwx%JG)`BKL~j9cCCTh@{Q{qv?(b5r|` z-kRJ}Dz}+8^GU6ct+nrtJy-m#cka6_pw)R(v@LjfFSGKQomQQBN|r2#p1Xb8x3Exd zd1czBlR389WfO`xgHJ8wKYVKc)^D42e1dzDat{Y@ytMXRer|xrq&^`{`%QQ2Wdu!k zL~=hnP@->@IsK$r|H?DluJ6j}+g7}lp&~n??LWg-skbwJb;u>JF5_u>u{-8-{`4(B zm(6?jBtA}5KCH<~zH5r;ve0gs&YY8z6l|`aEuU6y#=Y`>;QQq>J~!01`W;|=U~Dfh zl9C)NoAUHn&qtuQ<^JLP|5w|j0p>*uOymnpB#A2t#`+-%*%z> z1$bINZSi5qlw9;;`u3{1vu3wFmHf&jd+73ppFOAhrn$9;b*3=gRG(?HeB~?t*AX85 zGHX9}ObN8;3hcBjfAUz)y>p%9*`h?lyJ{0xo=#nR?7Wsi#&hR5mXgPBC$uOE2Z^1z z`6O`Gw8cwai8*=9Shr;T)}t8~zgK)b;oY{4=et{F8Ot@DSpB%|93EX>mll>w<}ot) zi(7r!aQX;?;+*=nFE6*8NZ;le#yh{saJ}O7k7xE6_A{ve?aa91@$pxs%CE0``{qhj zy)UqwwI=bzidWfFo}T5%SJeK#%y8mUPth-NF*~;k9MAihCESoy98~^y)ib-?Fy@{a z{XvP6%{y=ETj{Nq@w%Y6t2p$lh}3$S<3~BqFfo^G3fjA3ZVo1whpYZd zPMmN`X?bC?l$lep_ze9WOZRAP&kucSVDck6Z=SOL(X~@*nXhaAx>NZ;$o%C0D^Dlu z_8yyAYVx09Z$T*Ji~OpJ-TYsus^RciWkrFP?G~mi|-yxc(B~DY2@OmCU>Bmn{)i z-T2#~=a_+@cyj;Chk;f$vs=^VSv;A=arL2W2g|JQhY!{HwB(njv|ke1d&MWDDdo#q z_Ks!Ylf^vqg8KrW)J?H{{!-{)@7zsGgjTKT-Jn=gtS05jmt3&Z*nLjWTqpHQ?}aqj z*Ps7=G&#V3dt0o=hl{#N;R)(eb&Cs^xhxe7dwXN<(a`Xloz5A?xuP%>uD{u)2FmRJq$^W#+m|br{LlXDgrI+%LsxPXHcAUCE zyy%$ftoV1Q^Bisces=atPTX#<=OuDFpXvC*(=zdbVFB;XVoZ7vD<39MCeykjheBvXr}*>cUA%6%iNec72Y)4X*9UKSezlI zkrdyTw)o_kBIesFMx6bcN;_&FvWrj8V|{JgvPVTUQ+z>EIn&I-FOhp^+!r@@O*?ih zGtWy`P04}(=sREgbc4Pnk^#@^J10Jw(QlYp6%xoT-}R6qZGzCzRa>-uw#(H_f9KBP zZ}R%&{$-}WKNnV?JMPy~_wK5v!`HuyAJ43Ke5CxzG3S2#|9F=?4tn_KW<-fQryYRX1x9qx`nY($RXo?*BkyJ^88SgBO`y9$N>*lV$E${xy zV9Ugb(H(7P*3?fo*yNG()Iq-4@YDWTxnXRbD$|stzZY&~PpDILo}PTxX@-~B{xiav z<=;<#?R>l|!rxM9y@2R$;m0$6O|t&6q`|kybNQ!x3q^PC*j!re8Xve$`{cs7eY1W% zb>_Hr?(nN1j_?axeeco)^H#Pq`p6X#~Js0Deq&-=>FM7RO<(i4pSn|Bfu7okN@(bSE8IpWhgM%pnYhl%3o_cEIBi*DVgGV*{?D^sJ_HLbe_1l8$!HeDW z7HbH)%PHian)^B0S>-2xaLziLi-kW69Ucx*7Gem36X|O%BljT2yd$*re_!8aaJNDE!nHO%ZkU4qS-tVH( zww1+qHq1A=rQ7n7C&TxUP}&o|t8ZuAq37rqMX z&YPW|%*8TyO0mhEB3td5>6Zm$1S*zz#wNnwX`hS$euOtxUhj4my+Lmo6pGKj@9GZ^=87mS*!<-dj&DCaqe1T6vVxN#GTox>^5n#>C+=mbMg|IvLpPCtb7@>&2UlvE7#?9 zQCGhTrY#R|^2}MRvh?l#-|LotyOKXGY2vi!FT2i}#C0xty-WM{;)wfe@A}KJw(IXU zRyMq_WyWIt!`{N3UcYLxRdURqg_FsHl-sXFjF|_B}8uO25 z^;QLL+&x{IX>xY7#=4RxU5{?&cCMcJov-IF|K({(?Td@E_+GNUo36h4tJ<8SiU~ZE z>UVqGv8~aZ(4(_iQ957u*!(54mrZ>-dv?LLv?Y0+8&t|y9-J(8zkg}xq^DQjY}E*2 z-4?#DN4x6ec0sRAzj;-qHz^Z7+#-Pk4WQ`n`h0gMZ$hnR2GjRcpG}KEac@)usPt zOD_p1zS9`hWV@+n#)%y#-gTUsoS9Q9UF&!6o^*4)i9pqYrDn++-M{5*l2Ddpln<@i zf6mWyW^sIK=Ci#{PcpA}=<4Xk*sRG64f{Jaak`tOrT5FM8%59NdOvw<9m@j$;Nms0w!iD%y8cg;Gr#bkNx%b5`$F1*W_a^u~`1uw%7 zSznvwsaot()wn_iK5l8${?=dK@_MDm=k`$C>1%53S{+Yl@l7 z<)+*|y;5&>y4mtl8RlzF+m_E4OP9{!OMF$t6JRJ>X@6tquAFq0Bm3Jp{xj%CW{Y26 zRK42F;d#2wB(9q4kIss$p1Qj+dGXaPPujgZRVRx0db!NCc>Ar_K6BHJM)~S~OUd~v zhn{`ARvo{_XU@v2et(VLDY#CXrEtNk{>Y-@7fK(W#@U(3ZZbTXY4NftyXbUoq3)5Z zlaxFchd(mCwOE1e&B>cj<5I4w?3jP~`3K$`dXJC4KeHzB=!u{mrPi*zLdsK>-|iAP zd~D`qjUyHhZdJTqp0#abtzX0qXIYhJS0-$D!4_!jp6I(^lHkY6B9BL^vT-Hxfosp5 z5SwRbIekt~!JT>f#r^$VF4q-~yjSbXbq(0RG-K+Ea+b2+pQUBZIu>t{wf5b$Kl989 zrR{NHA5UG;dA!nc_Oc`9YO{>a?Ns{OzH{H+WX;g-%Pc!g6~njPY-Lspyyk5%azFd*y`J}w;R}srRFW0&A|6hN+%s1_wp7EBAOQ);+D9dA9Vg7#V zX|^~i`$Ij&y+75gs3Vx z2F#D0XQ^t6F{@M57N>xF3u=DaWl^1jmUw-&#(UjZYHuiNe zSyUCLlvd}Rc>Ac&I)3%6T^m<#mc8-&S>$DxEDJ-zbk8*6QSwP|@BxWv|fluFJRI%4u=UJ65#WOZc?O zq<3dr9kt5Uv*s@rQ7W~}`_JH}b@W5~oqy+!Kc6;#>6%(kxjA81Q}@j36MxVVHdTG) z?@b0bqBY-Ts(;SgnpN`CvcbdmmE)ba8%{6W?eeXXCv5uke%&()9FMDv4VOKy-4{8( z-!D~KW{%BF29v7QnN@4&m<#Xu*gj9sZFe^RNay;YR%hfS+ixMweze03`tjI9iQtjWvqX4-tgtd z!;(AvJvOkk-th{>{oJBTPuuq?Xb7%*;F;TZpAc#!_Gmde*^J|Nlah=b34liz1V}wl8(|WVJgSY-ZIHbVB1l!|cE5!v2#C?B7kAtNfYW zyE19B*(PVjq^Tkgcr)1JqQAVHnsDukOPa06mCWOUhQESu_v&Ox^|pRl;Q6(5+C&2e zzJ!4HcLZk^_Y1PrI{%1zY$xD&OJ()eUpMcmO-xw2{<&ItT2OL8)wJbr-rhE3`Rr7~ z)H(C9VB3`C1zB&N zAHAMr_vTrt)q1g*AoX90FHL^sbD0X*FF8}Q^y%VUo}6zNySFb|wZcUHslef!BX{?? z&Fi$CW01LGVaptMyM#Bf+mfe$xDpenJz2I-ecqRg{>w5?w&(t5hzpjO6y38zO{(Xc zulzz~2KT_I+)FcSR!?@=xSR8H$VVOTjbFkR3R;DHS-IlFi4(@1m3({G_?MUEDo@zr z&^3A6&pM5;w~}dd`n58h4yOLPVR+m>v|CQ+?3Jk>*5y5Jld<-^a$2YJ$@G)SJm$j3 z6GCo#?D0NkvDV>T(cCr1)YER6s02OTwxv(wDUZqwp%g#2uD#v$8fRi0!XCfOpSbY+ ztU{4%pJR@{bh-Y?BqZr@*8=H~@MZsQ#*3sH9!zilb7Mh@Lf}6Yx0YF7#MiTKDfAVZ ze8M=a;r+vXIf?zMzr6c3-B+0hf7-sjRP@fqEn-(?t|`@Be0BB1$sa;&Pi!?lCb{zE zTsw5dIbWn~Gkcroy*(2*yo))tr}$#qkH+d$hD8V=53O_q4|p8`{DlhBBq!bG72u&O>aG) zw#DUg_wA@fF&-9*4B<7Wu4XQrq|onK_%U^YNkqw`Y&)s^!?L%{9XE*HnzKK1v+s1q zmKC!n&*uD?e^F!CrfVj)QAQ!Zg!niOf2(YJwzIrl%Pd(7l&5@G*wQyN&-l?QZ4)eEJ$!)Q$n9`H;pCQ!Y-u(X;JKc(FUf#%` zwP(Tfs8unMR=58q2v=m;F8v|RKic=+$XuG#ZF1?oz@3u`Z%=)? zCUNv6+oENQ=K8lqF1q4w?t38XO0oe{|MC*`S*077MI5_UtWs_ynxg*bsl4JzSI1XI zQFr}Y1rML|yp$lx`RIw@ywK0e*^YOGCS08vF>8Xh!?LE?`4cW>FP*N~8xxqr?i z4da_897lUf8v}3dlsI**%Q~m}NvZ65j=xI(8D<@mV2#vF{nx1aVVZZO(^2M2-mF?0 zOTzoL!Y8b)Q=Tb1d%oUs$tmsZj1Si@?_6xzqq_ZL{l=`{r>at-l%j7O5!=M6lK#p& z$65Xs)6UuJE`NL^*uK0@ZBDR_%M`oLWw%@|9?UH2w@8%z?e2W^tYk7v7oYM!)md}> z<~MT)d_DDJQ=R>yr%vu2led44{Ccf_>G`D{e;L2-&ia)r`S(HI(ujWfTVZE%&5C=P zP8B{9nSAqXx#_Cn?N6Ec+uEnPmCktn$i<`9sB{vO+ODN6R?!Wya+b$iG5wm4;tGeLGXn1)-P_Eu97GYg4*CMXzOT+dtYf5$P ze<+k=v8H-@gr`jLu}w@zq{Lqa?vQ>`_=G+AODNl|$ zKI~sn>u1C9tjv4)hRZ_E#acoq4*V&3vSe2HvZSYHJ8nKHoF6Z2QCRe%`EzHi^QliZ zT4EIp(+un`O+9nc`^dr4ziKOf6>a>Twz=DXTgUcmX**j^yfRnXe|8qfpK5 zHx}>lTTqp;g{S_M`eDZXpX*z5|6h8(>2=seFNHdvvrR%{B8-~8{m(VIuTkL4EsTlw$xul-jurc|8!&+sPV`m80H zDt#|g_%l8k9}w8cwdStImF3FUO)X8?)jZ4Djb&VtPSxvu?bgmNyZAKX!CZkm#}%?T zLr?0)g)COIHO^dkwXx^zp8A_Rs^+MikiHfFCiwSyn~ZCdJo=7&?Ac{CRqKqFMUE%i z;&1ITC)zU~PxoYFcQuTeb#2e%eBPx?%GL!%-`E>w^4su)*-H6zQ>(v;r?Tvwcf9#) za9n!&mC%~$Pc^0D*GkU5Xg$wG*zJB&);iq*)lTze zQj<3Z$8P&oWbt#;d^PRorI){Yyi0KTs=g(4=91+%)fP=v;N$&PC$sJMETiN{eQ(_T zu79molJd;XTYJJ)Ib=ffn`Wo-+gkIq3wiv*vY+rqyUwj;-TG+N*7CrBOUx(xe!ufO z@?^7D=nf_WCi`puCJS(KZvD^jQu=ICMf2okyNWzQdvs@QmqGpO)5uMSoSM@tP893JJ6(M9*0k-4Ug$J~&_xNi*;(42I$!D1%PP4ncrr*O zWWS8>5g}ggDi?9HlsoZDQuF1stQBvCIsV>s<^HU{^Wsm>wCa_dzDo4)pKBJM8nS%+ zPt7{EIQ!}8z^b0@8lP1z?pVyEl6Ox|a%Q{XQAVk!xj_fia@TsjT>tM*uKK6O8B%lI ziQ4{DsIo-JE!<~aG0{iXj5&cDuh+!S2;Y9r^48n>6L zzcq@4$P2PB%iHqnP~F0q_#+o>%1_2F&QzItbN1uTZ&_Ro+9%{cxfV$-;4KuZ__oU- z%j{#8!@*=@m7^}X1`EPiD&}rZKQ7tT{wx3CO{>*ZO_{*X%BaE@&;QfXZN9{`1PoQeIIx8C@Yj{r+#Mec-*jJQh~nXenIuZwkAG=a(ef#!t9Qisg%uI~QNut{?A%2Vomf*Qwv$)79SaG*Iw{S)qr$KKv;V#RXLT%C zCjMg9b;o(vewj}*o%AV6B6&)&tH>)>{-d|GW=^m%J#?3Wk=3Hz|9bAeZI=#p$~kvOHFM8wo_yp)&EBWc(zi>ecujUq3r%0}AZWoy&HdYj_NQwZ>BY@T z3cSDAaLb;HTVBjFdYPR!#l>~GNSH}ht9|zIoX!c%vo(EqFMF(iXf=zwlKFPi5(8Vu zrTo8kH19k4Oz`u|mu3q-8w;#;5-9(8x<}`B#9Wry=fi)^T{lzmazgJ9gUFVaKEoet zt>)b@;+^qPK&QC!!S(el-&c!xf8FoclqhMxIGCD*(`Llj{m$=KmQqo?hx;?kLF;o+##(&H8j{@71;67Us!abZK&Ve8PCjqpq^o`{d4_ zKRo5cuUVUz70*qa7ro)yyREWb&)o%XN8ND}yW}NjxG^tYYG?A}%YWwC6zB5t*?hBa z`OmO1>*Va_qSIS$mU>IuS*_OD&c(js@Jf?A!W$Co6ZcR5R+)C1VVXq2iGKgjF`kW+ z!X)<3&_6PLQK&p~uFv%>qmO=vXLiXLE|Ky&xtaO!3QG?*S!v7Fr)$n;UAv^EVq{V9 z<;PL}wC^WnVuBx8E2+1rPn-V1ZKJ!W2Ma@UQSHl_1@rmUI***5wQs{|E#+e^2EUyb zSn7Pp7B&}mua&oqM;ul#<- z^N2^$lXFdS<${;=*DOhx-?p2pe0}Yv&8IFzPy6@knoG8PNQ_CU!sN8CoGY^$AG)5& zOjfwF|E0(mr>HDGXU^8V#DYz`Rt88+&~*O%dgg~IYYIMPrv< zRoLvBk5^7KS?pgmC%Jaglq*VE(F+WHIhA_v&5a0_$Xf0o=-AG%+r`uN=#xcvZ)gNa zI*6J|P8TSuN~u2^7rkWGm#7wh^{c^+QTA)5sOSeUn3~>Lc_!oK(~ggBKa|cN5xS|c z?MkI~)kmu{5|aD0xXRc4{j8IveCNpF6k{?AbPDqYTVTl48xMTKAOvwzPjczu6bIRE>4`8V~C z&$OG&`@H7Pj{2gnU+u2ndVl<%>EAViPb~j>tGG|vS(H`u_-pxkIg|B@-(G*LSvgxq zK4$OPqNg9z#Nu4)KH-bM?yr8iod3d}TKTQ}SHAxD`k&FS`A*M$zo2MT>{m<}^WuxAn{qpaptH)nBWi$Ewt7$fS zql&Yt?$r3-eEeJf{jR4IUOY|y_jcC3+7&Nfg-`tVdcEJ*)9gnDo*b=t`})_nJNvzA zqyOIiD(~L^=j-Etlm9a)89m$ir(XWejIUSi_WZH<71vbwJZ}Hf&wt z-|nn=+pj7=JT^bl=HJSf#ZOP~xBc;>;P1VZ$G`j^FaM}sCz7`{{=$X7{qOm2FXwuD z{m=fVf9I@skI(-y9_j)t3NdV?SGSY+qowG_}6;Y zg8vNjUT?MM|2*^hOzq(7Z+-`x&Dxh+RmNKGwf_9K)&7f39?zZ^TxtJ!%KWr__w&t+ z|GlvI`0IkzbbUXqYqM)t1%J42sCxE<%;dGq{nx&KS?zy&z5b%vX>MBo`hQ+~{Pf2% zbNM9ydG3KHHZ}#8#{2nAdGA&D^8Q}q$UnX(>*o81c@?~{J6qr97w`YaJEcd}_bN*3|(Wlb;!GEvo{`${Q z>HF*7d4B#|XExWwAN_Z{bwyE{O%G|KvYc?6|%0{;c5a zf1l2O`cu1UW-;%=|2H8g0jh!y!ebCn;j)qV#k1!u^WF=YXPGrQ{y&u0iSP|zu+rDh zE7nT{odT$roS&;-kyxN_sAr(hU}IlVkeHmETB4AYnx2_wtMq>NekFy>6kDZmQ(pt$ z0_W6>OpmIf)Zi+=kmRcDWXlvKdpjr0ZP@rVTrC?K(l4cd;;s&*=C?(BS3F&a{a$~*xqI7*jOG`_A10#JSBi*8u zG~MFLypqHU-MnIDkP#3wTvCgZi!uwqr%{8A6y5KFDd zOalj5VrhjwvW|+}0_-|qVT`P}AOm__A%uOvy)GbOZ*DX#h zDap)BFGgriEUmB#PA$qz%<(JDO-e1YRWdX*H!wFaH8(H;n+{UolbToTnU|Jtt7K@Q zZ>V5sY^ralV4!aR!YGPtm0aC)gAFZo4UJ86a~0C`jrB}*P4&zaJcCixdAistnHs`{ zJaZG%Q(^WSz=a(P3X1Y8GIJA4Qr+^CON(7Hi%Syol2dJ!EX<7c4Gj<~-EtC(GeF12 zr{)zWf+EjW$v_`rzFTHdZh2x+s;!cto{=6zydt;2$~QkHGp*7ku_V=2$;iOaP}jgz z*U&J;$iT|L%*xPE+rY>QY6(cSb5UwyNh+#p1Je*gV=Ge-(nC@jln4rDTO~*k!Zqg? zh2-bwz|uS7R8Sw#dH6;7`MC*(#Yqtpy1N6y+zU78k?iO!dscF#?hc&&VuEbxO>E#DZh7LU2ZY30yWL zHMbzOD6ymz6w;=~(C`513(3qYu~pJGG={5nttiMZ1}ijx1sq6Wa7JQEetEI2k||uJ z6Zp1(ywu`iTP1B%NSuR|I_Kw=6eSje%r!=c27|1JB>}h@!5N7~1rQ^Q5GMPS=4R%B zyb_$7pI?%ZnU`*>gfPiDKPSJ)FF&(5H7GTuG#QerkaRm|6y@h8mSiS7CZ!e?fvpTe z(T^$bge)JHnVy$gQj+SJn_mhF9fZx0K!Ai9LNq8f#iKM8*@U3f6ztx0FG@|#LsJYE z!>-&Zr!*B!HAo1%Vzc8hj|h0=^o*noo}qD@1Xn`PFnA?`DBuDTixP8FONug+Ar3A^ zb_YVzC9xi&%C5f3iD7HgoTvO6heG`kb(W&>P01|HRe-fD;L4oAEof*^ zz?yHtC5d?{iA5>cRk>uQr-IrhCWdZi7RF}gE{?`d#)eJ?=8jHg#)d8yhAsxKmL^6n zaNVHrgxV0CT2fkIs{|5(-qTYISLTse91Ly5+bV?=l_LD&kys2$3${wAUUbYUN=;0u zbSx;y$plrPU_ExA{)`PMjNl;v7J_twf>R42JP0=@)6PIg!N5iz)FH~rM3XW$(orxn z!Xas9qN8AHhC|ZO$U;ZK(8vOpw55@bf}tfY-A1OSItoUnrl`6hJeUV;^f9~$QGnFV z1N9!kJ_~Yjv*WVS2X{(A9aN}4K^;FDVo*fT(0GW^qn1Fzfk<*RxQGlWh_cb(f`kK+ zqqrn9U2O`PQ;36`hAj(FA3la`QlB2;zWI#cbjRqGa9Ec=GgNw+3f+!me zE=V{KNsa~=kpTr!HX2-9h?(!yycAodawU7a|F;>O8JL-vK!}-{nT45|g_VPqm4$_s zi=CZ~gNKWUhntI=o0m^WfR|5@kDFUSOh8arL{wCihhJPmOhiIRL{tQ12qQBK3o8pN zCo3zb2roCU2+8380R}-125$y$q}%b1Fvu`4Ff)Q~%mYvMg9uhOb`}l>MrNk}M;HtQ z7?_wqx8E@{GqW;+F2`eJVrF3#6k=dgWEVCRQF0VD3RHGV$?+OS#56l2TN2c ze(#yvYrw*XFGnPVZCm5M7T%tDQ*U)SoHmxJ?UmefA!=h$*)*Qo{EUy2@AUfk zo@Fv}-@mirkwx$1&6}T0n0=0E)3)G;lbO=4-w)z>uU;MAU0CkpyQ4p1wsgQ9(N}`$ zuY40{zs`1jcT#cg;&8=@Jc-H$784H4{d8UZhQj*=Pmk=H;Wq7yxUt$J{UybY4U2#N zJet3?{O{3-_18~jtvdhyc;aGi;gvE1b2o3&+Q`8Ah_7k#rFTXJ&v?%+j#REcl)31V zfNIK%lIQ+eVH?x#m)x0^-4?UcQ_7QPVu98rBeQPxH*t3CyBAn8*!&6h5;|4CL@)Q! z?fbz`pF47Jv3lO9lQR9ax%`NU6z2KyOh3BqyGv+$wFzjSgRT7oc%Zd|S6Rfu~ zQK6eR)^&Rv-rR9`$BUqVAQ53EJ(ib3LM$i4mNf4D6JB$A;Uvy8jw*K?U+MU@ zu`b#ewP)_eiDFW3%5I&lR;w;_eZRNr(yHR%({Ia+EIRBOg4XW+VVfAG(!pfXc=C6I zPj&D+b=^}-nzvtXvRH7kdt=%)tu11ctiu+$t=OO>aWd%en~D1_NtWz!Q2x$8mHR4- z9@nSkM$2q}MSr-iYU#H4^|hJxH@@Y6yBGS}w`hs&V%E&mrd_NLnOARV?Ma@@yZG<% zf3HeRAJ4IxF!g)CvRS?7PPzG61qMr16J(Y!<|erPXNXw3-#_WZ_qfu6DfN&1C#-)L z(zi!vV~bz##-szk*YI6`XJ^7bpT+ET?{=d)8N1U$~K?TYJYdVB_QB4@w(P zrzBnb{UphIr`3v!D$^amEe_mj^g5wPrFO+`^|nUo7cWa44=hm;$VvO8pLp_5H z-${$r{eA6iGv9B$xqH)!wlhUXTaI7K-}Oqgn*U58Bi|3^vy6 z);UcvJZfg9?I&WsXR}fZqN6WtnH`;Z>DEP0PJ^{IuXf+Rx$Eki z<58wj7u{>73BHbrew)z1An7&5=GcFRrYimHN0Am^)%hAV?=Tvx3C-9jeMdCy9>bCX z$9pfeqB`e!KFBtg`zXTpJ+GY4EHGW?YKFhyRE3phe^>qE(x0*K(h&>0nhDDf-f#Ks z&9-e%{$j0bDF+#j?%(3M(@a3ge2?rJr$QC8lOLAfzA~|X*6($;i<{WjMz{-b1|2E3 zdaK^rGw=R32d=&Yy+%!L{~6Sm%{^f8NGe!&Lb6h4gQvn9Jsln2la0ky5A~ES`2-wy zbY3XEe9mqP8{hMd{540L_J$V5$E#mHX;L29!eCg!DjB(B<)=L!R(8@$F1C6&H2LuN zcP*NlVkqzbXxH(-X1~hqvmEc;^x4X>aYOo|uBrJeX6Cx*@n=3wmnwg@1)tCi+_o=$)`EMY5~*n(`!5t|Pc_z_`Bp~t z&b_+1*&)*EdTOl_YmRMuUgs0*c`;$*--Vshx(dt(ax-Qh+V=J65}&_6KCL-)WsAnt zQjz!f_RUH8Yw~suU(^>7>w5EP6PK*+Zo0YailFd>f+K&|oO@WIs4!LiX$|K$p($sk z@~_`o#2~->)U=`*FZ8dh&F~iDnBkk7wCS3os>R1iO8aEHrd`+lGdJ6Popjo%JBIjo7X9+g73#=_UtS4su(9~ko_GnVlOTHfc-fV4T-S=IW+`G5PZMms# z&arP{?UfQK*3fOse<=TM@8vBy7`=ANrcbF^VMQSfDjEW;ElpK!TR$gqPu;R+Wk<_P zrQfsfwO?Nv@NDhUm?;~crp_^#5H{OuR?sRgeWf?`J2nO`zU04Hf9BVwhLEQAAMU_vv=)MYtJcfb*{e*{XKc}>*r@Z|F)irnB)~4G~so&va2M& z(8e3QNBVpF*4bQ+SmW^5sDsPE)4xUb>;gvXD8DIe^Mifn{WJe}2&MvVDA;PWszMoj%X=R)J-ar1<3hN=KL6=3UA1M|k>M8UB(*#!U4l zYx%e(XD|u5Kl`%w)t&FvR_lcB+{wLBwO-}xn+d1hZ?(IA{MJ3U{eR~FeI+K$7aQog zI%17Ou0q#D{?NZx?|i<@eRyZz{F}2bZt3@%^!yUjrUMJCZ#eS5&EM*%c;ka|oujzW z`pc&|Co{j^nl`6WPv5FVO8(B?pXK|l+ZFFco_eV>IpjY>Z{MPSS6#ald;%QLmJ2C{ z=|oH`l0T_eBD7s5^gxr_;&tCIXR0fept5_Ocyk?S$ z=?vLp?bE&-jab)^X5-2J@oJ5<<}sCqJE>Q0R939hKOp465I04CHQ(;Jxo5v`*zY+* zSZ&|-P1Ch+m9*7tlTu)e3b@_J+9SZ!5{m&5jU`>OA zX7j>H4u(d4O_x|((?1GL+rwd}Im7t#x_ejW+s{0jTy**7I_+mhVq)Txj`;7mCnUl0 zWOu^+Oe<-IpC9+_d8?DGvy0haxhR(w`)}9Y_ZznDxpgInS@pJsR}dpZ{j_VJug}%s zeREak=>M}l>^;!m(OYEYOrUX#IWV_$EfOH`MWp0X5#ac=QUCt)Pw7ds(yzyK8jI^ z_IC`-kF$QYy)3zKa`NW;F)st7&Tz)xQt(tcaj<>DlBu=JeikO&x~^n#$n?&NXZN~0 z3#=wi&+73HSK3jn_S(#8(XpQFtJ=#tJ&knw7!vk{miT|ykYhWZA}Z>>a3l#$#H{% z5A)KUcXAD@gimRBsvHmAYEYJ&_BKZKXa3{2oO%u~gB4Xf!f(#_^n35#`MIaw`+r`_ z{Nr_a+Y#l>A66Io&a@M76q+i?W-JfAwqzZi_;lgg`u9Os)?Yi3X)t-q>`W#1=zc}(%L^x+a?6(O_pAKR z;I?IZ;pquWv)(2^lxZ( zN%FmYC$=%|Y3IdEH-2G}$wEAHybYKeq~ed8sh{Re=~H<;Crt4|Qf^(T{nx0Et$vIf z4yT3G7rroI+VDO1-^DNNm#a5CEckBp)?o`twub-Q}G* z&wAGMM`d_>bIEZo`@sBWQpxH?HWhyYcvfShPK)8p86^Gqs#K`z2nZYPbL+m*o27so?!zd$%Y4_(oTj?8q^;4)@+%l;y7jXRKrhwqVktF%QZD0c_YTK zn#qQ5Z!u5X9oYvVe4%Q(OKzXIc;V3$RTdw&3AR&HKsSY3E1*z`_Vq5i|P7lZC9umHE9aT(=)a%g#9$GUv4Qrz+lt{|sqg>)*-r8FT*H za_x-R^VVy3V`7t+a?CdD<^Oy0&%EA;j^S1f7E(bDD+}e8eBN7d{@3KMUUJWO`tv+m zs&RH<)^E4k9nS*FHg5aRVEw`2=7-XKD;_j;o@1EbHNQtuS;J(8*3;dyJk}>0Uhpov z(yW-T*)R9$+&$0E$tMCNR%$Gn+u!>`w7c=rQXPh1E%oy&pZArlw7nJS6*S4`MpcP) z<6h3SW!FoeFIXC2v22sqrahOZ_a+AL^dKwjJ>p6wPDdth+IXtRq(=0oNkL_U zmKf8$lxu-|q5 z*2eBtzL&`=eM?NCkJz=2u*=MGrr&=oOuRH<&)Zcs`@ZTgy=ObSV>z$qeCec$E7hA0 zGlr(yMKq`|RH}cl|4=Hpbcq7%HqTG&&)hG~{m9FIwlu%=>dB`COAC88#dYqzkvu)c zy1}V`Zhm@lo%!`w{M(kQlqdaXkjnq|;NFI{7Anu}&+QJ{b-4UW%^%s#Ev`E|R=K~H zOkFR{9n>a&v1f5xz|x9;_jF3^*v>z>yZhFEhINWpx$ozw0

Er=pXlpSAgD$h$Y$@|<^YUsd_@wm^Rz`OALKDU+#&QQm@tEWlDE2Ved+<$oHgk+oI zU;j#Za%O8Sy%N1|X8o&5mAPFG=llxnVqFXSaIhlKkxD7e@oU)o8Vb`v1E6O z%D2kg_J0}c`JUPDn#%P%Ij{Iv*@dj{J%%MRB0)FBwCz-k+fr|_us@zSkI&X2)9GjJ z)J2!3#tH>ypWgh}t7?|Tbrx-n{|t4-KQ7*4sAT3kbnJD4bPQBffoSFb9q?QOr?BfwvOtn1o`cT!(F!g)FG#{OQFyXAt< zU45;i0ZWeVTgfeWOgba?fP9j>&0}|yigNc_AML%X7g$YSZ=;(1wQpYVmF~b`=16(z zRY?xJrDlFF*0|&8_Iu+?>$YpQRwBH!(l1JG;hvFY_Mz#+=H*qNkGyVp@$mAdqtQ?I ze26`3b?Dp8rYC}+#{aTb_VyoN zt&KOG($+JdJtf>KrAo@ms-stDjYP-^m-MPBH_z{5JZ9v7Z0=J3O?lljdlw(psMDUU z-fHV^ux$C-U(v;#QdK3Z4(q&cJz|t|+I@H8;e@8@@^g*e-3!BZ?}$p@cc)4DjEvyk zjmjl%FV%fkx6WUfHzjP>iFW}9r9!k#8T{|9S$?T9_LUo>#d!;<-Lt)BH)o~ZcvZ7Y zvuxTXzULoSOqG+k6P1?L9V_K?ZyB#p^LhL4QPtZYZY%iyY|7O$Yo~ux^O}{NGgY*7 z!kR)OpVsMTeGHB?_Z3h4l~7Q;es1`WnG5dnW+=J>yU-oIwU6q_Z zg`HMnVewCL4}7zHF8AZu-uZ{QwKnfalX3jG@ynBK6<%j^xthY)ChWX)P<|#yXUbG( zkB=)w)sr24(sfn_MgG~r{?23x2AHp zUD#9iO=`#T60bymU153Mhb`*!%2pguW>(p#@ZfQ#+|BD<>yKSBwLUjli1YmZO=o(; zi*nsBhev2CuWYiImZ|x9SK&5^6At$?Pd?W(Pu?NBrCIyMN{fsmLhApLmzzfPsF_T= z|L)4)zn+<9okB~mFmmMwto|t({PyPU=U($W!*bnC*I6Z3PE3{yDiaq}j1J_=zwzU+ zMb~>(6UN)8x-_m{4OY+N`%s;{U)gta&!fXqra1-)$MjNpz~cWaSU+r%YjyoEOB z2i-pPoaH}*;eiL$eYZZ{UHr;mOOJ%4%KPN~%T$9>Vug8qT$KdgD9%{Nv-;q%f&+7y zZpwbBl()Js+Uu2@I8)Zq=6v)|zt^p2r%pd)HS2bN$2IFz(~>JD!67SGw~60U@wjsG z6^qQ>)f z;g6@K9XNTuxN&}Ot>ro0sE`|4o?i946IZ`7zB1L^YogX=Paln_u&7d<(B>)Zne`5g z=M~Etd*+HHd3x_TUMBQj7i_k_TkH2%{4Ux2-XO%$*H>qghCY+e8g}WL zV=AKDC*n9IZC>B~uqV2rtLkL4`idwS+cK_lanFoB1*>-Zv&tAwnY89j<)2M#Ws^>= zViPT}``kF~?FlJ)$zxqHy6&4TUaQ~Txm0`44)KM*ey>gv`=zb3PEK>%sgK*7l^#ru zUA}?m$;WrL2d?)$uDEnd{+PUmLbts4r=3TN4*7?dG_Cg4P5E-L%vsb|#Ne`r&(hGs z9pb^wuYMQ!Z&$ZqN#g2VzB(>CKZfzTV8waYSa+F8I|6=MUrp^*pPAgdq(5hN_y&9F zO?N-v$PBoCb?u6699!JiN9QewS@|kY&0=+&r$e7t(I=%I(bVFt)93qDJSjdY<#Fb_ z<5Lxv=-q`cA0}^VO7ePT^(5kYs!Fv4yIk7aJD=Yie*Pe9U258lQnT|x>1PWj8FZ|f z;25yw%2%W7S55SmC#GebPFUyhUGfC?9saqQmrK3YGR%284w_=M}XUoZ*yS?uEYOd)d5KIvHl1P?qIA`)5I-^D6dTGD%6H+uG*M z`dqPa<=kfz0t1a$QW*>n_HzGcFbFuncW3hZCDBLg4Gy>5exbtnvUXiV{0>hIo!zhW z)<5Al@|qfYl8)XKD^kTUtnCsqnQ;M|crC+YJ!yXBWe+Rg1&M816f@>K8F zjjF6lC!b#So#Z%S+ck#YZy)wcC^jhX+ci~vOIge39nbUcJ{9fjJ|(t%*&~q+TWwvg z9=L3>KG-C|=|s!~N&m6~$4~rulBLC#*^qjPV`rz3^7)BJ7ETbqve)04hf~&7(paDO zS?&Fvcb0EIuQ|0xbH!hmx!dOMT+}vWQ?94zw&!I_Cs`^^T$s9YW$&|4zDcVEUNm3X zH-~WoBWs%@yL9QQF20;e9D5ok7iTsKxPI$b4Y!>6r+Sm##f(MMo(DuGwss$wUGQpy z0ZVe?31#K`JC!Z2`C3hRWwSj*P-;n4(b2_9FAMTgSreCK%X$au9NMei73Hb9@`?3@ zpO!MLC+#9b6AaJQnJzfCp&`Fsr}N+~of^YTm$r@;Sbym*VpcUlsM^C5$|MeRo?s{(-N^APHXqrM!0p% zxO%5ua9#oD-Tt~?o?qhsbWNS3!<;Vt2ug>Om>925ncki$JaZ|9xxDJpq*8+W{xmz>bkmInr9f;bC-O#nPApy?tA5^+NDLeJ0^BKx0$`?q{=PPwQa3oOIK`b znGhQFTB=Z|VT<$GFzMUbc{figv-}Zq-?r^I-?5HT1AmLDLC=}fPHj=;)#zEfsp~fP zg^rgCS4=W|$?!nC!HD5r;fa&^O{LFQ?_0fkf``e0`}Waw7t=$}y^5~o3iGv-!k4Alf12Q`wovkE;Az5UfEK> z8JaoawBqv4IQPsuVnNFp8Z7@Le=3<9pxNkhbM4L}_jB9KZ>;0Hb|^7)*`hhOQWsBt zwOZqq|74L>vm0_gcm^3xa!UTspwpXl<&kTGX2H3u_W3+#=F~AwFLy7w>3t=<<8^wU z#Us{b6ScT)sxSQ9?NjZ~YV_vxoc|1Bre!`|29pHqAw$?&}F!8dok?mx*5+Z`O+z`}9#=Y+abM}%@K<8|APhonq> zyrju(;`b$PF0ltY)VUl^TB`h>>t1F;^GFC^N;TR99|r2*08K?TdHXh8{^|v z)!;3)Z_cc#x8zzpzn4Kac7{#o=lw6Vx@Rw+bmq(Tbqm^*l=~(#u?DameE#;ppInP$ zU9bB18D!^w@83H0>;YBPNe=@)#>_Z#)8ymiJ~nSJ&g178B>(WbXFNLAl>1vPSkTaB zx~!+W{2SS6fqT4;Z9UWE#^d#1onMi|dFBmoSGSpj<{IcIom#qZ=>pbeUsmP6u(nB^ zv-<7?gL}2k3J?C7oL*_b)?hi`T4nC%`7F(A61=)zFPX%9e&@NO`Zfo)<|A7|R|l@& z(NObsi&BGawtqdD_RG;K?xg{i2P%38qpECFwPD|4a$_x3WDz zeM;cPxltOKUIxWeZwB42{kv_wd~d1^qxTkh0|S0%t@<^K-d#10(b=x`sxxKMO6Jzd zh0;#DL=VUmMD9QHa$4uIM`iyRB7fhN?VKwjcv9xf3CUiUJM;X1^sf1IA+P0GuWSAP Fn*eBOF_QoQ literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/30.jpg b/app/assets/images/avatars/30.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b2012bb13e0d576ace088ffec6011537274fbd4 GIT binary patch literal 9242 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 RcUWg{*)q{dS7Ouun*e?g7C!(0 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/31.jpg b/app/assets/images/avatars/31.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fd53318f763717860a8c34d7492f50861ea79ed GIT binary patch literal 2145 zcmex=ovIz$!vMUve z7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyoA)#U6 z5s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$K>lK6 zU=!0ld(M2vX6_bamA3%$XNgyZcfPMTeE73GxkvBJdES@76|dCz}sx!_%k1G>?{Q~S<&Yb&4Mh7j|KEjY9^YKdQ+RDbuyDV>8KHRa5>sgDm?Ss(5EPkx%ewCttTc`hIJ6K>^sPo$o#_dECE;as~F zyJf=O?AP(}-=X{0RW#06GkyXabDvdU%y&2S#rGUVdME9kDZQBI-_+;xY&PxqG^==b zrb5Yq;QONQ)~gt=KQFc6tI|$+i66G6Yjvj`OKFPRF}TUldaj@{WX62;>AMz&y2%z#hxFkliaxNR{v8sG0*1I(Ek0) zd}I5MT)c6J_f3%3Ipck%C+rSz9Xp*?8u_j-JL0hVlE$y|H);~Y`-TRY@sZ^UQ)vI&>Uo$Z|$Z?r^NXWvZb ztwCGgbY;b?o#!iA7PR~_`|H^E%}d-jm&^_QP-UH9@MT?^thilF?QeF58o~( z-(BJJ$-|wIlOZtXG_U%FrzI(e9Y4Bm`5^I5RnVw!O=0A&`#nJqkBI4<XyI?iCYH+3W}#n9C&%Q*eLR(44c62*tTnr=k2*3qiLC0eC@E4Y3#M9Cl+^ox^X+p ze6#MBGoC#s4{JQn<8?0=n38+3>!yRnNfqXIBB67&{XO3=>3ht`TyVzjd)2@!r4EeBWH6Qyrt>wOJr?u^9mnwRiDk~h&cF0~idR}zrJSUdMHl}&aOuKWX z&ih?@oVL|C$$9tp{yDYU=hQFswm5n3G>>^+DfxT<->Qq7KN|bzO^oqd6ky@{n9C}x zc)5mNn!9$%yM9mes+#`aM|x*pSz&5_`$3=m-M0)?;nQL(rZ^wbh;4uR^Qy)k=M{I4 zYnwEgvNHyJa)0c3E--xJ`9O_hZ@%05FaH_TR%8`U z*VeGNv^@Sawlgb^E6+5v>wTh$;`8kiMHcE4>b8o$TWRB{B)~576k4SU3Y!WiMn*Mpd#dzBTs_=q%;0&$;~?|I^Jp8weOq`LpycKxpvA`|7#8}9pgd+wdd$Ct+>-&%1n zSNq>Thj>etbT09% zo_YMiKSO`$s%)F#qR1%ey!-LA{LizNo2}+CSKOe)z@ixb^tkW-^RpfwbDpYpPNt?Z zBrjy=B*_?^juWddhHh|w?iv$mQt24p7jn$<<_@{N7K?TY?GHZpEY|OwdZxtfjSQR& z5348l2R4T4Po21=XX;N5=8U5v;fr<|ujc>bG4u0*nx#{vvrBoby3X&&e77KVR=_3p zTPnBD+48Ry3HSEQslFPt(MwiOSbO)fSkDu@tqHajU)QdGb5ku)M);?zpi@G@&gcC# zQX0#*_+^Oy+2(dzJ3l30$*&38!eJF_-#yOXteF1ulSEJB-;6~Yj@L8VEw@Yjpq5~_ b>gbIrVFzzj+@80utxIFQYEC7W#{ZiDD`>dr literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/32.jpg b/app/assets/images/avatars/32.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1903fb73b691b94559a6a49f1a93b5e80bbbe4cc GIT binary patch literal 1674 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 O^F`y>#m)BrZvp@o@DEl1 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/56.jpg b/app/assets/images/avatars/56.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8ce39f4db8e37cf22a7152be3ca3cdcf8b421bf GIT binary patch literal 3887 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 E0B;oVt^fc4 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/57.jpg b/app/assets/images/avatars/57.jpg new file mode 100644 index 0000000000000000000000000000000000000000..becf5faf2ddbe6de5ccfd10c56a2ec38877fe03e GIT binary patch literal 4329 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 FCIJ0};!ywq literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/58.jpg b/app/assets/images/avatars/58.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a244807eb88de465d463e05aa766568c7744127e GIT binary patch literal 2387 zcmex=9G120;!6HwHImMkNL&K}Kdl#{WkcWEmJ3S(q6a84!S#jh%yug_9X1Z6?6L z#K_FV!pzRZ!VXr#$i&RTD#*abE~IEE>=?))BC3>F*l09SS;c9gm~qg?gBL&kKf)l* z$iT$JjBF|k8!I~_6EnyEBMfSS3`|UnEKE#{tY9M<7#NutK&C1h3JE&~Dv1~sHZJ^s zi-Cukk%38&S&+e=VdL%fP1RCfjPGWv=l?hqYOlIU?_RBC$<-YN)fvtLAIeby9Zvay3x+;mOk%sl2tawq8=JqE3i;JZ+g5$;iX;S7ky? zhg9IhZ%3rJWiDHl`M6cat;z88Bg0S66qP zKYhMjv}&Dq>$30Oib)@}ca^+j7AX97sDJ0LmuIz1YSt8=o-@H_%Zb}Udu*KUOuM!6 z%v)XKAA!OXIy`dp7o6_D^WyZ3-fcf8d|8-u{FT$5knM-PgI#&_ANp6#IDBHkgiEa| zmS0W;+3mQJ95#FQqbb`wUQFxKm?-^7$?2ZfyytTJZ-+^jes)Y%Y5gd8fMtcPo4e!d z`+=o?pO-C~nepn-(SQe^G!(lYpWOJ%|Gr05SIdsZ&pLahj&EwPTU2^b?xaKL5?*5_ z%Z^v~W3pHt?dN>nLUNu7|5h)pOF)yhJ@&7oCLH_a%?b zD!0xNvHo^E-e8XJRs%-Q2?uQ!`de|=2d@=3kJ#ttl z&1*?XCx7Z>dA0g&rK(9ydwRc3@XmDpF;n7x&X@0DYqwuf?-rQ4X~Bd8PbS`YZd)4n z{*KLx8@DHYxH7x!*~OFAQjrP`XQhtSMr`vuKJ$9NfW^*TZ~KGYWs**o_ANadviX|J zvYHZ^RZj%xEs?u7^Rn5`x4cKQ=d!BGlu0i!TxOGXN=;8S_(l_(RpagR*O^1t`T5@L zIiMkbzUbuT$zL+0C-0Dt_O0q#HOp#w(=zd86F0X`wB-EVeA{zs%mRA{qnqkJ^OWCZ z-~IJSZ&UazuT|>8OLZR43R+m;Jn^z_Q~hT@t>`)7yKPK6{xj%ITr=}`&x^#!4=mrM zH|Bkl?YNb3&F6zxw9Sd=ZQI{$UH(X5k@=}AgHPvX|8Covku+JQdEWeq%hxlT73ckW zU$sg{cgh)-wR0-g-chiN4}N0z>us3rOg`;3c|OW&zdpV;i>MH~TVS1g=8vT)7n7}P zvZv7YWC2&d{L`ApFTY>x?>pN{m1(JUSH?ZMq^&OK45w_z`?Z!i6Suppcxrh*@xDjF^%Dk`{PF9yOuz{W6yiE{xifs>G{cXs_I7oZ$9)a|hKoxo&zI*ll%1>M+vT$}H|w9IZ}2v~E~OpO zp$RKo^AcnhZDW)@CR6w8RjKPuN7iTBeK#h2xvKfNo#mfq(f#O0Pj@Ui(v-EO$%3gh z)nVdiLv>{itCDjKCoV;5aYx>ntiEM!Y1E_Z>pO0R^*4sTUwfE$+r%>k>r_^)R8~@X z`%~o$^O;wd-@F#pJGbHDWp}}*S*B0B=FfhXZ*=_1Q{U*_HQE49A6bZahm%4TlaUI$Sse|*=_56sQ;Tq?(ccrzT2$2w^nWrI#rn%(m(gk_w)M8ufMV_$=2P; zn=89fZ~6+wA7881cXMl$EbkCY?R1niJm387^eaOXKE} z2^D=e4yQ}9dcHnYWLj0mt9!dcq&n(x*{n$(x?3-WdQEgo&RpV}6679G;8(MI-Yk=h oy*87J)sNT*2EOLsZWOn!UNE_S$MLs|-FnTL96FcqKL39c0Kf$`+yDRo literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/59.jpg b/app/assets/images/avatars/59.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93ec84f4bf30a7998b5fd2a4a17f03bcb5e939c2 GIT binary patch literal 2509 zcmex=>A7OA6U|?isVrF4uW#i@q%QG@D zv#<&>u(5LpDH;kp1|}9ZiYOUPTqx=kwDI6YF=gZ62789)jcnJnuj(wCGkfN;{AZ_}%~HRIzV_>}U@c#3!}wOrc1LV|#fJOK<;YY&sJEp4%I^>BZ*xuj zq_^E;m63U1Q0mHt{$;kVH39tdp0(>E^0vD#xHePqTbZ+6}?pV8)dLGmiY+T%p-pGUrvT4@q(JXvXHP zzh&q7Psi=n^KhB-mK%GvvOd}sD>Gq3bHSU*2i^CVR4qO)Rh}fvp6!#-Y#O$>|4`Lz z=fzIPC355xZBK<8Kd~-cx$M=wfJL4$TGJAiyUx10%Pn@wl$GM*3{80!f;}&{rkyXD zo3UJLp`@pOg=BAGMuUfH@Ad<*tmx$*9}L;T_^3Hoin^v{&{ zCH(!7n=9$oz9Q03Ep4f$kzCh(uj$hN8A4kNl~2##&zSp+d7g>o3xDk;)BST4?tI)` zrfI+Xu!!F^pSheqL93_D<=Eal{db|d(Y3SMu9+fBr1c^kg4|P2oj-QNY-w7^i)Vc% zQi`UL9IBkJ^)2-4Z_0;hmnB?UILnx;IJI)$ES~i8$J<`)Ut(MRe%=NCJwFnEuD1@| zy7bC+jhU6lo;;gAG3oi14o~G<;aR_hpA|M|nO1I{`AOYx(wCh@Vlk!P!@oL_*?~ATT zDtZ>$JGvCh3%2mhd-n6DR?VE{aZa=PmQGoy_bE4h#^2B+QA=g@v|p_T@}FKcac0QH zmdS-HGaqy8pPV)2QN5}TgU#`~-JL06*;lxVb{uOt6;n`Ju>FqhkC_&>t7cwZks0Z$ zCcbJryLS9Fg)SktAFW?K^MKl<7h=crDDQlbZ?nZT+ zfYthqAr*SI+UlVqErm*~F85FB@o%YoD9f~Ru1VOE9iNizrHrP&K2{@Y@V?69Vco~> zHAll2y;{Sv=cd4`x9UydZ~0#TdGa@cdv3sFJtgJSyRu5Y<}0Spx@7$^Rx6=4$m79G zuH4h*_xn`02A1eW_e@Il4tKiw+RL4(uvBi}p6&j=N*$BF`o2G9)mX&&=KZe?#mlN3 zIrW#Vo_TGiAM>RutE)e@%qx$y`D2;5Kjc=uX6BznDc;vcxBOlyAKVn>yQ}Lbs=Su6{FUfsT1C~@DC*-H~Q=iZy}=i=S_Oq^X&Q|{559OMOCU8_2$ zXs!;5oU=W|YIb@3D+!TFZCsvR(|;L$p0=7NY+l7gfp=@97ur;aE_=*6<@)M3W}=)c z-Y;KW!2Ipe-M!xDB5Ps`0xrl~o>;Yg-;ZsLTkT4h-CpEt-hQda|8vq?>#SEoLPCNb z8~!tN)URf$oSbpi^_<@n``F3}4>zPSXJ*Jf+@=5V_^FvoDvz7JJF}|fqeT4L%OPQl zw(>ohXZJh#YPC*)k+7qYjPY~9R}0H_zQ6lQ&O&&_cExWOm4d8{UTzk2*go^9_r#7s znKvH$GnxBTj`l5iFS2-v2BTNbpD!{3K`)CZ%Y+#HY1QG=?mg3dGjESf%G#_>-X}-b zABsuhdo?f9`lS4t$wz7m7i?PRd-<(*#9lDZ)DGYLG$+kA@s^zNCAnp( z(H^0v!~+Aq=KnIh{-{9E`GntrhIeUaxdS3)jiPGq#-0lObw1$0v)@zAo!fh<^~}S|mwIh1 z-1z3>Ga`zGA@dSU&dM^*nBzHV54rqbCWV{75|Q%{4# zt2YL=ZDqUrA>f~I^Qy92R@42P&J>%mOuAKG75+$NZS1pakDoT%?%6yw|M!VM(xU2< zo%4+31tvHJgjG(B?%H#5o9J%K3lG9JzpAy;QfX6K`R(v@MQttyt-Fg^s{Kw^_D_1W z?V(FK*R^fORRvG|`@{8o$J;|EBP-hkq*D*wjB-EsHUIdTIhB(x3D1AIw&f<1y1sIU zW$hIE>BYg>9zg<2H5IV!Z literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/6.jpg b/app/assets/images/avatars/6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a36246b6f6ad7d07f8ec9426ebb6837d0085f21 GIT binary patch literal 2352 zcmex=Zx{q!N|UoI85kK@7#JA585sV*W8ia4$xljU zNIAg3z`*$bHbV;oGZP3fGchr>E2u7a(ec!%Z*P0;4MUP6p)i)#@pFMf(40>fha)ICJCPy}7R+o=cs& zNmO)8_Jd?gv5?G*x2N-7u{(T{JM-BUvDPK;6rCP)tr2isIJGQjSxdl~txt}LbOb4S zv?>+vKIw0^dm{U;;w|rUmh;4k`|n9AWfEF?u5^Fv(-kYE6=p9rdzhMI`h|CQ+U8%* zv7%|$PcPZ?;B8s!f;_H`*G~oPI_4~UxcNWB#^YP2dU7eNZFp|HGU#L=zoOfd`(JkO zPBDMG+O|pjgZ=Sak%6t6=fXD@1%LT+(TMA3j3=X~b5~Mrd-!~ z)T$)X5u|Rj=kCX(yxFHuzc*{^Nqw|z@3nJ}C(X-$WVQBPOXI&=eg7Gpa$knOon0(0 z61nq8jek79WyP)UjHRy2fAY!MS1d>}7W(q$%9D?eSKSH<*0XvOw5|V@*QGoTyZ7hT zTxTsYDm`;IrSQV$i_>RaKKbgH@;slENz0Q~FmObetE$ZHTJ!eqe+Kc#*Vo*b&UoR( zo^m4#%d<}m*K66dg`T;*_Dzt-($h74iz-e^$epcZRniMHS$f)Ht;2l-VQHJ*{e=l3 z_MR%eD+3fm*(Y{zU78vfP+v(_(sVZ+2nzw{6n2@EuU_zF~xy+yKk8;jkeG>PMt)*}Imo-~I@0U^8 zQTR^d&cgD&x9v6U9&gY5rFVU2PwU@uyX5Qd^>>$5oQS*rvp-^OveD)*U*7LZ4B0l< z!Pf2lnMqB0t8YY4zmb(XC8$?rMo|8oIQx*J^_t!8UKy&z3cL%tW4$x-?;qNBdq?=k zJlS+7du63f3s-Kwn)2Iqb@oyVXLUmzUdDSpZLCjRuEcy!TJ%u++2&66)czHJURgbD zD2?U0_)^YZ&Sr1x#JT)#Su4Hfvw3(NOPgA1FZbIj=>3*Yf1{7fr$*an{NX)aC3v)c z>$eG!zrF4R7hUT;TlLfJ-zuT$TrQfzXD1yyaK>R`*Qw(!JBltWOF34mm{GX3TV#do zgRYYiD_30ToMaiqVWLzletN%fk?hQqyVq_B&aU_LEx2_(=;J%R{|sAp*Ua}^zc_dH zq^J7He~z!&pOCKS^=(_9ZB5d0xspFR&z>GB_1SZCSB&4``opc>8XUi$~1kK+_PPv*aOWrG3(zKuFlj~y`!f3Eb(M-Ys)9MU>(Z|w+?6Rnvp&2Xt~lUrQh~eeV=#T zI_h_*-uOVte}>GXbq}|-&DY9&ZnazXo2o&lVA%Ai0#>s}9Gc2ETmu?eLi}fKP`L1M zX7zX5-ko60>S%YleM<2k zii0&ZN(ztECuw)L{7Ib@dg{cFDO>Y=S2<2uIX9=(r?AH8FaYpJmhJsl1S&{(+@vZ{z>UE%hE1R z^mfd1NuMOry5xhxzqqNhtTkDEIc7paGLZS;x#P;V-TRlzirw4$`jeCyrv@SE$#m^6#Zw&&t&*pdA63vr(RIRDIvaR7?NKo05zn)(` zAJnh)irBZEy{CPD;@bI~+fO`Bc)D;Wv(l;f#EYqB3;%LhAC%!(d#jPgmE!s6pzUrjf9f`}1fp0zS zS6Yg4xo8S3ahho8*(;Y)uH>Dox9O9YY;MxaAiqN#>p55g&O0hx@yZT-vDSZ)@tM>u z+5V^dmd5sVaj!G+`*z3UR)D+k=EmDeiFpy#{&#c2e53YF58irK^`zkOyB()D&3>_O li=w{?zk$;UR?q#?vQtegJc5sV&e}WAX(H5OC}scuCIGeC3N`=$ literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/60.jpg b/app/assets/images/avatars/60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86b8cb1562e557a97f7008eda009f039d43a09b8 GIT binary patch literal 8527 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 CaiTH+ literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/63.jpg b/app/assets/images/avatars/63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5cebab3ad213f1510123b1a47c2ac2b5129fe7c GIT binary patch literal 1772 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/68.jpg b/app/assets/images/avatars/68.jpg new file mode 100644 index 0000000000000000000000000000000000000000..625e396ede55afc62a150a386154bd75176b8133 GIT binary patch literal 1729 zcmex=ovIz$!vMUve z7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyoA)#U6 z5s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$K>lK6 zU=!0ld(M2vX6_bamA35j=O(?zFiysPvH6She`B*V8S^u`v+ zC(Y+)hH2FA`}?nXZ&mG?TeVwwHbx$CUl6zTS)BHDy*-yM>76*v)x1DdXr;*B%T*;Z z_m)=XDm63#Xyl84%g zZMJu{LLIv2eGUD0m7PsZKG0M4qBmmB+S8q+7e&5U9i(N(E2^jWRINYwg1)L* z{l1)y&*xov8}{O@f}GZ(CEF(C-EQt{+xV5&L#F2Di8tA8<$)VtXj{glUcC|ESoQ2H zN9#T3WglO5EnQvFcHM8{tfF`4>O$ikudRP^tEXye)7_3p<)pHAvIT_^pLVRCt*Jdz zO0@aq^(DKehE6e>Q`mETbLGU7O#4JPS**9%F;UXb;#b(T>FZA@iG7;j)WaO*6y{d^ zeeStQFW24>_^9|td&-qBrz1Tpt|(WBzI?yuTyaS1jyoJ`tx=vYd{(-y^;xvx(C&z0 z*Wj!AE<${6{A)$GUz?vS+8TTAKf|$a-=}{Qx_v9AcAn#f=H7cpu1hY-uxgu~YBFo> z`5AVfiaePwtL=_{y?(p%Cxgi8*B6HyKH{D}@9cxvp9&=wmZGJZrD01Jk2`(@GhZoa=O)q8g5?Q*p>cVAgYFn>1p zPmJj`-Fe+yepAdOpLzW1TO-?qR_>m2)tmM6(x5w&W4UgvJCpMK)}r7IQ+z%bIeosh z@^qP_O;_F8e?7DN8Lq3^ZAhJeviW=e+gn>&@>kAzn)LO9xevGAQ?{<$J$YT_+tud; zhNTx@=$$6rxx|6pDckNFcU!<_E6?o=2CvWN>$L7mlzWu zejGB#ZASry64uGX68P*Jtb&$>*Kvex7s_? zyAr0iKb`(mq32U}*Or`Z)+@H^ElY2CG&wxY&>&Fq@W!{XF&}5A-Y_b>w=!dMrkw1i zn-YJYTrxIP|Iu%bkTlt zd*A2l%JYxyZn^N*r78MmSZ4k6nf6-0{$^S4KAmm)X{{0?z;;{sjDzw>be-zDR;?jk5zZ8Y{hDBYj3?j6J15iQ%rm= z8DmiB+2?-|f#(ocJ&GgnG}V)7g2i0^HbmMZ&JRi6@su-(JBa_#@C&gz^7P E04zr8i~s-t literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/69.jpg b/app/assets/images/avatars/69.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a0ccc375b42849fc09d6b2a108f43e1f1d80173 GIT binary patch literal 13830 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 KGkI?P|C<2mHO(@6bvma%ncP(7@&aT|80gA z1|}93HV!rpIN-tpc<=y5W&r^O2yg&_22#QQ0}O&33~mf=%#4BzOoEKef{g!EXZKb!2N6ESMjOUN6+2;cvO0K;~()^JB6}d%FUI#mE>6IVQU(n z`e(cSG{daM+f~7Jr)QeF>TOxEs`0zH&N@^5xS;0zA~%71!IEuSkN4kvZgc9fWD%{d=Ke_Y5lF062<0{tYYu`v^sqrdj-Yk{ocYN7AzvOYiB|p7|OOoDZKR^6u zr}|mJCE^~8Q~JZAGv(iz|232-b=|EwcS**9$|<-Wpv|Mx?+X?1&LJf1#U&@FXk#=Wx1)BKG+OMmO8ytu|bedCSNL%Uno za`#K`v0mO4zuf4^R-69cM-oe3CY8+$DGAHpVlDf7j?uCGnnCX#bL^Y&;N@L&T~}78 z{|w87g8!^=dR)Eu(|PU z*_73eDm=2LlNd{1Zr5LXQhA2%_G5J&Z(V-qO%HQr)tPgxZ`G9FtM+W@e|dQQq1Rv7 zS6%iwv#;&OjW0)jRmY2mUWjpxazA{szG|BCKNYq6vnJfX^+Qzma#X5ile@yx+zgN6 z?RoP*U%$_q8a^lW(9LuCv4TDawnbIO%|G)gR$$w5zraP=6HlEl^X8p(-7bB4fB54o zAM)+?OkdCOAue*-#(7#%6|bb!Iwa1lV@db4n&obFx2wr_+O_XTD=gN0Uv~c0vtzsF z6y{sF-Fb7jDo6U-{pz)6f0Z9!ytC#%!{)tt`QDR0{JF}ytxep6xpw8MCA`b-{kn1D z`JxqeH%_{r;5fTtXZH7F&zGoP$?w)FwAgKxIN@2^q-~P_u1~wJ{eAjk{Z~sKglH+- z^G*#9sEJigS{ko^<%Mc$?7EmcQ)a}xVmsl~YnxZ-D=K*La9B@ij{diG4*x0&Z+N#! zMw#xJ)nQ*=yYYbN)pGFw_u!|d&PTpW+qnDv<$Y83zQ*t9OZJb_$}3l$<_$jc?#ec^ z{pwSmFfVo2dgr*mu=;)uSN|-jPwJ13^Y`wm{TSA~ryx(S@L1lF{jGmYPd!)^`I$w? z>xFDfPnbn>N$`&Q?}c(}8{T(Kyem_@pQq^M!|P7>`E}QAOZu>Xd(pl#oN_n%DmB)L z_8Tuc`;TdpX3fsojzLRa=1+6Az5ZSxC%o>)r2eQ?ZBni4KMB3%)@i-+PV8`++??Ch z_oZJJwSVMRGkPXjBB+1;T$F+JgjlEhU)8_tGmN@E>&l%vr3DY8rlyHkJY4F0cgD;8 zUskF!q@BMIUtoT$eUZ`an$V4Qi&DKh<{rJO;+FV|ai{$6Mp3i$jyc7y;nR=%x@t~1 zsW8beXknD~oWEqR+sz+)^a_8NivG%@zcoL`Etd1LnOD4Rr>YiHgXG*+(dF}@#t7A2>a|+Fc>}FY6+OYLPs-P)Mtvn{Xal`?1F41X&9 zN^zI%V^8Qu*0nEq1g-;WEHwjU1$H~%T*kXDw7pZ5{gU-x z-V3`T;1#Et}eTCw>op*x@&vC9i93ueZA?P n`9fM&X8rbOUap?+KJ&-=)gR-2KVH2k-OoyUHh+vu{r{T)>os*8 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/70.jpg b/app/assets/images/avatars/70.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e33b149d3b75e4a9a7b5d8837ba56bddf2a7edc GIT binary patch literal 1683 zcmex=M)G;tLF)@)>x3sk|ve7d(F#;LF z$jQmc!_6bX%PV1|D5GdZGWdUhL6C#No57ozQHg;`kdaxC@&6G9c?JeXRz@&jfC5G) zW)@a9b`DN1?*B&^whAyXF)}kVu`si;vam2PFxE0MF*C3TvI;30I#U-U>$dGX zcJ4ZK_{h;?$4{I*b?NeztJkjIxOwa0qsLF4K70P+<*SdMK7aZ8?fZ|Pzd-(CWMBsS z3PeCWhUPCp1|~)(78Yg}c96dqnaUX$nV1DxSQQP~gd79e6AOivj2byaoF*>Zc#u=s zIOv0DQqe^&F%^@CsvkjK1N)3Pk2R6yGq}eP{<_7$!_3IQB*-ktV9)STKx64qUmmqE zhVrGwE*)3RLtdt8ySx*bu-CVA7JJkCQj1%Tf;ZY%KKRe@_4TF=AF38fJn?CZ5$xNd z!n>s6+~uwSKJ6>Zek42#H{5^1pP_GRd+CSwA=~eWmVZ9R9;I_^O=0tb<*nx>)}E|U zT=_hZHKdFn=XF%S5rCUQ1a{8EgBnK*o$w3-a2kQ z`$gb}ODtv2RGfB4E6ca$+`460_>5=6tJ=(KhunTfO1kGr?d6FJp2RKlYtEHzdaWI6 zCagcxY_dPO+w#-FKU$XzZfM>=l$B>Kc|K8$lfz!?#FdgCA0igiJ7h0WVQ@`}o2;nl z$G+jL3Hzi!&Mp5LQjW;7ebfu*vJ31h{1rY`^vTD#{|t{xHcmSFXn(5Vc1f1h+SkYQ zzF4>Jo)WD-pRLYQcrjP5bnv9Cl zoMU%obng1RRd>^y25w0YarFE4Y}wY^Y{F<@IbW$l$i zAC@24Yky?=vXe>E?mc*ZI?}My@Z>@Eb(ZVyoO2RWXp9MKevr%Vusiy6#gfX))^hIW z?tDEUAzCK=*Z1r8Ht!j{oBrJ3a#X&&K5oyI=_%h*YwI7WbuYNn9li3-xw=osTDSGx z{IXWoI;cNvOW&va&zc;kCK*nQncrC_l{xF(Le*cfzWFBW_a0-`w6!XG85`QW$0}?p z?-cu23wo5E-`=^*+v})q+A;2qCHhixdStFozE@E!UexjQ*6bY&U)D$L+9{-3c)jfR zx+MyIzFAW*YWd~_Usxxfl%I5br|F#=K4yH`XSVEK-lM6uYqzeChNP)x=Ume(PooP= zj$CE%k*nPt8um!Kn(K_Les`jWKIxZF?#4j#+(K);ED^7q(BG;Axt0=VW&8 zO}VK-*WB6LO#b@beskpc#0X`#%;?uWJACg)UEg$dx{BC|^;UiEJUfzKN0nXn+)(p; z-WIc?$$PB!{bY#Wv3RTL)}V8h-$a|4H*`8AcXhev8x&PtS!sCV#nP+6c|~m6TAw2h ziG@Ain;3gqeVW_jdz){CXEf^gX3P{*-G5aoc5(k2l?TLlWbv Kou2alZvp_FGtzVb literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/71.jpg b/app/assets/images/avatars/71.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dba82d8173fa0e8bb7f06006627d7cd29e56b2ff GIT binary patch literal 1365 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 N<8|#Twln|V1OV_RHh};D literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/73.jpg b/app/assets/images/avatars/73.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ee65c7f154d7797889dcd79fa37112b3b5ea075 GIT binary patch literal 2123 zcmex=oIr{vTivJ6EL4|UcUwI+e>8seNYCoTlev>_)GTFq&*?u^ z`K8J3Pga5!m1pgu#DXSX{*nEtW*=93{4@7EA*WY1f8)Q>p?Nrd$;oY6_8)_M{$@<8 zsXP0=Q`zi#ui(0?AK6!@ztfl&VXyJN`;)6rjCp&HUz^LB!+F?kX@4dEt=@oAHJ4ATbXr#>ta-F{YJFkOZ_TQEZ#T6|DyOP^ z7SX-DrTFG&wet2m#|zoq&bH@)d5eTH8q zhUXtuc0Ca1W-E17@Wi~UHE|uE+>@Wpx$@e(DWTKWeQUPR#n1PTtiHWEzT@V$;GUpK z@)H&`II=1<8@_hCGM^)E@8lREu_g0buK0XWJgBEBrxvbq#^4*uYs z>+4h}T`btV-@D@31s)B-?S-Z;u}YC{H%m7bsGU_+nc>pFYjpBSk8|&}tM8>!^CVqg zUD&?gm~Spi17q(uBc8st%-!Grar)T>9PZJPKK3!r>1MOptBA^}%nA!Lxmc?5ve;t# z8+d%r?p=GhyY{TYVlTf*RVSam4SwFTTx5~RzPfG37S?aywdqkm(P>=Y>T|F{)kw; zw3%hG!}mbuH@Lg=}&D&41PB zddM=j|9e?O;POYxc^~J7i)Q0PG;rx zBEheQ`+4d=I$Nzdd~NMZo_`X%8W<<cAXs&$pD%=Cqe74=-gcsFS8 z>59^F))kkLcDlNxZt51zCm&kdRVSJ=GHwf0KfRJm`MHUg#=M}DHRAK+J+)#Fzk8iI zt#jJMrP?tZ%q#D|k6Ly1XV}^JwzInD}6UQO}(V|`!em*=Wkv&+{%nKb=fvZc=9%23sBC)*R9FC5pJZ2azK8h^Lg zs^lGC?=90=&04uPeQD<2Z6&7_xfn{QEU+rK4SQ^6%@j zerWeAhcfO}oOZm4wLXMz>f#!?#%H2EtS7GXu|K+`EpYt6eFgT1SE~9#5-No@OBm<7(6|-7&sUh7+4sj7+Dz@85kJs z7#J9&p=>t>1_ljAX0SLD0|SF0BNKxF0|SE}0|X>6Fo5M?bUvj7-cd ztbz<|>_Uo$9FD>wO3FroiG__p6FEi2k`}5QG;wlnnl$<1|04{NjEoG-jGzz&=>uUl zW)@aF0ESrrW(h1i5elmZJICmvMZ`2Q9I4>KbJlOVGo zgFQne@3tqBuZq`A+u*Ty-}-k`e!O3=voZMbzDeH8TJ9JuBz*IUeO0frbGlde zTs-*M>Vvn8j(^N+CGVo;vsPWp*b|a>|Mph%-D^!nl<)ccX|`=YGk?Lmk_&s3eiUu@ zOJ3r-2O;~Q(HCTVUm%U>%oA! zgs&36UT(>&{&TxN?bb`P*hX`+hY`w4mo|knaRf9}K2N+GAQu;Wf8i^`g|il>%}g%- z)OB%lhr6U;|BUO4kLs?@j@%LaSHFIvZTVV_<(t+DJ_;o+?`UsBdPR#91yB z#K-mb_=&G_RlMm^sVt`pg-*?plC^Q;JJ z@yT%e9{bM_$Xb&$jcZk<#)BR99xJj`B)T%Kn;P4-(>LulFO|BMJ#B5I%!-=_SDn67 zx##@jxJvCl``;_)o=#hJ^ZKvVvDa=~DV?y>b7e|=mb$#q-(5}oGZgyTyc(P2d(V3@0ZqR}cvswQ^PRVPD~mkX z7kNBBbZv!X#*MmtJLPR2d;87XBxN;YdDq0l#}2k{aN925{`bAw%W2oQ-J7;4di~rEzmOii{^X>$9z!6Nkd>bS4B*ratg2*`!nRR`EwyQ#AMd_S5@T z-1ct%ouB_cO1tghZIdmR?y7Q{v~1|}^iL1sSGTl1C~14lum4W*%`K-7=w5VpJvFbZ z$#dn;0?WvNskU}ehqiye8?QT+d0%08{yN>Bjup#w+;5v~v+wY`u=@6Hv94KF(^oER zTB^D@opE>LIp$=G!qM7Ym&5|_tElZXH$oN-zWE;Eq~E}NV+9FQrm28)Uhkq!TXoePyPskJn5;yW?cSu5Gm|lU(iYC9Z%&J%CT;=TV>^3RLa86U-N2Jg#r`suZ$jQgt0wO?Pit&0$z*0z}aamG`@ zeN`!X?6Cpc6*e99_Vmx|TA1}%{?)P>3&V?6pAnw&hw*UH^L703OWdMt(Ov>a*dv&_!QA;aehI#^?O!Nj!hvP_tWiZcnoGxg)7^ zudgqB_Pe;}<)a_Lx28;t%+)_FGJz{%jz;jDPgCuEN-yeWxt|GGpKia(b;*i|v^k&H z>`O8q>)qa(H&5>Rr7J8^VJ#k$`G4~Jg~>m5-Y1%`Y0-P==#rh*VG@>aukJjVDZ&@@ z^E1D+cF)&uTdVJfEbGn)i!$;_IJV(II>)6IPyZzR_dWFO)b#L0G=vTx(SurJlhx)d~xwGeHzF6$Bw#@2<)s|4vV53tPCwUd~lyf=! z$<{gZQAY8o@{d4;&$*vNf7x^X(Rf^U+xP4t=|9&ZID>VUs+pQNIbLzLHCcS=ke`7= z;l$g@0o9Wa%=ULvkL}IccW33JXRDWY?Oe2?=*WbNlP_LAkqQ+I0@ z1?6dR-RkDOXs|vsC&XE+a!H4yr}&Fg?zf}nXVnWwe7pOuwS51lw+9`ZZOXY_cpVEn z{hcN|w|5>qU>U|Rm3^Va^}O=)q32=`Jlgo5LAb1ypMSk@z?Fi%Z$k|ypXI$&)ju(& z^*Qr-g??`DT6S;mxz8n2aQj(zY5amdqy4PUZtDcO z&cCd*@c4t*8il(PDq>b`y_5B$@|c&F)y>CG|3!y-T+LPwaB$P$GIMxk^|$I(bKT*rKs!=Cf@!b?dqug)9=M`Ym|cAnR8BI`cmR-`>xW zktN$gw=atKlnvdrO=E(Rvb*}S)~W8UGMjcWSS2KsUF?kwVVStg{@a9?8kby6ylM&+hU|H7Q^(TD;%XT6x;fQqBHz zdoy>HAGvEX<5YwF%%xEp+DWm;ZYqC1D`xg|OZX+a9RCKmhX+zweI40XY91pQuA&KpR}bVL*wTY7Y|K) z>Y}-rb-K;sfVhkgw_{9v%AVBrrr(Q;iQJd`Zojd~)+ehLp4YIgl#rWOSM{^#>nZJK z-Be@uK#lN-+mE>1!k6C;d@c2P;wh`_x1DnyImM`N+H>4OURP7^?uBK}H&@=W-B`b0 zqw8+k`W3p@CrNY{*Rs$2ozd&NdG*>2H^qO67aYob)O>xf?Zy+8Q%{!1wck{pzJFec z%GU6!QQ4WVHMCx7WIZ}E@k-FCiypn7d6o#&-P(Ba$lk}XBKd*4*MHuu9;|w)?DMaE zi*>tJ9O&)Mv_1dVJ$l!66}!bgC*7`2eZOD1ZOfJThiNP7Lz7+@zucQTabm+$PC5Tw zrv?8=-(7qw`gP?+)+bNaFP&wg{?JqP$;kiGZhehkwhPfqaX)P)6 z*R;$1a`Afe_o!WU*0)%SH*w8;kvxO%+`d_J9=v$BUfO4$!q>l|muxL_A7*_vXPaH# z(b_lv@ViITB6?2Ba;~U2@G7+6NZo|HxNH`~v?cwOz*cITjoof!&(O?9c^4F7KVzIao4hksw=~=N_}^YN=e|vx$h392E4}o;o(~i^5m{p}@pE6!34c9@Pv`w@9Zx>q zoO{u-@ztYg9)G82JmuSSFTvn_^TZ!l?K`eszE#Hhb;S~sc`F@_9X2#{O9~oFFfXsw nZVoq4zh_?je64TZG1i%Bh0_uPv#%Gtcq>zPqo(J5{QsK(`elP! literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/75.jpg b/app/assets/images/avatars/75.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fff0bf15182ca0b0d532bb8ac59f9ddcbe58d385 GIT binary patch literal 1892 zcmex=ovIz$!vMUve z7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyoA)#U6 z5s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$K>lK6 zU=!0ld(M2vX6_bamA3Y$Q8Z$yRA>%2%Pt9{kG<%=cjy{!S>+c+3ZNq%!QGzscDVM zf%AiE&#$fAYPhlMa?$d4bNyx}>j*a6-ns1g>RjQ^urEGly*Ey-GrNC8aRN_IV?+I~ ztBIv=PjA`CZc}9OH#2C>{JqsPcFs*{brLe1^|W;6x;IO*Piw|@{byLyu+4e>3fW%6 zt;ZOcZZhwXUmLRf%Cw5pPYPeo(mv~(;XP4i`=+e0*QM#@COK8>XB0;2uX@FCH0oV} zJBzrfpLPGnSCgEU3;KR;;Ag%zcZJ8Mx{n@ud*rJ=WovFNxqI%8X|`Qtj?S!oi|7CN zJO9Iki;?pZZ8O%{=bA2___FBu#s%Bsyu_Z&Iz8{_ttStj}e z*R;&(V~o|u-$!Nb^dzDzq- zATT*__QbX$pBVNO%d>x7x;?wPVzG6IL7e}F^;TE^6qnncnfNj~sdG-_)H`o~_Gztr zc-QUCsks{NCFP#8Z@)NFeImfEFzixT__<2i)w3^z2Sg<9*tN5Kazz^Zf^TbIZ&JLH z(ldYRhQl9Mu4Ls@nK|X*>9oF=HrlDHBM(;RJ+n7;7O>(E{CP3xhknq1hEC0f2A?1S z_KnYfKI{7O@?pVOr6rG7dTqIM=kw~79v6!Fdf&r`7m$zNpEpMHwmg995 zV0utr`orEiP9*KJ&!t6M-X*-UV{iJsvvZTd$$#}+XKQ))*eaNv)#%-@Y0lqwRkOaD zbh23AULJLF*QLi-!kh~{I(O+6c76G~I_ucRuD$2HUOh}{O!Ty?^oZZv$D48EN7~gW zOQCC~r3~yGoPS=)sylCs%`4fdxTv|qOY`5n zSCY|U?2(%~^O5}Bd$&(nFVkMMZ->WP$?oLWG5;AlcK#NtdUJAJ)vYCGwBD4~u}m&8 zUTtR1aDSrxW7m)mOIGJ>oc`j%_J1uJ>%IAdu3R$M*r{>nNU)w}s2iRmZx?zgkM{FeSdY;Dod^z5^qD_=Jr%Aim^E4 zzO(&l*qc44e_xwFU&F4beyMZJS(jrAi!6mqJ+6K;$=q@=y4`Q%l?U!MI^72~kJW7n zUoMrYt*kxkS6g#&VVmw~WiSTD&}6-)d{4y~5r6wC#p?pY1;aU7cF;3vwrIZ#T7A YqNY8&fIlw!kH(^|S6yMo_Wy4J0KrR7xBvhE literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/76.jpg b/app/assets/images/avatars/76.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c70857272c8b3fa355290ef89ac906f0678871df GIT binary patch literal 10590 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/77.jpg b/app/assets/images/avatars/77.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e254f097d3a8ddaa1a25f879c8af1a36cb28c4f9 GIT binary patch literal 2820 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/79.jpg b/app/assets/images/avatars/79.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0f4c5eda7d594933652d807e8000cad864e1cf6 GIT binary patch literal 2438 zcmex=$<%PwSRFvdYWaQ-KK!z}~va+(XvGZ|o z@X3h?ipY@+{vTiv|EDQ{cwTw*63@n1ILW+itY{G$w>`H|qMvW5}awt1(JSZA; z@q>zSQc)8pmzcPOq?D?fx`w8fiK&^ng{76Vi>sTvho@I?NN8AiL}XNQN@`kqMrKxV zNoiSmMP*fUOKV$uM`zch$y26In?7UatVN5LEM2yI#mZHiHgDOwZTpU$yAB;ba`f2o z6DLnyx_ss8wd*%--g@}x@sp>|p1*kc>f@)+U%r0({^RE_kiQrin8CgR5fG1|`Ad+2 ziIItgg_(sNL#7P!RxCPZwC~>5&hlE#sWTp=Z%vE6E2etm$@R0z#^=00$xY>9o_*!b z!fUy)mg?mNT6eeJDgJw=e{H4R?nl<~d@u7?-Z$ytUQ=*reqE%*!@$~;f7<*VW1h@2 z|2Td2x3*myH??sbd7sa^`drev!aZvi&X)N1Lgo{1apI4e8LwZ=pL%BFjEsQkx?k;@ z7w!4}aDV^&BiFB&iBFpp`6{e)SH-Cvz1N@Kdbxv%&6B10d~w&?MLW|cEH8W+@9!?@ zwMFE?yO~E%ot_e46&UNpd}-(3v~;5fga0tD z&R6WMe(L$UA7@m&&vTkI%+7zy zo-WBC#`$T^Jmc$wTrjTXKi*_HN#TD;&AG2GwtI!ruzk7 z$0=@XI9zP9vOqOhsy(G=<%!ejWsdAD{~4@af9)53HBaRFd)J=p8>3Hd`WCul+oxaa zF4ZhxxIKk=tNWLJoH8Lvh zq>O=To7J_oweRHe3U+=D4og2NzqR_+ue9B%rblcZ_%LIS`vU)TEA7QSlY1r{Ubw#7Ch;M!|6%h>o=ny*y`Oo?{xfhr zT5nanJ}=wj*O|$tzxMJc2gzK>550c1KCYF0UPRa7+UY$XHkCe_|BK2inolCE_TAz=`E7G%Rjlfd7s)K2E}u?#SR1Y^di@9gqw)?LX(Oji zbN&4!*seW1CsM!RZot3f8<*eI31(lf$X+iPwdiYVlhThr8)Nl4KUjNCD;2+|a#ip5 zjNAp%C%#Fl{1d&*#pQQ>=Q`^SqhDX{T208Uy!~P8`Pv`BAEgh?GubZqvYbD6g;xHw zQ;)e7WKVrd{VsQtY4@*B@-6=vIBg^s-*H`k>qW4~+sS#qT3TlcG%>T-q&A-OGvH%* zS6k^2AnL$S!0F_iYW?Rv`gO0mEB)!`e+G}$E24DIxK^Cc`o!Pyk5jyHS(oYO zwz`;tt8Y!cLpFGy@HoK7&hmY|zUgVZ&2m*yzICb(3++xty{Qp?{GKr;^RwrQmlLg8 zRL%;>9IJKsvd-vnz_jOYzLhKV-_uCqzbDDG@4-j^mPb3M&Ognm?^O7GZ*R@dkM$4! z{+;6gh*#|DEsM`87xX_go)-L>F8VBWXUlT?#E!U6H|INi^b<*0aq7;`;=EOx6ZpUM;T)HLN|4;QBTg)~#&tnCi=kvbmEw28^9lYn#I`(GM z4u(Bko8n^EFm@k%A+kE5XBztlroGx~w>LgLH`U{hul}t4cZ)Cm*&Am1S*}*;B;!9F zW&VYXt)AJ1wJNKWKep~GZWbv!U;Lk;-|gbWn13@Ltnaw)VsfFv-#hqE>ara(>lXZJ z|GaL!-;d(8R*kDGJ_jZKy{mUkTmP_@#J{b3<m+br~d>sx34^w;cpg4c6&@7+Hv zertx+CPl%cI{e%oT^3q0b3Pbfw|INBbn2Ok@&of^F1$asI6uFzct!c{Jv%F(sI#Q& zc(AkdG+51#dinZdzxgeTXA9=X_U@LuTGw@`BFj|X zWYKI*Kku~EmsNbTmvR0(oXMkB$+KyS!|po`+%l!=%(Iq1n#&fO?LO<2_WVufcdBil zpZ8uX` jmYx>`7CdfLJNCBgHN#Pnuno&4a$4>l>e5&(`2QvVQxbJ2 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/8.jpg b/app/assets/images/avatars/8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed907a9d55d872db61f9ac3fe894bec67c9c9b8c GIT binary patch literal 2651 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/81.jpg b/app/assets/images/avatars/81.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe1abfd17628ca29e3778ea00228fbccf34b5221 GIT binary patch literal 5196 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 R;=*PBGkle4yfOd(O#ruTVgvvH literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/82.jpg b/app/assets/images/avatars/82.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2b3e07e5b1bb4d7ab1df154b9b5e62d8297596c GIT binary patch literal 3055 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 GzX<@H@1<4% literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/83.jpg b/app/assets/images/avatars/83.jpg new file mode 100644 index 0000000000000000000000000000000000000000..895cd08bf5377bf0f0db139f98791edbd0d90b1f GIT binary patch literal 1600 zcmex=l#YIFU#iius)Rbiu)Z`__<@I&+)irf=bflCF&5X1xv~+Y#89BMQc)58c`S_(w zRAf}NOm$3k^g(J&O*M5ib+mLeHH~z1G<8fgHFY%2Km>>f#+qR8{{Vv^2ZK9UCKhI9E>(DFi0{oFfpST%*4XL$jtix z2!os;BLg!7Gb1A?h#&u9OT&zhR`+jjNMP8FrbJIuW7j$W_6PHp@%X}{pkxAn|#gWlLLbCZsBoFTX@ zRc_O~k2{ubdpk{m!PA=2e@8se7jw~d^Dg{dB01;W+!Ytydwr*iC2jQMnsYof_*AGpzaHjl?`{o_5n8u{uSe>eVn_@ANI_oT0zgG}Mdt>-m2?DR=|$M*E+ zCcF6hwK_)&IxcAPO8cCTFfe`hTx9QtXWhB%YdtsA=}nj64!h|hRBVO^F3fywTITO&%>Q=o@gM0c{xc~4)8?~{usOlK>>tz2 z!~|JW)iRrdcLc*eerx{qrFP1$qtg`(VyC7rOA>z_*YGKuYuehiOBj^&0@xiF{F?Q7 z?;E?g0|xznH@}&<&Z&C4tZV6hbqTi zXVyI3w)WTWsL2~TR!ukg$A9d7!ba_mEyf;NugXddyymwwpXglIHm}Oyh}_W&$2CGu zsvAyl%(>~WaeLp+>p}-t2E=|^^vdNx-lXzNi*FwKmEHAXVuo4HbDxXb0x#!gtc*J+ zke@U)=WP2aJKN$8yKqU}b*pnEujgFnxRm6;oTXX9kdS$1eyiw(KUtNQ{Fke(1@2vY zw{gMT8rG;hBda-=yqfRIteO*cYv+Zhww5{CX8J7NJc~DpWWN&;k=(B2^Pl0W>Jg1! zY1VzdzalE6HXY)g6(c{RUAtWHOvO8`-w{j-Pw#wQm3(m9w|Cnb|1;?Raa(cx?o#%P z$Dd~|KYdEy({x8dYTM4j>5HueKd5QT&T(rkc*P-XF6|E_xs9&9&HarW+=#_XD4-m94vvbm?|TUJI+SmU~; z7~?ygu_jDv4mYd5E`)T<{mk}ji+P+nPv4xdiS4jPBio|8J58>iJ@j$!jP<|d z1JB7MHcBMknf#w&_lh+U+Vl0dite4C6k;&zxs<)(C(+XOoCPOu$7XE_nz~8lMTxF! za(4Ndyz&))VkI7~^O(qW;M}c?uJRX4*7^L?)7lmpuXM%fq(Q!81819D&jFj?A%*ie zb2sYM#(Z+{ZDtK;-g=7vNWQDcQrjZidVV!+Gb0`2X)ly)O5d-t({SNkv1sn2%`=65 XX=I$dqq$kutbc1*mzGY<{QoxrkSnF} literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/84.jpg b/app/assets/images/avatars/84.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3278f2909547b27f7767c0dbb03fc468d0f02c5 GIT binary patch literal 4026 zcmex=Zx{q!N|UoI85kK@7#J7=7#RM)W8ia4$xljU zNIAg3z`*$bHbV;o6C5xzF)=Z-FoOtI77$=%V+8{?Hgl z%EHRY#>UCZ&B@Kn&&S8d$IlN|1f_T&Jg^WZ@&5pWAP0jRgBvrWAOn*iBeNjm|04`@ z85kH@85tQ6fSs9zm5qawi;;nenGsorg_Vh!jgg%}fPs;jnS}wwV+U(vWMXC!WMyMe z6k<1YR1y{mvp#Xyhcq_F?0}iw}d6iY8rBHWvMVi-Cukk%38&S&+e=;V!R{#e7%Ie{ZV- zY89VeI@<3ka{qJ?|6Z5lSvgm{c6jE`_4^$j&dJJuO1sr}dzMWl+lu*GS!#)49lWNK zv!Z7&75Nles;D8#?&KR5zfsliV_~Yoe3hSdcO%TjHmo{#yVurt+Kp4J$}7JzzS6R; zdmEBgd2Wq>LCTh+*OlFEB(`s}m*OqeuZY;`(v!W?+>2{&;NSe2u$_@XCA>Ju^Us&F zYnHyBnwczleU_G9p|6dN_KN9jvtDEt99tZm5!AVAo7&bu=1*7RO+9Cqu4K$gFxpl> zgDEtA;rh!?Gy9eo~X%0~ji-Y);PRpw1$438W z=n4(~y>gwwsn=|?CjZpgS+Qd39o?AAZ*@<~IZX6=apK{GM?wwLiv

4K$W}e_+=) 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/85.jpg b/app/assets/images/avatars/85.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4513811cd42dfaee88d392acf3e46582f61e7019 GIT binary patch literal 3346 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 F1OUnhRU-fZ literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/87.jpg b/app/assets/images/avatars/87.jpg new file mode 100644 index 0000000000000000000000000000000000000000..119101b8dc6269585a0b2dea9864e90c0d6b9f57 GIT binary patch literal 3849 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 E0JSqtrT_o{ literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/9.jpg b/app/assets/images/avatars/9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea9d5c3afa5cef98b16355ca203c9204069bbd86 GIT binary patch literal 3752 zcmex=Zx{q!N|UoI85kK@7#J7=7#RM)W8ia4$xljU zNIAg3z`*$bHbV;o6C5xzF)=Z-FoOtI77$=%V+8{?Hgl z%EHRY#>UCZ&B@Kn&&S8d$IlN|1f_T&Jg^WZ@&5pWAO}MLLjW_QAOn*iBeNjm|04{2 z3=B-njEszo3^2gP!OG6b!pz0U$iT>oB+kIV!pOwT%ErJhzyNX#Gb1}Q3o}?BBNH== zAS)Y#qL865yJKKtqmqayN1>7O#Enj33xkT11sRx_7+IK@7}y}{L7~SisAwp}BFqX_ zZlo+y=p@Sa{}uxeGb00&AhRHYJ;RZR9bXScr}?uS@9Gk@c(~B?g^<;xT9fbJOt0Nw zR*MV2u<@AZfl0ZK3oc!(OZj4St1ea5g_Wg0;odI3`>Dwr4;(RDAJMh+^PGIe`BkT` z2Hg@>>Fcsr__zDI*S09PPuyay*3A0yNAIiLu1S0rQ*JaVt~IY+s-(K>wrc!wC98{0 zw(eTF3-@lU{`J)4WXrEB{%WQDZ})$$=Gl4oiCMwxJ3E#h;yKZ)dSOD9Xr7(biR~*2 zcIqy<^wUu#TZ+g1#Eg5DQdVy+I~{(>WpLNi`-K001{bL*zfHq)-KH~nb(MF0e>(l~ z?BX?>_RQ=&+gq=GkO9-BLqv7#--#Xj+nl_Hx4!cE}SKMR$CvfYHr1Z== zl^X@Vo@|?G81!J(z6nj!g|v6b9C%`?zFF08x8H*K=VBuHJD#Upzccr>PFt>j)ct;a ziJmWchc^b?PSoF|!VvPvt5LZs;G?or_>DM=BOAg`Ovt-+<7`f4o~f#Qu;g@M+3RdC zf3+-Nx6r;dHPdFF*%R|QuVf32>|(#=9`rfb6EbC6#$nE-AxmYiZ1z3>P3op@ys^sN zXURu06yBZ+5S-n0dR2k$p}6uZmoM#76kwjAUcM=8K}Y#LcVm&=Ct8{PKd$AQI$OX? zlc%)xnz!qf6MZ{ArUZJ)PQRV&#Ta^P3G?fPyTw+S9fYgdHLNE zG(Uf(W5&`Si$C59@BY)NZMf;abU*7C-R(&MQ?1&4!&(=Ao47r2asHdx0h&K1KJMAP z=ggXI0o#}J_6V(>>~~;#QRb0_Clc>=ACcR_GSNTQp;^c^SK({3=;ov_k7?0C-n|Ex`bm%jH*@8 zP03MQ;A^eD37lI~-*qOI1BR1Lds(PcQ}XJNp_e zGw)q%-(!Afb8_nWrM&BR|K4@oN4w*igNsK0)WzFR<`sRtAH$Y#B+Vt}GslTcZ@#5o z3l}-Q{#)`j*n-DHy7Z~hsjjwDGL!u?FNt2$IiNkO+qOG9(f-i9{3-t#CS861owv#~ zd#=yHZ_&JmKg^r9AXY^A>;lP9$&!^Y~Hl%Lb_Gf>$p6aTQDT`E3Wf#6Ph_2BPnI6=% z=x(iuqv*vcfyr_nWxpqWH$Lopru)yDPb@OQrvoqdCpRl}KbajZe#Xm3JSxk&cUg~3 zYqLYE>XCQs3)$WJW^DDIti9`d#TDgrM32b%{R4FR!=RH(m!}4 zQ+h(#bUVR%pD7Ebd~{gwsQk;Fj5MFQ={|m4F*8lH=1hCEtG>31cm6R$o1dP$&ZU|D zGx<|~YIBU8T;5^Nv}1pd1|%xFu*<#;-u208+ar;R*S2@RaYsLXE*$#$*PQDrz8)Xd zn9fP}Ic+vtu+_|RkNaCL>ws*-n{O(=&f;okWpLtGyH(6tmTKB<)#BNAGdghY6X{Zi zoT-BU8Q7gKyqdpDkKwwY|B<8jwNK^jv-@CKR3m0jG9?>Kf7|tx67PQ{v7!} zd8dBUWarCmx3>LfIB#@A!erTZwX+hr7B!($3~LVQnp>Z}aCVoA)6F@*my|PISTsxH z*BiE9?fb8q-fk7DYfp%bE8fEV$$d($V0@WLrou{=A}{`hUqoInFWr^%pFwc$x>tGz z32d4(^uCwsC}>Wb<*yLp@I?F4EbXmVKVJWF@Yml%&uf*ZKVG?}ZHMLoFSi4~%dYY^ z^Xdun7#mj~{&97((&^l7ce=7Kto6HidiBJp=yQLqd_!8k9Sri?CB$|(>OVvBjjY#~ zQudlh<`hKbu4A_sOgn5Yee{{j#Eia2Dv`Q|OG`|HmLTk`t+x{Yg! z&hELTo3ycYn(W@`%4}0kF7gjt(KhkI%I9;c-!To8vNFb zy>;YQL~qf524&eSM$gEv%t03zCI^QLdH$RdmRWyD&v4nT&l#sq6qancxqsiX-)7gO z1D;ISsi(=M$GFSeQ&nx&win?EHk03Hm=~xEpU<2;y;CPTzx-OEcF&V!t+~o?xk_u| zV*JuK-dlF(M}Y9_>(NtPcRJgB=JO6a8t~FucSh-{$7=V!yjbt#dqeYtqVH7CNp1fb zif-nHEXv+q7~)&ID=vdg#D#J8cfU2WZp_x<*#0N=px_LnJ1tuk&waWZ#K9fi$3L|s z?7qe$Tiac-`zIvyDp~(I`mmFE9ya`^GFC_f!_nI!* z6(x(De4=g6)^1MyQ`#5-Q$V%)CR`<1;e@J_M~smeGvx8{ETok^!pt*{Sd zId9WA<)>l#QL{UGEZ5!{N$h;|{`R%)Pg|9?MEB3r)NOlxR?EYy>Q{E?>lJ?cU#kWG z);k<$!6E#wrzc!7S!A1I@4QOU4f4}v)wazJ3Yh0r_*F`!&Fz)8$?XTZvo2ShycN>b zD#iPR`&~+9T~v>>Gbg)+mnsQ z&$LYFHa%psMqh5mlNH;lx2$;U70O;__mXc(`06fEshMn(*b4kUEowTn@b0|KR3{g8 zk=q&`t9CYfwe)RSHb?tR%gyE`pK=ZNty6k@sY}y4<15##_6Ma5C*00o(Ob}V^~f*b zBeBLCy}A2m>D*ql^itJSwn@BoR-e7M6#q;6!NYmd?n$@ulXVNbx+Y%WHSX+g=FFA! zkzBK2yNZQqpo6R1jwY2j1NA;v+2x7WhOJAlF4cO(D;m{%)b`g@oku2C$6u7s?4JA6 zC{4BCyq>|Fr2D2{)XwK@Kc1_*mhotLY=s7&gLVT86XVxwr>|ap=6K>1f8q_!1>Jje zo;}hnw=lFgkoV_7?B8R(^3$D9Z`t})L+gJ3%Gax}Ea6oZzV|#MY>MB<^S${yqnlrD zdULZrYuntz8{R&-nCbVQL2J%h{~f%B?Z)emIH$Ad{yU~y_CqLJ_S@2RM)RUBwO{ZE z2r5_3{o>VYGPOZ|MsC7P)50f9cf6cjQ08>y>Df#V>p+F6rC%;@NP6Pg&sp)TE`4gW z%5KS|lerVxmz@Y$6n@Y#cFW`|v$7`NEOX6pu$rj%SALz@ezhCEJCCK5tvz$}ORlDu zkQD>ltpm}&W*g^-GkX}$yc2Np!9&*Vb-}SOY-d$mvs1Yj^l8d@iMz`78PoPXdHOL+ z(pqn>udQZm%oi*B8`2K8?Hgo`kH0H_Jg@GPT-f)UZv`Kk>-uPZTDfl8#iLprCJGv} zgfGoCiT{(jwk<*PO--}M)b#DqQ~xvQ?y=(*J}uf` z81Uoe)ayOZOy8bi`+2mDXWEo$zk{cVdE8+A^(w$n^7K2ey{0d|X-s&?BsbxqMj=yI z)HF})ueWncGA(C0xBU37u_a2`t2^1Z@6@UKrkrzv%2R#^#3-!!*YNu6yZvX1e7;%* zAKDX~SsL+4(;#S?T#&lOtiT(ouDj}AX8P7IYtmww;^40p_fCzwI5P2x(d8BIwL48b zOjRyl2(I;YV#{$!du(*y_C)HlpT9516ngjE?##M(^M>M*S&3rqot@#gRkn2hT0Ti+$*w80{xfJS-@Mc+*u~+NqYvMX zM{^>%RD`!Xa9ld(_k(w{vfNIW!k8Gor9S=jx?e9ZIooBG63a7*u|3_LW6#l`<-Ckm L9+z&+|9=wzOryX4 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/90.jpg b/app/assets/images/avatars/90.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18d895ffb76a93bba45b724fe7c3f8781401be29 GIT binary patch literal 1771 zcmex=4Nl2Kvf#D(lm8%2~aeh>>%F)sRlgh7o9D-J%nIpVPs+j8K@x0z{JGF zgk&Eh6N4bLkfNcIW1uk0|62?^%!~|7g3N*p_6(bY?g@)*yJE3KzESE7>%sSBJ5u*G z-Mf(9lC{_0k5jDm)ZC(Zahkzrn|M3Un6$>PnsK${%gjnsfz?clCMU1w{v@b6V{TdM z-eS!#sbZVIYZ;yw$1Q#w^{iG&_3537=UyH2j#>39`keS&S80JWqMM%QO<-~h{qDN6 zuTW{~x+~Jl+GNh(jNiNWo4gbUzhdN^#eS@(SNcv|`LNzk`J8dz^p)*F?nXCu-sH+o zT#~|Gq`Q8O%u?Uh1uHi%WUiPItj(LGdG6*1p)K7yOA3^au%7%ZZs@dV&&7$mcrQ

bvvsi~fDiS@X2_7?s_pE9RU<=T6yZ~5;ZZF#4S zXS+mtsAG3@)U8?t5{K&8MvB-OZyaaxRT;B?1o5 zI2Y2<>NTyN_qyvzWwUt0)3>y*ENEZ3ZMv1ni$uBgdbj(SX2&-^{QH_u!ZS6<^OIqc z?5v_qy_Rj!Q=Br_F0B^LW{6*Oa#>DbkL`baHH@0lT(>c6 z1=EtFb7yR5Uh&T8^7Ai$%A03QRs3V{Lwe=Z%=6A17G`@oZ$33I7s)LM&tq?0`15L6 z&tkKqDiTk`vOm9za5Bw2FwuOq*5Zd>I#qd|bWdK}F2ur~Ef;#>`#Y$lYS^M{(zz!? zHC5|$bKGY0R{m3}Th;vYzzo%}N4{U5DeVlHn0YJ0x#^+OvA_D9>mOKFPJgfQ!oh}P z#}}Jqj)$%iI}3~jT%Pm$>n-$;l2!K>sJ}A%%a5kZGk*RtdXN^&5f;Fgo0GrZ;+fl2 zeYYtmPM-06uRWikF410SUt?6n))SWQvRhh?IjXUhD!LwL`5P1JsAw9tsqwps|B1ls z7dlMtR?XXX(D~4jnDVzDbCtr)y=G)?`7Xlw!fj8BR5thdX|BI@+n&cqoSypb;kw5S zs!q=Ar!T4f)7lT*4%Q%Kj_rl>lW{tKh!>!T6%ZtBwp*sXJ;Lb z)y@8WAT4fIqQ~neLF?~Wh)rB^|7XMBUCZRon&q^7elA_ua^!KSiJ{KqqNx^}+;7Zn zpBdWlx#4B)%AX#yvx1x@uslRd4V?5 z7mQ+kucjABdrz47pJ8q-PYJ{6t=H$IObk49<$PeJQP9tMR=l2{uCZL2vGjU?%nm-4 zN$bkhohm!NuI8+o=9YFXV5$JuB*yIv?_{3i3EVe(x6@4R)GxcH@>(x7mwQrkSWEug z@gkp@?yp3?n);sUJO7=*a7IXuO*|7*lH02*Q|Dhz>H36+n!Xhh|N(O|?7nI2@ zUh(omF7G6(o$HN%_Iy46E2!d5_Venaj?NV`7*ADl%>U6(E_tz&HoD17( z^B_+vllQuR8pDpA8@BCve5>mghd6Uxpmh@Gl^4s>s)Vnl1$rf#eT+9TNj!Dx>5Vtf z_Q+?xK7EaK7vl#;Hv#jp_Fe!0 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/91.jpg b/app/assets/images/avatars/91.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbd3c97da1323aa6f47cee102aab5dfc9abf8bca GIT binary patch literal 5895 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 K_?vR&|2F|uOa&|e literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/92.jpg b/app/assets/images/avatars/92.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa5b12156ed185dcc188e50c0f747e2dca7eab14 GIT binary patch literal 1791 zcmex=oIr{vTivm7t`ejR!yeKf)l% z$bf1f0~0d~D+9PFSGuc)@XoKn3<&Mq6|zB)#>I+Ow~mEq0>tq=|F*-(~90FBCbrSZDp5 zKViGQKCGGUp+2WFqw-e0;rFxEtAE6QcyT_@J9!eX#FenM+aiCQ-ELr2-{rH&WFP-C zg@bhq{&dyyT+EMDny?|s_)gN!JF6~w9X!cW`hBf@>$+KUwf?ST|rSWc=cBkSjoA12Dlh4*v&gfX5eBi{(_wkik2Lz5wEMe^9iG03t?cD2C zC$BV^r<6Q5DRtpk7tteh(|*PLzpI?oE0*LK%M^cQ3{Fdwn)ZA+HO!@Qv_ny*+uiZ-4Nj$S=@n?hMZ++h^ob_PijU!4==kST7t$1a1b@u%_ z*;F>a8OOB3lIJcsYpck9Ti~Kb!~y0m-U~bi)=gS-X6@WQ#qmd^?A}!Y_m=)-Q&srR zBL90y#f@rj&oj^MRJNOKkGy@%^V@1Wj)FYBD+U39b$`ArpQmw|_4*VC3;nGhZ`-~K zlgg3uTCC=A?DABZ;Pv*A@t((cIe1i6{-;~M4Ip0V!!>^fCBlp}WE z(g%X?UxxmfX7h7)ZF|>P?c%6V(F0r+S#g9L;OcQ2BMO=+Txur8ZEfj=r zU+cN{WX__7y^SKDUmrR3bf>Vl(u}7HtRZ1qi?8*l^71Gi_~mG6(j0Z=?9|2Q&VKcJ zE!9*cGWn!@*7lWIfwyk#InL$uAmsy_X1O*imwVA!rQV~D7Hx=qHEZr_p3ONq&CQp$ zAAB}zUz?tZ=iBdQ(JF>7qOU*iI__9$y7$GNUY^Nb2loH=&%d>0^&`n-C9|Fn1v_j6 zvV8rf2lXvmzwy|wI|6k+bC>>!zT=zJuc8y?#{N>r;{3fyuWntw6MO0-!-_u%T-VIH zGgtm-vRE=Hg7;x+vEYMkMiwg$KJ4bT`kk!pU9i00c+TS;YwP(A?rp0-v338+*K-_x z`1{Secjd0%Zf>3icZ;vfw}108sowd7!Px!47v`nLTesX1U21t;(cSB8#qwz37+$kG zPs3l$Y%jjSl{Vk!VDI`nev1RR-gvA!9F!gW^vu$S|H2>5Tem)WL+;K1!;8~roswbv z=&WWle`S4D?yQgvPfkudwAVdO`O2g>uK7|=1G~4mSrxGVxmNZ*WcL+0i#!RP45wCh z3%MoVO|$;wPHg(Xs@E9u@_Lbg`BS%de>0bDRS~}PHAm4y*4KCEe+IeGhFc+`@*>Y} zIV6|P^5MT=I4|42!0U8I$b-Mi_E|e+E~z|NJt5?YyqEM85yPw-MpApvToX6&m6;ba z?Q@ev-+WWCj}hI+jJ%6HH_ql*u#T&KwY=q7=OaQkyF!XQj?UdY&DP(ve_xro>uK48 zAcBDy-vgOg!hT;j#>+jp+pHO!Rr?0;n;^F`$Kk-Wn`4NL`R l%&R|oK4geqr+G}pNpJ^4mYh%h6Zx&;TiteWzDxgq698HO3ZDP~ literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/93.jpg b/app/assets/images/avatars/93.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d4042a7a1defbf397101cfcbcc61ea517c7f315 GIT binary patch literal 3613 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/95.jpg b/app/assets/images/avatars/95.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfafa89c443b777ec3410ac7db52ba3a5cbf246a GIT binary patch literal 2170 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 Va*fA<=?n}E44$rjF6*2UngEmx0uulL literal 0 HcmV?d00001 diff --git a/app/assets/images/cool_avatars/coding_horror.png b/app/assets/images/cool_avatars/coding_horror.png new file mode 100644 index 0000000000000000000000000000000000000000..b2ef339d2321b8119ed6c69b68cbf199a9c12155 GIT binary patch literal 4570 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 z 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 ZKW*q<>&(0U6$1kUgQu&X%Q~loCIBKE8&m)Q literal 0 HcmV?d00001 diff --git a/app/assets/images/favicon.ico b/app/assets/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..db5a23d7592ff5b62294d55b8fdba26fc5d1edbd GIT binary patch literal 1150 zcmZQzU}Ruq5D);-3Je)63=Con3=A3!3=9Gc3=9ek5OD?u1_lQf1_ohn2nO*%SV3O- zKaqI7g1mA7NDne5QZKR{`xWGsK~4i3gV3-4-@!==uFlF({(p6x$p4OXAutW%Bh)IN zhnWErQcEh zUJzSJw&lOF$6JE>L17At7myxg46PBiwnpx^UD9^{pWAy{omxW@c&|qwfCo5ZA&1<9FYDi|C9fpxmECgvFob; zldN|9Z?!(Kzufku12N`Y`Io#Oq#uM&-YWV(#eK{FCYwY5i)~N;Pqn+UKhoh2C>U`X zb@6lT{)^w@{$Ku?@c;6kr2nU%=Kb$a*z~{9_U!*;`)mJ$9q#{kb$mI$=A3;R zw*TCV@c-xEME<|}`b;Q#4+LI2M@4EcZdY1n^|c_$tw{x6O{_&+}B&Hu7x|Nob6`2W9j z*Z=>ehyTAXIr`rKX28)?9{Z1-_56SQg7^OuSA74Uyzck^)NP1)TOarSuV3{2f7z7( z|I6n6|6jJ^|Nqj>|KFGH{T~3+e`t^6{zLnn{vST%^8d&&xBo{^dHe^Nx9dUG|3!b! z{h$B!%K!S=-~N~P{{LS#>;L?+C8+M-x87?1{!P~Z4{Wvle{iS$|3iBm|L?ez{eQ{F zt^b#N-t~X+*Zu$Jzdg0Sya9Xo?OJ5KfA><;|9e)L{olLV;{Ue8(f^k}oBe;;iv|Ce zyH7_M)4}$sI{UZJ(EGn*w!!}`TYUbnyw&i3<(;i;(_v-!W~TEG%%oH#t-`&7#SE~_y8jV!vSV?h7arv4A0UT7@j|7V0izXfdQl!08DCaQ~&?~ literal 0 HcmV?d00001 diff --git a/app/assets/images/favicons/amazon.png b/app/assets/images/favicons/amazon.png new file mode 100644 index 0000000000000000000000000000000000000000..b17586e16f3b63403943f5ccc024c1f818733603 GIT binary patch literal 965 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUNSs54@ z7>k44ofy`glX=O&z@U)q5#-CjP^HGe(9pub@QZa@a2CEqi4B`cI zb_LonFfi;5@CkAKj|1Gid9$pnEF?5EG%Reubde}Df!-SdA1!~c^-|35$b|K;ib`)mKN75@KV-Txi7 z|F2H?e`Uh|s}uk43;6%)^uOf{|2J#?f3o}kuTTGP&Hw*oPlj&LBnAcs_L3mK;IJRx z1HJ|Mz7bHq&cMLHS>O>_%)r3l0mg18v+Wod7?ygvIEF}E4n6;pugQRi;X&tdha*jk z9+i*$`6w zQ$L}=W@7P?bd{diLngbQnRGfEewk+M_5RDpBd(24i=RwQ%fEQdDfj97zvtLFWCSH= zxJQLCFfgc=xJHzuB$lLFB^RY8mZUNm85kPr8XD*tn1&b{TA7$x85!#um{=JY%-OHh zjG`eoKP5A*5~RUE*T7QO$S}mv*vi=4%ES<&q5s@38wLgjH;@g*`DrEPiAAXlp1FzX zslJKnnaSA-W_sp&=DKDIU@HwQbPbIZ0u9X+GD=Dctn~HE%ggmLL8^1Xs`c`V(gVML zzsZ{uoAfi2^QRkFoI|t8 zHzYGRmBG-+!qmXhz|73>+rP={7#J9Yk<1CstV(4tG}klrc5>RWjmwyUfk75YIyA_W nAuTf})kU}oXkrG1_p&>k04(LhAK4%hK3dfhF=T}3=JeIzb#7j zp9%k9FAsKG!)!ag8WRNi0dVN-j!GEJ-9F%}vcKv9bzCOiwLlFu6X}e*psngE*2Ju$@*`8L64+86^yc zX7l6joMB*K5W`dwo|#gT!C+|ilwsZ@1_lO6Bo)4yxv3?U1*r^RH|b|4=TA4VIEQAF zZ%AftDubc1iG{hTxrvF9Rmw*b1_lOUBy)l@t5O-v^~^22otzR>9ZMJ(7-W&8LxVgS l(lT>Wt@QQN63a4^^YipFlk?+p_{>3R+0)g}Wt~$(69CFW?H&LC literal 0 HcmV?d00001 diff --git a/app/assets/images/favicons/github.png b/app/assets/images/favicons/github.png new file mode 100644 index 0000000000000000000000000000000000000000..3070ab07f23dd3be77dee943ca0c12ce2ae66f38 GIT binary patch literal 957 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+u%tWsIx;Y9?C1WI$jZRL zz*rpQ?!>U}oXkrG1_p&>k04(LhAK4%hK3dfhF=T}3=J%)79eIe%OQwuM#@zK>kS{(7aaDM zVw;sAQ4k=O#T6AaZ~u8m50P_K#rb(fEDXJi_J>W5sQl2ge&53FFZ~%9ugHmPo00TD z{w3q(Dvz1x7pL#8X1KD-)BdE?YR`$qlae;gO7Ywu#(GuxwUMXwlbqZ81DO0u?#nle z-Q+i3wSA4V`kai;VA)DZi30D5i7X;yO+Md@{(NpYa)9+V%7fImY19=E_#rDHJOtiU#zkE<38>GrLUjaon6H@@g$V@-@Nc>cRItokGflC z{C)k2zj8_!%ZJ0Au?!3hswJ)wB`Jv|saDBFsfi`23`PcqM!JRux(22ph9*`9CRWDg zx&|gz1_r#5VvA5Td%8(oODsAOPZkVI19o0*$hQdyA70CtmpW^(>? z0}GJ tvPjaQL7oh0nK`Le`ub^!WtqwOd3u@2`EfaX<_ruB44$rjF6*2UngB?OS55!` literal 0 HcmV?d00001 diff --git a/app/assets/images/favicons/google_play.png b/app/assets/images/favicons/google_play.png new file mode 100644 index 0000000000000000000000000000000000000000..464838525913ea6c8aac8e08c507962a4d0c0a0a GIT binary patch literal 1197 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUNSs54@ z7>k44ofy`glX=O&z@U)q5#-CjP^HGe(9pub@QZa@a2CEqi4B`cI zb_LonFfir?_=LDJFfbVH++ebEgF?*)ov9oAj;sqkzE-VcbLzP@1(#RrOx@mgXJ!9` z6~>EpEq}di!~3OH>-U{{JO6(}x#ONg|7Vr`UsC3A>gfN?rT_Pq`d>f!|8VL5qa|Ta z&;CD9`u|wT|I;P0pD(_2bp3y_B>CT!D|V@O93qqdUpZjideXLht;OPPR#S6sU7GHE zaIyIo_3kY;%QorF*lsX;htHNR4YyXBF5PXmVvoh@z0rra&3?9g!HZ?qoA%poJz&4{ zpyQrH*_U=~{kUY;=Oz2UE_T{~$mP&sw_`^r}|YGht89hQBzM`0&KR_~JK7 z@&A{V{ohdfe^+VboAc4{FT{SnnEL9>&VVYCV$=lt9p@UV{gMop8v%n*=n1O)-#P(otJDF|Az`(G=)5S4F;&O6ALQ0YY>lvLj zIT}oFs(#7LIl&ae*5-EXjtvK6oN%ylF}Jr}-He8Ysat#3&fVL*c!7Y6!;Ozm0XmXSdz+MWMF8dYiOWrU>ag*Xk}_>1!9|6 z85l5h{dPgokei>9nN|tWU|^|hWEx^%U}a!rWoWKz0MfuXF=Yk=1A`mLhT{CRlJdl& zR0hx7#Pn3(#PrPMYy~qtb3JoiGX=1f1{S)8Mhbz3W(pZ4B?VUc`sL;2dYK^AxnR|L z`9 zGEy_sGfEf?&F075Im5ufAcmgTe~DWM4fCyet) literal 0 HcmV?d00001 diff --git a/app/assets/images/favicons/twitter.png b/app/assets/images/favicons/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..9f5cf7e858606fd489878bfca591a30a5e01806d GIT binary patch literal 960 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUNSs54@ z7>k44ofy`glX=O&z@U)q5#-CjP^HGe(9pub@QZa@a2CEqi4B`cI zb_LonFfc3)@Ck8cU|@Ln{a4@dyLJ0-%sc|M~a7>#lyAcmKz|FMl8+3{%c9OuN7^@g&2N z#|&%UF)X~#Fy{ut%2y0CuP}7(Wte|kN$+(90|SFjNswPK1Ajqd!o~~xA0(ZcZ}8cv z?%k9Mo}(gRpKs4^48JYGA9cw7-8N>8goT~q^6Zb+Ukn9>P?ER13quF1tOo-F180Fp zWHAE+1BmUx;C3?Gj)8%p&C|s(MB;LCf&!C)lZRTG7@M2H?5V6Sn_j+nwXwLMX+})d zogN;WUu|vU*o}*NJ`=phU6V|U;!6X#pUv|a7#Q3@HWcTlm6RtIr80QtCZ?zQCZ=a5XDgWLnd_PB znkj&-G_cS$G*SpOG*ieZDJihh*Do(G*UJQ{&IPO1%P&d~{Qmtm0|SEu$i$G0(%d8~ zE0_G_(%jU%5-Y2K#Prl+2E*n5ck44SFo+|m0o!S1m64j6o>9VJXf{9Y&KU*<1~E(} z;h8BV84QMIPZ{PtVqjp9L{j0KnVVWtS&+&Ac9VW)a{hD!i*sl;`G#cXrZN~Bn^>Bd z85&wx7(G7;a(%o!LM7(8A5T-G@yGywoXcWB7~ literal 0 HcmV?d00001 diff --git a/app/assets/images/favicons/wikipedia.png b/app/assets/images/favicons/wikipedia.png new file mode 100644 index 0000000000000000000000000000000000000000..59a8063d3be24784265b754ee3c3e0562369bd7b GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7Sv_4GLn>|^oqUnE$w9!S zb0Npe1}UEZml(G-s6JRO;>a1qWTv2+zujLM}O_tt1F8R*BbPcS9}Sn)LCoJ{&iKXgU7%=h1DWCG0V$1o1@v&DT+kWN~5y!NgT3S1tk~^CC zxEvCg%>*Z;w#kDpJCm5hLr&y zKYsieqhzS7r!24V|K~a%Pp^sn{S0f5w=_2Wxzv5)`0)=BN*SqXQQ;APpU!%U`)vK-L73a;JyKCppw=T+Gn_XYqC^M{{79ywk%3N7ta}0m}6ruDEk+^Dx zReAl_S{YVVC~D|3Eq%nS-Q%z~ zLttIl3vHEaSFhfGzldSYN(rAtduy8&GRkvgl`CYGa^#d4)+~@Wv`Uau{JEvD;bJ|* zx~KZ`3Jhy6ayPE~u{uM>%AH|l)W7#jc`Ft^S67j84te9C%&@xYQ<^r*oU6Z2G<_~G zIV+>`Awu#YaaH`<>nD_!rJWnbv}D(*K&6D^#kb^D-g+o6FjTTz8TK*5WbNTH zh0ST(RFt{vGv9jZJXcnECa<#p>GbzsR!sF$>7J0lux77ffa?|p1_s8GAirP+hi5m^ z7#NuSJY5_^D&m%2PoDhNOM>-5$?@CUEVt!KAKzB__V;;ztIgTwYM$v@udC<15}%kL zZn)arWa(s&2!1Z}(*bV5H%>g9Qmr5zxJLPRdko{s%A<7ul8LQGX|C10NCX>P+gKax7{ z_h(8)?7GU>w=96?={2czy+<~o2Sq=mSGv4NEd~I|) z$mztSLyIC0h!$9WGgu(i$#(6&caY^t39CRh?J2$qItwOM&XE6iPU3F0UwZ2tPM1)# z#_IR?BK%yZbOtIUN=y|9Si9->Ok1|yAuo3*))=?^Y0R1%|8J`m+r`cn#W@R;0 zGEpUE;>}e;Qp+|k=sU!|WTI1xyl}?KeD6!PS2d?zli4l3qi>6%h{{WyR~{x0mzyPa ztl-O%Ss0KJTY82k=k0~5OIBFPEjF^)$-KSa@Zs_(L38%1gUY`WH%`xDt9zRxSt?<@ z^wXsl-VI&6juSq5obBW*=-jW!5?bUa>NDf>j`wXJz9uT25K3RA&9vohhoI*Bt_a2o zHOXl=NUaG zW-0RS$UIuiFwbyx>-@ck|11ns&|yki!Q?t6DfL}euM@|1MuqtETr*quJI!JJzdY$$ zV}7W;^ODD{jPG0?3OnS4O;eomv_;MW=DSbKQ<^4SEEMPCv_<5>2JIHswutW5 zMK%jPWR;Ezopi69cY&dy;=u_fZ%@4qzPa3u6s>IUDn ziQ3M*&tXciijDGp2Az%HjyslDNiR0O`+Byp+6H^>3`eo`f+wfX-S;(o!NilD%cZ4- zg(rW|dc2}zp5?FE{i=1{W$W^L?03GFzTa-q8_CkJFZ9{#sjBy+uK&Lk^)dI`*Rbq% zh97C&y2{J7|KDfTuq|!vuqm1A@&Eg)@BCXIKjzyJ^_DT^-0R#{pRfZhwa-@V4L|eK zulD?-?upJj{;Ph}f8&DgDJ hFLZ75qJ-)4$q{RdPfrq+XJBAp@O1TaS?83{1ON|$^d0~g^w{x|9`G~Dy5$z6|zdN%#{nyR5Gl4`p!rB$Lfq{ z@+xy=m8G0RIJ5?h9=dfpuYjE_FXwSNXZ6 z@T`nVj+|10oFc=Tm0v1tKBZ}YUl`9m`Gmf_f>>ytgim6_#d?O-JuGvsz7J6PwXcd{ z?L~&Qw?Bj^y)ss2Sl#sdMAN_bOSv1@$ym7u9Li-_8O2+%&|pW>OMT@x4$2H`HlKer z=g*xf469Q1Kb`*8Lz!vGF1wXs@4u`tP*%7lukta&L_0TZs+Y>z!)4EvRo;5)eC_p1 zI9@Cg8@s?z=}ULGyPV<@SH*2A%BKRA9>u#UY))fXv$uOfg66~&?)prjv@FhZ3KJO^ z7z9d!{DK+wJ2bo(Fi4nxUg7@w{(^u{fBt4NFtGD@x;TbZ#66uAI{UK)PwVU(e8tvh zdgP6bjg57Ujo;hfU*cPwWSwbLef?WZshof8{%JZVy`)l;>;lhdOnoG<)$qk88)G3? z+1d#cYgM(xO4l;FUVFQuy~puL*x41^H6%?^p1EB$+S-_O?aYd4dmOFKnyk`HE|{_S zSI~_F1L=!?DSRwj)eC#`&ieWL`=8DG8RquVYuYH(B8%du#UTB8$YX?M2_+8*iQR z`c~rbRysq;;C*zyvi^3LxjX-yPCqI*=fJnWif)b@ryAV%m5~lRm;FA!Y2|OxTg-=# zRPg)_JhSK1me4ip_iGuLE^4}`f5A**S@N^(o!Q&HzMh<3nQ&V(T-zRM?({uqbLG0L!R?1mrq8MWzOdxnZux^dy}w%Rsb{#5XYaJTK`wv!YW2_y zyASm?-&y$1e&NP?+i&l7Xk~_G>dxWkYqq*;ts0nCwoKSnah}XAlYWaXXB%I(3m!I{ zZds?4`W|j9$upmKYr4SIl%(lDIP66@SI=F)F3hQ3qV3?Sh$)&e)~zM!p%yHskFLMj z!rj<&;}VC~ULFR~x?k0KVi8-`{nRkuoZ4_9z>s&r;~RhLWM6E|ZU|G&Nb_3DCg5OV z{v$a?PF6it`K3L7_GjcelBxrXDH*J`nnf=v=q^Ot(0pY$zlZ|t2O$Zw@uWOYX1 z>Zx6G)g~|aZW5m5D9w?L>OB_v0Z5L?WoTn}GZuEK6P$t@6q^#*=(&-MU{Y zcbQflW}l?^Xs4OX60t4UH+)&s=@@eVg;8=+@Ou}N2*p#+Uv4j5P_CL@weHT|jcI9R zGZHzYU7x&ai)0plDzB$`^+Jb)*1knSs}Alg4BAwjUwk20*|>B;{O1cgrp@?3`t$~8^SZCPus(6u-$ zh+TN)YDcXFf}9(RyR>|BJp0$(VUcRDivOH7SNX4_z#R=ezYX&bv?<>Cl%6rgGkVFD zhO&mkiOM|zs_NEvHTV6l-foqu+xF0Hf_Ee@-z@(7+s;P@Yp-vf+f=)vp{@RdW?RKeOr8oJ`lcEothTuQasjv~1?N6_Cm~O)k>@ zR`<`nmlG!~X%6p@dg^^WbDP0h_b+8f&or@cd&x!Fi5@uSH~EqpJAZ9qO6Jb4%4Xv& zaV%#e(pk&4RYaSWe&5XRa_+)JJ}-Xh5U#U3To$GYuMWMiIX`UGjOWQ|TLdx|PM)Q9 zm}x@(&hB;d_V&9SoDpx9ny}g0g@<#GLe+BX`(3c}jHb~{0*Il0Kuy~6BXW#~dEu1TyIueWYxu9{w<_5hzYj1Z{ zFIsWbIsVVL%xSapWbLO2uFu^zF+Ps#08ci@g|;1TYgVtZe`Yyu;UM=^UPIZi<~d)byn; z92J)Em~FI~;qU7rFPr+`cbhlf)_2bM7t|yZW36*DfG?#beVX;;qUsrzcREy`SDRR+ zX5_34;m_#0(Iv95zQ6PT3>%|uzi%D9x-;C-pe!@l=-OlDdOHrGxe*Wk`n0*Nm+Y15 zcqutMm*Z#f+q!nC8$4f*Ed4oUThZs$e7kP{Ig;U?cwFH4zhA%S*FWbg$?t6s_h+fR z8)>0APue3`IP=eap2v3>+@2^(%zXTAO24SqZ*}iKXID(mTPOFX;eO?|4>4Kc-&Uu* zSXlA2x?{$||EFzgF2p6jSg`Vzgj|NokB5zJ;pG_%K2E7WvA|dM#9_wVWm8{IaJb#o f9A3=k_@9x-;z@u|OqezU0|SGntDnm{r-UW|P6RA9 literal 0 HcmV?d00001 diff --git a/app/assets/images/posted.png b/app/assets/images/posted.png new file mode 100644 index 0000000000000000000000000000000000000000..7127aac1c6bc9ead4a723022d623d0fc6ce6db41 GIT binary patch literal 1491 zcmeAS@N?(olHy`uVBq!ia0y~yVBiN~4mJh`2J356y%-o6BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@7BGN-jeSKyVsdtB zi9%9pdS;%j()-=}l@u~lY?Z=IeGPmIoKrJ0J*tXQgRA^PlB=?lEmM^2?G$V(tSWK~ za#KqZ6)JLb@`|l0Y?Z*~TICg6frRyy6u?SKvTcwn`Gtf;oFf&jv zGt@IQHZeCh*HJJsFf`CNFw!?P(ls=+T7#d8;`MLTPi3R$GdIlgbLHwFq;OmQDX>KlDb#X~h zD#E>34K5C;EJ)Q4N-fSWElN%eN=;J+xv9X)xhOTUB)=#mKR*W+iUAq*>cZh>BAW{Q=Wqm!|vfwP&Tk)@-dp{t>z zv#E=lv7xE4xrwQ>qopNGuSMv>2~2MaLa#Yay`ZE33Jxom)S}F?)D*X({9FaF zm#s2!yTt^jc~HG6xZPrkQ?I_Af{i{XVv!;mCKTl224aHKBq)8_DIgMlYF>)1QjwCq zUA4TGHvDJL(D*Xv`Oobf*+O+T78PPVZ25{O!dG9F7W$}>miOqR#q^UY zeY@|z^9j8gtaRJ4>}HPHsiy9uNpmXYmG)>RaGlzuQ?>VA^TUD+#Z6s{bY`D@Ccppw z`;}L-?)*z)vNoUS@x~=aPrNkU^U3`K)8p2c`v*=j4cc7rKXTcLs=e13Mc?UfjM2+p z8uapZ*4C<~?J-s|eB4_(tLNTI**Ek5_8kWk4Ax(NZLj#j^G=SLiDA{oh(Eg`bduJF zymdKI;Vst0De&?x&QzG literal 0 HcmV?d00001 diff --git a/app/assets/images/spinner_96.gif b/app/assets/images/spinner_96.gif new file mode 100644 index 0000000000000000000000000000000000000000..24af6375eed5580d1beea62eb864f75e4f1876f7 GIT binary patch literal 13707 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 a3k1WPrLXI0aLaV$Fv%&z6*n<3SOWlLGM_~N literal 0 HcmV?d00001 diff --git a/app/assets/images/spinner_96_w.gif b/app/assets/images/spinner_96_w.gif new file mode 100644 index 0000000000000000000000000000000000000000..11e6162e4cdd51de51ea4fc47b80a9c90290f637 GIT binary patch literal 10729 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 Rweo|IR^NmI6-NdJYXA=dybAyT literal 0 HcmV?d00001 diff --git a/app/assets/images/thread-default.png b/app/assets/images/thread-default.png new file mode 100644 index 0000000000000000000000000000000000000000..0e12b0d0ad7ac1fe99e76dbcfc7276ee1162a1d7 GIT binary patch literal 1868 zcmeAS@N?(olHy`uVBq!ia0y~yV0g#Cz+l0_#K6E%`a0O1fq_A?#5JNMI6tkVJh3R1 z!7(L2DOJHUH!(dmC^a#qvhZZ84FdzSQf5d*NrbPDRdRl=ULr`1UPW#J0|?mIR}>^B zXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8h zBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rte&$2;Tq&=lr5n1yel(-DCqZ z0|hffJwsy?b8~YY1tSAP1APM{eM2K%Lvt%*BP#;~1t?ImQ?MyYNwW%aaf8}bl#*tv zlu=SrV5P5LUS6(OZmgGIl&)`RX=w>E!^lXtC?!p|xH7LKu|hYmSQ%!5OKNd)QD#9& zW`3Rm$i&2?{L&IzB_*h_6}bg)WAlok!IYezt6z~=pl_&W0P+&Vuek-jzW9~q=E7AM zmjtCE+>6!V;*iRMRQ;gT;{4L07f{i{XVv!;mCKTl224aHKBq)8_ zDIgMlYF>)1QjwCq-H`;~)nX}RVwu4Cf!c~VFHqTgi(!pj6PcGY( zg-H$yiW4Sm3VYP=vPz^=bS3jE0Yev_5>G1?o&e2LP7)r|_Z@q6a&Ix;?dL2>`}{cs zf7jSOm_Ge}b>;M{4-0lMZTPe2p+AF%B!eciLMp=&9w@6pWKZm+()#^7B)((z`UiST4mZQM0m+O}= zzZksly}bGCR|_lGnpGHc*j;`7O!If^w>w|fT$SoS{_Me9H|4{7b-GTKU|fb9#T@89R739vQrB_vFZzHic1>W>^x#~T179= z^1iFm)28C`>eus5*hPGOweA^Dx5`^>wfW^`b~(96uSvdP^pBl!GoeLJ+4I%3%84#d zuX`+wn%n($o7AH%ft7yUE~h3~y}i7}BbhTO&P%p?a$WdJmGVm-l5ss#{+Ej{)%>}v z)Juv)m>hsg&z3=vEU(-1@^WeNHnV@;fLj8BEZ=WrYmf~C=qxSi5f=*ME zzzSZ*l^0eEx9#R&f3Y<6RiQ`Z!dwDzNWg_!5gVd z<}kmWxBP0qs@tD{q1~64rd;eY4LkPgu&osOX=Za`dO= zNjoL&uK)kabF@UnRy3Ra@4wLH!ml52Z@bN}xm&5}!t6(ntDa6u-o8JL)nNAgi5~tT zY;(V-g|54P`l7bGsrc=!bH0gvx^p|v#N)Su+M!JMC#<%`vqUd92u@soEpW@EeOuoA z{&(1-mK?qcRr*gFcp#=98SS92ADN%qCFE2!$qF&Q;h>Az5&&5p00i_>zopr04xLV As{jB1 literal 0 HcmV?d00001 diff --git a/app/assets/images/wmd-buttons.png b/app/assets/images/wmd-buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..50b37090363e6757e7bd0ba75cd1e0dfaabd13d2 GIT binary patch literal 7465 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 + item = Discourse.SiteCustomization.create(name: 'New Style') + @get('content').pushObject(item) + @set('content.selectedItem', item) + + selectStyle: (style)-> @set('content.selectedItem', style) + + save: -> @get('content.selectedItem').save() + + delete: -> + bootbox.confirm Em.String.i18n("admin.customize.delete_confirm"), Em.String.i18n("no_value"), Em.String.i18n("yes_value"), (result) => + if result + selected = @get('content.selectedItem') + selected.delete() + @set('content.selectedItem', null) + @get('content').removeObject(selected) + diff --git a/app/assets/javascripts/admin/controllers/admin_email_logs_controller.js.coffee b/app/assets/javascripts/admin/controllers/admin_email_logs_controller.js.coffee new file mode 100644 index 00000000000..9ecce40a519 --- /dev/null +++ b/app/assets/javascripts/admin/controllers/admin_email_logs_controller.js.coffee @@ -0,0 +1,17 @@ +window.Discourse.AdminEmailLogsController = Ember.ArrayController.extend Discourse.Presence, + + sendTestEmailDisabled: (-> + @blank('testEmailAddress') + ).property('testEmailAddress') + + sendTestEmail: -> + @set('sentTestEmail', false) + $.ajax + url: '/admin/email_logs/test', + type: 'POST' + data: + email_address: @get('testEmailAddress') + success: => + @set('sentTestEmail', true) + false + \ No newline at end of file diff --git a/app/assets/javascripts/admin/controllers/admin_flags_controller.js.coffee b/app/assets/javascripts/admin/controllers/admin_flags_controller.js.coffee new file mode 100644 index 00000000000..c1f0e781b8f --- /dev/null +++ b/app/assets/javascripts/admin/controllers/admin_flags_controller.js.coffee @@ -0,0 +1,16 @@ +window.Discourse.AdminFlagsController = Ember.Controller.extend + + clearFlags: (item) -> + item.clearFlags().then (=> + @content.removeObject(item) + ), (-> + bootbox.alert("something went wrong") + ) + + adminOldFlagsView: (-> + @query == 'old' + ).property('query') + + adminActiveFlagsView: (-> + @query == 'active' + ).property('query') diff --git a/app/assets/javascripts/admin/controllers/admin_site_settings_controller.js.coffee b/app/assets/javascripts/admin/controllers/admin_site_settings_controller.js.coffee new file mode 100644 index 00000000000..b08a6e9cace --- /dev/null +++ b/app/assets/javascripts/admin/controllers/admin_site_settings_controller.js.coffee @@ -0,0 +1,30 @@ +window.Discourse.AdminSiteSettingsController = Ember.ArrayController.extend Discourse.Presence, + + filter: null + onlyOverridden: false + + filteredContent: (-> + return null unless @present('content') + filter = @get('filter').toLowerCase() if @get('filter') + + @get('content').filter (item, index, enumerable) => + + return false if @get('onlyOverridden') and !item.get('overridden') + + if filter + return true if item.get('setting').toLowerCase().indexOf(filter) > -1 + return true if item.get('description').toLowerCase().indexOf(filter) > -1 + return true if item.get('value').toLowerCase().indexOf(filter) > -1 + return false + else + true + ).property('filter', 'content.@each', 'onlyOverridden') + + + resetDefault: (setting) -> + setting.set('value', setting.get('default')) + setting.save() + + save: (setting) -> setting.save() + + cancel: (setting) -> setting.resetValue() \ No newline at end of file diff --git a/app/assets/javascripts/admin/controllers/admin_users_list_controller.js.coffee b/app/assets/javascripts/admin/controllers/admin_users_list_controller.js.coffee new file mode 100644 index 00000000000..01fb4919f20 --- /dev/null +++ b/app/assets/javascripts/admin/controllers/admin_users_list_controller.js.coffee @@ -0,0 +1,45 @@ +window.Discourse.AdminUsersListController = Ember.ArrayController.extend Discourse.Presence, + + username: null + query: null + selectAll: false + content: null + + selectAllChanged: (-> + @get('content').each (user) => user.set('selected', @get('selectAll')) + ).observes('selectAll') + + filterUsers: Discourse.debounce(-> + @refreshUsers() + ,250).observes('username') + + orderChanged: (-> + @refreshUsers() + ).observes('query') + + showApproval: (-> + return false unless Discourse.SiteSettings.must_approve_users + return true if @get('query') is 'new' + return true if @get('query') is 'pending' + ).property('query') + + selectedCount: (-> + return 0 if @blank('content') + @get('content').filterProperty('selected').length + ).property('content.@each.selected') + + hasSelection: (-> + @get('selectedCount') > 0 + ).property('selectedCount') + + refreshUsers: -> + @set 'content', Discourse.AdminUser.findAll(@get('query'), @get('username')) + + show: (term) -> + if @get('query') == term + @refreshUsers() + else + @set('query', term) + + approveUsers: -> + Discourse.AdminUser.bulkApprove(@get('content').filterProperty('selected')) diff --git a/app/assets/javascripts/admin/models/admin_user.js.coffee b/app/assets/javascripts/admin/models/admin_user.js.coffee new file mode 100644 index 00000000000..148149b767f --- /dev/null +++ b/app/assets/javascripts/admin/models/admin_user.js.coffee @@ -0,0 +1,122 @@ +window.Discourse.AdminUser = Discourse.Model.extend + + # Revoke the user's admin access + revokeAdmin: -> + @set('admin',false) + @set('can_grant_admin',true) + @set('can_revoke_admin',false) + $.ajax "/admin/users/#{@get('id')}/revoke_admin", type: 'PUT' + + grantAdmin: -> + @set('admin',true) + @set('can_grant_admin',false) + @set('can_revoke_admin',true) + $.ajax "/admin/users/#{@get('id')}/grant_admin", type: 'PUT' + + refreshBrowsers: -> + $.ajax "/admin/users/#{@get('id')}/refresh_browsers", + type: 'POST' + bootbox.alert("Message sent to all clients!") + + + + approve: -> + @set('can_approve', false) + @set('approved', true) + @set('approved_by', Discourse.get('currentUser')) + $.ajax "/admin/users/#{@get('id')}/approve", type: 'PUT' + + username_lower:(-> + @get('username').toLowerCase() + ).property('username') + + trustLevel: (-> + Discourse.get('site.trust_levels').findProperty('id', @get('trust_level')) + ).property('trust_level') + + + canBan: ( -> + !@admin && !@moderator + ).property('admin','moderator') + + banDuration: (-> + banned_at = Date.create(@banned_at) + banned_till = Date.create(@banned_till) + + "#{banned_at.short()} - #{banned_till.short()}" + + ).property('banned_till', 'banned_at') + + ban: -> + debugger + if duration = parseInt(window.prompt(Em.String.i18n('admin.user.ban_duration'))) + if duration > 0 + $.ajax "/admin/users/#{@id}/ban", + type: 'PUT' + data: + duration: duration + success: -> + window.location.reload() + return + error: (e) => + error = Em.String.i18n('admin.user.ban_failed', error: "http: #{e.status} - #{e.body}") + bootbox.alert error + return + + unban: -> + $.ajax "/admin/users/#{@id}/unban", + type: 'PUT' + success: -> + window.location.reload() + return + error: (e) => + error = Em.String.i18n('admin.user.unban_failed', error: "http: #{e.status} - #{e.body}") + bootbox.alert error + return + + impersonate: -> + $.ajax "/admin/impersonate" + type: 'POST' + data: + username_or_email: @get('username') + success: -> + document.location = "/" + error: (e) => + @set('loading', false) + if e.status == 404 + bootbox.alert Em.String.i18n('admin.impersonate.not_found') + else + bootbox.alert Em.String.i18n('admin.impersonate.invalid') + +window.Discourse.AdminUser.reopenClass + + create: (result) -> + result = @_super(result) + result + + bulkApprove: (users) -> + users.each (user) -> + user.set('approved', true) + user.set('can_approve', false) + user.set('selected', false) + + $.ajax "/admin/users/approve-bulk", + type: 'PUT' + data: {users: users.map (u) -> u.id} + + find: (username)-> + promise = new RSVP.Promise() + $.ajax + url: "/admin/users/#{username}" + success: (result) -> promise.resolve(Discourse.AdminUser.create(result)) + promise + + findAll: (query, filter)-> + result = Em.A() + $.ajax + url: "/admin/users/list/#{query}.json" + data: {filter: filter} + success: (users) -> + users.each (u) -> result.pushObject(Discourse.AdminUser.create(u)) + result + diff --git a/app/assets/javascripts/admin/models/email_log.js.coffee b/app/assets/javascripts/admin/models/email_log.js.coffee new file mode 100644 index 00000000000..7c3da0807fd --- /dev/null +++ b/app/assets/javascripts/admin/models/email_log.js.coffee @@ -0,0 +1,17 @@ +window.Discourse.EmailLog = Discourse.Model.extend({}) + +window.Discourse.EmailLog.reopenClass + + create: (attrs) -> + attrs.user = Discourse.AdminUser.create(attrs.user) if attrs.user + @_super(attrs) + + findAll: (filter)-> + result = Em.A() + $.ajax + url: "/admin/email_logs.json" + data: {filter: filter} + success: (logs) -> + logs.each (log) -> result.pushObject(Discourse.EmailLog.create(log)) + result + diff --git a/app/assets/javascripts/admin/models/flagged_post.js.coffee b/app/assets/javascripts/admin/models/flagged_post.js.coffee new file mode 100644 index 00000000000..6d3f0fa0bc3 --- /dev/null +++ b/app/assets/javascripts/admin/models/flagged_post.js.coffee @@ -0,0 +1,62 @@ +window.Discourse.FlaggedPost = Discourse.Post.extend + flaggers: (-> + r = [] + @post_actions.each (a)=> + r.push(@userLookup[a.user_id]) + r + ).property() + + messages: (-> + r = [] + @post_actions.each (a)=> + if a.message + r.push + user: @userLookup[a.user_id] + message: a.message + r + ).property() + + lastFlagged: (-> + @post_actions[0].created_at + ).property() + + user: (-> + @userLookup[@user_id] + ).property() + + topicHidden: (-> + @get('topic_visible') == 'f' + ).property('topic_hidden') + + clearFlags: -> + promise = new RSVP.Promise() + $.ajax "/admin/flags/clear/#{@id}", + type: 'POST' + cache: false + success: -> + promise.resolve() + error: (e)-> + promise.reject() + + promise + + hiddenClass: (-> + "hidden-post" if @get('hidden') == "t" + ).property() + + +window.Discourse.FlaggedPost.reopenClass + + findAll: (filter) -> + result = Em.A() + $.ajax + url: "/admin/flags/#{filter}.json" + success: (data) -> + userLookup = {} + data.users.each (u) -> userLookup[u.id] = Discourse.User.create(u) + data.posts.each (p) -> + f = Discourse.FlaggedPost.create(p) + f.userLookup = userLookup + result.pushObject(f) + result + diff --git a/app/assets/javascripts/admin/models/site_customization.js.coffee b/app/assets/javascripts/admin/models/site_customization.js.coffee new file mode 100644 index 00000000000..46a8622d11d --- /dev/null +++ b/app/assets/javascripts/admin/models/site_customization.js.coffee @@ -0,0 +1,78 @@ +window.Discourse.SiteCustomization = Discourse.Model.extend + + init: -> + @_super() + @startTrackingChanges() + + trackedProperties: ['enabled','name', 'stylesheet', 'header', 'override_default_style'] + + description: (-> + "#{@.name}#{if @.enabled then ' (*)' else ''}" + ).property('selected', 'name') + + changed: (-> + return false unless @.originals + @trackedProperties.any (p)=> + @.originals[p] != @get(p) + ).property('override_default_style','enabled','name', 'stylesheet', 'header', 'originals') # TODO figure out how to call with apply + + startTrackingChanges: -> + @set('originals',{}) + + @trackedProperties.each (p)=> + @.originals[p] = @get(p) + true + + previewUrl: (-> + "/?preview-style=#{@get('key')}" + ).property('key') + + disableSave:(-> + !@get('changed') + ).property('changed') + + save: -> + @startTrackingChanges() + data = + name: @name + enabled: @enabled + stylesheet: @stylesheet + header: @header + override_default_style: @override_default_style + + $.ajax + url: "/admin/site_customizations#{if @id then '/' + @id else ''}" + data: + site_customization: data + type: if @id then 'PUT' else 'POST' + + delete: -> + return unless @id + $.ajax + url: "/admin/site_customizations/#{ @id }" + type: 'DELETE' + +SiteCustomizations = Ember.ArrayProxy.extend + selectedItemChanged: (-> + selected = @get('selectedItem') + @get('content').each (i)-> + i.set('selected', selected == i) + ).observes('selectedItem') + + +Discourse.SiteCustomization.reopenClass + findAll: -> + content = SiteCustomizations.create + content: [] + loading: true + + $.ajax + url: "/admin/site_customizations" + dataType: "json" + success: (data)=> + data?.site_customizations.each (c)-> + item = Discourse.SiteCustomization.create(c) + content.pushObject(item) + content.set('loading',false) + + content diff --git a/app/assets/javascripts/admin/models/site_setting.js.coffee b/app/assets/javascripts/admin/models/site_setting.js.coffee new file mode 100644 index 00000000000..8c7299683e8 --- /dev/null +++ b/app/assets/javascripts/admin/models/site_setting.js.coffee @@ -0,0 +1,42 @@ +window.Discourse.SiteSetting = Discourse.Model.extend Discourse.Presence, + + # Whether a property is short. + short: (-> + return true if @blank('value') + return @get('value').toString().length < 80 + ).property('value') + + # Whether the site setting has changed + dirty: (-> + @get('originalValue') != @get('value') + ).property('originalValue', 'value') + + overridden: (-> + val = @get('value') + defaultVal = @get('default') + return val.toString() != defaultVal.toString() if (val and defaultVal) + return val != defaultVal + ).property('value') + + resetValue: -> + @set('value', @get('originalValue')) + + save: -> + + # Update the setting + $.ajax "/admin/site_settings/#{@get('setting')}", + data: + value: @get('value') + type: 'PUT' + success: => @set('originalValue', @get('value')) + + +window.Discourse.SiteSetting.reopenClass + findAll: -> + result = Em.A() + $.get "/admin/site_settings", (settings) -> + settings.each (s) -> + s.originalValue = s.value + result.pushObject(Discourse.SiteSetting.create(s)) + result + diff --git a/app/assets/javascripts/admin/routes/admin_customize_route.js.coffee b/app/assets/javascripts/admin/routes/admin_customize_route.js.coffee new file mode 100644 index 00000000000..3eacf56f184 --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin_customize_route.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminCustomizeRoute = Discourse.Route.extend + model: -> Discourse.SiteCustomization.findAll() \ No newline at end of file diff --git a/app/assets/javascripts/admin/routes/admin_email_logs_route.js.coffee b/app/assets/javascripts/admin/routes/admin_email_logs_route.js.coffee new file mode 100644 index 00000000000..f19abfc7172 --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin_email_logs_route.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminEmailLogsRoute = Discourse.Route.extend + model: -> Discourse.EmailLog.findAll() \ No newline at end of file diff --git a/app/assets/javascripts/admin/routes/admin_flags_active_route.js.coffee b/app/assets/javascripts/admin/routes/admin_flags_active_route.js.coffee new file mode 100644 index 00000000000..edb08d5b2d8 --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin_flags_active_route.js.coffee @@ -0,0 +1,6 @@ +Discourse.AdminFlagsActiveRoute = Discourse.Route.extend + model: -> Discourse.FlaggedPost.findAll('active') + setupController: (controller, model) -> + c = @controllerFor('adminFlags') + c.set('content', model) + c.set('query', 'active') \ No newline at end of file diff --git a/app/assets/javascripts/admin/routes/admin_flags_old_route.js.coffee b/app/assets/javascripts/admin/routes/admin_flags_old_route.js.coffee new file mode 100644 index 00000000000..f51c8f396e2 --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin_flags_old_route.js.coffee @@ -0,0 +1,6 @@ +Discourse.AdminFlagsOldRoute = Discourse.Route.extend + model: -> Discourse.FlaggedPost.findAll('old') + setupController: (controller, model) -> + c = @controllerFor('adminFlags') + c.set('content', model) + c.set('query', 'old') \ No newline at end of file diff --git a/app/assets/javascripts/admin/routes/admin_routes.js.coffee b/app/assets/javascripts/admin/routes/admin_routes.js.coffee new file mode 100644 index 00000000000..1aa07c1f5d8 --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin_routes.js.coffee @@ -0,0 +1,17 @@ +Discourse.buildRoutes -> + @resource 'admin', path: '/admin', -> + @route 'dashboard', path: '/' + @route 'site_settings', path: '/site_settings' + @route 'email_logs', path: '/email_logs' + @route 'customize', path: '/customize' + + @resource 'adminFlags', path: '/flags', -> + @route 'active', path: '/active' + @route 'old', path: '/old' + + @resource 'adminUsers', path: '/users', -> + @resource 'adminUser', path: '/:username' + @resource 'adminUsersList', path: '/list', -> + @route 'active', path: '/active' + @route 'new', path: '/new' + @route 'pending', path: '/pending' diff --git a/app/assets/javascripts/admin/routes/admin_site_settings_route.js.coffee b/app/assets/javascripts/admin/routes/admin_site_settings_route.js.coffee new file mode 100644 index 00000000000..010ad430077 --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin_site_settings_route.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminSiteSettingsRoute = Discourse.Route.extend + model: -> Discourse.SiteSetting.findAll() diff --git a/app/assets/javascripts/admin/routes/admin_user_route.js.coffee b/app/assets/javascripts/admin/routes/admin_user_route.js.coffee new file mode 100644 index 00000000000..9362aca9496 --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin_user_route.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminUserRoute = Discourse.Route.extend + model: (params) -> Discourse.AdminUser.find(params.username) \ No newline at end of file diff --git a/app/assets/javascripts/admin/routes/admin_users_list_active_route.js.coffee b/app/assets/javascripts/admin/routes/admin_users_list_active_route.js.coffee new file mode 100644 index 00000000000..2ccced53141 --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin_users_list_active_route.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminUsersListActiveRoute = Discourse.Route.extend + setupController: (c) -> @controllerFor('adminUsersList').show('active') \ No newline at end of file diff --git a/app/assets/javascripts/admin/routes/admin_users_list_new_route.js.coffee b/app/assets/javascripts/admin/routes/admin_users_list_new_route.js.coffee new file mode 100644 index 00000000000..7dcf80a052b --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin_users_list_new_route.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminUsersListNewRoute = Discourse.Route.extend + setupController: (c) -> @controllerFor('adminUsersList').show('new') \ No newline at end of file diff --git a/app/assets/javascripts/admin/routes/admin_users_list_pending_route.js.coffee b/app/assets/javascripts/admin/routes/admin_users_list_pending_route.js.coffee new file mode 100644 index 00000000000..cec059da82e --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin_users_list_pending_route.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminUsersListNewRoute = Discourse.Route.extend + setupController: (c) -> @controllerFor('adminUsersList').show('pending') \ No newline at end of file diff --git a/app/assets/javascripts/admin/templates/admin.js.handlebars b/app/assets/javascripts/admin/templates/admin.js.handlebars new file mode 100644 index 00000000000..48c32d6ef1e --- /dev/null +++ b/app/assets/javascripts/admin/templates/admin.js.handlebars @@ -0,0 +1,23 @@ +

+ diff --git a/app/assets/javascripts/admin/templates/customize.js.handlebars b/app/assets/javascripts/admin/templates/customize.js.handlebars new file mode 100644 index 00000000000..f9359dee02b --- /dev/null +++ b/app/assets/javascripts/admin/templates/customize.js.handlebars @@ -0,0 +1,56 @@ + + + +{{#if content.selectedItem}} +
+ + + {{#with content.selectedItem}} + {{view Ember.TextField class="style-name" valueBinding="name"}} + {{#if view.headerActive}} + {{view Discourse.AceEditorView contentBinding="header" mode="html"}} + {{/if}} + {{#if view.stylesheetActive}} + {{view Discourse.AceEditorView contentBinding="stylesheet" mode="css"}} + {{/if}} + {{/with}} +
+
+ {{i18n admin.customize.override_default}} {{view Ember.Checkbox checkedBinding="content.selectedItem.override_default_style"}} + {{i18n admin.customize.enabled}} {{view Ember.Checkbox checkedBinding="content.selectedItem.enabled"}} + {{#unless content.selectedItem.changed}} + {{i18n admin.customize.preview}} + | + {{i18n admin.customize.undo_preview}}
+ {{/unless}} +
+ +
+ + {{i18n admin.customize.delete}} + {{content.savingStatus}} +
+ +
+{{/if}} +
+ diff --git a/app/assets/javascripts/admin/templates/dashboard.js.handlebars b/app/assets/javascripts/admin/templates/dashboard.js.handlebars new file mode 100644 index 00000000000..fe5b381c738 --- /dev/null +++ b/app/assets/javascripts/admin/templates/dashboard.js.handlebars @@ -0,0 +1,4 @@ +

Welcome to the admin section.

+ +

Not much to see here right now. Why not try the Site Settings?

+ diff --git a/app/assets/javascripts/admin/templates/email_logs.js.handlebars b/app/assets/javascripts/admin/templates/email_logs.js.handlebars new file mode 100644 index 00000000000..371fd81b858 --- /dev/null +++ b/app/assets/javascripts/admin/templates/email_logs.js.handlebars @@ -0,0 +1,37 @@ +
+
+ {{view Discourse.TextField valueBinding="controller.testEmailAddress" placeholderKey="admin.email_logs.test_email_address"}} +
+
+ + {{#if controller.sentTestEmail}}{{i18n admin.email_logs.sent_test}}{{/if}} +
+
+ + + + + + + + + + {{#if controller.content.length}} + {{#group}} + {{#collection contentBinding="controller.content" tagName="tbody" itemTagName="tr"}} + + + + + {{/collection}} + {{/group}} + {{/if}} + +
{{i18n admin.email_logs.sent_at}}{{i18n user.title}}{{i18n admin.email_logs.to_address}}{{i18n admin.email_logs.email_type}}
{{date view.content.created_at}} + {{#if view.content.user}} + {{avatar view.content.user imageSize="tiny"}} + {{view.content.user.username}} + {{else}} + — + {{/if}} + {{view.content.to_address}}{{view.content.email_type}}
diff --git a/app/assets/javascripts/admin/templates/flags.js.handlebars b/app/assets/javascripts/admin/templates/flags.js.handlebars new file mode 100644 index 00000000000..cf567f32310 --- /dev/null +++ b/app/assets/javascripts/admin/templates/flags.js.handlebars @@ -0,0 +1,49 @@ +
+
+ +
+
+ + + + + + + + + + + + + + {{#each content}} + + + + + + + + + {{#each messages}} + + + + + + + + {{/each}} + {{/each}} + +
Flag by
{{avatar user imageSize="small"}}{{#if topicHidden}} {{/if}}

{{title}}


{{{excerpt}}} +
{{#each flaggers}}{{avatar this imageSize="small"}}{{/each}}{{date lastFlagged}} + {{#if controller.adminActiveFlagsView}} + + {{/if}} +
+
{{avatar user imageSize="small"}} {{message}}
+
diff --git a/app/assets/javascripts/admin/templates/site_settings.js.handlebars b/app/assets/javascripts/admin/templates/site_settings.js.handlebars new file mode 100644 index 00000000000..c5ebf3d76ef --- /dev/null +++ b/app/assets/javascripts/admin/templates/site_settings.js.handlebars @@ -0,0 +1,34 @@ +
+ +
+ {{view Discourse.TextField valueBinding="controller.filter" placeholderKey="type_to_filter"}} +
+ +
+ +{{#collection contentBinding="filteredContent" classNames="form-horizontal settings" itemClass="row setting"}} + {{#with view.content}} +
+ {{unbound setting}} +
+
+ {{view Ember.TextField valueBinding="value" classNames="input-xxlarge"}} +
{{unbound description}}
+
+ {{#if dirty}} +
+ + + {{else}} + {{#if overridden}} + + {{/if}} + {{/if}} + {{/with}} +{{/collection}} diff --git a/app/assets/javascripts/admin/templates/user.js.handlebars b/app/assets/javascripts/admin/templates/user.js.handlebars new file mode 100644 index 00000000000..c109eb7b853 --- /dev/null +++ b/app/assets/javascripts/admin/templates/user.js.handlebars @@ -0,0 +1,168 @@ +
+

{{i18n admin.user.basics}}

+ +
+
{{i18n user.username.title}}
+
{{content.username}}
+
+ + + {{i18n admin.user.show_public_profile}} + + {{#if content.can_impersonate}} + + {{/if}} +
+
+
+
{{i18n user.email.title}}
+ +
+
+
{{i18n user.avatar.title}}
+
{{avatar content imageSize="large"}}
+
+
+
{{i18n user.ip_address.title}}
+
{{content.ip_address}}
+
+ +
+
+
+ + +
+

{{i18n admin.user.permissions}}

+ +
+
{{i18n admin.users.approved}}
+
+ {{#if content.approved}} + {{i18n admin.user.approved_by}} + {{avatar approved_by imageSize="small"}} + {{content.approved_by.username}} + {{else}} + {{i18n no_value}} + {{/if}} + +
+
+ {{#if content.can_approve}} + + {{/if}} +
+
+ +
+
{{i18n admin.user.admin}}
+
{{content.admin}}
+
+ {{#if content.can_revoke_admin}} + + {{/if}} + {{#if content.can_grant_admin}} + + {{/if}} +
+ +
+
+
{{i18n admin.user.moderator}}
+
{{content.moderator}}
+
+
+
{{i18n trust_level}}
+
{{content.trustLevel.name}}
+
+
+
{{i18n admin.user.banned}}
+
{{content.is_banned}}
+
+ {{#if content.is_banned}} + {{#if content.canBan}} + + {{content.banDuration}} + {{/if}} + {{else}} + {{#if content.canBan}} + + {{/if}} + {{/if}} +
+
+
+ +
+

{{i18n admin.user.activity}}

+ +
+
{{i18n created}}
+
{{{content.created_at_age}}}
+
+
+
{{i18n admin.users.last_emailed}}
+
{{{content.last_emailed_age}}}
+
+
+
{{i18n last_seen}}
+
{{{content.last_seen_age}}}
+
+
+
{{i18n admin.user.like_count}}
+
{{content.like_count}}
+
+
+
{{i18n admin.user.topics_entered}}
+
{{content.topics_entered}}
+
+
+
{{i18n admin.user.post_count}}
+
{{content.post_count}}
+
+
+
{{i18n admin.user.posts_read_count}}
+
{{content.posts_read_count}}
+
+
+
{{i18n admin.user.flags_given_count}}
+
{{content.flags_given_count}}
+
+
+
{{i18n admin.user.flags_received_count}}
+
{{content.flags_received_count}}
+
+
+
{{i18n admin.user.private_topics_count}}
+
{{content.private_topics_count}}
+
+
+
{{i18n admin.user.time_read}}
+
{{{content.time_read}}}
+
+
+
{{i18n user.invited.days_visited}}
+
{{{content.days_visited}}}
+
+
+ diff --git a/app/assets/javascripts/admin/templates/users_list.js.handlebars b/app/assets/javascripts/admin/templates/users_list.js.handlebars new file mode 100644 index 00000000000..7da213cc503 --- /dev/null +++ b/app/assets/javascripts/admin/templates/users_list.js.handlebars @@ -0,0 +1,82 @@ +
+
+ +
+
+ {{view Discourse.TextField valueBinding="controller.username" placeholderKey="username"}} +
+
+ +{{#if hasSelection}} +
+ +
+{{/if}} + +{{#if content.length}} + + + {{#if showApproval}} + + {{/if}} + + + + + + + + + + {{#if showApproval}} + + {{/if}} + + + + + {{#each content}} + + {{#if controller.showApproval}} + + {{/if}} + + + + + + + + + + + + {{#if controller.showApproval}} + + {{/if}} + + {{/each}} + +
{{view Ember.Checkbox checkedBinding="selectAll"}} {{i18n username}}{{i18n email}}{{i18n admin.users.last_emailed}}{{i18n last_seen}}{{i18n admin.user.topics_entered}}{{i18n admin.user.posts_read_count}}{{i18n admin.user.time_read}}{{i18n created}}{{i18n admin.users.approved}} 
+ {{#if can_approve}} + {{view Ember.Checkbox checkedBinding="selected"}} + {{/if}} + + {{avatar this imageSize="small"}} + {{unbound username}}{{unbound email}}{{{unbound last_emailed_age}}}{{{unbound last_seen_age}}}{{{unbound topics_entered}}}{{{unbound posts_read_count}}}{{{unbound time_read}}}{{{unbound created_at_age}}} + {{#if approved}} + {{i18n yes_value}} + {{else}} + {{i18n no_value}} + {{/if}} + {{#if admin}}{{/if}} +
+{{else}} +
{{i18n loading}}
+{{/if}} \ No newline at end of file diff --git a/app/assets/javascripts/admin/translations.js.erb b/app/assets/javascripts/admin/translations.js.erb new file mode 100644 index 00000000000..2b6519bb79c --- /dev/null +++ b/app/assets/javascripts/admin/translations.js.erb @@ -0,0 +1,7 @@ +//= depend_on 'en.yml' + +<% SimplesIdeias::I18n.assert_usable_configuration! %> +<% admin = SimplesIdeias::I18n.translation_segments['app/assets/javascripts/i18n/admin.en.js'] + admin[:en][:js] = admin[:en].delete(:admin_js) +%> +$.extend(true, I18n.translations, <%= admin.to_json %>); diff --git a/app/assets/javascripts/admin/views/ace_editor_view.js.coffee b/app/assets/javascripts/admin/views/ace_editor_view.js.coffee new file mode 100644 index 00000000000..66486cd9234 --- /dev/null +++ b/app/assets/javascripts/admin/views/ace_editor_view.js.coffee @@ -0,0 +1,42 @@ +Discourse.AceEditorView = window.Discourse.View.extend + mode: 'css' + classNames: ['ace-wrapper'] + + contentChanged:(-> + if @editor && !@skipContentChangeEvent + @editor.getSession().setValue(@get('content')) + ).observes('content') + + render: (buffer) -> + buffer.push("
") + buffer.push(Handlebars.Utils.escapeExpression(@get('content'))) if @get('content') + buffer.push("
") + + willDestroyElement: -> + if @editor + @editor.destroy() + @editor = null + + didInsertElement: -> + initAce = => + @editor = ace.edit(@$('.ace')[0]) + @editor.setTheme("ace/theme/chrome") + @editor.setShowPrintMargin(false) + @editor.getSession().setMode("ace/mode/#{@get('mode')}") + @editor.on "change", (e)=> + # amending stuff as you type seems a bit out of scope for now - can revisit after launch + # changes = @get('changes') + # unless changes + # changes = [] + # @set('changes', changes) + # changes.push e.data + + @skipContentChangeEvent = true + @set('content', @editor.getSession().getValue()) + @skipContentChangeEvent = false + if window.ace + initAce() + else + $LAB.script('http://d1n0x3qji82z53.cloudfront.net/src-min-noconflict/ace.js').wait initAce + + diff --git a/app/assets/javascripts/admin/views/admin_customize_view.js.coffee b/app/assets/javascripts/admin/views/admin_customize_view.js.coffee new file mode 100644 index 00000000000..26201b41e47 --- /dev/null +++ b/app/assets/javascripts/admin/views/admin_customize_view.js.coffee @@ -0,0 +1,33 @@ +Discourse.AdminCustomizeView = window.Discourse.View.extend + templateName: 'admin/templates/customize' + classNames: ['customize'] + contentBinding: 'controller.content' + + init: -> + @_super() + @set('selected', 'stylesheet') + + headerActive: (-> + @get('selected') == 'header' + ).property('selected') + + stylesheetActive: (-> + @get('selected') == 'stylesheet' + ).property('selected') + + selectHeader: -> + @set('selected', 'header') + + selectStylesheet: -> + @set('selected', 'stylesheet') + + + didInsertElement: -> + Mousetrap.bindGlobal ['meta+s', 'ctrl+s'], => + @get('controller').save() + return false + + willDestroyElement: -> + Mousetrap.unbindGlobal('meta+s','ctrl+s') + + diff --git a/app/assets/javascripts/admin/views/admin_dashboard_view.js.coffee b/app/assets/javascripts/admin/views/admin_dashboard_view.js.coffee new file mode 100644 index 00000000000..8182098371d --- /dev/null +++ b/app/assets/javascripts/admin/views/admin_dashboard_view.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminDashboardView = window.Discourse.View.extend + templateName: 'admin/templates/dashboard' \ No newline at end of file diff --git a/app/assets/javascripts/admin/views/admin_email_logs_view.js.coffee b/app/assets/javascripts/admin/views/admin_email_logs_view.js.coffee new file mode 100644 index 00000000000..b3831370cc0 --- /dev/null +++ b/app/assets/javascripts/admin/views/admin_email_logs_view.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminEmailLogsView = window.Discourse.View.extend + templateName: 'admin/templates/email_logs' \ No newline at end of file diff --git a/app/assets/javascripts/admin/views/admin_flags_view.js.coffee b/app/assets/javascripts/admin/views/admin_flags_view.js.coffee new file mode 100644 index 00000000000..0f96cd16459 --- /dev/null +++ b/app/assets/javascripts/admin/views/admin_flags_view.js.coffee @@ -0,0 +1,3 @@ +Discourse.AdminFlagsView = window.Discourse.View.extend + templateName: 'admin/templates/flags' + diff --git a/app/assets/javascripts/admin/views/admin_site_settings_view.js.coffee b/app/assets/javascripts/admin/views/admin_site_settings_view.js.coffee new file mode 100644 index 00000000000..8319287c334 --- /dev/null +++ b/app/assets/javascripts/admin/views/admin_site_settings_view.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminSiteSettingsView = window.Discourse.View.extend + templateName: 'admin/templates/site_settings' \ No newline at end of file diff --git a/app/assets/javascripts/admin/views/admin_user_view.js.coffee b/app/assets/javascripts/admin/views/admin_user_view.js.coffee new file mode 100644 index 00000000000..51124e17892 --- /dev/null +++ b/app/assets/javascripts/admin/views/admin_user_view.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminUserView = window.Discourse.View.extend + templateName: 'admin/templates/user' \ No newline at end of file diff --git a/app/assets/javascripts/admin/views/admin_users_list_view.js.coffee b/app/assets/javascripts/admin/views/admin_users_list_view.js.coffee new file mode 100644 index 00000000000..8759b992433 --- /dev/null +++ b/app/assets/javascripts/admin/views/admin_users_list_view.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminUsersListView = window.Discourse.View.extend + templateName: 'admin/templates/users_list' diff --git a/app/assets/javascripts/admin/views/admin_view.js.coffee b/app/assets/javascripts/admin/views/admin_view.js.coffee new file mode 100644 index 00000000000..377a8913b9f --- /dev/null +++ b/app/assets/javascripts/admin/views/admin_view.js.coffee @@ -0,0 +1,2 @@ +Discourse.AdminView = window.Discourse.View.extend + templateName: 'admin/templates/admin' \ No newline at end of file diff --git a/app/assets/javascripts/application.js.erb b/app/assets/javascripts/application.js.erb new file mode 100644 index 00000000000..46caccf9253 --- /dev/null +++ b/app/assets/javascripts/application.js.erb @@ -0,0 +1,51 @@ +// This is a manifest file that'll be compiled into including all the files listed below. +// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically +// be included in the compiled file accessible from http://example.com/assets/application.js +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// the compiled file. +// +//= require ./env + +// probe framework first +//= require ./discourse/components/probes.js + +// Externals we need to load first +//= require ./external/jquery-1.8.2.js +//= require ./external/jquery.ui.widget.js +//= require ./external/handlebars-1.0.rc.2.js +//= require ./external/ember.js + +// Pagedown customizations +//= require ./pagedown_custom.js + +// The rest of the externals +//= require_tree ./external +//= require i18n +//= require discourse/translations + +//= require ./discourse/helpers/i18n_helpers +//= require ./discourse + +// Stuff we need to load first +//= require_tree ./discourse/mixins +//= require ./discourse/components/debounce +//= require ./discourse/views/view +//= require ./discourse/controllers/controller +//= require ./discourse/views/modal/modal_body_view +//= require ./discourse/models/model +//= require ./discourse/routes/discourse_route + +//= require_tree ./discourse/controllers +//= require_tree ./discourse/components +//= require_tree ./discourse/models +//= require_tree ./discourse/views +//= require_tree ./discourse/helpers +//= require_tree ./discourse/templates +//= require_tree ./discourse/routes + +<% + # Include javascripts + DiscoursePluginRegistry.javascripts.each do |js| + require_asset(js) + end +%> diff --git a/app/assets/javascripts/discourse.js.coffee b/app/assets/javascripts/discourse.js.coffee new file mode 100644 index 00000000000..aad1f9cb47a --- /dev/null +++ b/app/assets/javascripts/discourse.js.coffee @@ -0,0 +1,272 @@ +window.Discourse = Ember.Application.createWithMixins + rootElement: '#main' + + # Data we want to remember for a short period + transient: Em.Object.create() + + hasFocus: true + scrolling: false + + # The highest seen post number by topic + highestSeenByTopic: {} + + logoSmall: (-> + logo = Discourse.SiteSettings.logo_small_url + if logo && logo.length > 1 + "" + else + "" + ).property() + + titleChanged: (-> + title = "" + title += "#{@get('title')} - " if @get('title') + title += Discourse.SiteSettings.title + $('title').text(title) + + title = ("(*) " + title) if !@get('hasFocus') && @get('notify') + + # chrome bug workaround see: http://stackoverflow.com/questions/2952384/changing-the-window-title-when-focussing-the-window-doesnt-work-in-chrome + window.setTimeout (-> + document.title = "." + document.title = title + return), 200 + return + ).observes('title', 'hasFocus', 'notify') + + currentUserChanged: (-> + + bus = Discourse.MessageBus + + # We don't want to receive any previous user notidications + bus.unsubscribe "/notification" + + bus.callbackInterval = Discourse.SiteSettings.anon_polling_interval + bus.enableLongPolling = false + + user = @get('currentUser') + if user + bus.callbackInterval = Discourse.SiteSettings.polling_interval + bus.enableLongPolling = true + + if user.admin + bus.subscribe "/flagged_counts", (data) -> + user.set('site_flagged_posts_count', data.total) + bus.subscribe "/notification", ((data) -> + user.set('unread_notifications', data.unread_notifications) + user.set('unread_private_messages', data.unread_private_messages)), user.notification_channel_position + + ).observes('currentUser') + + notifyTitle: -> + @set('notify', true) + + # Browser aware replaceState + replaceState: (path) -> + if window.history && window.history.pushState && window.history.replaceState && !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]|WebApps\/.+CFNetwork)/) + history.replaceState({path: path}, null, path) unless window.location.pathname is path + + openComposer: (opts) -> + # TODO, remove container link + Discourse.__container__.lookup('controller:composer')?.open(opts) + + # Like router.route, but allow full urls rather than relative ones + # HERE BE HACKS - uses the ember container for now until we can do this nicer. + routeTo: (path) -> + path = path.replace(/https?\:\/\/[^\/]+/, '') + + # If we're in the same topic, don't push the state + topicRegexp = /\/t\/([^\/]+)\/(\d+)\/?(\d+)?/ + newMatches = topicRegexp.exec(path); + if newTopicId = newMatches?[2] + oldMatches = topicRegexp.exec(window.location.pathname); + if (oldTopicId = oldMatches?[2]) && (oldTopicId is newTopicId) + Discourse.replaceState(path) + topicController = Discourse.__container__.lookup('controller:topic') + opts = {trackVisit: false} + opts.nearPost = newMatches[3] if newMatches[3] + topicController.get('content').loadPosts(opts) + return + + + # Be wary of looking up the router. In this case, we have links in our + # HTML, say form compiled markdown posts, that need to be routed. + router = Discourse.__container__.lookup('router:main') + router.router.updateURL(path) + router.handleURL(path) + + # Scroll to the top if we're not replacing state + + + # The classes of buttons to show on a post + postButtons: (-> + Discourse.SiteSettings.post_menu.split("|").map (i) -> "#{i.replace(/\+/, '').capitalize()}" + ).property('Discourse.SiteSettings.post_menu') + + bindDOMEvents: -> + + $html = $('html') + # Add the discourse touch event + hasTouch = false + hasTouch = true if $html.hasClass('touch') + hasTouch = true if (Modernizr.prefixed("MaxTouchPoints", navigator) > 1) + + if hasTouch + $html.addClass('discourse-touch') + @touch = true + @hasTouch = true + else + $html.addClass('discourse-no-touch') + @touch = false + + $('#main').on 'click.discourse', '[data-not-implemented=true]', (e) => + e.preventDefault() + alert Em.String.i18n('not_implemented') + false + + $('#main').on 'click.discourse', 'a', (e) => + + return if (e.isDefaultPrevented() || e.metaKey || e.ctrlKey) + $currentTarget = $(e.currentTarget) + + href = $currentTarget.attr('href') + return if href is undefined + return if href is '#' + return if $currentTarget.attr('target') + return if $currentTarget.data('auto-route') + return if href.indexOf("mailto:") is 0 + + if href.match(/^http[s]?:\/\//i) && !href.match new RegExp("^http:\\/\\/" + window.location.hostname,"i") + return + + e.preventDefault() + @routeTo(href) + + false + + $(window).focus( => + @set('hasFocus',true) + @set('notify',false) + ).blur( => + @set('hasFocus',false) + ) + + logout: -> + username = @get('currentUser.username') + Discourse.KeyValueStore.abandonLocal() + $.ajax "/session/#{username}", + type: 'DELETE' + success: (result) => + # To keep lots of our variables unbound, we can handle a redirect on logging out. + window.location.reload() + + # fancy probes in ember + insertProbes: -> + + return unless console? + + topLevel = (fn,name) -> + window.probes.measure fn, + name: name + before: (data,owner, args) -> + if owner + window.probes.clear() + + after: (data, owner, args) -> + if owner && data.time > 10 + f = (name,data) -> + "#{name} - #{data.count} calls #{(data.time + 0.0).toFixed(2)}ms" if data && data.count + + if console && console.group + console.group(f(name, data)) + else + console.log("") + console.log(f(name,data)) + + ary = [] + for n,v of window.probes + continue if n == name || v.time < 1 + ary.push(k: n, v: v) + + ary.sortBy((item) -> if item.v && item.v.time then -item.v.time else 0).each (item)-> + console.log output if output = f("#{item.k}", item.v) + console?.groupEnd?() + + window.probes.clear() + + + Ember.View.prototype.renderToBuffer = window.probes.measure Ember.View.prototype.renderToBuffer, "renderToBuffer" + + Discourse.routeTo = topLevel(Discourse.routeTo, "Discourse.routeTo") + Ember.run.end = topLevel(Ember.run.end, "Ember.run.end") + + return + + authenticationComplete: (options)-> + # TODO, how to dispatch this to the view without the container? + loginView = Discourse.__container__.lookup('controller:modal').get('currentView') + loginView.authenticationComplete(options) + + buildRoutes: (builder) -> + oldBuilder = Discourse.routeBuilder + Discourse.routeBuilder = -> + oldBuilder.call(@) if oldBuilder + builder.call(@) + + start: -> + @bindDOMEvents() + Discourse.SiteSettings = PreloadStore.getStatic('siteSettings') + Discourse.MessageBus.start() + Discourse.KeyValueStore.init("discourse_", Discourse.MessageBus) + Discourse.insertProbes() + + + # subscribe to any site customizations that are loaded + $('link.custom-css').each -> + split = @href.split("/") + id = split[split.length-1].split(".css")[0] + stylesheet = @ + Discourse.MessageBus.subscribe "/file-change/#{id}", (data)=> + $(stylesheet).data('orig', stylesheet.href) unless $(stylesheet).data('orig') + orig = $(stylesheet).data('orig') + sp = orig.split(".css?") + stylesheet.href = sp[0] + ".css?" + data + + $('header.custom').each -> + header = $(this) + Discourse.MessageBus.subscribe "/header-change/#{$(@).data('key')}", (data)-> + header.html(data) + + # possibly move this to dev only + Discourse.MessageBus.subscribe "/file-change", (data)-> + Ember.TEMPLATES["empty"] = Handlebars.compile("") + data.each (me)-> + if me == "refresh" + document.location.reload(true) + else if me.name.substr(-10) == "handlebars" + js = me.name.replace(".handlebars","").replace("app/assets/javascripts","/assets") + $LAB.script(js + "?hash=" + me.hash).wait -> + templateName = js.replace(".js","").replace("/assets/","") + $.each Ember.View.views, -> + if(@get('templateName')==templateName) + @set('templateName','empty') + @rerender() + Em.run.next => + @set('templateName', templateName) + @rerender() + else + $('link').each -> + if @.href.match(me.name) and me.hash + $(@).data('orig', @.href) unless $(@).data('orig') + @.href = $(@).data('orig') + "&hash=" + me.hash + +window.Discourse.Router = Discourse.Router.reopen(location: 'discourse_location') + +# since we have no jquery-rails these days, hook up csrf token +csrf_token = $('meta[name=csrf-token]').attr('content') + +$.ajaxPrefilter (options,originalOptions,xhr) -> + unless options.crossDomain + xhr.setRequestHeader('X-CSRF-Token', csrf_token) + return + diff --git a/app/assets/javascripts/discourse/components/autocomplete.js.coffee b/app/assets/javascripts/discourse/components/autocomplete.js.coffee new file mode 100644 index 00000000000..412e5eb4455 --- /dev/null +++ b/app/assets/javascripts/discourse/components/autocomplete.js.coffee @@ -0,0 +1,255 @@ +( ($) -> + + template = null + + $.fn.autocomplete = (options)-> + + return if @.length == 0 + + if options && options.cancel && @.data("closeAutocomplete") + @.data("closeAutocomplete")() + return this + + alert "only supporting one matcher at the moment" unless @.length == 1 + + autocompleteOptions = null + selectedOption = null + completeStart = null + completeEnd = null + me = @ + div = null + + # input is handled differently + isInput = @[0].tagName == "INPUT" + + inputSelectedItems = [] + addInputSelectedItem = (item) -> + + transformed = options.transformComplete(item) if options.transformComplete + d = $("
#{transformed || item}
") + prev = me.parent().find('.item:last') + if prev.length == 0 + me.parent().prepend(d) + else + prev.after(d) + + inputSelectedItems.push(item) + + if options.onChangeItems + options.onChangeItems(inputSelectedItems) + + d.find('a').click -> + closeAutocomplete() + inputSelectedItems.splice($.inArray(item),1) + $(this).parent().parent().remove() + if options.onChangeItems + options.onChangeItems(inputSelectedItems) + + if isInput + + width = @.width() + height = @.height() + + wrap = @.wrap("
").parent() + + wrap.width(width) + + @.width(80) + @.attr('name', @.attr('name') + "-renamed") + + vals = @.val().split(",") + + vals.each (x)-> + unless x == "" + x = options.reverseTransform(x) if options.reverseTransform + addInputSelectedItem(x) + + @.val("") + completeStart = 0 + wrap.click => + @.focus() + true + + + markSelected = -> + links = div.find('li a') + links.removeClass('selected') + $(links[selectedOption]).addClass('selected') + + renderAutocomplete = -> + div.hide().remove() if div + return if autocompleteOptions.length == 0 + div = $(options.template(options: autocompleteOptions)) + + ul = div.find('ul') + selectedOption = 0 + markSelected() + ul.find('li').click -> + selectedOption = ul.find('li').index(this) + completeTerm(autocompleteOptions[selectedOption]) + + pos = null + if isInput + pos = + left: 0 + top: 0 + else + pos = me.caretPosition(pos: completeStart, key: options.key) + + div.css(left: "-1000px") + me.parent().append(div) + + mePos = me.position() + + borderTop = parseInt(me.css('border-top-width')) || 0 + div.css + position: 'absolute', + top: (mePos.top + pos.top - div.height() + borderTop) + 'px', + left: (mePos.left + pos.left + 27) + 'px' + + + updateAutoComplete = (r)-> + return if completeStart == null + autocompleteOptions = r + if !r || r.length == 0 + closeAutocomplete() + else + renderAutocomplete() + + closeAutocomplete = -> + div.hide().remove() if div + div = null + completeStart = null + autocompleteOptions = null + + # chain to allow multiples + oldClose = me.data("closeAutocomplete") + me.data "closeAutocomplete", -> + oldClose() if oldClose + closeAutocomplete() + + completeTerm = (term) -> + if term + if isInput + me.val("") + addInputSelectedItem(term) + else + term = options.transformComplete(term) if options.transformComplete + text = me.val() + text = text.substring(0, completeStart) + (options.key || "") + term + ' ' + text.substring(completeEnd+1, text.length) + me.val(text) + Discourse.Utilities.setCaretPosition(me[0], completeStart + 1 + term.length) + closeAutocomplete() + + $(@).keypress (e) -> + + + if !options.key + return + + # keep hunting backwards till you hit a + + if e.which == options.key.charCodeAt(0) + caretPosition = Discourse.Utilities.caretPosition(me[0]) + prevChar = me.val().charAt(caretPosition-1) + if !prevChar || /\s/.test(prevChar) + completeStart = completeEnd = caretPosition + term = "" + options.dataSource term, updateAutoComplete + return + + $(@).keydown (e) -> + + completeStart = 0 if !options.key + + return if e.which == 16 + + if completeStart == null && e.which == 8 && options.key #backspace + + c = Discourse.Utilities.caretPosition(me[0]) + next = me[0].value[c] + nextIsGood = next == undefined || /\s/.test(next) + + c-=1 + initial = c + + prevIsGood = true + while prevIsGood && c >= 0 + c -=1 + prev = me[0].value[c] + stopFound = prev == options.key + if stopFound + prev = me[0].value[c-1] + if !prev || /\s/.test(prev) + completeStart = c + caretPosition = completeEnd = initial + term = me[0].value.substring(c+1, initial) + options.dataSource term, updateAutoComplete + return true + + prevIsGood = /[a-zA-Z\.]/.test(prev) + + + if e.which == 27 # esc key + if completeStart != null + closeAutocomplete() + return false + return true + + + if (completeStart != null) + + caretPosition = Discourse.Utilities.caretPosition(me[0]) + # If we've backspaced past the beginning, cancel unless no key + if caretPosition <= completeStart && options.key + closeAutocomplete() + return false + + # Keyboard codes! So 80's. + switch e.which + when 13, 39, 9 # enter, tab or right arrow completes + return true unless autocompleteOptions + if selectedOption >= 0 and userToComplete = autocompleteOptions[selectedOption] + completeTerm(userToComplete) + else + # We're cancelling it, really. + return true + + closeAutocomplete() + return false + when 38 # up arrow + selectedOption = selectedOption - 1 + selectedOption = 0 if selectedOption < 0 + markSelected() + return false + when 40 # down arrow + total = autocompleteOptions.length + selectedOption = selectedOption + 1 + selectedOption = total - 1 if selectedOption >= total + selectedOption = 0 if selectedOption < 0 + markSelected() + return false + else + + # otherwise they're typing - let's search for it! + completeEnd = caretPosition + caretPosition-- if (e.which == 8) + + if caretPosition < 0 + closeAutocomplete() + if isInput + i = wrap.find('a:last') + i.click() if i + + return false + + term = me.val().substring(completeStart+(if options.key then 1 else 0), caretPosition) + if (e.which > 48 && e.which < 90) + term += String.fromCharCode(e.which) + else + term += "," unless e.which == 8 # backspace + options.dataSource term, updateAutoComplete + return true + + +)(jQuery) diff --git a/app/assets/javascripts/discourse/components/bbcode.js.coffee b/app/assets/javascripts/discourse/components/bbcode.js.coffee new file mode 100644 index 00000000000..a9f62b013db --- /dev/null +++ b/app/assets/javascripts/discourse/components/bbcode.js.coffee @@ -0,0 +1,130 @@ +Discourse.BBCode = + + QUOTE_REGEXP: /\[quote=([^\]]*)\]([\s\S]*?)\[\/quote\]/im + + # Define our replacers + replacers: + + base: + withoutArgs: + "ol": (_, content) -> "
    #{content}
" + "li": (_, content) -> "
  • #{content}
  • " + "ul": (_, content) -> "
      #{content}
    " + "code": (_, content) -> "
    #{content}
    " + "url": (_, url) -> "#{url}" + "email": (_, address) -> "#{address}" + "img": (_, src) -> "" + withArgs: + "url": (_, href, title) -> "#{title}" + "email": (_, address, title) -> "#{title}" + "color": (_, color, content) -> + return content unless /^(\#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?)|(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|purple|red|silver|teal|white|yellow)$/.test(color) + "#{content}" + + # For HTML emails + email: + withoutArgs: + "b": (_, content) -> "#{content}" + "i": (_, content) -> "#{content}" + "u": (_, content) -> "#{content}" + "s": (_, content) -> "#{content}" + "spoiler": (_, content) -> "#{content}" + + withArgs: + "size": (_, size, content) -> "#{content}" + + # For sane environments that support CSS + default: + withoutArgs: + "b": (_, content) -> "#{content}" + "i": (_, content) -> "#{content}" + "u": (_, content) -> "#{content}" + "s": (_, content) -> "#{content}" + "spoiler": (_, content) -> "#{content}" + + withArgs: + "size": (_, size, content) -> "#{content}" + + # Apply a particular set of replacers + apply: (text, environment) -> + replacer = Discourse.BBCode.parsedReplacers()[environment] + replacer.forEach (r) -> text = text.replace r.regexp, r.fn + text + + parsedReplacers: -> + return @parsed if @parsed + result = {} + + Object.keys Discourse.BBCode.replacers, (name, rules) -> + parsed = result[name] = [] + + Object.keys Object.merge(Discourse.BBCode.replacers.base.withoutArgs, rules.withoutArgs), (tag, val) -> + parsed.push(regexp: RegExp("\\[#{tag}\\]([\\s\\S]*?)\\[\\/#{tag}\\]", "igm"), fn: val) + + Object.keys Object.merge(Discourse.BBCode.replacers.base.withArgs, rules.withArgs), (tag, val) -> + parsed.push(regexp: RegExp("\\[#{tag}=?(.+?)\\\]([\\s\\S]*?)\\[\\/#{tag}\\]", "igm"), fn: val) + + @parsed = result + @parsed + + buildQuoteBBCode: (post, contents="") -> + sansQuotes = contents.replace(@QUOTE_REGEXP, '').trim() + return "" if sansQuotes.length == 0 + + # Strip the HTML from cooked + tmp = document.createElement('div') + tmp.innerHTML = post.get('cooked') + stripped = tmp.textContent||tmp.innerText + + # Let's remove any non alphanumeric characters as a kind of hash. Yes it's + # not accurate but it should work almost every time we need it to. It would be unlikely + # that the user would quote another post that matches in exactly this way. + stripped_hashed = stripped.replace(/[^a-zA-Z0-9]/g, '') + contents_hashed = contents.replace(/[^a-zA-Z0-9]/g, '') + + result = "[quote=\"#{post.get('username')}, post:#{post.get('post_number')}, topic:#{post.get('topic_id')}" + + # If the quote is the full message, attribute it as such + if stripped_hashed == contents_hashed + result += ", full:true" + + result += "\"]#{sansQuotes}[/quote]\n\n" + + formatQuote: (text, opts) -> + + # Replace quotes with appropriate markup + while matches = @QUOTE_REGEXP.exec(text) + paramsString = matches[1] + paramsString = paramsString.replace(/\"/g, '') + paramsSplit = paramsString.split(/\, */) + + params=[] + paramsSplit.each (p, i) -> + if i > 0 + assignment = p.split(':') + if assignment[0] and assignment[1] + params.push(key: assignment[0], value: assignment[1].trim()) + + username = paramsSplit[0] + + # Arguments for formatting + args = + username: username + params: params + quote: matches[2].trim() + avatarImg: opts.lookupAvatar(username) if opts.lookupAvatar + + templateName = 'quote' + templateName = "quote_#{opts.environment}" if opts?.environment + + text = text.replace(matches[0], "

    " + HANDLEBARS_TEMPLATES[templateName](args) + "

    ") + + text + + format: (text, opts) -> + text = Discourse.BBCode.apply(text, opts?.environment || 'default') + + # Add quotes + text = Discourse.BBCode.formatQuote(text, opts) + + text diff --git a/app/assets/javascripts/discourse/components/caret_position.js.coffee b/app/assets/javascripts/discourse/components/caret_position.js.coffee new file mode 100644 index 00000000000..dca0de17c63 --- /dev/null +++ b/app/assets/javascripts/discourse/components/caret_position.js.coffee @@ -0,0 +1,101 @@ +# caret position in textarea ... very hacky ... sorry +(($) -> + + # http://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea + getCaret = (el) -> + if el.selectionStart + return el.selectionStart + else if document.selection + el.focus() + r = document.selection.createRange() + return 0 if r is null + re = el.createTextRange() + rc = re.duplicate() + re.moveToBookmark r.getBookmark() + rc.setEndPoint "EndToStart", re + return rc.text.length + 0 + + clone = null + $.fn.caretPosition = (options) -> + + clone.remove() if clone + span = $("#pos span") + textarea = $(this) + getStyles = (el, prop) -> + if el.currentStyle + el.currentStyle + else + document.defaultView.getComputedStyle el, "" + + styles = getStyles(textarea[0]) + clone = $("

    ").appendTo("body") + p = clone.find("p") + clone.width textarea.width() + clone.height textarea.height() + + important = (prop) -> + styles.getPropertyValue(prop) + + clone.css + border: "1px solid black" + padding: important("padding") + resize: important("resize") + "max-height": textarea.height() + "px" + "overflow-y": "auto" + "word-wrap": "break-word" + position: "absolute" + left: "-7000px" + + p.css + margin: 0 + padding: 0 + "word-wrap": "break-word" + "letter-spacing": important("letter-spacing") + "font-family": important("font-family") + "font-size": important("font-size") + "line-height": important("line-height") + + before = undefined + after = undefined + pos = if options && options.pos then options.pos else getCaret(textarea[0]) + val = textarea.val().replace("\r", "") + if (options && options.key) + val = val.substring(0,pos) + options.key + val.substring(pos) + + before = pos - 1 + after = pos + insertSpaceAfterBefore = false + + # if before and after are \n insert a space + insertSpaceAfterBefore = true if val[before] is "\n" and val[after] is "\n" + guard = (v) -> + buf = v.replace(//g,">") + buf = buf.replace(/[ ]/g, "​ ​") + buf.replace(/\n/g,"
    ") + + + makeCursor = (pos, klass, color) -> + l = val.substring(pos, pos + 1) + return "
    " if l is "\n" + "" + guard(l) + "" + + html = "" + if before >= 0 + html += guard(val.substring(0, pos - 1)) + makeCursor(before, "before", "#d0ffff") + html += makeCursor(0, "post-before", "#d0ffff") if insertSpaceAfterBefore + if after >= 0 + html += makeCursor(after, "after", "#ffd0ff") + html += guard(val.substring(after + 1)) if after - 1 < val.length + p.html html + clone.scrollTop textarea.scrollTop() + letter = p.find("span:first") + pos = letter.offset() + pos.left = pos.left + letter.width() if letter.hasClass("before") + pPos = p.offset() + #clone.hide().remove() + + left: pos.left - pPos.left + top: (pos.top - pPos.top) - clone.scrollTop() +) jQuery diff --git a/app/assets/javascripts/discourse/components/click_track.js.coffee b/app/assets/javascripts/discourse/components/click_track.js.coffee new file mode 100644 index 00000000000..eca79505245 --- /dev/null +++ b/app/assets/javascripts/discourse/components/click_track.js.coffee @@ -0,0 +1,64 @@ +# We use this object to keep track of click counts. +window.Discourse.ClickTrack = + + # Pass the event of the click here and we'll do the magic! + trackClick: (e) -> + + $a = $(e.currentTarget) + + e.preventDefault() + + # We don't track clicks on quote back buttons + return true if $a.hasClass('back') or $a.hasClass('quote-other-topic') + + # Remove the href, put it as a data attribute + unless $a.data('href') + $a.addClass('no-href') + $a.data('href', $a.attr('href')) + $a.attr('href', null) + + # Don't route to this URL + $a.data('auto-route', true) + + href = $a.data('href') + $article = $a.closest('article') + postId = $article.data('post-id') + topicId = $('#topic').data('topic-id') + userId = $a.data('user-id') + userId = $article.data('user-id') unless userId + + ownLink = userId and (userId is Discourse.get('currentUser.id')) + + # Build a Redirect URL + trackingUrl = "/clicks/track?url=" + encodeURIComponent(href) + trackingUrl += "&post_id=" + encodeURI(postId) if postId and (not $a.data('ignore-post-id')) + trackingUrl += "&topic_id=" + encodeURI(topicId) if topicId + + # Update badge clicks unless it's our own + unless ownLink + $badge = $('span.badge', $a) + if $badge.length == 1 + count = parseInt($badge.html()) + $badge.html(count + 1) + + # If they right clicked, change the destination href + if e.which is 3 + destination = if Discourse.SiteSettings.track_external_right_clicks then trackingUrl else href + $a.attr('href', destination) + return true + + # if they want to open in a new tab, do an AJAX request + if (e.metaKey || e.ctrlKey || e.which is 2) + $.get "/clicks/track", url: href, post_id: postId, topic_id: topicId, redirect: false + window.open(href, '_blank') + return false + + # If we're on the same site, use the router and track via AJAX + if href.indexOf(window.location.origin) == 0 + $.get "/clicks/track", url: href, post_id: postId, topic_id: topicId, redirect: false + Discourse.routeTo(href) + return false + + # Otherwise, use a custom URL with a redirect + window.location = trackingUrl + false diff --git a/app/assets/javascripts/discourse/components/debounce.js.coffee b/app/assets/javascripts/discourse/components/debounce.js.coffee new file mode 100644 index 00000000000..2973f53cd54 --- /dev/null +++ b/app/assets/javascripts/discourse/components/debounce.js.coffee @@ -0,0 +1,20 @@ +window.Discourse.debounce = (func, wait, trickle) -> + timeout = null + return -> + context = @ + args = arguments + later = -> + timeout = null + func.apply(context, args) + + if timeout != null && trickle + # already queued, let it through + return + + if typeof wait == "function" + currentWait = wait() + else + currentWait = wait + + clearTimeout(timeout) if timeout + timeout = setTimeout(later, currentWait) diff --git a/app/assets/javascripts/discourse/components/discourse_text_field.js.coffee b/app/assets/javascripts/discourse/components/discourse_text_field.js.coffee new file mode 100644 index 00000000000..63c77ce4b8d --- /dev/null +++ b/app/assets/javascripts/discourse/components/discourse_text_field.js.coffee @@ -0,0 +1,7 @@ +Discourse.TextField = Ember.TextField.extend + + attributeBindings: ['autocorrect', 'autocapitalize'] + + placeholder: (-> + Em.String.i18n(@get('placeholderKey')) + ).property('placeholderKey') diff --git a/app/assets/javascripts/discourse/components/div_resizer.js.coffee b/app/assets/javascripts/discourse/components/div_resizer.js.coffee new file mode 100644 index 00000000000..03baa92918b --- /dev/null +++ b/app/assets/javascripts/discourse/components/div_resizer.js.coffee @@ -0,0 +1,61 @@ +#based off text area resizer by Ryan O'Dell : http://plugins.jquery.com/misc/textarea.js +(($) -> + + div = undefined + originalPos = undefined + originalDivHeight = undefined + lastMousePos = 0 + min = 230 + grip = undefined + wrappedEndDrag = undefined + wrappedPerformDrag = undefined + + startDrag = (e,opts) -> + div = $(e.data.el) + div.addClass('clear-transitions') + div.blur() + lastMousePos = mousePosition(e).y + originalPos = lastMousePos + originalDivHeight = div.height() + wrappedPerformDrag = ( -> + (e) -> performDrag(e,opts) + )() + wrappedEndDrag = ( -> + (e) -> endDrag(e,opts) + )() + $(document).mousemove(wrappedPerformDrag).mouseup wrappedEndDrag + false + performDrag = (e,opts) -> + thisMousePos = mousePosition(e).y + size = originalDivHeight + (originalPos - thisMousePos) + lastMousePos = thisMousePos + size = Math.max(min, size) + div.height size + "px" + endDrag e,opts if size < min + false + endDrag = (e,opts) -> + $(document).unbind("mousemove", wrappedPerformDrag).unbind "mouseup", wrappedEndDrag + div.removeClass('clear-transitions') + div.focus() + opts.resize() if opts.resize + div = null + mousePosition = (e) -> + x: e.clientX + document.documentElement.scrollLeft + y: e.clientY + document.documentElement.scrollTop + + $.fn.DivResizer = (opts) -> + @each -> + div = $(this) + return if (div.hasClass("processed")) + + div.addClass("processed") + staticOffset = null + + start = -> + (e) -> startDrag(e,opts) + + grippie = div.prepend("
    ").find('.grippie').bind("mousedown", + el: this + , start()) +) jQuery + diff --git a/app/assets/javascripts/discourse/components/eyeline.coffee b/app/assets/javascripts/discourse/components/eyeline.coffee new file mode 100644 index 00000000000..12ce60f4b6b --- /dev/null +++ b/app/assets/javascripts/discourse/components/eyeline.coffee @@ -0,0 +1,64 @@ +# +# Track visible elements on the screen +# +# You can register for triggers on: +# focusChanged: -> the top element we're focusing on +# seenElement: -> if we've seen the element +# +class Discourse.Eyeline + + constructor: (@selector) -> + + # Call this whenever we want to consider what is currently being seen by the browser + update: -> + docViewTop = $(window).scrollTop() + windowHeight = $(window).height() + docViewBottom = docViewTop + windowHeight + documentHeight = $(document).height() + + $elements = $(@selector) + + atBottom = false + if bottomOffset = $elements.last().offset() + atBottom = (bottomOffset.top <= docViewBottom) and (bottomOffset.top >= docViewTop) + + # Whether we've seen any elements in this search + foundElement = false + + $results = $(@selector) + $results.each (i, elem) => + $elem = $(elem) + + elemTop = $elem.offset().top + elemBottom = elemTop + $elem.height() + + markSeen = false + + # It's seen if... + # ...the element is vertically within the top and botom + markSeen = true if ((elemTop <= docViewBottom) and (elemTop >= docViewTop)) + # ...the element top is above the top and the bottom is below the bottom (large elements) + markSeen = true if ((elemTop <= docViewTop) and (elemBottom >= docViewBottom)) + # ...we're at the bottom and the bottom of the element is visible (large bottom elements) + markSeen = true if atBottom and (elemBottom >= docViewTop) + + return true unless markSeen + + # If you hit the bottom we mark all the elements as seen. Otherwise, just the first one + unless atBottom + @trigger('saw', detail: $elem) + @trigger('sawTop', detail: $elem) if i == 0 + return false + + @trigger('sawTop', detail: $elem) if i == 0 + @trigger('sawBottom', detail: $elem) if i == ($results.length - 1) + + # Call this when we know aren't loading any more elements. Mark the rest + # as seen + flushRest: -> + $(@selector).each (i, elem) => + $elem = $(elem) + @trigger('saw', detail: $elem) + + +RSVP.EventTarget.mixin(Discourse.Eyeline.prototype) \ No newline at end of file diff --git a/app/assets/javascripts/discourse/components/key_value_store.coffee b/app/assets/javascripts/discourse/components/key_value_store.coffee new file mode 100644 index 00000000000..a2afaab84c5 --- /dev/null +++ b/app/assets/javascripts/discourse/components/key_value_store.coffee @@ -0,0 +1,33 @@ +# key value store +# + +window.Discourse.KeyValueStore = (-> + initialized = false + context = "" + + init: (ctx,messageBus) -> + initialized = true + context = ctx + + abandonLocal: -> + return unless localStorage && initialized + i=localStorage.length-1 + while i >= 0 + k = localStorage.key(i) + localStorage.removeItem(k) if k.substring(0, context.length) == context + i-- + return true + + remove: (key)-> + localStorage.removeItem(context + key) + + set: (opts)-> + return false unless localStorage && initialized + localStorage[context + opts["key"]] = opts["value"] + + + get: (key)-> + return null unless localStorage + localStorage[context + key] +)() + diff --git a/app/assets/javascripts/discourse/components/message_bus.js.coffee b/app/assets/javascripts/discourse/components/message_bus.js.coffee new file mode 100644 index 00000000000..17fff21dadb --- /dev/null +++ b/app/assets/javascripts/discourse/components/message_bus.js.coffee @@ -0,0 +1,114 @@ +window.Discourse.MessageBus = ( -> + + # http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript + uniqueId = -> 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace /[xy]/g, (c)-> + r = Math.random()*16 | 0 + v = if c == 'x' then r else (r&0x3|0x8) + v.toString(16) + + clientId = uniqueId() + + responseCallbacks = {} + callbacks = [] + queue = [] + interval = null + + failCount = 0 + + isHidden = -> + if document.hidden != undefined + document.hidden + else if document.webkitHidden != undefined + document.webkitHidden + else if document.msHidden != undefined + document.msHidden + else if document.mozHidden != undefined + document.mozHidden + else + # fallback to problamatic window.focus + !Discourse.get('hasFocus') + + enableLongPolling: true + callbackInterval: 60000 + maxPollInterval: (3 * 60 * 1000) + callbacks: callbacks + clientId: clientId + + #TODO + stop: + false + + # Start polling + start: (opts={})-> + + poll = => + if callbacks.length == 0 + setTimeout poll, 500 + return + + data = {} + callbacks.each (c)-> + data[c.channel] = if c.last_id == undefined then -1 else c.last_id + + gotData = false + + @longPoll = $.ajax "/message-bus/#{clientId}/poll?#{if isHidden() || !@enableLongPolling then "dlp=t" else ""}", + data: data + cache: false + dataType: 'json' + type: 'POST' + headers: + 'X-SILENCE-LOGGER': 'true' + success: (messages) => + failCount = 0 + messages.each (message) => + gotData = true + callbacks.each (callback) -> + if callback.channel == message.channel + callback.last_id = message.message_id + callback.func(message.data) + if message["channel"] == "/__status" + callback.last_id = message.data[callback.channel] if message.data[callback.channel] != undefined + return + error: + failCount += 1 + complete: => + if gotData + setTimeout poll, 100 + else + interval = @callbackInterval + if failCount > 2 + interval = interval * failCount + else if isHidden() + # slowning down stuff a lot when hidden + # we will need to add a lot of fine tuning here + interval = interval * 4 + + if interval > @maxPollInterval + interval = @maxPollInterval + + setTimeout poll, interval + @longPoll = null + return + + poll() + return + + # Subscribe to a channel + subscribe: (channel,func,lastId)-> + callbacks.push {channel:channel, func:func, last_id: lastId} + @longPoll.abort() if @longPoll + + # Unsubscribe from a channel + unsubscribe: (channel) -> + # TODO proper globbing + if channel.endsWith("*") + channel = channel.substr(0, channel.length-1) + glob = true + callbacks = callbacks.filter (callback) -> + if glob + callback.channel.substr(0, channel.length) != channel + else + callback.channel != channel + @longPoll.abort() if @longPoll +)() diff --git a/app/assets/javascripts/discourse/components/pagedown_editor.js.coffee b/app/assets/javascripts/discourse/components/pagedown_editor.js.coffee new file mode 100644 index 00000000000..937b03b1fd5 --- /dev/null +++ b/app/assets/javascripts/discourse/components/pagedown_editor.js.coffee @@ -0,0 +1,24 @@ +window.Discourse.PagedownEditor = Ember.ContainerView.extend + elementId: 'pagedown-editor' + + init: -> + + @_super() + + # Add a button bar + @pushObject Em.View.create(elementId: 'wmd-button-bar') + @pushObject Em.TextArea.create(valueBinding: 'parentView.value', elementId: 'wmd-input') + @pushObject Em.View.createWithMixins Discourse.Presence, + elementId: 'wmd-preview', + classNameBindings: [':preview', 'hidden'] + + hidden: (-> + @blank('parentView.value') + ).property('parentView.value') + + + didInsertElement: -> + $wmdInput = $('#wmd-input') + $wmdInput.data('init', true) + @editor = new Markdown.Editor(Discourse.Utilities.markdownConverter()) + @editor.run() diff --git a/app/assets/javascripts/discourse/components/probes.js b/app/assets/javascripts/discourse/components/probes.js new file mode 100644 index 00000000000..b26dd138d43 --- /dev/null +++ b/app/assets/javascripts/discourse/components/probes.js @@ -0,0 +1,122 @@ +/* + * JavaScript probing framework by Sam Saffron + * MIT license + * + * + * Examples: + * + +someFunction = window.probes.measure(someFunction, { + name: "somename" // or function(args) { return "name"; }, + before: function(data, owner, args) { + // if owner is true, we are not in a recursive function call. + // + // data contains the bucker of data already measuer + // data.count >= 0 + // data.time is the total time measured till now + // + // arguments contains the original arguments sent to the function + }, + after: function(data, owner, args) { + // same format as before + } +}); + + +// minimal +someFunction = window.probes.measure(someFunction, "someFunction"); + + * + * + * */ +(function(){ + var measure, clear; + + clear = function() { + window.probes = { + clear: clear, + measure: measure + }; + }; + + measure = function(fn,options) { + // start is outside so we measure time around recursive calls properly + var start = null, nameParam, before, after; + if (!options) { + options = {}; + } + + if (typeof options === "string") { + nameParam = options; + } + else + { + nameParam = options["name"]; + + if (nameParam === "measure" || nameParam == "clear") { + throw Error("can not be called measure or clear"); + } + + if (!nameParam) + { + throw Error("you must specify the name option measure(fn, {name: 'some name'})"); + } + + before = options["before"]; + after = options["after"]; + } + + var now = (function(){ + var perf = window.performance || {}; + var time = perf.now || perf.mozNow || perf.webkitNow || perf.msNow || perf.oNow; + return time ? time.bind(perf) : function() { return new Date().getTime(); }; + })(); + + return function() { + var name = nameParam; + if (typeof name == "function"){ + name = nameParam(arguments); + } + var p = window.probes[name]; + var owner = start === null; + + if (before) { + // would like to avoid try catch so its optimised properly by chrome + before(p, owner, arguments); + } + + if (p === undefined) { + window.probes[name] = {count: 0, time: 0, currentTime: 0}; + p = window.probes[name]; + } + + var callStart; + if (owner) { + start = now(); + callStart = start; + } + else if(after) + { + callStart = now(); + } + + var r = fn.apply(this, arguments); + if (owner && start) { + p.time += now() - start; + start = null; + } + p.count += 1; + + if (after) { + p.currentTime = now() - callStart; + // would like to avoid try catch so its optimised properly by chrome + after(p, owner, arguments); + } + + return r; + } + } + + clear(); + +})(); diff --git a/app/assets/javascripts/discourse/components/screen_track.js.coffee b/app/assets/javascripts/discourse/components/screen_track.js.coffee new file mode 100644 index 00000000000..0b39486e0f8 --- /dev/null +++ b/app/assets/javascripts/discourse/components/screen_track.js.coffee @@ -0,0 +1,128 @@ +# We use this class to track how long posts in a topic are on the screen. +# This could be a potentially awesome metric to keep track of. +window.Discourse.ScreenTrack = Ember.Object.extend + + # Don't send events if we haven't scrolled in a long time + PAUSE_UNLESS_SCROLLED: 1000*60*3 + + # After 6 minutes stop tracking read position on post + MAX_TRACKING_TIME: 1000*60*6 + + totalTimings: {} + + # Elements to track + timings: {} + topicTime: 0 + + cancelled: false + + track: (elementId, postNumber) -> + @timings["##{elementId}"] = + time: 0 + postNumber: postNumber + + guessedSeen: (postNumber) -> + @highestSeen = postNumber if postNumber > (@highestSeen || 0) + + # Reset our timers + reset: -> + @lastTick = new Date().getTime() + @lastFlush = 0 + @cancelled = false + + # Start tracking + start: -> + @reset() + @lastScrolled = new Date().getTime() + @interval = setInterval => + @tick() + , 1000 + + # Cancel and eject any tracking we have buffered + cancel: -> + @cancelled = true + @timings = {} + @topicTime = 0 + clearInterval(@interval) + @interval = null + + # Stop tracking and flush buffered read records + stop: -> + clearInterval(@interval) + @interval = null + @flush() + + scrolled: -> + @lastScrolled = new Date().getTime() + + flush: -> + + return if @cancelled + + # We don't log anything unless we're logged in + return unless Discourse.get('currentUser') + + newTimings = {} + Object.values @timings, (timing) => + @totalTimings[timing.postNumber] ||= 0 + if timing.time > 0 and @totalTimings[timing.postNumber] < @MAX_TRACKING_TIME + @totalTimings[timing.postNumber] += timing.time + newTimings[timing.postNumber] = timing.time + timing.time = 0 + + topicId = @get('topic_id') + + highestSeenByTopic = Discourse.get('highestSeenByTopic') + if (highestSeenByTopic[topicId] || 0) < @highestSeen + highestSeenByTopic[topicId] = @highestSeen + + + unless Object.isEmpty(newTimings) + $.ajax '/topics/timings' + data: + timings: newTimings + topic_time: @topicTime + highest_seen: @highestSeen + topic_id: topicId + cache: false + type: 'POST' + headers: + 'X-SILENCE-LOGGER': 'true' + @topicTime = 0 + + @lastFlush = 0 + + tick: -> + + # If the user hasn't scrolled the browser in a long time, stop tracking time read + sinceScrolled = new Date().getTime() - @lastScrolled + if sinceScrolled > @PAUSE_UNLESS_SCROLLED + @reset() + return + + diff = new Date().getTime() - @lastTick + @lastFlush += diff + @lastTick = new Date().getTime() + + @flush() if @lastFlush > (Discourse.SiteSettings.flush_timings_secs * 1000) + + # Don't track timings if we're not in focus + return unless Discourse.get("hasFocus") + + @topicTime += diff + + docViewTop = $(window).scrollTop() + $('header').height() + docViewBottom = docViewTop + $(window).height() + + Object.keys @timings, (id) => + $element = $(id) + + if ($element.length == 1) + elemTop = $element.offset().top + elemBottom = elemTop + $element.height() + + # If part of the element is on the screen, increase the counter + if (docViewTop <= elemTop <= docViewBottom) or (docViewTop <= elemBottom <= docViewBottom) + timing = @timings[id] + timing.time = timing.time + diff + diff --git a/app/assets/javascripts/discourse/components/syntax_highlighting.js.coffee b/app/assets/javascripts/discourse/components/syntax_highlighting.js.coffee new file mode 100644 index 00000000000..03db4644879 --- /dev/null +++ b/app/assets/javascripts/discourse/components/syntax_highlighting.js.coffee @@ -0,0 +1,8 @@ +# Helper object for syntax highlighting. Uses highlight.js which is loaded +# on demand. +window.Discourse.SyntaxHighlighting = + + apply: ($elem) -> + $('pre code[class]', $elem).each (i, e) => + $LAB.script("/javascripts/highlight-handlebars.pack.js").wait -> + hljs.highlightBlock(e) diff --git a/app/assets/javascripts/discourse/components/transition_helper.js.coffee b/app/assets/javascripts/discourse/components/transition_helper.js.coffee new file mode 100644 index 00000000000..ee4a029e93c --- /dev/null +++ b/app/assets/javascripts/discourse/components/transition_helper.js.coffee @@ -0,0 +1,25 @@ +# CSS transitions are a PITA, often we need to queue some js after a transition, this helper ensures +# it happens after the transition +# + +# SO: http://stackoverflow.com/questions/9943435/css3-animation-end-techniques +dummy = document.createElement("div") +eventNameHash = + webkit: "webkitTransitionEnd" + Moz: "transitionend" + O: "oTransitionEnd" + ms: "MSTransitionEnd" + +transitionEnd = (_getTransitionEndEventName = -> + retValue = "transitionend" + Object.keys(eventNameHash).some (vendor) -> + if vendor + "TransitionProperty" of dummy.style + retValue = eventNameHash[vendor] + true + + retValue +)() + +window.Discourse.TransitionHelper = + after: (element, callback) -> + $(element).on(transitionEnd, callback) diff --git a/app/assets/javascripts/discourse/components/user_search.js.coffee b/app/assets/javascripts/discourse/components/user_search.js.coffee new file mode 100644 index 00000000000..bd77191c3e0 --- /dev/null +++ b/app/assets/javascripts/discourse/components/user_search.js.coffee @@ -0,0 +1,51 @@ +cache = {} +cacheTopicId = null +cacheTime = null + +doSearch = (term,topicId,success)-> + $.ajax + url: '/users/search/users' + dataType: 'JSON' + data: {term: term, topic_id: topicId} + success: (r)-> + cache[term] = r + cacheTime = new Date() + success(r) + +debouncedSearch = Discourse.debounce(doSearch, 200) + +window.Discourse.UserSearch = + search: (options) -> + + term = options.term || "" + callback = options.callback + exclude = options.exclude || [] + topicId = options.topicId + limit = options.limit || 5 + + throw "missing callback" unless callback + + #TODO site setting for allowed regex in username ? + if term.match(/[^a-zA-Z0-9\_\.]/) + callback([]) + return true + + cache = {} if (new Date() - cacheTime) > 30000 + cache = {} if cacheTopicId != topicId + cacheTopicId = topicId + + success = (r)-> + result = [] + r.users.each (u)-> + result.push(u) if exclude.indexOf(u.username) == -1 + return false if result.length > limit + true + callback(result) + + if cache[term] + success(cache[term]) + else + debouncedSearch(term, topicId, success) + true + + diff --git a/app/assets/javascripts/discourse/components/utilities.coffee b/app/assets/javascripts/discourse/components/utilities.coffee new file mode 100644 index 00000000000..6fdaee54cf5 --- /dev/null +++ b/app/assets/javascripts/discourse/components/utilities.coffee @@ -0,0 +1,165 @@ +baseUrl = null +site = null + +Discourse.Utilities = + + translateSize: (size)-> + switch size + when 'tiny' then size=20 + when 'small' then size=25 + when 'medium' then size=32 + when 'large' then size=45 + return size + + # Create a badge like category link + categoryLink: (category) -> + return "" unless category + + slug = Em.get(category, 'slug') + color = Em.get(category, 'color') + name = Em.get(category, 'name') + + "#{name}" + + avatarUrl: (username, size, template)-> + return "" unless username + size = Discourse.Utilities.translateSize(size) + rawSize = (size * (window.devicePixelRatio || 1)).toFixed() + + return template.replace(/\{size\}/g, rawSize) if template + + "/users/#{username.toLowerCase()}/avatar/#{rawSize}?__ws=#{encodeURIComponent(Discourse.BaseUrl || "")}" + + avatarImg: (options)-> + size = Discourse.Utilities.translateSize(options.size) + title = options.title || "" + extraClasses = options.extraClasses || "" + url = Discourse.Utilities.avatarUrl(options.username, options.size, options.avatarTemplate) + "" + + postUrl: (slug, topicId, postNumber)-> + url = "/t/" + url += slug + "/" if slug + url += topicId + url += "/#{postNumber}" if postNumber > 1 + url + + emailValid: (email)-> + # see: http://stackoverflow.com/questions/46155/validate-email-address-in-javascript + re = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/ + re.test(email) + + selectedText: -> + t = '' + if window.getSelection + t = window.getSelection().toString() + else if document.getSelection + t = document.getSelection().toString() + else if document.selection + t = document.selection.createRange().text + String(t).trim() + + # Determine the position of the caret in an element + caretPosition: (el) -> + + return el.selectionStart if el.selectionStart + + if document.selection + el.focus() + r = document.selection.createRange() + return 0 if r == null + + re = el.createTextRange() + rc = re.duplicate() + re.moveToBookmark(r.getBookmark()) + rc.setEndPoint('EndToStart', re) + return rc.text.length + return 0 + + # Set the caret's position + setCaretPosition: (ctrl, pos) -> + if(ctrl.setSelectionRange) + ctrl.focus() + ctrl.setSelectionRange(pos,pos) + return + + if (ctrl.createTextRange) + range = ctrl.createTextRange() + range.collapse(true) + range.moveEnd('character', pos) + range.moveStart('character', pos) + range.select() + + markdownConverter: (opts)-> + converter = new Markdown.Converter() + + mentionLookup = opts.mentionLookup if opts + mentionLookup = mentionLookup || Discourse.Mention.lookupCache + + # Before cooking callbacks + converter.hooks.chain "preConversion", (text) => + @trigger 'beforeCook', detail: text, opts: opts + @textResult || text + + # Support autolinking of www.something.com + converter.hooks.chain "preConversion", (text) -> + text.replace /(^|[\s\n])(www\.[a-z\.\-\_\(\)\/\?\=\%0-9]+)/gim, (full, _, rest) -> + " #{rest}" + + # newline prediction in trivial cases + unless Discourse.SiteSettings.traditional_markdown_linebreaks + converter.hooks.chain "preConversion", (text) -> + result = text.replace /(^[\w\<][^\n]*\n+)/gim, (t) -> + return t if t.match /\n{2}/gim + t = t.replace "\n"," \n" + + # github style fenced code + converter.hooks.chain "preConversion", (text) -> + result = text.replace /^`{3}(?:(.*$)\n)?([\s\S]*?)^`{3}/gm, (wholeMatch,m1,m2) -> + escaped = Handlebars.Utils.escapeExpression(m2) + "
    #{escaped}
    " + + converter.hooks.chain "postConversion", (text) -> + return "" unless text + # don't to mention voodoo in pres + text = text.replace /
    ([\s\S]*@[\s\S]*)<\/pre>/gi, (wholeMatch, inner) ->
    +        "
    #{inner.replace(/@/g, '@')}
    " + + # Add @mentions of names + text = text.replace(/([\s\t>,:'|";\]])(@[A-Za-z0-9_-|\.]*[A-Za-z0-9_-|]+)(?=[\s\t<\!:|;',"\?\.])/g, (x,pre,name) -> + if mentionLookup(name.substr(1)) + "#{pre}#{name}" + else + "#{pre}#{name}") + + # a primitive attempt at oneboxing, this regex gives me much eye sores + text = text.replace /(
  • )?((

    |
    )[\s\n\r]*)(]*)>([^<]+<\/a>[\s\n\r]*(?=<\/p>|
    ))/gi, -> + + # We don't onebox items in a list + return arguments[0] if arguments[1] + + url = arguments[5] + onebox = Discourse.Onebox.lookupCache(url) if Discourse && Discourse.Onebox + if onebox and !onebox.isBlank() + return arguments[2] + onebox + else + return arguments[2] + arguments[4] + " class=\"onebox\" target=\"_blank\">" + arguments[6] + + converter.hooks.chain "postConversion", (text) => + Discourse.BBCode.format(text, opts) + + converter + + + # Takes raw input and cooks it to display nicely (mostly markdown) + cook: (raw, opts) -> + + # Make sure we've got a string + return "" unless raw + return "" unless raw.length > 0 + + @converter = @markdownConverter(opts) + @converter.makeHtml(raw) + + +RSVP.EventTarget.mixin(Discourse.Utilities) diff --git a/app/assets/javascripts/discourse/controllers/application_controller.js.coffee b/app/assets/javascripts/discourse/controllers/application_controller.js.coffee new file mode 100644 index 00000000000..04b2e38a7ae --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/application_controller.js.coffee @@ -0,0 +1,6 @@ +window.Discourse.ApplicationController = Ember.Controller.extend + + needs: ['modal'] + + showLogin: -> + @get('controllers.modal')?.show(Discourse.LoginView.create()) \ No newline at end of file diff --git a/app/assets/javascripts/discourse/controllers/composer_controller.js.coffee b/app/assets/javascripts/discourse/controllers/composer_controller.js.coffee new file mode 100644 index 00000000000..60281b07d8e --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/composer_controller.js.coffee @@ -0,0 +1,173 @@ +window.Discourse.ComposerController = Ember.Controller.extend Discourse.Presence, + + needs: ['modal', 'topic'] + + togglePreview: -> + @get('content').togglePreview() + + # Import a quote from the post + importQuote: -> + @get('content').importQuote() + + appendText: (text) -> + c = @get('content') + c.appendText(text) if c + + save: -> + composer = @get('content') + composer.set('disableDrafts', true) + composer.save(imageSizes: @get('view').imageSizes()) + .then (opts) => + opts = opts || {} + @close() + Discourse.routeTo(opts.post.get('url')) + , (error) => + composer.set('disableDrafts', false) + bootbox.alert error + + saveDraft: -> + model = @get('content') + model.saveDraft() if model + + # Open the reply view + # + # opts: + # action - The action we're performing: edit, reply or createTopic + # post - The post we're replying to, if present + # topic - The topic we're replying to, if present + # quote - If we're opening a reply from a quote, the quote we're making + # + open: (opts={}) -> + opts.promise = promise = opts.promise || new RSVP.Promise + + unless opts.draftKey + alert("composer was opened without a draft key") + throw "composer opened without a proper draft key" + + # ensure we have a view now, without it transitions are going to be messed + view = @get('view') + unless view + view = Discourse.ComposerView.create + controller: @ + view.appendTo($('#main')) + @set('view', view) + # the next runloop is too soon, need to get the control rendered and then + # we need to change stuff, otherwise css animations don't kick in + Em.run.next => + Em.run.next => + @open(opts) + return promise + + composer = @get('content') + + if composer && opts.draftKey != composer.draftKey && composer.composeState == Discourse.Composer.DRAFT + @close() + composer = null + + if composer && !opts.tested && composer.wouldLoseChanges() + if composer.composeState == Discourse.Composer.DRAFT && composer.draftKey == opts.draftKey && composer.action == opts.action + composer.set('composeState', Discourse.Composer.OPEN) + promise.resolve() + return promise + else + opts.tested = true + @cancel(( => @open(opts) ),( => promise.reject())) unless opts.ignoreIfChanged + return promise + + + # we need a draft sequence, without it drafts are bust + if opts.draftSequence == undefined + Discourse.Draft.get(opts.draftKey).then (data)=> + opts.draftSequence = data.draft_sequence + opts.draft = data.draft + @open(opts) + return promise + + + if opts.draft + composer = Discourse.Composer.loadDraft(opts.draftKey, opts.draftSequence, opts.draft) + composer?.set('topic', opts.topic) + + composer = composer || Discourse.Composer.open(opts) + + @set('content', composer) + @set('view.content', composer) + promise.resolve() + return promise + + wouldLoseChanges: -> + composer = @get('content') + composer && composer.wouldLoseChanges() + + # View a new reply we've made + viewNewReply: -> + Discourse.routeTo(@get('createdPost.url')) + @close() + false + + destroyDraft: -> + key = @get('content.draftKey') + Discourse.Draft.clear(key, @get('content.draftSequence')) if key + + cancel: (success, fail) -> + if @get('content.hasMetaData') || ((@get('content.reply') || "") != (@get('content.originalText') || "")) + bootbox.confirm Em.String.i18n("post.abandon"), Em.String.i18n("no_value"), Em.String.i18n("yes_value"), (result) => + if result + @destroyDraft() + @close() + success() if typeof success == "function" + else + fail() if typeof fail == "function" + else + # it is possible there is some sort of crazy draft with no body ... just give up on it + @destroyDraft() + @close() + success() if typeof success == "function" + + return + + click: -> + if @get('content.composeState') == Discourse.Composer.DRAFT + @set('content.composeState', Discourse.Composer.OPEN) + false + + shrink: -> + if @get('content.reply') == @get('content.originalText') then @close() else @collapse() + + collapse: -> + @saveDraft() + @set('content.composeState', Discourse.Composer.DRAFT) + + close: -> + @set('content', null) + @set('view.content', null) + + closeIfCollapsed: -> + if @get('content.composeState') == Discourse.Composer.DRAFT + @close() + + closeAutocomplete: -> + $('#wmd-input').autocomplete(cancel: true) + + # Toggle the reply view + toggle: -> + @closeAutocomplete() + + switch @get('content.composeState') + when Discourse.Composer.OPEN + if @blank('content.reply') and @blank('content.title') then @close() else @shrink() + when Discourse.Composer.DRAFT + @set('content.composeState', Discourse.Composer.OPEN) + when Discourse.Composer.SAVING + @close() + + false + + # ESC key hit + hitEsc: -> + @shrink() if @get('content.composeState') == @OPEN + + + showOptions: -> + @get('controllers.modal')?.show(Discourse.ArchetypeOptionsModalView.create(archetype: @get('content.archetype'), metaData: @get('content.metaData'))) + diff --git a/app/assets/javascripts/discourse/controllers/controller.js.coffee b/app/assets/javascripts/discourse/controllers/controller.js.coffee new file mode 100644 index 00000000000..e7815426c58 --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/controller.js.coffee @@ -0,0 +1 @@ +Discourse.Controller = Ember.Controller.extend(Discourse.Presence) \ No newline at end of file diff --git a/app/assets/javascripts/discourse/controllers/header_controller.js.coffee b/app/assets/javascripts/discourse/controllers/header_controller.js.coffee new file mode 100644 index 00000000000..9bde32aaf65 --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/header_controller.js.coffee @@ -0,0 +1,7 @@ +Discourse.HeaderController = Ember.Controller.extend Discourse.Presence, + topic: null + showExtraInfo: false + + toggleStar: -> + @get('topic')?.toggleStar() + false \ No newline at end of file diff --git a/app/assets/javascripts/discourse/controllers/list_categories_controller.js.coffee b/app/assets/javascripts/discourse/controllers/list_categories_controller.js.coffee new file mode 100644 index 00000000000..ece7d5bf373 --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/list_categories_controller.js.coffee @@ -0,0 +1,21 @@ +Discourse.ListCategoriesController = Ember.ObjectController.extend Discourse.Presence, + needs: ['modal'] + + categoriesEven: (-> + return Em.A() if @blank('categories') + @get('categories').filter (item, index) -> (index % 2) == 0 + ).property('categories.@each') + + categoriesOdd: (-> + return Em.A() if @blank('categories') + @get('categories').filter (item, index) -> (index % 2) == 1 + ).property('categories.@each') + + editCategory: (category) -> + @get('controllers.modal').show(Discourse.EditCategoryView.create(category: category)) + false + + canEdit: (-> + u = Discourse.get('currentUser') + u && u.admin + ).property() diff --git a/app/assets/javascripts/discourse/controllers/list_controller.js.coffee b/app/assets/javascripts/discourse/controllers/list_controller.js.coffee new file mode 100644 index 00000000000..4be14f1d9c2 --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/list_controller.js.coffee @@ -0,0 +1,73 @@ +Discourse.ListController = Ember.Controller.extend Discourse.Presence, + currentUserBinding: 'Discourse.currentUser' + categoriesBinding: 'Discourse.site.categories' + categoryBinding: 'topicList.category' + + canCreateCategory: false + canCreateTopic: false + + needs: ['composer', 'modal', 'listTopics'] + + availableNavItems: (-> + summary = @get('filterSummary') + loggedOn = !!Discourse.get('currentUser') + hasCategories = !!@get('categories') + + Discourse.SiteSettings.top_menu.split("|").map((i)-> + Discourse.NavItem.fromText i, + loggedOn: loggedOn + hasCategories: hasCategories + countSummary: summary + ).filter((i)-> i != null) + + ).property('filterSummary') + + load: (filterMode) -> + @set('loading', true) + if filterMode == 'categories' + return Ember.Deferred.promise (deferred) => + Discourse.CategoryList.list(filterMode).then (items) => + @set('loading', false) + @set('filterMode', filterMode) + @set('categoryMode', true) + deferred.resolve(items) + else + current = (@get('availableNavItems').filter (f)=> f.name == filterMode)[0] + current = Discourse.NavItem.create(name: filterMode) unless current + + return Ember.Deferred.promise (deferred) => + Discourse.TopicList.list(current).then (items) => + @set('filterSummary', items.filter_summary) + @set('filterMode', filterMode) + @set('loading', false) + deferred.resolve(items) + + + # Put in the appropriate page title based on our view + updateTitle: (-> + if @get('filterMode') == 'categories' + Discourse.set('title', Em.String.i18n('categories_list')) + else + if @present('category') + Discourse.set('title', "#{@get('category.name').capitalize()} #{Em.String.i18n('topic.list')}") + else + Discourse.set('title', Em.String.i18n('topic.list')) + + ).observes('filterMode', 'category') + + # Create topic button + createTopic: -> + topicList = @get('controllers.listTopics.content') + return unless topicList + + @get('controllers.composer').open + categoryName: @get('category.name') + action: Discourse.Composer.CREATE_TOPIC + draftKey: topicList.get('draft_key') + draftSequence: topicList.get('draft_sequence') + + createCategory: -> + @get('controllers.modal')?.show(Discourse.EditCategoryView.create()) + + +Discourse.ListController.reopenClass(filters: ['popular','favorited','read','unread','new','posted']) diff --git a/app/assets/javascripts/discourse/controllers/list_topics_controller.js.coffee b/app/assets/javascripts/discourse/controllers/list_topics_controller.js.coffee new file mode 100644 index 00000000000..66466ecf98d --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/list_topics_controller.js.coffee @@ -0,0 +1,53 @@ +Discourse.ListTopicsController = Ember.ObjectController.extend + needs: ['list','composer'] + + # If we're changing our channel + previousChannel: null + + filterModeChanged: (-> + # Unsubscribe from a previous channel if necessary + if previousChannel = @get('previousChannel') + Discourse.MessageBus.unsubscribe "/#{previousChannel}" + @set('previousChannel', null) + + filterMode = @get('controllers.list.filterMode') + return unless filterMode + + channel = filterMode + Discourse.MessageBus.subscribe "/#{channel}", (data) => + @get('content').insert(data) + @set('previousChannel', channel) + + ).observes('controllers.list.filterMode') + + draftLoaded: (-> + draft = @get('content.draft') + if(draft) + @get('controllers.composer').open + draft: draft + draftKey: @get('content.draft_key'), + draftSequence: @get('content.draft_sequence') + ignoreIfChanged: true + + ).observes('content.draft') + + # Star a topic + toggleStar: (topic) -> + topic.toggleStar() + false + + observer: (-> + @set('filterMode', @get('controllser.list.filterMode')) + ).observes('controller.list.filterMode') + + + # Show newly inserted topics + showInserted: (e) -> + + # Move inserted into topics + @get('content.topics').unshiftObjects @get('content.inserted') + + # Clear inserted + @set('content.inserted', Em.A()) + + false diff --git a/app/assets/javascripts/discourse/controllers/modal_controller.js.coffee b/app/assets/javascripts/discourse/controllers/modal_controller.js.coffee new file mode 100644 index 00000000000..cbec1440e7c --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/modal_controller.js.coffee @@ -0,0 +1,3 @@ +Discourse.ModalController = Ember.Controller.extend Discourse.Presence, + + show: (view) -> @set('currentView', view) diff --git a/app/assets/javascripts/discourse/controllers/preferences_controller.js.coffee b/app/assets/javascripts/discourse/controllers/preferences_controller.js.coffee new file mode 100644 index 00000000000..37e184af87f --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/preferences_controller.js.coffee @@ -0,0 +1,54 @@ +Discourse.PreferencesController = Ember.ObjectController.extend Discourse.Presence, + + # By default we haven't saved anything + saved: false + + saveDisabled: (-> + return true if @get('saving') + return true if @blank('content.name') + return true if @blank('content.email') + false + ).property('saving', 'content.name', 'content.email') + + digestFrequencies: (-> + freqs = Em.A() + freqs.addObject(name: Em.String.i18n('user.email_digests.daily'), value: 1) + freqs.addObject(name: Em.String.i18n('user.email_digests.weekly'), value: 7) + freqs.addObject(name: Em.String.i18n('user.email_digests.bi_weekly'), value: 14) + freqs + ).property() + + autoTrackDurations: (-> + freqs = Em.A() + freqs.addObject(name: Em.String.i18n('user.auto_track_options.never'), value: -1) + freqs.addObject(name: Em.String.i18n('user.auto_track_options.always'), value: 0) + freqs.addObject(name: Em.String.i18n('user.auto_track_options.after_n_seconds', count: 30), value: 30000) + freqs.addObject(name: Em.String.i18n('user.auto_track_options.after_n_minutes', count: 1), value: 60000) + freqs.addObject(name: Em.String.i18n('user.auto_track_options.after_n_minutes', count: 2), value: 120000) + freqs.addObject(name: Em.String.i18n('user.auto_track_options.after_n_minutes', count: 5), value: 300000) + freqs + ).property() + + save: -> + @set('saving', true) + + # Cook the bio for preview + @get('content').save (result) => + @set('saving', false) + if result + @set('content.bio_cooked', Discourse.Utilities.cook(@get('content.bio_raw'))) + @set('saved', true) + else + alert 'failed' + + saveButtonText: (-> + return Em.String.i18n('saving') if @get('saving') + return Em.String.i18n('save') + ).property('saving') + + changePassword: -> + unless @get('passwordProgress') + @set('passwordProgress','(generating email)') + @get('content').changePassword (message)=> + @set('changePasswordProgress', false) + @set('passwordProgress', "(#{message})") diff --git a/app/assets/javascripts/discourse/controllers/preferences_email_controller.js.coffee b/app/assets/javascripts/discourse/controllers/preferences_email_controller.js.coffee new file mode 100644 index 00000000000..a73013ebb0f --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/preferences_email_controller.js.coffee @@ -0,0 +1,35 @@ +Discourse.PreferencesEmailController = Ember.ObjectController.extend Discourse.Presence, + + taken: false + saving: false + error: false + success: false + + saveDisabled: (-> + return true if @get('saving') + return true if @blank('newEmail') + return true if @get('taken') + return true if @get('unchanged') + ).property('newEmail', 'taken', 'unchanged', 'saving') + + unchanged: (-> + @get('newEmail') == @get('content.email') + ).property('newEmail', 'content.email') + + initializeEmail: (-> + @set('newEmail', @get('content.email')) + ).observes('content.email') + + saveButtonText: (-> + return Em.String.i18n("saving") if @get('saving') + Em.String.i18n("user.change_email.action") + ).property('saving') + + changeEmail: -> + @set('saving', true) + @get('content').changeEmail(@get('newEmail')).then => + @set('success', true) + , => + # Error + @set('error', true) + @set('saving', false) diff --git a/app/assets/javascripts/discourse/controllers/preferences_username_controller.js.coffee b/app/assets/javascripts/discourse/controllers/preferences_username_controller.js.coffee new file mode 100644 index 00000000000..d0af0084b1c --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/preferences_username_controller.js.coffee @@ -0,0 +1,40 @@ +Discourse.PreferencesUsernameController = Ember.ObjectController.extend Discourse.Presence, + + taken: false + saving: false + error: false + + saveDisabled: (-> + return true if @get('saving') + return true if @blank('newUsername') + return true if @get('taken') + return true if @get('unchanged') + ).property('newUsername', 'taken', 'unchanged', 'saving') + + unchanged: (-> + @get('newUsername') == @get('content.username') + ).property('newUsername', 'content.username') + + checkTaken: (-> + @set('taken', false) + return if @blank('newUsername') + return if @get('unchanged') + Discourse.User.checkUsername(@get('newUsername')).then (result) => + @set('taken', true) unless result.available + ).observes('newUsername') + + saveButtonText: (-> + return Em.String.i18n("saving") if @get('saving') + Em.String.i18n("user.change_username.action") + ).property('saving') + + changeUsername: -> + bootbox.confirm Em.String.i18n("user.change_username.confirm"), Em.String.i18n("no_value"), Em.String.i18n("yes_value"), (result) => + if result + @set('saving', true) + @get('content').changeUsername(@get('newUsername')).then => + window.location = "/users/#{@get('newUsername').toLowerCase()}/preferences" + , => + # Error + @set('error', true) + @set('saving', false) diff --git a/app/assets/javascripts/discourse/controllers/quote_button_controller.js.coffee b/app/assets/javascripts/discourse/controllers/quote_button_controller.js.coffee new file mode 100644 index 00000000000..72a8abb9310 --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/quote_button_controller.js.coffee @@ -0,0 +1,70 @@ +Discourse.QuoteButtonController = Discourse.Controller.extend + + needs: ['topic', 'composer'] + + started: null + + # If the buffer is cleared, clear out other state (post) + bufferChanged: (-> + @set('post', null) if @blank('buffer') + ).observes('buffer') + + + mouseDown: (e) -> + @started = [e.pageX, e.pageY] + + mouseUp: (e) -> + if @started[1] > e.pageY + @started = [e.pageX, e.pageY] + + selectText: (e) -> + return unless Discourse.get('currentUser') + return unless @get('controllers.topic.content.can_create_post') + + selectedText = Discourse.Utilities.selectedText() + return if @get('buffer') == selectedText + return if @get('lastSelected') == selectedText + + @set('post', e.context) + @set('buffer', selectedText) + + top = e.pageY + 5 + left = e.pageX + 5 + $quoteButton = $('.quote-button') + if @started + top = @started[1] - 50 + left = ((left - @started[0]) / 2) + @started[0] - ($quoteButton.width() / 2) + + $quoteButton.css(top: top, left: left) + @started = null + + false + + quoteText: (e) -> + + e.stopPropagation() + post = @get('post') + + composerController = @get('controllers.composer') + + composerOpts = + post: post + action: Discourse.Composer.REPLY + draftKey: @get('post.topic.draft_key') + + # If the composer is associated with a different post, we don't change it. + if composerPost = composerController.get('content.post') + composerOpts.post = composerPost if (composerPost.get('id') != @get('post.id')) + + buffer = @get('buffer') + quotedText = Discourse.BBCode.buildQuoteBBCode(post, buffer) + + if composerController.wouldLoseChanges() + composerController.appendText(quotedText) + else + composerController.open(composerOpts).then => + composerController.appendText(quotedText) + + @set('buffer', '') + + false diff --git a/app/assets/javascripts/discourse/controllers/share_controller.js.coffee b/app/assets/javascripts/discourse/controllers/share_controller.js.coffee new file mode 100644 index 00000000000..8ed5a3dad93 --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/share_controller.js.coffee @@ -0,0 +1,14 @@ +Discourse.ShareController = Ember.Controller.extend + + # When the user clicks the post number, we pop up a share box + shareLink: (e, url) -> + x = e.pageX - 150 + x = 25 if x < 25 + $('#share-link').css(left: "#{x}px", top: "#{e.pageY - 100}px") + @set('link', url) + false + + # Close the share controller + close: -> + @set('link', '') + false diff --git a/app/assets/javascripts/discourse/controllers/static_controller.js.coffee b/app/assets/javascripts/discourse/controllers/static_controller.js.coffee new file mode 100644 index 00000000000..a73a9cfb7be --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/static_controller.js.coffee @@ -0,0 +1,21 @@ +Discourse.StaticController = Ember.Controller.extend + + content: null + + loadPath: (path) -> + @set('content', null) + + # Load from

    + {{outlet}} +
    + +{{render modal}} diff --git a/app/assets/javascripts/discourse/templates/composer.js.handlebars b/app/assets/javascripts/discourse/templates/composer.js.handlebars new file mode 100644 index 00000000000..ebb64eaf74c --- /dev/null +++ b/app/assets/javascripts/discourse/templates/composer.js.handlebars @@ -0,0 +1,77 @@ +
    {{i18n composer.uploading}}
    + +
    + +
    + + + {{#if content.viewOpen}} +
    +
    {{{content.actionTitle}}}:
    + + {{#if content.editTitle}} +
    + + {{#if content.creatingPrivateMessage}} + {{view Discourse.TextField id="private-message-users" class="span8" placeholderKey="composer.users_placeholder"}} + {{/if}} + {{view Discourse.TextField valueBinding="content.title" tabindex="1" id="reply-title" maxlength="255" class="span8" placeholderKey="composer.title_placeholder"}} + {{#unless content.creatingPrivateMessage}} + {{view Discourse.ComboboxViewCategory valueAttribute="name" contentBinding="Discourse.site.categories" valueBinding="content.categoryName"}} + {{#if content.archetype.hasOptions}} + + {{/if}} + {{/unless}} +
    + {{/if}} + + +
    +
    +
    + {{view Discourse.NotifyingTextArea parentBinding="view" tabindex="2" valueBinding="content.reply" id="wmd-input" placeholderKey="composer.reply_placeholder"}} +
    +
    +
    +
    + {{#if Discourse.currentUser}} + {{{content.toggleText}}} +
    + + {{/if}} +
    + + {{#if Discourse.currentUser}} +
    + + {{i18n cancel}} + + {{#if view.loadingImage}} +
    + Uploading image {{view.uploadProgress}}% cancel +
    + {{/if}} +
    + {{/if}} + +
    + {{else}} +
    +
    +
    + {{#if content.createdPost}} + {{i18n composer.saved}} + {{else}} + {{i18n composer.saving}} + {{/if}} +
    +
    + {{i18n composer.saved_draft}} +
    +
    + +
    + {{/if}} + +
    +
    diff --git a/app/assets/javascripts/discourse/templates/embedded_post.js.handlebars b/app/assets/javascripts/discourse/templates/embedded_post.js.handlebars new file mode 100644 index 00000000000..bda94a39392 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/embedded_post.js.handlebars @@ -0,0 +1,17 @@ +{{#with view.content}} +
    + +
    + {{{unbound cooked}}} +
    +
    +{{/with}} diff --git a/app/assets/javascripts/discourse/templates/excerpt/category.js.handlebars b/app/assets/javascripts/discourse/templates/excerpt/category.js.handlebars new file mode 100644 index 00000000000..db20ce8f6c4 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/excerpt/category.js.handlebars @@ -0,0 +1,26 @@ +
    + {{unbound view.name}} + + {{#if view.excerpt}} +
    + {{{view.excerpt}}} + {{i18n learn_more}} +
    + {{/if}} + +
    +
    {{view.topics_year}}
    {{i18n year}}
    +
    {{view.topics_month}}
    {{i18n month}}
    +
    {{view.topics_week}}
    {{i18n week}}
    +
    + +
    + diff --git a/app/assets/javascripts/discourse/templates/excerpt/close.handlebars b/app/assets/javascripts/discourse/templates/excerpt/close.handlebars new file mode 100644 index 00000000000..54d28953d33 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/excerpt/close.handlebars @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/excerpt/post.js.handlebars b/app/assets/javascripts/discourse/templates/excerpt/post.js.handlebars new file mode 100644 index 00000000000..b05611d81a5 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/excerpt/post.js.handlebars @@ -0,0 +1,21 @@ +
    + {{avatar view imageSize="large"}} +
    +
    + {{{unbound view.excerpt}}} +
    {{unbound view.created_at}}
    +
    + diff --git a/app/assets/javascripts/discourse/templates/excerpt/user.js.handlebars b/app/assets/javascripts/discourse/templates/excerpt/user.js.handlebars new file mode 100644 index 00000000000..89aee2e823e --- /dev/null +++ b/app/assets/javascripts/discourse/templates/excerpt/user.js.handlebars @@ -0,0 +1,10 @@ +

    {{view.name}}

    +{{avatar view imageSize="large"}} +
    + {{unbound view.excerpt}} +
    + diff --git a/app/assets/javascripts/discourse/templates/featured_topics.js.handlebars b/app/assets/javascripts/discourse/templates/featured_topics.js.handlebars new file mode 100644 index 00000000000..03a9941be75 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/featured_topics.js.handlebars @@ -0,0 +1,45 @@ + + + + + + + + {{#each topics itemTagName="tr"}} + + + + {{/each}} + +
    + {{categoryLink this}} + +
    + {{#each featured_users}} + {{avatar this imageSize="small"}} + {{/each}} +
    +
    {{i18n posts}}{{i18n age}}
    {{number posts_count}}{{{unbound age}}}
    + diff --git a/app/assets/javascripts/discourse/templates/flag.js.handlebars b/app/assets/javascripts/discourse/templates/flag.js.handlebars new file mode 100644 index 00000000000..1ddebe9b7bc --- /dev/null +++ b/app/assets/javascripts/discourse/templates/flag.js.handlebars @@ -0,0 +1,33 @@ + + + {{#if view.showSubmit}} + + {{/if}} diff --git a/app/assets/javascripts/discourse/templates/header.js.handlebars b/app/assets/javascripts/discourse/templates/header.js.handlebars new file mode 100644 index 00000000000..f655bb9e314 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/header.js.handlebars @@ -0,0 +1,114 @@ +
    +
    +
    + {{#if controller.showExtraInfo}} + {{#linkTo list.popular}}{{{Discourse.logoSmall}}}{{/linkTo}} + {{else}} + {{#linkTo list.popular}}{{/linkTo}} + {{/if}} +
    + + {{view Discourse.TopicExtraInfoView}} + +
    + {{#unless controller.showExtraInfo}} +
    + {{#if view.currentUser}} + {{unbound view.currentUser.name}} + {{else}} + + {{/if}} +
    + {{/unless}} + + + {{view Discourse.SearchView currentUserBinding="view.currentUser"}} + +
    + {{#if view.notifications}} + + {{else}} +
    {{i18n notifications.none}}
    + {{/if}} +
    + +
    +
      + {{#if Discourse.currentUser.admin}} +
    • {{i18n admin_title}}
    • +
    • {{i18n flags_title}}
    • + {{/if}} +
    • + {{#titledLinkTo "list.popular" titleKey="filters.popular.help"}}{{i18n filters.popular.title}}{{/titledLinkTo}} +
    • +
    • {{#linkTo 'faq'}}{{i18n faq}}{{/linkTo}}
    • + {{#if Discourse.currentUser.admin}} +
    • + {{#linkTo "list.favorited"}} + {{i18n filters.favorited.title}} + {{/linkTo}} +
    • +
    • + {{#linkTo "list.read"}} + {{i18n filters.read.title}} + {{/linkTo}} +
    • + {{/if}} + {{#if view.categories}} +
    • + {{#linkTo "list.categories"}}{{i18n filters.categories.title}}{{/linkTo}} +
    • + + {{#each view.categories}} +
    • + {{categoryLink this}} + {{unbound topic_count}} +
    • + {{/each}} + {{/if}} + +
    +
    + +
    +
    +
    + + diff --git a/app/assets/javascripts/discourse/templates/history.js.handlebars b/app/assets/javascripts/discourse/templates/history.js.handlebars new file mode 100644 index 00000000000..61221b285ab --- /dev/null +++ b/app/assets/javascripts/discourse/templates/history.js.handlebars @@ -0,0 +1,43 @@ + + diff --git a/app/assets/javascripts/discourse/templates/image_selector.js.handlebars b/app/assets/javascripts/discourse/templates/image_selector.js.handlebars new file mode 100644 index 00000000000..4a6d2377437 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/image_selector.js.handlebars @@ -0,0 +1,36 @@ + + +{{#if view.localSelected}} + + +{{else}} + + +{{/if}} diff --git a/app/assets/javascripts/discourse/templates/list/categories.js.handlebars b/app/assets/javascripts/discourse/templates/list/categories.js.handlebars new file mode 100644 index 00000000000..a80cca454b9 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/list/categories.js.handlebars @@ -0,0 +1,8 @@ +
    + {{each categoriesOdd itemViewClass="Discourse.FeaturedTopicsView"}} +
    +
    + {{each categoriesEven itemViewClass="Discourse.FeaturedTopicsView"}} +
    + +
    \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/list/list.js.handlebars b/app/assets/javascripts/discourse/templates/list/list.js.handlebars new file mode 100644 index 00000000000..c294ab930b9 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/list/list.js.handlebars @@ -0,0 +1,44 @@ +
    +
    + + + {{#if controller.canCreateTopic}} + + {{/if}} + + {{#if controller.canCreateCategory}} + + {{/if}} + +
    +
    + +
    +
    + +
    +
    + {{#if controller.loading}} +
    + + + + +
    +
    {{i18n loading}}
    +
    +
    + {{/if}} + + {{outlet listView}} +
    +
    + +
    +
    + + diff --git a/app/assets/javascripts/discourse/templates/list/topic_list_item.js.handlebars b/app/assets/javascripts/discourse/templates/list/topic_list_item.js.handlebars new file mode 100644 index 00000000000..557e1c46126 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/list/topic_list_item.js.handlebars @@ -0,0 +1,53 @@ + + {{#if Discourse.currentUser.id}} + + + + {{/if}} + + + {{view Discourse.TopicStatusView topicBinding="this"}} + {{{topicLink this showTagIfPresent="controller.category"}}} + {{#if unread}} + {{unread}} + {{/if}} + {{#if displayNewPosts}} + {{displayNewPosts}} + {{/if}} + {{#if unseen}} + + {{/if}} + + + {{categoryLink category}} + + + + {{#each posters}} + {{avatar this usernamePath="user.username" imageSize="small"}} + {{/each}} + + + {{number posts_count numberKey="posts_long"}} + + + {{#if like_count}} + {{like_count}} + {{/if}} + + + {{number views numberKey="views_long"}} + + {{#if singlePost}} + + {{{age}}} + + + {{else}} + + {{{age}}} + + + {{{last_post_age}}} + + {{/if}} diff --git a/app/assets/javascripts/discourse/templates/list/topics.js.handlebars b/app/assets/javascripts/discourse/templates/list/topics.js.handlebars new file mode 100644 index 00000000000..04c16f88822 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/list/topics.js.handlebars @@ -0,0 +1,59 @@ +{{#unless controller.loading}} + {{#if content.loaded}} +
    + {{#unless content.emptyListTip}} + + + + {{#if Discourse.currentUser}} + + {{/if}} + + + + + + + + + + + {{#if view.rollUp}} + + + + + + {{else}} + {{#group}} + {{collection contentBinding="content.inserted" tagName="tbody" itemViewClass="Discourse.TopicListItemView"}} + {{/group}} + {{/if}} + + {{#group}} + {{collection contentBinding="content.topics" tagName="tbody" itemViewClass="Discourse.TopicListItemView"}} + {{/group}} + +
      + {{i18n topic.title}} + {{i18n category_title}}{{i18n top_contributors}}{{i18n posts}}{{i18n likes}}{{i18n views}}{{i18n activity}}
    +
    + {{countI18n new_topics_inserted countBinding="view.insertedCount"}} + {{i18n show_new_topics}} +
    +
    + {{else}} +

    + {{content.emptyListTip}} +

    + {{/unless}} +
    + +
    + {{#if view.loading}} +
    {{i18n topic.loading_more}}
    + {{/if}} +
    + + {{/if}} +{{/unless}} diff --git a/app/assets/javascripts/discourse/templates/modal/archetype_options.js.handlebars b/app/assets/javascripts/discourse/templates/modal/archetype_options.js.handlebars new file mode 100644 index 00000000000..1c638975c99 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/archetype_options.js.handlebars @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/modal/create_account.js.handlebars b/app/assets/javascripts/discourse/templates/modal/create_account.js.handlebars new file mode 100644 index 00000000000..737db276fa0 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/create_account.js.handlebars @@ -0,0 +1,60 @@ +{{#unless view.complete}} + + + +{{/unless}} \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/modal/edit_category.js.handlebars b/app/assets/javascripts/discourse/templates/modal/edit_category.js.handlebars new file mode 100644 index 00000000000..9415888ce0c --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/edit_category.js.handlebars @@ -0,0 +1,22 @@ + + \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/modal/forgot_password.js.handlebars b/app/assets/javascripts/discourse/templates/modal/forgot_password.js.handlebars new file mode 100644 index 00000000000..a3ad51b8f98 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/forgot_password.js.handlebars @@ -0,0 +1,9 @@ + + diff --git a/app/assets/javascripts/discourse/templates/modal/invite.js.handlebars b/app/assets/javascripts/discourse/templates/modal/invite.js.handlebars new file mode 100644 index 00000000000..da28a7cef5e --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/invite.js.handlebars @@ -0,0 +1,25 @@ + + \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/modal/invite_private.js.handlebars b/app/assets/javascripts/discourse/templates/modal/invite_private.js.handlebars new file mode 100644 index 00000000000..2dba6ea7611 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/invite_private.js.handlebars @@ -0,0 +1,25 @@ + + \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/modal/login.js.handlebars b/app/assets/javascripts/discourse/templates/modal/login.js.handlebars new file mode 100644 index 00000000000..b605373bd66 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/login.js.handlebars @@ -0,0 +1,44 @@ + + diff --git a/app/assets/javascripts/discourse/templates/modal/modal_errors.js.handlebars b/app/assets/javascripts/discourse/templates/modal/modal_errors.js.handlebars new file mode 100644 index 00000000000..1f1257160ae --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/modal_errors.js.handlebars @@ -0,0 +1,8 @@ +{{#if view.errors}} + {{#each view.errors}} +
    + + {{this}} +
    + {{/each}} +{{/if}} \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/modal/modal_header.js.handlebars b/app/assets/javascripts/discourse/templates/modal/modal_header.js.handlebars new file mode 100644 index 00000000000..36eb45faf3f --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/modal_header.js.handlebars @@ -0,0 +1,5 @@ + + diff --git a/app/assets/javascripts/discourse/templates/modal/move_selected.js.handlebars b/app/assets/javascripts/discourse/templates/modal/move_selected.js.handlebars new file mode 100644 index 00000000000..ecba34fe951 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/move_selected.js.handlebars @@ -0,0 +1,20 @@ + + + \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/modal/option_boolean.js.handlebars b/app/assets/javascripts/discourse/templates/modal/option_boolean.js.handlebars new file mode 100644 index 00000000000..2cb9c13848b --- /dev/null +++ b/app/assets/javascripts/discourse/templates/modal/option_boolean.js.handlebars @@ -0,0 +1,6 @@ + + +{{description}} diff --git a/app/assets/javascripts/discourse/templates/participant.js.handlebars b/app/assets/javascripts/discourse/templates/participant.js.handlebars new file mode 100644 index 00000000000..130f8ec191d --- /dev/null +++ b/app/assets/javascripts/discourse/templates/participant.js.handlebars @@ -0,0 +1,4 @@ + + {{unbound post_count}} + {{avatar this imageSize="medium"}} + diff --git a/app/assets/javascripts/discourse/templates/post.js.handlebars b/app/assets/javascripts/discourse/templates/post.js.handlebars new file mode 100644 index 00000000000..a485931a863 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/post.js.handlebars @@ -0,0 +1,67 @@ +
    + +
    + +
    +
    + {{#if controller.multiSelect}} + + {{else}} +
    + {{/if}} + + {{#if showUserReplyTab}} + + {{#if loadingParent}} + {{i18n loading}} + {{else}} + {{i18n post.in_reply_to}} + {{avatar reply_to_user imageSize="tiny"}} + {{reply_to_user.username}} + {{/if}} + + {{/if}} + + + +
    +
    + {{view Discourse.PrependPostView postBinding="this"}} +
    {{{cooked}}}
    + {{view Discourse.PostMenuView postBinding="this" postViewBinding="view"}} +
    + {{view Discourse.RepliesView contentBinding="replies" postViewBinding="view"}} + {{view Discourse.ActionsHistoryView contentBinding="actionsHistory"}} + {{view Discourse.TopicSummaryView postBinding="this"}} +
    + +
    + {{collection contentBinding="internalLinks" itemViewClass="Discourse.PostLinkView" tagName="ul" classNames="post-links"}} + {{#if controller.content.can_reply_as_new_topic}} + {{i18n post.reply_as_new_topic}} + {{/if}} +
    +
    + +
    diff --git a/app/assets/javascripts/discourse/templates/quote.js.shbrs b/app/assets/javascripts/discourse/templates/quote.js.shbrs new file mode 100644 index 00000000000..3310f820c29 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/quote.js.shbrs @@ -0,0 +1,9 @@ + diff --git a/app/assets/javascripts/discourse/templates/search.js.handlebars b/app/assets/javascripts/discourse/templates/search.js.handlebars new file mode 100644 index 00000000000..c740ff313d0 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/search.js.handlebars @@ -0,0 +1,29 @@ +{{view Ember.TextField valueBinding="view.term" placeholderBinding="view.searchPlaceholder"}} +{{#with view}} + {{#unless loading}} + {{#unless noResults}} + {{#each content}} +
      +
    • + {{name}} + {{#if more}} + {{i18n show_more}} + {{else}} + {{#if view.showCancelFilter}} + + {{/if}} + {{/if}} +
    • + {{view Discourse.SearchResultsTypeView typeBinding="type" contentBinding="results"}} +
    + {{/each}} + {{else}} +
    + {{i18n search.no_results}} +
    + {{/unless}} + {{else}} +
    + {{/unless}} +{{/with}} + diff --git a/app/assets/javascripts/discourse/templates/search/category_result.js.handlebars b/app/assets/javascripts/discourse/templates/search/category_result.js.handlebars new file mode 100644 index 00000000000..7cbee1710ac --- /dev/null +++ b/app/assets/javascripts/discourse/templates/search/category_result.js.handlebars @@ -0,0 +1,6 @@ +{{#with view.content}} + + {{unbound title}} + +{{/with}} + diff --git a/app/assets/javascripts/discourse/templates/search/topic_result.js.handlebars b/app/assets/javascripts/discourse/templates/search/topic_result.js.handlebars new file mode 100644 index 00000000000..37d58aed426 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/search/topic_result.js.handlebars @@ -0,0 +1,6 @@ +{{#with view.content}} + + {{unbound title}} + +{{/with}} + diff --git a/app/assets/javascripts/discourse/templates/search/user_result.js.handlebars b/app/assets/javascripts/discourse/templates/search/user_result.js.handlebars new file mode 100644 index 00000000000..92fa2dbbb4a --- /dev/null +++ b/app/assets/javascripts/discourse/templates/search/user_result.js.handlebars @@ -0,0 +1,7 @@ +{{#with view.content}} + + {{avatar this usernamePath="title" imageSize="small"}} + {{unbound title}} + +{{/with}} + diff --git a/app/assets/javascripts/discourse/templates/selected_posts.js.handlebars b/app/assets/javascripts/discourse/templates/selected_posts.js.handlebars new file mode 100644 index 00000000000..013a4b1a50d --- /dev/null +++ b/app/assets/javascripts/discourse/templates/selected_posts.js.handlebars @@ -0,0 +1,11 @@ +

    {{countI18n topic.multi_select.description countBinding="controller.selectedCount"}}

    + +{{#if canDeleteSelected}} + +{{/if}} + +{{#if canMoveSelected}} + +{{/if}} + +

    {{i18n topic.multi_select.cancel}}

    diff --git a/app/assets/javascripts/discourse/templates/share.js.handlebars b/app/assets/javascripts/discourse/templates/share.js.handlebars new file mode 100644 index 00000000000..45569c41a99 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/share.js.handlebars @@ -0,0 +1,5 @@ +

    {{view.title}}

    +
    + diff --git a/app/assets/javascripts/discourse/templates/static.js.handlebars b/app/assets/javascripts/discourse/templates/static.js.handlebars new file mode 100644 index 00000000000..5e32255134b --- /dev/null +++ b/app/assets/javascripts/discourse/templates/static.js.handlebars @@ -0,0 +1,9 @@ +
    +
    + {{#if content}} + {{{content}}} + {{else}} +
    {{i18n loading}}
    + {{/if}} +
    +
    \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/suggested_topic.js.handlebars b/app/assets/javascripts/discourse/templates/suggested_topic.js.handlebars new file mode 100644 index 00000000000..2a0f3f388ae --- /dev/null +++ b/app/assets/javascripts/discourse/templates/suggested_topic.js.handlebars @@ -0,0 +1,43 @@ +{{#with view.content}} + {{#group}} + + {{unbound title}} + {{#if unread}} + {{unbound unread}} + {{/if}} + {{#if new_posts}} + {{unbound new_posts}} + {{/if}} + {{#if unseen}} + + {{/if}} + + + {{categoryLink category}} + + {{number posts_count numberKey="posts_long"}} + + + {{#if like_count}} + {{like_count}} + {{/if}} + + + {{number views numberKey="views_long"}} + + {{#if singlePost}} + + {{{age}}} + + + {{else}} + + {{{age}}} + + + {{{last_post_age}}} + + {{/if}} + + {{/group}} +{{/with}} \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/topic.js.handlebars b/app/assets/javascripts/discourse/templates/topic.js.handlebars new file mode 100644 index 00000000000..df9ff98681c --- /dev/null +++ b/app/assets/javascripts/discourse/templates/topic.js.handlebars @@ -0,0 +1,141 @@ +{{#if content}} + {{#if loaded}} + + {{#if view.firstPostLoaded}} +
    +
    +
    + {{#if view.showFavoriteButton}} + + {{/if}} + {{#if view.editingTopic}} + + {{view Discourse.ComboboxViewCategory valueAttribute="name" contentBinding="view.categories" valueBinding="view.topic.categoryName"}} + + + {{else}} +

    + {{#if view.topic.title}} + {{view Discourse.TopicStatusView topicBinding="view.topic"}} + {{unbound view.topic.displayTitle}} + {{else}} + {{#if view.topic.missing}} + {{i18n topic.not_found.title}} + {{else}} + {{i18n topic.loading}} + {{/if}} + {{/if}} + {{categoryLink view.topic.category}} + + {{#if view.topic.can_edit}} + + {{/if}} +

    + {{/if}} +
    +
    +
    + {{/if}} + +
    + + {{view Discourse.SelectedPostsView}} +
    +
    +
    +
    + +
    + + {{#if view.loadingAbove}} +
    {{i18n loading}}
    + {{/if}} + {{view Discourse.TopicPostsView contentBinding="content.posts" topicViewBinding="view"}} + + {{#if view.loadingBelow}} +
    {{i18n loading}}
    + {{/if}} +
    +
    + + {{#if view.loading}} + {{#unless view.loadingBelow}} +
    {{i18n loading}}
    + {{/unless}} + {{else}} + {{#if view.fullyLoaded}} + {{view Discourse.TopicFooterButtonsView topicBinding="controller.content"}} + + {{#if controller.content.suggested_topics}} +
    + +

    {{i18n suggested_topics.title}}

    + +
    + + + + + + + + + + + {{each controller.content.suggested_topics tagName="tbody" itemTagName="tr" itemViewClass="Discourse.SuggestedTopicView"}} +
    + {{i18n topic.title}} + {{i18n category_title}}{{i18n posts}}{{i18n likes}}{{i18n views}}{{i18n activity}}
    +
    +
    +

    {{{unbound view.browseMoreMessage}}}

    +
    + {{/if}} + {{/if}} + {{/if}} + + +
    +
    + +
    + + {{else}} + {{#if message}} +
    +
    + +

    {{message}}

    + +

    + {{#linkTo list.popular}}{{i18n topic.back_to_list}}{{/linkTo}} +

    +
    + {{else}} +
    +
    {{i18n loading}}
    +
    + {{/if}} + {{/if}} +{{/if}} + +{{#if controller.filter}} +
    + {{filterDesc}} + {{i18n topic.filters.cancel}} +
    +{{/if}} + +{{render share}} +{{render quoteButton}} + +{{#if Discourse.currentUser.admin}} + {{render topicAdminMenu controller.content}} +{{/if}} diff --git a/app/assets/javascripts/discourse/templates/topic_admin_menu.js.handlebars b/app/assets/javascripts/discourse/templates/topic_admin_menu.js.handlebars new file mode 100644 index 00000000000..7d10dcc8d84 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/topic_admin_menu.js.handlebars @@ -0,0 +1,61 @@ +{{#if visible}} +
    +

    {{i18n admin_title}}

    + +
      +
    • + +
    • + + {{#if content.can_delete}} +
    • + +
    • + {{/if}} + +
    • + {{#if content.closed}} + + {{else}} + + {{/if}} +
    • + +
    • + {{#if content.pinned}} + + {{else}} + + {{/if}} +
    • + +
    • + {{#if content.archived}} + + {{else}} + + {{/if}} +
    • + +
    • + {{#if content.visible}} + + {{else}} + + {{/if}} +
    • + + {{#if view.topic.canConvertToRegular}} +
    • + +
    • + {{/if}} + +
    • + +
    • +
    +
    +{{else}} + +{{/if}} \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/topic_extra_info.js.handlebars b/app/assets/javascripts/discourse/templates/topic_extra_info.js.handlebars new file mode 100644 index 00000000000..6697e2320b0 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/topic_extra_info.js.handlebars @@ -0,0 +1,19 @@ +{{#if view.showFavoriteButton}} + +{{/if}} + +

    +{{#if view.topic.title}} + {{view Discourse.TopicStatusView topicBinding="view.topic"}} + {{view Discourse.AutoSizedTextView tagName="span" class="auto-sizer" contentBinding="view.topic.displayTitle"}} +{{else}} + {{#if view.topic.missing}} + {{i18n topic.not_found.title}} + {{else}} + {{i18n topic.loading}} + {{/if}} +{{/if}} +{{#if view.topic.category}} + {{categoryLink view.topic.category}} +{{/if}} +

    diff --git a/app/assets/javascripts/discourse/templates/topic_summary/best_of_toggle.js.handlebars b/app/assets/javascripts/discourse/templates/topic_summary/best_of_toggle.js.handlebars new file mode 100644 index 00000000000..eb9b32fa14a --- /dev/null +++ b/app/assets/javascripts/discourse/templates/topic_summary/best_of_toggle.js.handlebars @@ -0,0 +1,4 @@ +

    {{i18n best_of.title}}

    +

    {{{i18n best_of.description count="controller.content.posts_count"}}}

    + + diff --git a/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars b/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars new file mode 100644 index 00000000000..b2e459c0bc6 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars @@ -0,0 +1,104 @@ + + + +{{#if view.summaryView.collapsed}} + +{{else}} + +
    +
      +
    • +

      {{i18n created}}

      + {{avatar view.topic.created_by imageSize="tiny"}} + {{date view.topic.created_at}} +
    • +
    • +

      {{i18n last_post}}

      + {{avatar view.topic.last_poster imageSize="tiny"}} + {{date view.topic.last_posted_at}} +
    • +
    • +

      {{i18n posts}}

      + {{number view.topic.posts_count}} +
    • +
    • +

      {{i18n views}}

      + {{number view.topic.views}} +
    • +
    +
    + + {{#if view.topic.participants}} +
    + {{#each view.topic.participants}}{{view Discourse.ParticipantView participantBinding="this"}}{{/each}} +
    + {{/if}} + + {{#if view.parentView.infoLinks}} + + {{/if}} + + + +{{/if}} \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/topic_summary/private_message.js.handlebars b/app/assets/javascripts/discourse/templates/topic_summary/private_message.js.handlebars new file mode 100644 index 00000000000..b61798b62ad --- /dev/null +++ b/app/assets/javascripts/discourse/templates/topic_summary/private_message.js.handlebars @@ -0,0 +1,19 @@ +

    {{i18n private_message_info.title}}

    +

    {{{i18n private_message_info.description}}}

    + +{{#if controller.content.can_invite_to}} +
    + +
    +{{/if}} diff --git a/app/assets/javascripts/discourse/templates/user/activity.js.handlebars b/app/assets/javascripts/discourse/templates/user/activity.js.handlebars new file mode 100644 index 00000000000..c02deec5020 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/user/activity.js.handlebars @@ -0,0 +1,54 @@ + +
    + +
    + + +
    +
    + {{#if content.website}} +
    {{i18n user.website}}:
    {{content.websiteName}}
    + {{/if}} +
    {{i18n user.created}}:
    {{date content.created_at}}
    + {{#if content.last_posted_at}} +
    {{i18n user.last_posted}}:
    {{date content.last_posted_at}}
    + {{/if}} + {{#if content.last_seen_at}} +
    {{i18n user.last_seen}}:
    {{date content.last_seen_at}}
    + {{/if}} + {{#if content.invited_by}} +
    {{i18n user.invited_by}}:
    {{#linkTo user.activity content.invited_by}}{{content.invited_by.username}}{{/linkTo}}
    + {{/if}} + {{#if content.email}} +
    {{i18n user.email.title}}:
    {{content.email}}
    + {{/if}} +
    {{i18n user.trust_level}}:
    {{content.trustLevel.name}}
    +
    +
    + + {{#if content.can_edit}} +
    + +
    + {{/if}} + + +
    + +{{view Discourse.UserStreamView streamBinding="stream"}} diff --git a/app/assets/javascripts/discourse/templates/user/email.js.handlebars b/app/assets/javascripts/discourse/templates/user/email.js.handlebars new file mode 100644 index 00000000000..a7911b9f5fb --- /dev/null +++ b/app/assets/javascripts/discourse/templates/user/email.js.handlebars @@ -0,0 +1,46 @@ +
    + +
    +
    +

    {{i18n user.change_email.title}}

    +
    +
    + + {{#if success}} +
    +
    +

    {{i18n user.change_email.success}}

    +
    +
    + {{else}} + {{#if error}} +
    +
    +
    {{i18n user.change_email.error}}
    +
    +
    + {{/if}} + +
    + +
    + {{view Ember.TextField valueBinding="controller.newEmail" elementId="change_email" classNames="input-xxlarge"}} +
    +
    + {{#if controller.taken}} + {{i18n user.change_email.taken}} + {{else}} + {{i18n user.email.instructions}} + {{/if}} + +
    +
    + +
    +
    + +
    +
    + {{/if}} + +
    diff --git a/app/assets/javascripts/discourse/templates/user/invited.js.handlebars b/app/assets/javascripts/discourse/templates/user/invited.js.handlebars new file mode 100644 index 00000000000..c4d04ff8967 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/user/invited.js.handlebars @@ -0,0 +1,70 @@ +
    + {{#if content.empty}} +
    + {{i18n user.invited.none username="content.user.username"}} +
    + {{else}} + {{#if content.redeemed}} +
    +

    {{i18n user.invited.redeemed}}

    +
    + + + + + + + + + + + {{#each content.redeemed}} + + + + + + + + + + {{/each}} +
    {{i18n user.invited.user}}{{i18n user.invited.redeemed_at}}{{i18n user.last_seen}}{{i18n user.invited.topics_entered}}{{i18n user.invited.posts_read_count}}{{i18n user.invited.time_read}}{{i18n user.invited.days_visited}}
    + {{avatar user imageSize="tiny"}} + {{user.username}} + {{date redeemed_at}}{{date user.last_seen_at}}{{number user.topics_entered}}{{number user.posts_read_count}}{{{unbound user.time_read}}}{{{unbound user.days_visited}}} + / + {{{unbound user.days_since_created}}}
    +
    +
    + {{/if}} + + {{#if content.pending}} +
    +

    {{i18n user.invited.pending}}

    +
    + + + + + + + {{#each content.pending}} + + + + + + {{/each}} +
    {{i18n user.email.title}}{{i18n created}} 
    {{email}}{{date created_at}} + {{#if rescinded}} + {{i18n user.invited.rescinded}} + {{else}} + + {{/if}} +
    +
    +
    + {{/if}} + {{/if}} +
    \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars b/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars new file mode 100644 index 00000000000..ab97892edfc --- /dev/null +++ b/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars @@ -0,0 +1,108 @@ +
    + +
    +
    +

    {{i18n user.information}}

    +
    +
    + +
    + +
    + {{content.username}} + {{#linkTo "preferences.username" class="btn pad-left"}}{{i18n user.change_username.action}}{{/linkTo}} +
    +
    + {{{i18n user.username.instructions username="content.username"}}} +
    +
    + +
    + +
    + {{view Ember.TextField valueBinding="content.name" classNames="input-xxlarge"}} +
    +
    + {{i18n user.name.instructions}} +
    +
    + +
    + +
    + {{content.email}} + {{#linkTo "preferences.email" class="btn pad-left"}}{{i18n user.change_email.action}}{{/linkTo}} +
    +
    + {{i18n user.email.instructions}} +
    +
    + +
    + +
    + {{i18n user.change_password}} {{controller.passwordProgress}} +
    +
    + +
    + +
    + {{avatar content imageSize="large"}} +
    +
    + {{{i18n user.avatar.instructions}}} {{content.email}} +
    +
    + +
    + +
    + {{view Discourse.PagedownEditor valueBinding="content.bio_raw"}} +
    +
    + +
    + +
    + {{view Ember.TextField valueBinding="content.website" classNames="input-xxlarge"}} +
    +
    + +
    + +
    + + + {{#if content.email_digests}} +
    + {{view Discourse.ComboboxView valueAttribute="value" contentBinding="controller.digestFrequencies" valueBinding="content.digest_after_days"}} +
    + {{/if}} + + +
    +
    + {{i18n user.email.frequency}} +
    +
    + +
    + +
    + + {{view Discourse.ComboboxView valueAttribute="value" contentBinding="controller.autoTrackDurations" valueBinding="content.auto_track_topics_after_msecs"}} +
    +
    + +
    +
    + + {{#if saved}}{{i18n saved}}{{/if}} +
    +
    + +
    diff --git a/app/assets/javascripts/discourse/templates/user/private_messages.js.handlebars b/app/assets/javascripts/discourse/templates/user/private_messages.js.handlebars new file mode 100644 index 00000000000..f16c3c9b6c8 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/user/private_messages.js.handlebars @@ -0,0 +1,23 @@ +
    + +
    + + + +
    +{{view Discourse.UserStreamView streamBinding="stream"}} diff --git a/app/assets/javascripts/discourse/templates/user/stream.js.handlebars b/app/assets/javascripts/discourse/templates/user/stream.js.handlebars new file mode 100644 index 00000000000..fb280f331f8 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/user/stream.js.handlebars @@ -0,0 +1,17 @@ +
    + {{#collection contentBinding="stream" itemClass="item"}} + {{#with view.content}} +
    +
    {{avatar this imageSize="large" extraClasses="actor" avatarTemplatePath="avatar_template"}}
    + {{date path="created_at" leaveAgo="true"}} + {{unbound name}}
    + {{unbound description}} + #{{unbound post_number}} {{unbound title}} +
    +

    + {{{unbound excerpt}}} +

    + {{/with}} + {{/collection}} +
    +
    diff --git a/app/assets/javascripts/discourse/templates/user/user.js.handlebars b/app/assets/javascripts/discourse/templates/user/user.js.handlebars new file mode 100644 index 00000000000..77b04aed428 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/user/user.js.handlebars @@ -0,0 +1,46 @@ +
    +
    +
    +

    {{content.name}}{{unbound content.username}}

    + + {{#if viewingSelf}} + + {{/if}} + {{#if Discourse.currentUser.admin}} + {{i18n admin.user.show_admin_profile}} + {{/if}} + +
    + {{avatar content imageSize="120"}} +
    +
    +
    +
    +
    + +
    +
    + {{outlet userOutlet}} +
    + diff --git a/app/assets/javascripts/discourse/templates/user/username.js.handlebars b/app/assets/javascripts/discourse/templates/user/username.js.handlebars new file mode 100644 index 00000000000..8deef57833d --- /dev/null +++ b/app/assets/javascripts/discourse/templates/user/username.js.handlebars @@ -0,0 +1,36 @@ +
    + +
    +
    +

    {{i18n user.change_username.title}}

    +
    +
    + + {{#if error}} +
    +
    +
    {{i18n user.change_username.error}}
    +
    +
    + {{/if}} + +
    + +
    + {{view Ember.TextField valueBinding="controller.newUsername" elementId="change_username" classNames="input-xxlarge"}} +
    +
    + {{#if controller.taken}} + {{i18n user.change_username.taken}} + {{/if}} +
    +
    + +
    +
    + + {{#if saved}}{{i18n saved}}{{/if}} +
    +
    + +
    diff --git a/app/assets/javascripts/discourse/translations.js.erb b/app/assets/javascripts/discourse/translations.js.erb new file mode 100644 index 00000000000..3ace45233a8 --- /dev/null +++ b/app/assets/javascripts/discourse/translations.js.erb @@ -0,0 +1,5 @@ +//= depend_on 'en.yml' + +<% SimplesIdeias::I18n.assert_usable_configuration! %> +var I18n = I18n || {}; +I18n.translations = <%= SimplesIdeias::I18n.translation_segments['app/assets/javascripts/i18n/en.js'].to_json %>; diff --git a/app/assets/javascripts/discourse/views/actions_history_view.js.coffee b/app/assets/javascripts/discourse/views/actions_history_view.js.coffee new file mode 100644 index 00000000000..43de9810276 --- /dev/null +++ b/app/assets/javascripts/discourse/views/actions_history_view.js.coffee @@ -0,0 +1,57 @@ +window.Discourse.ActionsHistoryView = Em.View.extend Discourse.Presence, + tagName: 'section' + classNameBindings: [':post-actions', 'hidden'] + + hidden: (-> + @blank('content') + ).property('content.@each') + + usersChanged: (-> + @rerender() + ).observes('content.@each', 'content.users.@each') + + # This was creating way too many bound ifs and subviews in the handlebars version. + render: (buffer) -> + return unless @present('content') + + @get('content').forEach (c) -> + buffer.push("
    ") + if c.get('users') + c.get('users').forEach (u) -> + buffer.push("") + buffer.push Discourse.Utilities.avatarImg + size: 'small' + username: u.get('username') + avatarTemplate: u.get('avatar_template') + buffer.push("") + + buffer.push(" #{c.get('actionType.long_form')}.") + else + buffer.push("#{c.get('description')}.") + + if c.get('can_act') + alsoName = Em.String.i18n("post.actions.it_too", alsoName: c.get('actionType.alsoName')) + buffer.push(" #{alsoName}.") + + if c.get('can_undo') + alsoName = Em.String.i18n("post.actions.undo", alsoName: c.get('actionType.alsoNameLower')) + buffer.push(" #{alsoName}.") + buffer.push("
    ") + + click: (e) -> + $target = $(e.target) + + # User wants to know who actioned it + if actionTypeId = $target.data('who-acted') + @get('controller').whoActed(@content.findProperty('id', actionTypeId)) + return false + + if actionTypeId = $target.data('act') + @get('controller').act(@content.findProperty('id', actionTypeId)) + return false + + if actionTypeId = $target.data('undo') + @get('controller').undoAction(@content.findProperty('id', actionTypeId)) + return false + + false \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/application_view.js.coffee b/app/assets/javascripts/discourse/views/application_view.js.coffee new file mode 100644 index 00000000000..c71008d905d --- /dev/null +++ b/app/assets/javascripts/discourse/views/application_view.js.coffee @@ -0,0 +1,2 @@ +window.Discourse.ApplicationView = Ember.View.extend + templateName: 'application' diff --git a/app/assets/javascripts/discourse/views/archetype_options_modal_view.js.coffee b/app/assets/javascripts/discourse/views/archetype_options_modal_view.js.coffee new file mode 100644 index 00000000000..d865a8199a3 --- /dev/null +++ b/app/assets/javascripts/discourse/views/archetype_options_modal_view.js.coffee @@ -0,0 +1,3 @@ +window.Discourse.ArchetypeOptionsModalView = window.Discourse.ModalBodyView.extend + templateName: 'modal/archetype_options' + title: Em.String.i18n('topic.options') \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/auto_sized_text_view.js.coffee b/app/assets/javascripts/discourse/views/auto_sized_text_view.js.coffee new file mode 100644 index 00000000000..dae2ccc64de --- /dev/null +++ b/app/assets/javascripts/discourse/views/auto_sized_text_view.js.coffee @@ -0,0 +1,18 @@ +Discourse.AutoSizedTextView = Ember.View.extend + render: (buffer)-> + null + + didInsertElement: (e) -> + me = @$() + me.text(@get('content')) + lh = lineHeight = parseInt(me.css("line-height")) + fontSize = parseInt(me.css("font-size")) + + while me.height() > lineHeight && fontSize > 12 + fontSize -= 1 + lh -=1 + me.css("font-size", "#{fontSize}px") + me.css("line-height", "#{lh}px") + + + diff --git a/app/assets/javascripts/discourse/views/button_view.js.coffee b/app/assets/javascripts/discourse/views/button_view.js.coffee new file mode 100644 index 00000000000..71063f7fcb3 --- /dev/null +++ b/app/assets/javascripts/discourse/views/button_view.js.coffee @@ -0,0 +1,16 @@ +Discourse.ButtonView = Ember.View.extend Discourse.Presence, + tagName: 'button' + classNameBindings: [':btn', ':standard', 'dropDownToggle'] + attributeBindings: ['data-not-implemented', 'title', 'data-toggle', 'data-share-url'] + + title: (-> + Em.String.i18n(@get('helpKey') || @get('textKey')) + ).property('helpKey') + + text: (-> + Em.String.i18n(@get('textKey')) + ).property('textKey') + + render: (buffer) -> + @renderIcon(buffer) if @renderIcon + buffer.push(@get('text')) diff --git a/app/assets/javascripts/discourse/views/combobox_view.js.coffee b/app/assets/javascripts/discourse/views/combobox_view.js.coffee new file mode 100644 index 00000000000..8c69f7d989f --- /dev/null +++ b/app/assets/javascripts/discourse/views/combobox_view.js.coffee @@ -0,0 +1,24 @@ +Discourse.ComboboxView = window.Ember.View.extend + tagName: 'select' + classNames: ['combobox'] + valueAttribute: 'id' + + render: (buffer) -> + if @get('none') + buffer.push("") + + selected = @get('value')?.toString() + if @get('content') + @get('content').each (o) => + val = o[@get('valueAttribute')]?.toString() + selectedText = if val == selected then "selected" else "" + data = "" + if @dataAttributes + @dataAttributes.forEach (a) => + data += "data-#{a}=\"#{o.get(a)}\" " + buffer.push("") + + didInsertElement: -> + $elem = @.$() + $elem.chosen(template: @template, disable_search_threshold: 5) + $elem.change (e) => @set('value', $(e.target).val()) diff --git a/app/assets/javascripts/discourse/views/combobox_view_category.js.coffee b/app/assets/javascripts/discourse/views/combobox_view_category.js.coffee new file mode 100644 index 00000000000..172144ac5a8 --- /dev/null +++ b/app/assets/javascripts/discourse/views/combobox_view_category.js.coffee @@ -0,0 +1,8 @@ +window.Discourse.ComboboxViewCategory = Discourse.ComboboxView.extend + + none: 'category.none' + dataAttributes: ['color'] + + template: (text, templateData) -> + return text unless templateData.color + "#{text}" \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/composer_view.js.coffee b/app/assets/javascripts/discourse/views/composer_view.js.coffee new file mode 100644 index 00000000000..76bc39f5f2e --- /dev/null +++ b/app/assets/javascripts/discourse/views/composer_view.js.coffee @@ -0,0 +1,248 @@ +window.Discourse.ComposerView = window.Discourse.View.extend + templateName: 'composer' + elementId: 'reply-control' + classNameBindings: ['content.creatingPrivateMessage:private-message', + 'composeState', + 'content.loading', + 'content.editTitle', + 'postMade', + 'content.creatingTopic:topic', + 'content.showPreview', + 'content.hidePreview'] + + composeState: (-> + state = @get('content.composeState') + unless state + state = Discourse.Composer.CLOSED + state + ).property('content.composeState') + + + draftStatus: (-> + @$('.saving-draft').text(@get('content.draftStatus') || "") + ).observes('content.draftStatus') + + # Disable fields when we're loading + loadingChanged: (-> + if @get('loading') + $('#wmd-input, #reply-title').prop('disabled', 'disabled') + else + $('#wmd-input, #reply-title').prop('disabled', '') + ).observes('loading') + + postMade: (-> + return 'created-post' if @present('controller.createdPost') + null + ).property('content.createdPost') + + observeReplyChanges: (-> + + return if @get('content.hidePreview') + + Ember.run.next null, => + if @editor + @editor.refreshPreview() + # if the caret is on the last line ensure preview scrolled to bottom + caretPosition = Discourse.Utilities.caretPosition(@wmdInput[0]) + unless @wmdInput.val().substring(caretPosition).match /\n/ + $wmdPreview = $('#wmd-preview:visible') + if $wmdPreview.length > 0 + $wmdPreview.scrollTop($wmdPreview[0].scrollHeight) + + + ).observes('content.reply', 'content.hidePreview') + + willDestroyElement: -> + $('body').off 'keydown.composer' + + resize: (-> + # this still needs to wait on animations, need a clean way to do that + Em.run.next null, => + replyControl = $('#reply-control') + h = replyControl.height() || 0 + $('.topic-area').css('padding-bottom', "#{h}px") + ).observes('content.composeState') + + didInsertElement: -> + + # Delegate ESC to the composer + $('body').on 'keydown.composer', (e) => + @get('controller').hitEsc() if e.which == 27 + + replyControl = $('#reply-control') + replyControl.DivResizer(resize: @resize) + Discourse.TransitionHelper.after(replyControl, @resize) + + click: -> + @get('controller').click() + + # Called after the preview renders. Debounced for performance + afterRender: Discourse.debounce(-> + $wmdPreview = $('#wmd-preview') + return unless ($wmdPreview.length > 0) + Discourse.SyntaxHighlighting.apply($wmdPreview) + refresh = @get('controller.content.post.id') isnt undefined + $('a.onebox', $wmdPreview).each (i, e) => Discourse.Onebox.load(e, refresh) + $('span.mention', $wmdPreview).each (i, e) => Discourse.Mention.load(e, refresh) + , 100) + + cancelUpload: -> + # TODO + + initEditor: -> + + # not quite right, need a callback to pass in, meaning this gets called once, + # but if you start replying to another topic it will get the avatars wrong + @wmdInput = $wmdInput = $('#wmd-input') + return if $wmdInput.length == 0 || $wmdInput.data('init') == true + + Discourse.ComposerView.trigger("initWmdEditor") + + template = Handlebars.compile("
    + +
    ") + + transformTemplate = Handlebars.compile("{{avatar this imageSize=\"tiny\"}} {{this.username}}") + + $wmdInput.data('init', true) + $wmdInput.autocomplete + template: template + dataSource: (term,callback) => + Discourse.UserSearch.search + term: term, + callback: callback, + topicId: @get('controller.controllers.topic.content.id') + key: "@" + transformComplete: (v) -> + v.username + + selected = [] + $('#private-message-users').val(@get('content.targetUsernames')).autocomplete + template: template + dataSource: (term, callback) -> + Discourse.UserSearch.search + term: term, + callback: callback, + exclude: selected + onChangeItems: (items) => + items = $.map items, (i) -> if i.username then i.username else i + @set('content.targetUsernames', items.join(",")) + selected = items + transformComplete: transformTemplate + reverseTransform: (i) -> {username: i} + + topic = @get('topic') + @editor = editor = new Markdown.Editor(Discourse.Utilities.markdownConverter( + lookupAvatar: (username) -> + Discourse.Utilities.avatarImg(username: username, size: 'tiny') + )) + + $uploadTarget = $('#reply-control') + @editor.hooks.insertImageDialog = (callback) => + callback(null) + @get('controller.controllers.modal').show(Discourse.ImageSelectorView.create(composer: @, uploadTarget: $uploadTarget)) + true + @editor.hooks.onPreviewRefresh = => @afterRender() + @editor.run() + @set('editor', @editor) + + @loadingChanged() + + saveDraft = Discourse.debounce((=> @get('controller').saveDraft()),2000) + + $wmdInput.keyup => + saveDraft() + return true + + $('#reply-title').keyup => + saveDraft() + return true + + # In case it's still bound somehow + $uploadTarget.fileupload('destroy') + + # Add the upload action + $uploadTarget.fileupload + url: '/uploads' + dataType: 'json' + timeout: 20000 + formData: + topic_id: 1234 + paste: (e, data) => + if data.files.length > 0 + @set('loadingImage', true) + @set('uploadProgress', 0) + true + drop: (e, data)=> + if e.originalEvent.dataTransfer.files.length == 1 + @set('loadingImage', true) + @set('uploadProgress', 0) + + progressall:(e,data)=> + progress = parseInt(data.loaded / data.total * 100, 10) + @set('uploadProgress', progress) + + done: (e, data) => + @set('loadingImage', false) + upload = data.result + html = "" + @addMarkdown(html) + + fail: (e, data) => + bootbox.alert Em.String.i18n('post.errors.upload') + @set('loadingImage', false) + + + # I hate to use Em.run.later, but I don't think there's a way of waiting for a CSS transition + # to finish. + Em.run.later($, (=> + replyTitle = $('#reply-title') + + @resize() + + if replyTitle.length + replyTitle.putCursorAtEnd() + else + $wmdInput.putCursorAtEnd() + ) + , 300) + + addMarkdown: (text)-> + ctrl = $('#wmd-input').get(0) + caretPosition = Discourse.Utilities.caretPosition(ctrl) + + current = @get('content.reply') + @set('content.reply', current.substring(0, caretPosition) + text + current.substring(caretPosition, current.length)) + Em.run.next => + Discourse.Utilities.setCaretPosition(ctrl, caretPosition + text.length) + + # Uses javascript to get the image sizes from the preview, if present + imageSizes: -> + result = {} + + $('#wmd-preview img').each (i, e) -> + $img = $(e) + result[$img.prop('src')] = {width: $img.width(), height: $img.height()} + result + + childDidInsertElement: (e)-> + @initEditor() + + +# not sure if this is the right way, keeping here for now, we could use a mixin perhaps +Discourse.NotifyingTextArea = Ember.TextArea.extend + + placeholder: (-> + Em.String.i18n(@get('placeholderKey')) + ).property('placeholderKey') + + didInsertElement: -> + @get('parent').childDidInsertElement(@) + +RSVP.EventTarget.mixin(Discourse.ComposerView) diff --git a/app/assets/javascripts/discourse/views/dropdown_button_view.js.coffee b/app/assets/javascripts/discourse/views/dropdown_button_view.js.coffee new file mode 100644 index 00000000000..3acb72cdd41 --- /dev/null +++ b/app/assets/javascripts/discourse/views/dropdown_button_view.js.coffee @@ -0,0 +1,41 @@ +Discourse.DropdownButtonView = Ember.View.extend Discourse.Presence, + classNames: ['btn-group'] + attributeBindings: ['data-not-implemented'] + + didInsertElement: (e) -> + @.$('ul li').on 'click', (e) => + e.preventDefault() + @clicked $(e.currentTarget).data('id') + false + + clicked: (id) -> null + + textChanged: (-> + @rerender() + ).observes('text','longDescription') + + render: (buffer) -> + + buffer.push("

    #{@get('title')}

    ") + buffer.push("") + + buffer.push("") + + if desc = @get('longDescription') + buffer.push("

    ") + buffer.push(desc) + buffer.push("

    ") + diff --git a/app/assets/javascripts/discourse/views/embedded_post_view.js.coffee b/app/assets/javascripts/discourse/views/embedded_post_view.js.coffee new file mode 100644 index 00000000000..06ef245596b --- /dev/null +++ b/app/assets/javascripts/discourse/views/embedded_post_view.js.coffee @@ -0,0 +1,8 @@ +window.Discourse.EmbeddedPostView = Ember.View.extend + templateName: 'embedded_post' + classNames: ['reply'] + screenTrackBinding: 'postView.screenTrack' + + didInsertElement: -> + postView = @get('postView') || @get('parentView.postView') + postView.get('screenTrack').track(@get('elementId'), @get('post.post_number')) diff --git a/app/assets/javascripts/discourse/views/excerpt/excerpt_category_view.js.coffee b/app/assets/javascripts/discourse/views/excerpt/excerpt_category_view.js.coffee new file mode 100644 index 00000000000..349e6c03a19 --- /dev/null +++ b/app/assets/javascripts/discourse/views/excerpt/excerpt_category_view.js.coffee @@ -0,0 +1,29 @@ +window.Discourse.ExcerptCategoryView = Ember.View.extend + + editCategory: -> + @get('parentView').close() + + # We create an attribute, id, with the old name so we can rename it. + cat = @get('category') + + cat.set('id', cat.get('slug')) + @get('controller.controllers.modal')?.showView(Discourse.EditCategoryView.create(category: cat)) + false + + deleteCategory: -> + @get('parentView').close() + + bootbox.confirm Em.String.i18n("category.delete_confirm"), (result) => + if result + @get('category').delete -> + Discourse.get('appController').reloadSession -> Discourse.get('router').route("/categories") + + false + + didInsertElement: -> + @set 'category', Discourse.Category.create + name: @get('name') + color: @get('color') + slug: @get('slug') + excerpt: @get('excerpt') + topic_url: @get('topic_url') diff --git a/app/assets/javascripts/discourse/views/excerpt/excerpt_post_view.js.coffee b/app/assets/javascripts/discourse/views/excerpt/excerpt_post_view.js.coffee new file mode 100644 index 00000000000..ab1faf4c0d8 --- /dev/null +++ b/app/assets/javascripts/discourse/views/excerpt/excerpt_post_view.js.coffee @@ -0,0 +1,19 @@ +window.Discourse.ExcerptPostView = Ember.View.extend + mute: -> + @update(true) + + unmute: -> + @update(false) + + refreshLater: Discourse.debounce((-> + @get('controller.controllers.listController').refresh() + ), 1000) + + + update: (v)-> + @set('muted',v) + $.post "/t/#{@topic_id}/#{if v then "mute" else "unmute"}", + _method: 'put' + success: => + # I experimented with this, but if feels like whackamole + # @refreshLater() diff --git a/app/assets/javascripts/discourse/views/excerpt/excerpt_user_view.js.coffee b/app/assets/javascripts/discourse/views/excerpt/excerpt_user_view.js.coffee new file mode 100644 index 00000000000..7cf574a0e5e --- /dev/null +++ b/app/assets/javascripts/discourse/views/excerpt/excerpt_user_view.js.coffee @@ -0,0 +1,18 @@ +window.Discourse.ExcerptUserView = Ember.View.extend + privateMessage: (e) -> + $target = @get("link") + postView = Ember.View.views[$target.closest('.ember-view')[0].id] + post = postView.get("post") + url = post.get("url") + username = post.get("username") + Discourse.router.route('/users/' + Discourse.currentUser.username.toLowerCase() + "/private-messages") + + # TODO figure out a way for it to open the composer cleanly AFTER the navigation happens. + composerController = Discourse.get('router.composerController') + composerController.open + action: Discourse.Composer.PRIVATE_MESSAGE + usernames: username + archetypeId: 'private_message' + draftKey: 'new_private_message' + reply: window.location.href.split("/").splice(0,3).join("/") + url + diff --git a/app/assets/javascripts/discourse/views/excerpt/excerpt_view.js.coffee b/app/assets/javascripts/discourse/views/excerpt/excerpt_view.js.coffee new file mode 100644 index 00000000000..018ebe95e52 --- /dev/null +++ b/app/assets/javascripts/discourse/views/excerpt/excerpt_view.js.coffee @@ -0,0 +1,154 @@ +window.Discourse.ExcerptView = Ember.ContainerView.extend + classNames: ['excerpt-view'] + classNameBindings: ['position', 'size'] + + childViews: ['closeView'] + + closeView: Ember.View.create + templateName: 'excerpt/close' + + # Position the tooltip on the screen. There's probably a nicer way of coding this. + locationChanged: (-> + loc = @get('location') + @.$().css(loc) + ).observes('location') + + visibleChanged: (-> + return if @get('disabled') + if @get('visible') + unless @get('opening') + @set('opening', true) + @set('closing', false) + $('.excerpt-view').stop().fadeIn('fast', => @set('opening', false)) + else + unless @get('closing') + @set('closing', true) + @set('opening', false) + $('.excerpt-view').stop().fadeOut('slow', => @set('closing', false)) + ).observes('visible') + + urlChanged: (-> + if @get('url') + @set('visible', false) + @ajax = $.ajax + url: "/excerpt", + data: + url: @get('url') + success: (tooltip) => + + # Make sure we still have a URL (if it changed, we no longer care about this request.) + return unless @get('url') + $('.excerpt-view').stop().hide().css({opacity: 1}) + @set('closing', false) + @set('location',@get('desiredLocation')) + + tooltip.created_at = Date.create(tooltip.created_at).relative() if tooltip.created_at + + viewClass = Discourse["Excerpt#{tooltip.type}View"] || Em.View + + excerpt = Em.Object.create(tooltip) + excerpt.set('templateName', "excerpt/#{tooltip.type.toLowerCase()}") + + if @get('contentsView') + @removeObject(@get('contentsView')) + + instance = viewClass.create(excerpt) + instance.set("link", @hovering) + @set('contentsView', instance) + @addObject(instance) + + @set('excerpt', tooltip) + @set('visible', true) + error: => + @close() + complete: + @ajax = null + + ).observes('url') + + close: -> + Em.run.cancel(@closeTimer) + Em.run.cancel(@openTimer) + @set('url', null) + @set('visible', false) + false + + closeSoon: -> + @closeTimer = Em.run.later => + @close() + , 200 + + disable: -> + @set('disabled',true) + Em.run.cancel(@openTimer) + Em.run.cancel(@closeTimer) + @set('visible', false) + @ajax.abort() if @ajax && @ajax.abort + $('.excerpt-view').stop().hide() + + enable: -> + @set('disabled', false) + + didInsertElement: -> + + # lets disable this puppy for now, it looks unprofessional + return + + # We don't do hovering on touch devices + return if Discourse.get('touch') + + # If they dash into the excerpt, keep it open until they leave + $('.excerpt-view').on 'mouseover', (e) => Em.run.cancel(@closeTimer) + $('.excerpt-view').on 'mouseleave', (e) => @closeSoon() + + $('#main').on 'mouseover', '.excerptable', (e) => + + $target = $(e.currentTarget) + @hovering = $target + + # Make sure they're holding in place before we pop it up to mimimize annoyance + Em.run.cancel(@openTimer) + Em.run.cancel(@closeTimer) + @openTimer = Em.run.later => + pos = $target.offset() + pos.top = pos.top - $(window).scrollTop() + + positionText = $target.data('excerpt-position') || 'top' + + margin = 25 + height = @.$().height() + topPosY = (pos.top - height) - margin + bottomPosY = (pos.top + margin) + + + # Switch to right if there's no room on top + if positionText == 'top' + positionText = 'bottom' if topPosY < 10 + + switch positionText + when 'right' + pos.left = pos.left + $target.width() + margin + pos.top = pos.top - $target.height() + when 'left' + pos.left = pos.left - @.$().width() - margin + pos.top = pos.top - $target.height() + when 'top' + pos.top = topPosY + when 'bottom' + pos.top = bottomPosY + + if (pos.left || 0) <= 0 && (pos.top || 0) <= 0 + # somehow, sometimes, we are trying to position stuff in weird spots, just skip it + return + + @set('position', positionText) + @set('desiredLocation', pos) + @set('size', $target.data('excerpt-size')) + @set('url', $target.prop('href')) + , if @get('visible') or @get('closing') then 100 else Discourse.SiteSettings.popup_delay + + $('#main').on 'mouseleave', '.excerptable', (e) => + Em.run.cancel(@openTimer) + @closeSoon() + + diff --git a/app/assets/javascripts/discourse/views/featured_threads_view.js.coffee b/app/assets/javascripts/discourse/views/featured_threads_view.js.coffee new file mode 100644 index 00000000000..d0a6daf83dd --- /dev/null +++ b/app/assets/javascripts/discourse/views/featured_threads_view.js.coffee @@ -0,0 +1,7 @@ +window.Discourse.FeaturedTopicsView = Ember.View.extend + templateName: 'featured_topics' + classNames: ['category-list-item'] + + init: -> + @._super() + @set('context', @get('content')) \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/featured_topics_view.js.coffee b/app/assets/javascripts/discourse/views/featured_topics_view.js.coffee new file mode 100644 index 00000000000..dd91e043b89 --- /dev/null +++ b/app/assets/javascripts/discourse/views/featured_topics_view.js.coffee @@ -0,0 +1,3 @@ +window.Discourse.FeaturedTopicsView = Ember.View.extend + templateName: 'featured_topics' + classNames: ['category-list-item'] diff --git a/app/assets/javascripts/discourse/views/flag_view.js.coffee b/app/assets/javascripts/discourse/views/flag_view.js.coffee new file mode 100644 index 00000000000..ad020ed1b78 --- /dev/null +++ b/app/assets/javascripts/discourse/views/flag_view.js.coffee @@ -0,0 +1,53 @@ +window.Discourse.FlagView = Ember.View.extend + templateName: 'flag' + title: Em.String.i18n('flagging.title') + + changePostActionType: (action) -> + @set('postActionTypeId', action.id) + @set('isCustomFlag', action.is_custom_flag) + Em.run.next -> $("#radio_#{action.name_key}").prop('checked', 'true') + false + + createFlag: -> + actionType = Discourse.get("site").postActionTypeById(@get('postActionTypeId')) + @get("post.actionByName.#{actionType.get('name_key')}")?.act(message: @get('customFlagMessage')) + $('#discourse-modal').modal('hide') + false + + customPlaceholder: (-> + Em.String.i18n("flagging.custom_placeholder") + ).property() + + showSubmit: (-> + if @get("postActionTypeId") + if @get("isCustomFlag") + m = @get("customFlagMessage") + return m && m.length >= 10 && m.length <= 500 + else + return true + false + ).property("isCustomFlag","customFlagMessage", "postActionTypeId") + + customFlagMessageChanged: (-> + minLen = 10 + len = @get('customFlagMessage')?.length || 0 + @set("customMessageLengthClasses", "too-short custom-message-length") + if len == 0 + message = Em.String.i18n("flagging.custom_message.at_least", n: minLen) + else if len < minLen + message = Em.String.i18n("flagging.custom_message.more", n: minLen - len) + else + message = Em.String.i18n("flagging.custom_message.left", n: 500 - len) + @set("customMessageLengthClasses", "ok custom-message-length") + @set("customMessageLength",message) + + ).observes("customFlagMessage") + + didInsertElement: -> + @customFlagMessageChanged() + @set('postActionTypeId', null) + $flagModal = $('#flag-modal') + + # Would be nice if there were an EmberJs radio button to do this for us. Oh well, one should be coming + # in an upcoming release. + $("input[type='radio']", $flagModal).prop('checked', false) diff --git a/app/assets/javascripts/discourse/views/header_view.js.coffee b/app/assets/javascripts/discourse/views/header_view.js.coffee new file mode 100644 index 00000000000..9dc43c26076 --- /dev/null +++ b/app/assets/javascripts/discourse/views/header_view.js.coffee @@ -0,0 +1,93 @@ +window.Discourse.HeaderView = Ember.View.extend + tagName: 'header' + classNames: ['d-header', 'clearfix'] + classNameBindings: ['editingTopic'] + templateName: 'header' + siteBinding: 'Discourse.site' + currentUserBinding: 'Discourse.currentUser' + categoriesBinding: 'site.categories' + topicBinding: 'Discourse.router.topicController.content' + + showDropdown: ($target) -> + elementId = $target.data('dropdown') || $target.data('notifications') + $dropdown = $("##{elementId}") + + $li = $target.closest('li') + $ul = $target.closest('ul') + $li.addClass('active') + $('li', $ul).not($li).removeClass('active') + $('.d-dropdown').not($dropdown).fadeOut('fast') + $dropdown.fadeIn('fast') + $dropdown.find('input[type=text]').focus().select() + + $html = $('html') + + hideDropdown = () => + $dropdown.fadeOut('fast') + $li.removeClass('active') + $html.data('hide-dropdown', null) + $html.off 'click.d-dropdown touchstart.d-dropdown' + + $html.on 'click.d-dropdown touchstart.d-dropdown', (e) => + return true if $(e.target).closest('.d-dropdown').length > 0 + hideDropdown() + + $html.data('hide-dropdown', hideDropdown) + + false + + showNotifications: -> + $.get("/notifications").then (result) => + @set('notifications', result.map (n) => Discourse.Notification.create(n)) + + # We've seen all the notifications now + @set('currentUser.unread_notifications', 0) + @set('currentUser.unread_private_messages', 0) + + @showDropdown($('#user-notifications')) + + false + + examineDockHeader: -> + unless @docAt + outlet = $('#main-outlet') + return unless outlet && outlet.length == 1 + @docAt = outlet.offset().top + + offset = window.pageYOffset || $('html').scrollTop() + + if offset >= @docAt + unless @dockedHeader + $body = $('body') + $body.addClass('docked') + @dockedHeader = true + else + if @dockedHeader + $('body').removeClass('docked') + @dockedHeader = false + + + willDestroyElement: -> + $(window).unbind 'scroll.discourse-dock' + $(document).unbind 'touchmove.discourse-dock' + + + didInsertElement: -> + @.$('a[data-dropdown]').on 'click touchstart', (e) => @showDropdown($(e.currentTarget)) + @.$('a.unread-private-messages, a.unread-notifications, a[data-notifications]').on 'click touchstart', (e) => @showNotifications(e) + + $(window).bind 'scroll.discourse-dock', => @examineDockHeader() + $(document).bind 'touchmove.discourse-dock', => @examineDockHeader() + @examineDockHeader() + + # Delegate ESC to the composer + $('body').on 'keydown.header', (e) => + + # Hide dropdowns + if e.which == 27 + @.$('li').removeClass('active') + @.$('.d-dropdown').fadeOut('fast') + + if @get('editingTopic') + @finishedEdit() if e.which == 13 + @cancelEdit() if e.which == 27 diff --git a/app/assets/javascripts/discourse/views/history_view.js.coffee b/app/assets/javascripts/discourse/views/history_view.js.coffee new file mode 100644 index 00000000000..08c48e9ec9f --- /dev/null +++ b/app/assets/javascripts/discourse/views/history_view.js.coffee @@ -0,0 +1,33 @@ +window.Discourse.HistoryView = Ember.View.extend + templateName: 'history' + title: 'History' + modalClass: 'history-modal' + + loadSide: (side) -> + if @get("version#{side}") + orig = @get('originalPost') + version = @get("version#{side}.number") + + if version == orig.get('version') + @set("post#{side}", orig) + else + Discourse.Post.loadVersion orig.get('id'), version, (post) => + @set("post#{side}", post) + + changedLeftVersion: (-> @loadSide("Left") ).observes('versionLeft') + changedRightVersion: (-> @loadSide("Right") ).observes('versionRight') + + + didInsertElement: -> + @set('loading', true) + @set('postLeft', null) + @set('postRight', null) + + @get('originalPost').loadVersions (result) => + @set('loading', false) + + @set('versionLeft', result.first()) + @set('versionRight', result.last()) + @set('versions', result) + + diff --git a/app/assets/javascripts/discourse/views/image_selector.js.coffee b/app/assets/javascripts/discourse/views/image_selector.js.coffee new file mode 100644 index 00000000000..d711dc0cae6 --- /dev/null +++ b/app/assets/javascripts/discourse/views/image_selector.js.coffee @@ -0,0 +1,31 @@ +window.Discourse.ImageSelectorView = Ember.View.extend + templateName: 'image_selector' + classNames: ['image-selector'] + title: 'Insert Image' + + init: -> + @._super() + @set('localSelected', true) + + selectLocal: -> + @set('localSelected', true) + + selectRemote: -> + @set('localSelected', false) + + + remoteSelected: (-> + !@get('localSelected') + ).property('localSelected') + + + upload: -> + @get('uploadTarget').fileupload('send', fileInput: $('#filename-input')) + $('#discourse-modal').modal('hide') + + add: -> + @get('composer').addMarkdown("![image](#{$('#fileurl-input').val()})") + $('#discourse-modal').modal('hide') + + + diff --git a/app/assets/javascripts/discourse/views/input_tip_view.js.coffee b/app/assets/javascripts/discourse/views/input_tip_view.js.coffee new file mode 100644 index 00000000000..888de8b6ca6 --- /dev/null +++ b/app/assets/javascripts/discourse/views/input_tip_view.js.coffee @@ -0,0 +1,20 @@ +Discourse.InputTipView = Ember.View.extend Discourse.Presence, + templateName: 'input_tip' + classNameBindings: [':tip', 'good','bad'] + + good: (-> + !@get('validation.failed') + ).property('validation') + + bad: (-> + @get('validation.failed') + ).property('validation') + + triggerRender: (-> + @rerender() + ).observes('validation') + + render: (buffer) -> + if reason = @get('validation.reason') + icon = if @get('good') then 'icon-ok' else 'icon-remove' + buffer.push " #{reason}" \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/list/list_categories_view.js.coffee b/app/assets/javascripts/discourse/views/list/list_categories_view.js.coffee new file mode 100644 index 00000000000..41d455fc9e2 --- /dev/null +++ b/app/assets/javascripts/discourse/views/list/list_categories_view.js.coffee @@ -0,0 +1,5 @@ +window.Discourse.ListCategoriesView = Ember.View.extend + templateName: 'list/categories' + + didInsertElement: -> + Discourse.set('title', Em.String.i18n("category.list")) diff --git a/app/assets/javascripts/discourse/views/list/list_topics_view.js.coffee b/app/assets/javascripts/discourse/views/list/list_topics_view.js.coffee new file mode 100644 index 00000000000..6d8aadc630a --- /dev/null +++ b/app/assets/javascripts/discourse/views/list/list_topics_view.js.coffee @@ -0,0 +1,50 @@ +window.Discourse.ListTopicsView = Ember.View.extend Discourse.Scrolling, Discourse.Presence, + templateName: 'list/topics' + categoryBinding: 'Discourse.router.listController.category' + filterModeBinding: 'Discourse.router.listController.filterMode' + + insertedCount: (-> + inserted = @get('controller.inserted') + return 0 unless inserted + inserted.length + ).property('controller.inserted.@each') + + rollUp: (-> + @get('insertedCount') > Discourse.SiteSettings.new_topics_rollup + ).property('insertedCount') + + loadedMore: false + currentTopicId: null + + willDestroyElement: -> @unbindScrolling() + + didInsertElement: -> + @bindScrolling() + eyeline = new Discourse.Eyeline('.topic-list-item') + eyeline.on 'sawBottom', => @loadMore() + + if scrollPos = Discourse.get('transient.topicListScrollPos') + Em.run.next -> $('html, body').scrollTop(scrollPos) + else + Em.run.next -> $('html, body').scrollTop(0) + + @set('eyeline', eyeline) + @set('currentTopicId', null) + + loadMore: -> + return if @get('loading') + @set('loading', true) + @get('controller.content').loadMoreTopics().then (hasMoreResults) => + @set('loadedMore', true) + @set('loading', false) + Em.run.next => @saveScrollPos() + @get('eyeline').flushRest() unless hasMoreResults + + # Remember where we were scrolled to + saveScrollPos: -> + Discourse.set('transient.topicListScrollPos', $(window).scrollTop()) + + # When the topic list is scrolled + scrolled: (e) -> + @saveScrollPos() + @get('eyeline')?.update() diff --git a/app/assets/javascripts/discourse/views/list/list_view.js.coffee b/app/assets/javascripts/discourse/views/list/list_view.js.coffee new file mode 100644 index 00000000000..18fdea9d261 --- /dev/null +++ b/app/assets/javascripts/discourse/views/list/list_view.js.coffee @@ -0,0 +1,16 @@ +window.Discourse.ListView = Ember.View.extend + templateName: 'list/list' + composeViewBinding: Ember.Binding.oneWay('Discourse.composeView') + categoriesBinding: 'Discourse.site.categories' + + # The window has been scrolled + scrolled: (e) -> + currentView = @get('container.currentView') + currentView?.scrolled?(e) + + createTopicText: (-> + if @get('controller.category.name') + Em.String.i18n("topic.create_in", categoryName: @get('controller.category.name')) + else + Em.String.i18n("topic.create") + ).property('controller.category.name') \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/list/topic_list_item_view.js.coffee b/app/assets/javascripts/discourse/views/list/topic_list_item_view.js.coffee new file mode 100644 index 00000000000..4d764f5ab55 --- /dev/null +++ b/app/assets/javascripts/discourse/views/list/topic_list_item_view.js.coffee @@ -0,0 +1,26 @@ +window.Discourse.TopicListItemView = Ember.View.extend + tagName: 'tr' + templateName: 'list/topic_list_item' + classNameBindings: ['content.archived', ':topic-list-item'] + attributeBindings: ['data-topic-id'] + + 'data-topic-id': (-> @get('content.id') ).property('content.id') + + init: -> + @._super() + @set('context', @get('content')) + + highlight: -> + $topic = @.$() + originalCol = $topic.css('backgroundColor') + $topic.css(backgroundColor: "#ffffcc").animate(backgroundColor: originalCol, 2500) + + didInsertElement: -> + + if Discourse.get('transient.lastTopicIdViewed') == @get('content.id') + Discourse.set('transient.lastTopicIdViewed', null) + @highlight() + return + + @highlight() if @get('content.highlightAfterInsert') + diff --git a/app/assets/javascripts/discourse/views/modal/archetype_options_view.js.coffee b/app/assets/javascripts/discourse/views/modal/archetype_options_view.js.coffee new file mode 100644 index 00000000000..e933debd6b2 --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/archetype_options_view.js.coffee @@ -0,0 +1,16 @@ +window.Discourse.ArchetypeOptionsView = Em.ContainerView.extend + metaDataBinding: 'parentView.metaData' + + init: -> + @_super() + metaData = @get('metaData') + + @get('archetype.options').forEach (a) => + switch a.option_type + when 1 + checked = + @pushObject Discourse.OptionBooleanView.create + content: a + checked: (metaData.get(a.key) == 'true') + + diff --git a/app/assets/javascripts/discourse/views/modal/create_account_view.js.coffee b/app/assets/javascripts/discourse/views/modal/create_account_view.js.coffee new file mode 100644 index 00000000000..7f6d5098dd0 --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/create_account_view.js.coffee @@ -0,0 +1,140 @@ +window.Discourse.CreateAccountView = window.Discourse.ModalBodyView.extend Discourse.Presence, + templateName: 'modal/create_account' + title: Em.String.i18n('create_account.title') + uniqueUsernameValidation: null + complete: false + + + submitDisabled: (-> + return true if @get('nameValidation.failed') + return true if @get('emailValidation.failed') + return true if @get('usernameValidation.failed') + return true if @get('passwordValidation.failed') + false + ).property('nameValidation.failed', 'emailValidation.failed', 'usernameValidation.failed', 'passwordValidation.failed') + + passwordRequired: (-> + @blank('authOptions.auth_provider') + ).property('authOptions.auth_provider') + + # Validate the name + nameValidation: (-> + # If blank, fail without a reason + return Discourse.InputValidation.create(failed: true) if @blank('accountName') + + # If too short + return Discourse.InputValidation.create(failed: true, reason: Em.String.i18n('user.name.too_short')) if @get('accountName').length < 3 + + # Looks good! + Discourse.InputValidation.create(ok: true, reason: Em.String.i18n('user.name.ok')) + ).property('accountName') + + + # Check the email address + emailValidation: (-> + # If blank, fail without a reason + return Discourse.InputValidation.create(failed: true) if @blank('accountEmail') + + email = @get("accountEmail") + if (@get('authOptions.email') is email) and @get('authOptions.email_valid') + return Discourse.InputValidation.create(ok: true, reason: Em.String.i18n('user.email.authenticated', provider: @get('authOptions.auth_provider'))) + + if Discourse.Utilities.emailValid(email) + return Discourse.InputValidation.create(ok: true, reason: Em.String.i18n('user.email.ok')) + + return Discourse.InputValidation.create(failed: true, reason: Em.String.i18n('user.email.invalid')) + ).property('accountEmail') + + usernameMatch: (-> + if @get('emailValidation.failed') + if @shouldCheckUsernameMatch() + @set('uniqueUsernameValidation', Discourse.InputValidation.create(failed: true, reason: Em.String.i18n('user.username.enter_email'))) + else + @set('uniqueUsernameValidation', Discourse.InputValidation.create(failed: true)) + else if @shouldCheckUsernameMatch() + @set('uniqueUsernameValidation', Discourse.InputValidation.create(failed: true, reason: Em.String.i18n('user.username.checking'))) + @checkUsernameAvailability() + ).observes('accountEmail') + + basicUsernameValidation: (-> + @set('uniqueUsernameValidation', null) + + # If blank, fail without a reason + return Discourse.InputValidation.create(failed: true) if @blank('accountUsername') # + + # If too short + return Discourse.InputValidation.create(failed: true, reason: Em.String.i18n('user.username.too_short')) if @get('accountUsername').length < 3 + + @checkUsernameAvailability() + + # Let's check it out asynchronously + Discourse.InputValidation.create(failed: true, reason: Em.String.i18n('user.username.checking')) + + ).property('accountUsername') + + shouldCheckUsernameMatch: -> + !@blank('accountUsername') and @get('accountUsername').length > 2 + + checkUsernameAvailability: Discourse.debounce(-> + if @shouldCheckUsernameMatch() + Discourse.User.checkUsername(@get('accountUsername'), @get('accountEmail')).then (result) => + if result.available + if result.global_match + @set('uniqueUsernameValidation', Discourse.InputValidation.create(ok: true, reason: Em.String.i18n('user.username.global_match'))) + else + @set('uniqueUsernameValidation', Discourse.InputValidation.create(ok: true, reason: Em.String.i18n('user.username.available'))) + else + if result.suggestion + if result.global_match != undefined and result.global_match == false + @set('uniqueUsernameValidation', Discourse.InputValidation.create(failed: true, reason: Em.String.i18n('user.username.global_mismatch', result))) + else + @set('uniqueUsernameValidation', Discourse.InputValidation.create(failed: true, reason: Em.String.i18n('user.username.not_available', result))) + else if result.errors + @set('uniqueUsernameValidation', Discourse.InputValidation.create(failed: true, reason: result.errors.join(' '))) + else + @set('uniqueUsernameValidation', Discourse.InputValidation.create(failed: true, reason: Em.String.i18n('user.username.enter_email', result))) + , 500) + + # Actually wait for the async name check before we're 100% sure we're good to go + usernameValidation: (-> + basicValidation = @get('basicUsernameValidation') + uniqueUsername = @get('uniqueUsernameValidation') + return uniqueUsername if uniqueUsername + basicValidation + ).property('uniqueUsernameValidation', 'basicUsernameValidation') + + # Validate the password + passwordValidation: (-> + + return Discourse.InputValidation.create(ok: true) unless @get('passwordRequired') + + # If blank, fail without a reason + password = @get("accountPassword") + return Discourse.InputValidation.create(failed: true) if @blank('accountPassword') + + # If too short + return Discourse.InputValidation.create(failed: true, reason: Em.String.i18n('user.password.too_short')) if password.length < 6 + + # Looks good! + Discourse.InputValidation.create(ok: true, reason: Em.String.i18n('user.password.ok')) + ).property('accountPassword') + + + createAccount: -> + name = @get('accountName') + email = @get('accountEmail') + password = @get('accountPassword') + username = @get('accountUsername') + + Discourse.User.createAccount(name, email, password, username).then (result) => + + if result.success + @flash(result.message) + @set('complete', true) + else + @flash(result.message, 'error') + + if result.active + window.location.reload() + , => + @flash(Em.String.i18n('create_account.failed'), 'error') \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/modal/edit_category_view.js.coffee b/app/assets/javascripts/discourse/views/modal/edit_category_view.js.coffee new file mode 100644 index 00000000000..3183957d46b --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/edit_category_view.js.coffee @@ -0,0 +1,45 @@ +window.Discourse.EditCategoryView = window.Discourse.ModalBodyView.extend + templateName: 'modal/edit_category' + appControllerBinding: 'Discourse.appController' + + disabled: (-> + return true if @get('saving') + return true unless @get('category.name') + return true unless @get('category.color') + false + ).property('category.name', 'category.color') + + colorStyle: (-> + "background-color: ##{@get('category.color')};" + ).property('category.color') + + title: (-> + if @get('category.id') then "Edit Category" else "Create Category" + ).property('category.id') + + buttonTitle: (-> + if @get('saving') then "Saving..." else @get('title') + ).property('title', 'saving') + + didInsertElement: -> + + @._super() + + if @get('category') + @set('id', @get('category.slug')) + else + @set('category', Discourse.Category.create(color: 'AB9364')) + + saveSuccess: (result) -> + $('#discourse-modal').modal('hide') + window.location = "/category/#{result.category.slug}" + + saveCategory: -> + + @set('saving', true) + @get('category').save + success: (result) => @saveSuccess(result) + error: (errors) => + @displayErrors(errors) + @set('saving', false) + diff --git a/app/assets/javascripts/discourse/views/modal/forgot_password_view.js.coffee b/app/assets/javascripts/discourse/views/modal/forgot_password_view.js.coffee new file mode 100644 index 00000000000..2089de65844 --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/forgot_password_view.js.coffee @@ -0,0 +1,12 @@ +window.Discourse.ForgotPasswordView = window.Discourse.ModalBodyView.extend Discourse.Presence, + templateName: 'modal/forgot_password' + title: Em.String.i18n('forgot_password.title') + + # You need a value in the field to submit it. + submitDisabled: (-> @blank('accountEmailOrUsername')).property('accountEmailOrUsername') + + submit: -> + $.post("/session/forgot_password", username: @get('accountEmailOrUsername')) + # don't tell people what happened, this keeps it more secure (ensure same on server) + @flash(Em.String.i18n('forgot_password.complete')) + false \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/modal/invite_modal_view.js.coffee b/app/assets/javascripts/discourse/views/modal/invite_modal_view.js.coffee new file mode 100644 index 00000000000..cdd127a1f82 --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/invite_modal_view.js.coffee @@ -0,0 +1,42 @@ +window.Discourse.InviteModalView = window.Discourse.ModalBodyView.extend Discourse.Presence, + templateName: 'modal/invite' + title: Em.String.i18n('topic.invite_reply.title') + + email: null + error: false + saving: false + finished: false + + disabled: (-> + return true if @get('saving') + return true if @blank('email') + return true unless Discourse.Utilities.emailValid(@get('email')) + false + ).property('email', 'saving') + + buttonTitle: (-> + return Em.String.i18n('topic.inviting') if @get('saving') + return Em.String.i18n('topic.invite_reply.title') + ).property('saving') + + successMessage: (-> + Em.String.i18n('topic.invite_reply.success', email: @get('email')) + ).property('email') + + didInsertElement: -> + Em.run.next => @.$('input').focus() + + createInvite: -> + @set('saving', true) + @set('error', false) + + @get('topic').inviteUser(@get('email')).then => + # Success + @set('saving', false) + @set('finished', true) + , => + # Failure + @set('error', true) + @set('saving', false) + + false diff --git a/app/assets/javascripts/discourse/views/modal/invite_private_modal_view.js.coffee b/app/assets/javascripts/discourse/views/modal/invite_private_modal_view.js.coffee new file mode 100644 index 00000000000..8d5af6959b0 --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/invite_private_modal_view.js.coffee @@ -0,0 +1,37 @@ +window.Discourse.InvitePrivateModalView = window.Discourse.ModalBodyView.extend Discourse.Presence, + templateName: 'modal/invite_private' + title: Em.String.i18n('topic.invite_private.title') + + email: null + error: false + saving: false + finished: false + + disabled: (-> + return true if @get('saving') + @blank('emailOrUsername') + ).property('emailOrUsername', 'saving') + + buttonTitle: (-> + return Em.String.i18n('topic.inviting') if @get('saving') + return Em.String.i18n('topic.invite_private.action') + ).property('saving') + + didInsertElement: -> + Em.run.next => @.$('input').focus() + + invite: -> + @set('saving', true) + @set('error', false) + + # Invite the user to the private conversation + @get('topic').inviteUser(@get('emailOrUsername')).then => + # Success + @set('saving', false) + @set('finished', true) + , => + # Failure + @set('error', true) + @set('saving', false) + + false \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/modal/login_view.js.coffee b/app/assets/javascripts/discourse/views/modal/login_view.js.coffee new file mode 100644 index 00000000000..5a7ab47908f --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/login_view.js.coffee @@ -0,0 +1,99 @@ +window.Discourse.LoginView = window.Discourse.ModalBodyView.extend Discourse.Presence, + templateName: 'modal/login' + siteBinding: 'Discourse.site' + title: Em.String.i18n('login.title') + authenticate: null + loggingIn: false + + showView: (view) -> @get('controller').show(view) + + newAccount: -> + @showView(Discourse.CreateAccountView.create()) + + forgotPassword: -> + @showView(Discourse.ForgotPasswordView.create()) + + loginButtonText: (-> + return Em.String.i18n('login.logging_in') if @get('loggingIn') + return Em.String.i18n('login.title') + ).property('loggingIn') + + loginDisabled: (-> + return true if @get('loggingIn') + return true if @blank('loginName') or @blank('loginPassword') + false + ).property('loginName', 'loginPassword', 'loggingIn') + + login: -> + @set('loggingIn', true) + $.post("/session", login: @get('loginName'), password: @get('loginPassword')) + .success (result) => + if result.error + @set('loggingIn', false) + @flash(result.error, 'error') + else + window.location.reload() + .fail (result) => + @flash(Em.String.i18n('login.error'), 'error') + @set('loggingIn', false) + false + + authMessage: (-> + return "" if @blank('authenticate') + Em.String.i18n("login.#{@get('authenticate')}.message") + ).property('authenticate') + + twitterLogin: ()-> + @set('authenticate', 'twitter') + left = @get('lastX') - 400 + top = @get('lastY') - 200 + window.open("/twitter/frame", "_blank", "menubar=no,status=no,height=400,width=800,left=" + left + ",top=" + top) + + facebookLogin: ()-> + @set('authenticate', 'facebook') + left = @get('lastX') - 400 + top = @get('lastY') - 200 + window.open("/facebook/frame", "_blank", "menubar=no,status=no,height=400,width=800,left=" + left + ",top=" + top) + + openidLogin: (provider)-> + left = @get('lastX') - 400 + top = @get('lastY') - 200 + if(provider == "yahoo") + @set("authenticate", 'yahoo') + window.open("/user_open_ids/frame?provider=yahoo", "_blank", "menubar=no,status=no,height=400,width=800,left=" + left + ",top=" + top) + else + window.open("/user_open_ids/frame?provider=google", "_blank", "menubar=no,status=no,height=500,width=850,left=" + left + ",top=" + top) + @set("authenticate", 'google') + + authenticationComplete: (options)-> + + if options['awaiting_approval'] + @flash(Em.String.i18n('login.awaiting_approval'), 'success') + @set('authenticate', null) + return + + if options['awaiting_activation'] + @flash(Em.String.i18n('login.awaiting_confirmation'), 'success') + @set('authenticate', null) + return + + # Reload the page if we're authenticated + if options['authenticated'] + window.location.reload() + return + + @showView Discourse.CreateAccountView.create + accountEmail: options['email'] + accountUsername: options['username'] + accountName: options['name'] + authOptions: options + + mouseMove: (e) -> + @set('lastX', e.screenX) + @set('lastY', e.screenY) + + didInsertElement: (e) -> + Em.run.next => + $('#login-account-password').keydown (e) => + @login() if e.keyCode == 13 + diff --git a/app/assets/javascripts/discourse/views/modal/modal_body_view.js.coffee b/app/assets/javascripts/discourse/views/modal/modal_body_view.js.coffee new file mode 100644 index 00000000000..d0c48f9310d --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/modal_body_view.js.coffee @@ -0,0 +1,18 @@ +window.Discourse.ModalBodyView = window.Discourse.View.extend + + # Focus on first element + didInsertElement: -> + Em.run.next => + @.$('form input:first').focus() + + # Pass the errors to our errors view + displayErrors: (errors, callback) -> + @set('parentView.modalErrorsView.errors', errors) + callback?() + + # Just use jQuery to show an alert. We don't need anythign fancier for now + # like an actual ember view + flash: (msg, flashClass="success") -> + $alert = $('#modal-alert').hide().removeClass('alert-error', 'alert-success') + $alert.addClass("alert alert-#{flashClass}").html(msg) + $alert.fadeIn() \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/modal/modal_view.js.coffee b/app/assets/javascripts/discourse/views/modal/modal_view.js.coffee new file mode 100644 index 00000000000..45a3518bba3 --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/modal_view.js.coffee @@ -0,0 +1,22 @@ +window.Discourse.ModalView = Ember.ContainerView.extend + childViews: ['modalHeaderView', 'modalBodyView', 'modalErrorsView'] + classNames: ['modal', 'hidden'] + classNameBindings: ['controller.currentView.modalClass'] + elementId: 'discourse-modal' + + modalHeaderView: Ember.View.create + templateName: 'modal/modal_header' + titleBinding: 'controller.currentView.title' + + modalBodyView: Ember.ContainerView.create(currentViewBinding: 'controller.currentView') + modalErrorsView: Ember.View.create(templateName: 'modal/modal_errors') + + viewChanged: (-> + + @set('modalErrorsView.errors', null) + if view = @get('controller.currentView') + $('#modal-alert').hide() + Em.run.next => @.$().modal('show') + + ).observes('controller.currentView') + diff --git a/app/assets/javascripts/discourse/views/modal/move_selected_view.js.coffee b/app/assets/javascripts/discourse/views/modal/move_selected_view.js.coffee new file mode 100644 index 00000000000..1fc79c683f9 --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/move_selected_view.js.coffee @@ -0,0 +1,39 @@ +window.Discourse.MoveSelectedView = window.Discourse.ModalBodyView.extend Discourse.Presence, + templateName: 'modal/move_selected' + title: Em.String.i18n('topic.move_selected.title') + + saving: false + + selectedCount: (-> + return 0 unless @get('selectedPosts') + @get('selectedPosts').length + ).property('selectedPosts') + + buttonDisabled: (-> + return true if @get('saving') + @blank('topicName') + ).property('saving', 'topicName') + + buttonTitle: (-> + return Em.String.i18n('saving') if @get('saving') + return Em.String.i18n('topic.move_selected.title') + ).property('saving') + + movePosts: -> + @set('saving', true) + + postIds = @get('selectedPosts').map (p) -> p.get('id') + + Discourse.Topic.movePosts(@get('topic.id'), @get('topicName'), postIds).then (result) => + if result.success + $('#discourse-modal').modal('hide') + Em.run.next -> + Discourse.routeTo(result.url) + else + @flash(Em.String.i18n('topic.move_selected.error')) + @set('saving', false) + , => + @flash(Em.String.i18n('topic.move_selected.error')) + @set('saving', false) + + false \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/modal/option_boolean_view.js.coffee b/app/assets/javascripts/discourse/views/modal/option_boolean_view.js.coffee new file mode 100644 index 00000000000..0d931f3d601 --- /dev/null +++ b/app/assets/javascripts/discourse/views/modal/option_boolean_view.js.coffee @@ -0,0 +1,14 @@ +window.Discourse.OptionBooleanView = Em.View.extend + classNames: ['archetype-option'] + composerControllerBinding: 'Discourse.router.composerController' + templateName: "modal/option_boolean" + + checkedChanged: (-> + metaData = @get('parentView.metaData') + metaData.set(@get('content.key'), if @get('checked') then 'true' else 'false') + @get('controller.controllers.composer').saveDraft() + ).observes('checked') + + init: -> + @._super() + @set('context', @get('content')) \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/nav_item_view.js.coffee b/app/assets/javascripts/discourse/views/nav_item_view.js.coffee new file mode 100644 index 00000000000..0fcf5e09e59 --- /dev/null +++ b/app/assets/javascripts/discourse/views/nav_item_view.js.coffee @@ -0,0 +1,36 @@ +window.Discourse.NavItemView = Ember.View.extend + tagName: 'li' + classNameBindings: ['isActive','content.hasIcon:has-icon'] + attributeBindings: ['title'] + title: (-> + name = @get('content.name') + categoryName = @get('content.categoryName') + if categoryName + extra = {categoryName: categoryName} + name = "category" + Ember.String.i18n("filters.#{name}.help", extra) + ).property("content.filter") + + isActive: (-> + return "active" if @get("content.name") == @get("controller.filterMode") + "" + ).property("content.name","controller.filterMode") + + hidden: (-> not @get('content.visible')).property('content.visible') + + name: (-> + name = @get('content.name') + categoryName = @get('content.categoryName') + extra = count: @get('content.count') || 0 + if categoryName + name = 'category' + extra.categoryName = categoryName.capitalize() + I18n.t("js.filters.#{name}.title", extra) + ).property('count') + + render: (buffer) -> + content = @get('content') + buffer.push("") + buffer.push("") if content.get('hasIcon') + buffer.push(@get('name')) + buffer.push("") diff --git a/app/assets/javascripts/discourse/views/notifications_view.js.coffee b/app/assets/javascripts/discourse/views/notifications_view.js.coffee new file mode 100644 index 00000000000..0e836baeb7a --- /dev/null +++ b/app/assets/javascripts/discourse/views/notifications_view.js.coffee @@ -0,0 +1,5 @@ +window.Discourse.NotificationsView = Ember.View.extend + classNameBindings: ['content.read', ':notifications'] + templateName: 'notifications' + + diff --git a/app/assets/javascripts/discourse/views/parent_view.js.coffee b/app/assets/javascripts/discourse/views/parent_view.js.coffee new file mode 100644 index 00000000000..bf7a24c626f --- /dev/null +++ b/app/assets/javascripts/discourse/views/parent_view.js.coffee @@ -0,0 +1,14 @@ +window.Discourse.ParentView = Discourse.EmbeddedPostView.extend + + # Nice animation for when the replies appear + didInsertElement: -> + @_super() + + $parentPost = @get('postView').$('section.parent-post') + + # Animate unless we're on a touch device + if Discourse.get('touch') + $parentPost.show() + else + $parentPost.slideDown() + diff --git a/app/assets/javascripts/discourse/views/participant_view.js.coffee b/app/assets/javascripts/discourse/views/participant_view.js.coffee new file mode 100644 index 00000000000..9fb71c683bd --- /dev/null +++ b/app/assets/javascripts/discourse/views/participant_view.js.coffee @@ -0,0 +1,7 @@ +window.Discourse.ParticipantView = Ember.View.extend + templateName: 'participant' + + toggled: (-> + @get('controller.userFilters').contains(@get('participant.username')) + ).property('controller.userFilters.[]') + diff --git a/app/assets/javascripts/discourse/views/post_link_view.js.coffee b/app/assets/javascripts/discourse/views/post_link_view.js.coffee new file mode 100644 index 00000000000..f8cd822985c --- /dev/null +++ b/app/assets/javascripts/discourse/views/post_link_view.js.coffee @@ -0,0 +1,16 @@ +window.Discourse.PostLinkView = Ember.View.extend + tagName: 'li' + classNameBindings: ['direction'] + + direction: (-> + return 'incoming' if @get('content.reflection') + null + ).property('content.reflection') + + render: (buffer) -> + buffer.push("\n") + buffer.push("") + buffer.push(@get('content.title')) + if clicks = @get('content.clicks') + buffer.push("\n#{clicks}") + buffer.push("") \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/post_menu_view.js.coffee b/app/assets/javascripts/discourse/views/post_menu_view.js.coffee new file mode 100644 index 00000000000..9961dd16fad --- /dev/null +++ b/app/assets/javascripts/discourse/views/post_menu_view.js.coffee @@ -0,0 +1,101 @@ +# +# This class replaces a containerView of many buttons, which was responsible for 100ms +# of client rendering or so on a fast computer. It might be slightly uglier, but it's +# _much_ faster. +# +window.Discourse.PostMenuView = Ember.View.extend Discourse.Presence, + tagName: 'section' + classNames: ['post-menu-area', 'clearfix'] + + # Delegate to render#{button} + render: (buffer) -> + post = @get('post') + + @renderReplies(post, buffer) + buffer.push("") + + # Delegate click actions + click: (e) -> + $target = $(e.target) + action = $target.data('action') || $target.parent().data('action') + return unless action + @["click#{action.capitalize()}"]?() + + # Trigger re rendering + needsToRender: (-> + @rerender() + ).observes('post.deleted_at', 'post.flagsAvailable.@each', 'post.url', 'post.bookmarked', 'post.reply_count', 'post.replyBelowUrl') + + # Replies Button + renderReplies: (post, buffer) -> + + return if @get('post.replyFollowing') + + reply_count = post.get('reply_count') + return if reply_count == 0 + + buffer.push("") + + clickReplies: -> @get('postView').showReplies() + + # Delete button + renderDelete: (post, buffer) -> + return unless post.get('can_delete') + + title = if post.get('deleted_at') then Em.String.i18n("post.controls.undelete") else Em.String.i18n("post.controls.delete") + buffer.push("") + + clickDelete: -> @get('controller').deletePost(@get('post')) + + # Like button + renderLike: (post, buffer) -> + return unless post.get('actionByName.like.can_act') + buffer.push("") + + clickLike: -> @get('post.actionByName.like')?.act() + + # Flag button + renderFlag: (post, buffer) -> + return unless @present('post.flagsAvailable') + buffer.push("") + + clickFlag: -> @get('controller').showFlags(@get('post')) + + # Edit button + renderEdit: (post, buffer) -> + return unless post.get('can_edit') + buffer.push("") + + clickEdit: -> @get('controller').editPost(@get('post')) + + # Share button + renderShare: (post, buffer) -> + buffer.push("") + + + # Reply button + renderReply: (post, buffer) -> + return unless @get('controller.content.can_create_post') + buffer.push("") + + clickReply: -> @get('controller').replyToPost(@get('post')) + + + # Bookmark button + renderBookmark: (post, buffer) -> + return unless Discourse.get('currentUser') + icon = 'bookmark' + icon += '-empty' unless @get('post.bookmarked') + buffer.push("") + + clickBookmark: -> @get('post').toggleProperty('bookmarked') + diff --git a/app/assets/javascripts/discourse/views/post_view.js.coffee b/app/assets/javascripts/discourse/views/post_view.js.coffee new file mode 100644 index 00000000000..179b299c9fb --- /dev/null +++ b/app/assets/javascripts/discourse/views/post_view.js.coffee @@ -0,0 +1,227 @@ +window.Discourse.PostView = Ember.View.extend + classNames: ['topic-post', 'clearfix'] + templateName: 'post' + classNameBindings: ['lastPostClass', 'postTypeClass', 'selectedClass', 'post.hidden:hidden', 'isDeleted:deleted', 'parentPost:replies-above'] + siteBinding: Ember.Binding.oneWay('Discourse.site') + composeViewBinding: Ember.Binding.oneWay('Discourse.composeView') + quoteButtonViewBinding: Ember.Binding.oneWay('Discourse.quoteButtonView') + postBinding: 'content' + + isDeleted: (-> + !!@get('post.deleted_at') + ).property('post.deleted_at') + + #TODO really we should do something cleaner here... this makes it work in debug but feels really messy + screenTrack: (-> + parentView = @get('parentView') + screenTrack = null + while parentView && !screenTrack + screenTrack = parentView.get('screenTrack') + parentView = parentView.get('parentView') + screenTrack + ).property('parentView') + + lastPostClass: (-> + return 'last-post' if @get('post.lastPost') + ).property('post.lastPost') + + postTypeClass: (-> + return 'moderator' if @get('post.post_type') == Discourse.Post.MODERATOR_ACTION_TYPE + 'regular' + ).property('post.post_type') + + selectedClass: (-> + return 'selected' if @get('post.selected') + null + ).property('post.selected') + + # If the cooked content changed, add the quote controls + cookedChanged: (-> + Em.run.next => @insertQuoteControls() + ).observes('post.cooked') + + init: -> + @._super() + @set('context', @get('content')) + + mouseDown: (e) -> + if qbc = Discourse.get('router.quoteButtonController') + qbc.mouseDown(e) + + mouseUp: (e) -> + if qbc = Discourse.get('router.quoteButtonController') + qbc.mouseUp(e) + + if @get('controller.multiSelect') && (e.metaKey || e.ctrlKey) + @toggleProperty('post.selected') + + $target = $(e.target) + return unless $target.closest('.cooked').length > 0 + if qbc = @get('controller.controllers.quoteButton') + e.context = @get('post') + qbc.selectText(e) + + + selectText: (-> + return Em.String.i18n('topic.multi_select.selected', count: @get('controller.selectedCount')) if @get('post.selected') + Em.String.i18n('topic.multi_select.select') + ).property('post.selected', 'controller.selectedCount') + + repliesHidden: (-> + !@get('repliesShown') + ).property('repliesShown') + + # Click on the replies button + showReplies: -> + + # If the reply is below, we route to it + if replyBelowUrl = @get('post.replyBelowUrl') + Discourse.routeTo(replyBelowUrl) + return false + + if @get('repliesShown') + @set('repliesShown', false) + else + @get('post').loadReplies().then => @set('repliesShown', true) + + false + + # Toggle visibility of parent post + toggleParent: (e) -> + + $parent = @.$('.parent-post') + if @get('parentPost') + $('nav', $parent).removeClass('toggled') + + # Don't animate on touch + if Discourse.get('touch') + $parent.hide() + @set('parentPost', null) + else + $parent.slideUp => @set('parentPost', null) + + else + post = @get('post') + @set('loadingParent', true) + $('nav', $parent).addClass('toggled') + Discourse.Post.loadByPostNumber post.get('topic_id'), post.get('reply_to_post_number'), (result) => + @set('loadingParent', false) + @set('parentPost', result) + + false + + updateQuoteElements: ($aside, desc) -> + navLink = "" + + quoteTitle = Em.String.i18n("post.follow_quote") + if postNumber = $aside.data('post') + + # If we have a topic reference + if topicId = $aside.data('topic') + topic = @get('controller.content') + + # If it's the same topic as ours, build the URL from the topic object + if topic and topic.get('id') is topicId + navLink = "" + else + # Made up slug should be replaced with canonical URL + navLink = "" + else if topic = @get('controller.content') + # assume the same topic + navLink = "" + + # Only add the expand/contract control if it's not a full post + expandContract = "" + unless $aside.data('full') + expandContract = "" + $aside.css('cursor', 'pointer') + + $('.quote-controls', $aside).html("#{expandContract}#{navLink}") + + toggleQuote: ($aside) -> + + @toggleProperty('quoteExpanded') + + if @get('quoteExpanded') + @updateQuoteElements($aside, 'chevron-up') + + # Show expanded quote + $blockQuote = $('blockquote', $aside) + @originalContents = $blockQuote.html() + + originalText = $blockQuote.text().trim() + + $blockQuote.html(Em.String.i18n("loading")) + + post = @get('post') + topic_id = post.get('topic_id') + topic_id = $aside.data('topic') if $aside.data('topic') + + jQuery.getJSON "/posts/by_number/#{topic_id}/#{$aside.data('post')}", (result) => + parsed = $(result.cooked) + parsed.replaceText(originalText, "#{originalText}") + + $blockQuote.showHtml(parsed) + else + # Hide expanded quote + @updateQuoteElements($aside, 'chevron-down') + $('blockquote', $aside).showHtml(@originalContents) + + false + + # Show how many times links have been clicked on + showLinkCounts: -> + if link_counts = @get('post.link_counts') + link_counts.each (lc) => + if lc.clicks > 0 + @.$(".cooked a[href]").each -> + link = $(this) + if link.attr('href') == lc.url + link.append("#{lc.clicks}") + + # Add the quote controls to a post + insertQuoteControls: -> + + @.$('aside.quote').each (i, e) => + $aside = $(e) + + @updateQuoteElements($aside, 'chevron-down') + $title = $('.title', $aside) + + # Unless it's a full quote, allow click to expand + unless $aside.data('full') or $title.data('has-quote-controls') + $title.on 'click', (e) => + return true if $(e.target).is('a') + @toggleQuote($aside) + $title.data('has-quote-controls', true) + + didInsertElement: (e) -> + + $post = @.$() + post = @get('post') + + # Do we want to scroll to this post now that we've inserted it? + if postNumber = post.get('scrollToAfterInsert') + Discourse.TopicView.scrollTo @get('post.topic_id'), postNumber + + if postNumber == post.get('post_number') + $contents = $('.topic-body .contents', $post) + originalCol = $contents.css('backgroundColor') + $contents.css(backgroundColor: "#ffffcc").animate(backgroundColor: originalCol, 2500) + + @showLinkCounts() + @get('screenTrack')?.track(@.$().prop('id'), @get('post.post_number')) + + # Add syntax highlighting + Discourse.SyntaxHighlighting.apply($post) + + # If we're scrolling upwards, adjust the scroll position accordingly + if scrollTo = @get('post.scrollTo') + newSize = ($(document).height() - scrollTo.height) + scrollTo.top + $('body').scrollTop(newSize) + $('section.divider').addClass('fade') + + # Find all the quotes + @insertQuoteControls() + + diff --git a/app/assets/javascripts/discourse/views/prepend_post_view.js.coffee b/app/assets/javascripts/discourse/views/prepend_post_view.js.coffee new file mode 100644 index 00000000000..69e4ccf0958 --- /dev/null +++ b/app/assets/javascripts/discourse/views/prepend_post_view.js.coffee @@ -0,0 +1,7 @@ +window.Discourse.PrependPostView = Em.ContainerView.extend + + init: -> + @_super() + @trigger('prependPostContent') + + diff --git a/app/assets/javascripts/discourse/views/quote_buton_view.js.coffee b/app/assets/javascripts/discourse/views/quote_buton_view.js.coffee new file mode 100644 index 00000000000..fb2e285c595 --- /dev/null +++ b/app/assets/javascripts/discourse/views/quote_buton_view.js.coffee @@ -0,0 +1,26 @@ +window.Discourse.QuoteButtonView = Discourse.View.extend + classNames: ['quote-button'] + classNameBindings: ['hasBuffer'] + + render: (buffer) -> buffer.push("quote reply") + + hasBuffer: (-> + return 'visible' if @present('controller.buffer') + null + ).property('controller.buffer') + + willDestroyElement: -> + $(document).unbind("mousedown.quote-button") + + didInsertElement: -> + # Clear quote button if they click elsewhere + $(document).bind "mousedown.quote-button", (e) => + return if $(e.target).hasClass('quote-button') + return if $(e.target).hasClass('create') + @controller.mouseDown(e) + @set('controller.lastSelected', @get('controller.buffer')) + @set('controller.buffer', '') + + click: (e) -> + @get('controller').quoteText(e) + diff --git a/app/assets/javascripts/discourse/views/replies_view.js.coffee b/app/assets/javascripts/discourse/views/replies_view.js.coffee new file mode 100644 index 00000000000..34ab2d636b8 --- /dev/null +++ b/app/assets/javascripts/discourse/views/replies_view.js.coffee @@ -0,0 +1,13 @@ +window.Discourse.RepliesView = Ember.CollectionView.extend + templateName: 'replies' + tagName: 'section' + classNames: ['replies-list', 'embedded-posts', 'bottom'] + itemViewClass: Discourse.EmbeddedPostView + + repliesShown: (-> + $this = @.$() + if @get('parentView.repliesShown') + Em.run.next -> $this.slideDown() + else + Em.run.next -> $this.slideUp() + ).observes('parentView.repliesShown') diff --git a/app/assets/javascripts/discourse/views/search/search_results_type_view.js.coffee b/app/assets/javascripts/discourse/views/search/search_results_type_view.js.coffee new file mode 100644 index 00000000000..c38aa632afa --- /dev/null +++ b/app/assets/javascripts/discourse/views/search/search_results_type_view.js.coffee @@ -0,0 +1,20 @@ +window.Discourse.SearchResultsTypeView = Ember.CollectionView.extend + tagName: 'ul' + + + itemViewClass: Ember.View.extend({ + tagName: 'li' + templateName: (-> + "search/#{@get('parentView.type')}_result" + ).property('parentView.type') + classNameBindings: ['selectedClass', 'parentView.type'] + selectedIndexBinding: 'parentView.parentView.selectedIndex' + + # Is this row currently selected by the keyboard? + selectedClass: (-> + return 'selected' if @get('content.index') == @get('selectedIndex') + null + ).property('selectedIndex') + + }) + diff --git a/app/assets/javascripts/discourse/views/search/search_view.js.coffee b/app/assets/javascripts/discourse/views/search/search_view.js.coffee new file mode 100644 index 00000000000..d4fdba0a22c --- /dev/null +++ b/app/assets/javascripts/discourse/views/search/search_view.js.coffee @@ -0,0 +1,115 @@ +window.Discourse.SearchView = Ember.View.extend Discourse.Presence, + tagName: 'div' + classNames: ['d-dropdown'] + elementId: 'search-dropdown' + templateName: 'search' + + didInsertElement: -> + # Delegate ESC to the composer + $('body').on 'keydown.search', (e) => + if $('#search-dropdown').is(':visible') + switch e.which + when 13 + @select() + when 38 # up arrow + @moveUp() + when 40 # down arrow + @moveDown() + + searchPlaceholder: (-> + Em.String.i18n("search.placeholder") + ).property() + + # If we need to perform another search + newSearchNeeded: (-> + @set('noResults', false) + if @present('term') + @set('loading', true) + @searchTerm(@get('term'), @get('typeFilter')) + else + @set('results', null) + @set('selectedIndex', 0) + ).observes('term', 'typeFilter') + + showCancelFilter: (-> + return false if @get('loading') + return @present('typeFilter') + ).property('typeFilter', 'loading') + + termChanged: (-> + @cancelType() + ).observes('term') + + # We can re-order them based on the context + content: (-> + if results = @get('results') + # Make it easy to find the results by type + results_hashed = {} + results.each (r) -> results_hashed[r.type] = r + + path = Discourse.get('router.currentState.path') + + # Default order + order = ['topic', 'category', 'user'] + + results = (order.map (o) -> results_hashed[o]).without(undefined) + + index = 0 + results.each (result) -> + result.results.each (item) -> item.index = index++ + + results + ).property('results') + + updateProgress: (-> + if results = @get('results') + @set('noResults', results.length == 0) + @set('loading', false) + ).observes('results') + + searchTerm: (term, typeFilter) -> + if @currentSearch + @currentSearch.abort() + @currentSearch = null + + @searcher = @searcher || Discourse.debounce((term, typeFilter) => + @currentSearch = $.ajax + url: '/search' + data: + term: term + type_filter: typeFilter + success: (results) => + @set('results', results) + , 300) + + @searcher(term, typeFilter) + + resultCount: (-> + return 0 if @blank('content') + count = 0 + @get('content').each (result) -> + count += result.results.length + count + ).property('content') + + moreOfType: (e) -> + @set('typeFilter', e.context) + false + + cancelType: -> + @set('typeFilter', null) + false + + moveUp: -> + return if @get('selectedIndex') == 0 + @set('selectedIndex', @get('selectedIndex') - 1) + + moveDown: -> + return if @get('resultCount') == (@get('selectedIndex') + 1) + @set('selectedIndex', @get('selectedIndex') + 1) + + select: -> + return if @get('loading') + href = $('#search-dropdown li.selected a').prop('href') + Discourse.routeTo(href) if href + false diff --git a/app/assets/javascripts/discourse/views/selected_posts_view.js.coffee b/app/assets/javascripts/discourse/views/selected_posts_view.js.coffee new file mode 100644 index 00000000000..1d5ecd6be31 --- /dev/null +++ b/app/assets/javascripts/discourse/views/selected_posts_view.js.coffee @@ -0,0 +1,9 @@ +window.Discourse.SelectedPostsView = Ember.View.extend + elementId: 'selected-posts' + templateName: 'selected_posts' + topicBinding: 'controller.content' + classNameBindings: ['customVisibility'] + + customVisibility: (-> + return 'hidden' unless @get('controller.multiSelect') + ).property('controller.multiSelect') \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/share_view.js.coffee b/app/assets/javascripts/discourse/views/share_view.js.coffee new file mode 100644 index 00000000000..eebf486c688 --- /dev/null +++ b/app/assets/javascripts/discourse/views/share_view.js.coffee @@ -0,0 +1,50 @@ +window.Discourse.ShareView = Discourse.View.extend + templateName: 'share' + elementId: 'share-link' + classNameBindings: ['hasLink'] + + title: (-> + if @get('controller.type') == 'topic' + Em.String.i18n('share.topic') + else + Em.String.i18n('share.post') + ).property('controller.type') + + hasLink: (-> + return 'visible' if @present('controller.link') + null + ).property('controller.link') + + linkChanged: (-> + if @present('controller.link') + $('#share-link input').val(@get('controller.link')).select().focus() + ).observes('controller.link') + + didInsertElement: -> + + $('html').on 'click.outside-share-link', (e) => + return if @.$().has(e.target).length isnt 0 + @get('controller').close() + return true + $('html').on 'touchstart.outside-share-link', (e) => + return if @.$().has(e.target).length isnt 0 + @get('controller').close() + return true + + $('html').on 'click.discoure-share-link', '[data-share-url]', (e) => + e.preventDefault() + $currentTarget = $(e.currentTarget) + url = $currentTarget.data('share-url') + + # Relative urls + if url.indexOf("/") is 0 + url = window.location.protocol + "//" + window.location.host + url + + @get('controller').shareLink(e, url) + false + + + willDestroyElement: -> + $('html').off 'click.discoure-share-link' + $('html').off 'click.outside-share-link' + $('html').off 'touchstart.outside-share-link' diff --git a/app/assets/javascripts/discourse/views/suggested_topic_view.js.coffee b/app/assets/javascripts/discourse/views/suggested_topic_view.js.coffee new file mode 100644 index 00000000000..19175befae3 --- /dev/null +++ b/app/assets/javascripts/discourse/views/suggested_topic_view.js.coffee @@ -0,0 +1,2 @@ +Discourse.SuggestedTopicView = Ember.View.extend + templateName: 'suggested_topic' diff --git a/app/assets/javascripts/discourse/views/topic_admin_menu_view.js.coffee b/app/assets/javascripts/discourse/views/topic_admin_menu_view.js.coffee new file mode 100644 index 00000000000..ac491e2de70 --- /dev/null +++ b/app/assets/javascripts/discourse/views/topic_admin_menu_view.js.coffee @@ -0,0 +1,11 @@ +window.Discourse.TopicAdminMenuView = Em.View.extend + + willDestroyElement: -> + $('html').off 'mouseup.discourse-topic-admin-menu' + + didInsertElement: -> + $('html').on 'mouseup.discourse-topic-admin-menu', (e) => + $target = $(e.target) + if $target.is('button') or @.$().has($target).length is 0 + @get('controller').hide() + diff --git a/app/assets/javascripts/discourse/views/topic_extra_info_view.js.coffee b/app/assets/javascripts/discourse/views/topic_extra_info_view.js.coffee new file mode 100644 index 00000000000..9eb9e2dc8d9 --- /dev/null +++ b/app/assets/javascripts/discourse/views/topic_extra_info_view.js.coffee @@ -0,0 +1,12 @@ +Discourse.TopicExtraInfoView = Ember.ContainerView.extend + classNameBindings: [':extra-info-wrapper', 'controller.showExtraInfo'] + childViews: ['extraInfo'] + + extraInfo: Em.View.createWithMixins + templateName: 'topic_extra_info' + classNames: ['extra-info'] + topicBinding: 'controller.topic' + + showFavoriteButton: (-> + Discourse.currentUser && !@get('topic.isPrivateMessage') + ).property('topic.isPrivateMessage') diff --git a/app/assets/javascripts/discourse/views/topic_footer_buttons_view.js.coffee b/app/assets/javascripts/discourse/views/topic_footer_buttons_view.js.coffee new file mode 100644 index 00000000000..cf2de07a6a0 --- /dev/null +++ b/app/assets/javascripts/discourse/views/topic_footer_buttons_view.js.coffee @@ -0,0 +1,84 @@ +window.Discourse.TopicFooterButtonsView = Ember.ContainerView.extend + elementId: 'topic-footer-buttons' + topicBinding: 'controller.content' + + init: -> + @_super() + @createButtons() + + # Add the buttons below a topic + createButtons: -> + topic = @get('topic') + + if Discourse.get('currentUser') + unless topic.get('isPrivateMessage') + # We hide some controls from private messages + + if @get('topic.can_invite_to') + @addObject Discourse.ButtonView.create + textKey: 'topic.invite_reply.title' + helpKey: 'topic.invite_reply.help' + renderIcon: (buffer) -> buffer.push("") + click: -> @get('controller').showInviteModal() + + @addObject Discourse.ButtonView.createWithMixins + textKey: 'favorite.title' + helpKey: 'favorite.help' + favoriteChanged: (-> @rerender() ).observes('controller.content.starred') + click: -> @get('controller').toggleStar() + renderIcon: (buffer) -> + extraClass = 'starred' if @get('controller.content.starred') + buffer.push("") + + @addObject Discourse.ButtonView.create + textKey: 'topic.share.title' + helpKey: 'topic.share.help' + renderIcon: (buffer) -> buffer.push("") + 'data-share-url': topic.get('url') + + @addObject Discourse.ButtonView.createWithMixins + classNames: ['btn', 'btn-primary', 'create'] + text: (-> + archetype = @get('controller.content.archetype') + return customTitle if customTitle = @get("parentView.replyButtonText#{archetype.capitalize()}") + Em.String.i18n("topic.reply.title") + ).property() + renderIcon: (buffer) -> buffer.push("") + click: -> @get('controller').reply() + helpKey: 'topic.reply.help' + + unless topic.get('isPrivateMessage') + @addObject Discourse.DropdownButtonView.createWithMixins + topic: topic + title: Em.String.i18n('topic.notifications.title') + longDescriptionBinding: 'topic.notificationReasonText' + text: (-> + key = switch @get('topic.notification_level') + when Discourse.Topic.NotificationLevel.WATCHING then 'watching' + when Discourse.Topic.NotificationLevel.TRACKING then 'tracking' + when Discourse.Topic.NotificationLevel.REGULAR then 'regular' + when Discourse.Topic.NotificationLevel.MUTE then 'muted' + icon = switch key + when 'watching' then ' ' + when 'tracking' then ' ' + when 'regular' then '' + when 'muted' then ' ' + "#{icon}#{Ember.String.i18n("topic.notifications.#{key}.title")}" + ).property('topic.notification_level') + dropDownContent: [ + [Discourse.Topic.NotificationLevel.WATCHING, 'topic.notifications.watching'], + [Discourse.Topic.NotificationLevel.TRACKING, 'topic.notifications.tracking'], + [Discourse.Topic.NotificationLevel.REGULAR, 'topic.notifications.regular'], + [Discourse.Topic.NotificationLevel.MUTE, 'topic.notifications.muted'] + ] + clicked: (id) -> + @get('topic').updateNotifications(id) + + @trigger('additionalButtons', @) + + else + # If not logged in give them a login control + @addObject Discourse.ButtonView.create + textKey: 'topic.login_reply' + classNames: ['btn', 'btn-primary', 'create'] + click: -> @get('controller.controllers.modal')?.show(Discourse.LoginView.create()) diff --git a/app/assets/javascripts/discourse/views/topic_posts_view.js.coffee b/app/assets/javascripts/discourse/views/topic_posts_view.js.coffee new file mode 100644 index 00000000000..c0c8503afd5 --- /dev/null +++ b/app/assets/javascripts/discourse/views/topic_posts_view.js.coffee @@ -0,0 +1,4 @@ +window.Discourse.TopicPostsView = Em.CollectionView.extend + itemViewClass: Discourse.PostView + + didInsertElement: -> @get('topicView').postsRendered() diff --git a/app/assets/javascripts/discourse/views/topic_status_view.js.coffee b/app/assets/javascripts/discourse/views/topic_status_view.js.coffee new file mode 100644 index 00000000000..892ec96089b --- /dev/null +++ b/app/assets/javascripts/discourse/views/topic_status_view.js.coffee @@ -0,0 +1,30 @@ +window.Discourse.TopicStatusView = Discourse.View.extend + classNames: ['topic-statuses'] + + hasDisplayableStatus: (-> + return true if @get('topic.closed') + return true if @get('topic.pinned') + return true unless @get('topic.archetype.isDefault') + return true unless @get('topic.visible') + false + ).property('topic.closed', 'topic.pinned', 'topic.visible') + + statusChanged: (-> + @rerender() + ).observes('topic.closed', 'topic.pinned', 'topic.visible') + + renderIcon: (buffer, name, key) -> + title = Em.String.i18n("topic_statuses.#{key}.help") + buffer.push("") + + render: (buffer) -> + return unless @get('hasDisplayableStatus') + + # Allow a plugin to add a custom icon to a topic + @trigger('addCustomIcon', buffer) + + @renderIcon(buffer, 'lock', 'locked') if @get('topic.closed') + @renderIcon(buffer, 'pushpin', 'pinned') if @get('topic.pinned') + @renderIcon(buffer, 'eye-close', 'invisible') unless @get('topic.visible') + + diff --git a/app/assets/javascripts/discourse/views/topic_summary/topic_links_view.js.coffee b/app/assets/javascripts/discourse/views/topic_summary/topic_links_view.js.coffee new file mode 100644 index 00000000000..a833e70529c --- /dev/null +++ b/app/assets/javascripts/discourse/views/topic_summary/topic_links_view.js.coffee @@ -0,0 +1,2 @@ +window.Discourse.TopicLinksView = Ember.View.extend + templateName: 'topic_summary/links' \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/topic_summary/topic_summary_view.js.coffee b/app/assets/javascripts/discourse/views/topic_summary/topic_summary_view.js.coffee new file mode 100644 index 00000000000..693f0df5560 --- /dev/null +++ b/app/assets/javascripts/discourse/views/topic_summary/topic_summary_view.js.coffee @@ -0,0 +1,63 @@ +window.Discourse.TopicSummaryView = Ember.ContainerView.extend Discourse.Presence, + topicBinding: 'controller.content' + classNameBindings: ['hidden', ':topic-summary'] + LINKS_SHOWN: 5 + + collapsed: true + allLinksShown: false + + showAllLinksControls: (-> + return false if @blank('topic.links') + return false if @get('allLinksShown') + return false if @get('topic.links.length') <= @LINKS_SHOWN + true + ).property('allLinksShown', 'topic.links') + + infoLinks: (-> + return [] if @blank('topic.links') + allLinks = @get('topic.links') + return allLinks if @get('allLinksShown') + return allLinks.slice(0, @LINKS_SHOWN) + ).property('topic.links', 'allLinksShown') + + newPostCreated: (-> + @rerender() + ).observes('topic.posts_count') + + hidden: (-> + return true unless @get('post.post_number') == 1 + return false if @get('controller.content.archetype') == 'private_message' + return true unless @get('controller.content.archetype') == 'regular' + @get('controller.content.posts_count') < 2 + ).property() + + init: -> + @_super() + return if @get('hidden') + + @pushObject Em.View.create(templateName: 'topic_summary/info', topic: @get('topic'), summaryView: @) + @trigger('appendSummaryInformation', @) + + toggleMore: -> + @toggleProperty('collapsed') + + showAllLinks: -> + @set('allLinksShown', true) + + appendSummaryInformation: (container) -> + + # If we have a best of view + if @get('controller.showBestOf') + container.pushObject Discourse.View.create + templateName: 'topic_summary/best_of_toggle' + tagName: 'section' + classNames: ['information'] + + # If we have a private message + if @get('topic.isPrivateMessage') + container.pushObject Discourse.View.create + templateName: 'topic_summary/private_message' + tagName: 'section' + classNames: ['information'] + + diff --git a/app/assets/javascripts/discourse/views/topic_view.js.coffee b/app/assets/javascripts/discourse/views/topic_view.js.coffee new file mode 100644 index 00000000000..953ed7a97fb --- /dev/null +++ b/app/assets/javascripts/discourse/views/topic_view.js.coffee @@ -0,0 +1,417 @@ +window.Discourse.TopicView = Ember.View.extend Discourse.Scrolling, + templateName: 'topic' + topicBinding: 'controller.content' + userFiltersBinding: 'controller.userFilters' + classNameBindings: ['controller.multiSelect:multi-select', 'topic.archetype'] + siteBinding: 'Discourse.site' + categoriesBinding: 'site.categories' + progressPosition: 1 + + menuVisible: true + + + SHORT_POST: 1200 + + # Update the progress bar using sweet animations + updateBar: (-> + return unless @get('topic.loaded') + $topicProgress = $('#topic-progress') + return unless $topicProgress.length + + # Don't show progress when there is only one post + if @get('topic.highest_post_number') is 1 + $topicProgress.hide() + else + $topicProgress.show() + + ratio = @get('progressPosition') / @get('topic.highest_post_number') + + totalWidth = $topicProgress.width() + progressWidth = ratio * totalWidth + bg = $topicProgress.find('.bg') + + bg.stop(true,true) + currentWidth = bg.width() + + if currentWidth == totalWidth + bg.width(currentWidth - 1) + + if progressWidth == totalWidth + bg.css("border-right-width", "0px") + else + bg.css("border-right-width", "1px") + + if currentWidth == 0 + bg.width(progressWidth) + else + bg.animate(width: progressWidth, 400) + + ).observes('progressPosition', 'topic.highest_post_number', 'topic.loaded') + + updateTitle: (-> + title = @get('topic.title') + Discourse.set('title', title) if title + ).observes('topic.loaded', 'topic.title') + + newPostsPresent: (-> + if @get('topic.highest_post_number') + @updateBar() + @examineRead() + ).observes('topic.highest_post_number') + + currentPostChanged: (-> + + current = @get('controller.currentPost') + topic = @get('topic') + return unless current and topic + + @set('maxPost', current) if current > (@get('maxPost') || 0) + + postUrl = topic.get('url') + if current > 1 + postUrl += "/#{current}" + else + postUrl += "/best_of" if @get('controller.bestOf') + + Discourse.replaceState(postUrl) + + # Show appropriate jump tools + if current is 1 then $('#jump-top').attr('disabled', true) else $('#jump-top').attr('disabled', false) + if current is @get('topic.highest_post_number') then $('#jump-bottom').attr('disabled', true) else $('#jump-bottom').attr('disabled', false) + + ).observes('controller.currentPost', 'controller.bestOf', 'topic.highest_post_number') + + composeChanged: (-> + composerController = Discourse.get('router.composerController') + composerController.clearState() + composerController.set('topic', @get('topic')) + ).observes('composer') + + # This view is being removed. Shut down operations + willDestroyElement: -> + @unbindScrolling() + @get('controller').unsubscribe() + @get('screenTrack')?.stop() + @set('screenTrack', null) + $(window).unbind 'scroll.discourse-on-scroll' + $(document).unbind 'touchmove.discourse-on-scroll' + $(window).unbind 'resize.discourse-on-scroll' + @resetExamineDockCache() + + didInsertElement: (e) -> + onScroll = Discourse.debounce((=> @onScroll()), 10) + $(window).bind 'scroll.discourse-on-scroll', onScroll + $(document).bind 'touchmove.discourse-on-scroll', onScroll + $(window).bind 'resize.discourse-on-scroll', onScroll + + @bindScrolling() + @get('controller').subscribe() + + # Insert our screen tracker + screenTrack = Discourse.ScreenTrack.create(topic_id: @get('topic.id')) + screenTrack.start() + @set('screenTrack', screenTrack) + + # Track the user's eyeline + eyeline = new Discourse.Eyeline('.topic-post') + eyeline.on 'saw', (e) => @postSeen(e.detail) + eyeline.on 'sawBottom', (e) => @nextPage(e.detail) + eyeline.on 'sawTop', (e) => @prevPage(e.detail) + @set('eyeline', eyeline) + + @.$().on 'mouseup.discourse-redirect', '.cooked a, a.track-link', (e) -> + Discourse.ClickTrack.trackClick(e) + + @onScroll() + + # Triggered from the post view all posts are rendered + postsRendered: (postDiv, post)-> + $window = $(window) + $lastPost = $('.row:last') + # we consider stuff at the end of the list as read, right away (if it is visible) + if $window.height() + $window.scrollTop() >= $lastPost.offset().top + $lastPost.height() + @examineRead() + else + # last is not in view, so only examine in 2 seconds + Em.run.later => + @examineRead() + , 2000 + + resetRead: (e) -> + @get('screenTrack').cancel() + @set('screenTrack', null) + @get('controller').unsubscribe() + + @get('topic').resetRead => + @set('controller.message', "Your read position has been reset.") + @set('controller.loaded', false) + + # Called for every post seen + postSeen: ($post) -> + @set('postNumberSeen', null) + postView = Ember.View.views[$post.prop('id')] + if postView + post = postView.get('post') + @set('postNumberSeen', post.get('post_number')) + if post.get('post_number') > (@get('topic.last_read_post_number') || 0) + @set('topic.last_read_post_number', post.get('post_number')) + unless post.get('read') + post.set('read', true) + @get('screenTrack')?.guessedSeen(post.get('post_number')) + + observeFirstPostLoaded: (-> + posts = @get('topic.posts') + + # TODO topic.posts stores non ember objects in it for a period of time, this is bad + loaded = posts && posts[0] && posts[0].post_number == 1 + + # I avoided a computed property cause I did not want to set it, over and over again + old = @get('firstPostLoaded') + if loaded + @set('firstPostLoaded', true) unless old == true + else + @set('firstPostLoaded', false) unless old == false + + ).observes('topic.posts.@each') + + # Load previous posts if there are some + prevPage: ($post) -> + postView = Ember.View.views[$post.prop('id')] + return unless postView + post = postView.get('post') + return unless post + + # We don't load upwards from the first page + return if post.post_number == 1 + + # double check + if @topic && @topic.posts && @topic.posts.length > 0 && @topic.posts.first().post_number != post.post_number + return + + # half mutex + return if @loading + + @set('loading', true) + @set('loadingAbove', true) + + opts = $.extend {postsBefore: post.get('post_number')}, @get('controller.postFilters') + Discourse.Topic.find(@get('topic.id'), opts).then (result) => + posts = @get('topic.posts') + + # Add a scrollTo record to the last post inserted to the DOM + lastPostNum = result.posts.first().post_number + result.posts.each (p) => + newPost = Discourse.Post.create(p, @get('topic')) + if p.post_number == lastPostNum + newPost.set 'scrollTo', top: $(window).scrollTop(), height: $(document).height() + posts.unshiftObject(newPost) + + @set('loading', false) + @set('loadingAbove', false) + + + fullyLoaded: (-> + @seenBottom || @topic.at_bottom + ).property('topic.at_bottom', 'seenBottom') + + # Load new posts if there are some + nextPage: ($post) -> + + return if @loading || @seenBottom + postView = Ember.View.views[$post.prop('id')] + return unless postView + post = postView.get('post') + @loadMore(post) + + postCountChanged:(-> + @set('seenBottom',false) + @get('eyeline')?.update() + ).observes('topic.highest_post_number') + + loadMore: (post)-> + return if @loading || @seenBottom + + # Don't load if we know we're at the bottom + if @get('topic.highest_post_number') is post.get('post_number') + @get('eyeline')?.flushRest() + + # Update our current post to the last number we saw + @set('controller.currentPost', postNumberSeen) if postNumberSeen = @get('postNumberSeen') + return + + # Don't double load ever + if @topic.posts.last().post_number != post.post_number + return + + @set('loadingBelow', true) + @set('loading', true) + opts = $.extend {postsAfter: post.get('post_number')}, @get('controller.postFilters') + Discourse.Topic.find(@get('topic.id'), opts).then (result) => + if result.at_bottom || result.posts.length == 0 + @set('seenBottom', 'true') + + @get('topic').pushPosts result.posts.map (p) => + Discourse.Post.create(p, @get('topic')) + + if result.suggested_topics + suggested = Em.A() + result.suggested_topics.each (st) -> + suggested.pushObject(Discourse.Topic.create(st)) + @set('topic.suggested_topics', suggested) + + @set('loadingBelow', false) + @set('loading', false) + + # Examine which posts are on the screen and mark them as read. Also figure out if we + # need to load more posts. + examineRead: -> + # Track posts time on screen + @get('screenTrack')?.scrolled() + + # Update what we can see + @get('eyeline')?.update() + + # Update our current post to the last number we saw + @set('controller.currentPost', postNumberSeen) if postNumberSeen = @get('postNumberSeen') + + cancelEdit: -> + @set('editingTopic', false) + + finishedEdit: -> + if @get('editingTopic') + topic = @get('topic') + topic.set('title', $('#edit-title').val()) + topic.save() + @set('editingTopic', false) + + editTopic: -> + return false unless @get('topic.can_edit') + @set('editingTopic', true) + false + + showFavoriteButton: (-> + Discourse.currentUser && !@get('topic.isPrivateMessage') + ).property('topic.isPrivateMessage') + + resetExamineDockCache: -> + @docAt = null + @dockedTitle = false + @dockedCounter = false + + detectDockPosition: -> + rows = $(".topic-post") + return unless rows.length > 0 + + i = parseInt(rows.length / 2, 10) + increment = parseInt(rows.length / 4, 10) + goingUp = `undefined` + + winOffset = window.pageYOffset || $('html').scrollTop() + winHeight = window.innerHeight || $(window).height() + + loop + break if i is 0 or (i >= rows.length - 1) + + current = $(rows[i]) + offset = current.offset() + + if offset.top - winHeight < winOffset + if offset.top + current.outerHeight() - window.innerHeight > winOffset + break + else + i = i + increment + break if goingUp isnt `undefined` and increment is 1 and not goingUp + goingUp = true + else + i = i - increment + break if goingUp isnt `undefined` and increment is 1 and goingUp + goingUp = false + + if increment > 1 + increment = parseInt(increment / 2, 10) + goingUp = `undefined` + if increment == 0 + increment = 1 + goingUp = `undefined` + + postView = Ember.View.views[rows[i].id] + return unless postView + post = postView.get('post') + return unless post + @set('progressPosition', post.get('post_number')) + + return + + ensureDockIsTestedOnChange: (-> + # this is subtle, firstPostLoaded will trigger ember to render the view containing #topic-title + # onScroll needs do know about it to be able to make a decision about the dock + # + + Em.run.next @, @onScroll + ).observes('firstPostLoaded') + + onScroll: -> + @detectDockPosition() + offset = window.pageYOffset || $('html').scrollTop() + firstLoaded = @get('firstPostLoaded') + + unless @docAt + title = $('#topic-title') + if title && title.length == 1 + @docAt = title.offset().top + + if @docAt + @set('controller.showExtraHeaderInfo', offset >= @docAt || !firstLoaded) + else + @set('controller.showExtraHeaderInfo', !firstLoaded) + + + # there is a whole bunch of caching we could add here + $lastPost = $('.last-post') + lastPostOffset = $lastPost.offset() + + return unless lastPostOffset # there is an edge case while stuff is loading + + if offset >= (lastPostOffset.top + $lastPost.height()) - $(window).height() + unless @dockedCounter + $('#topic-progress-wrapper').addClass('docked') + @dockedCounter = true + else + if @dockedCounter + $('#topic-progress-wrapper').removeClass('docked') + @dockedCounter = false + + browseMoreMessage: (-> + opts = {popularLink: "#{Em.String.i18n("topic.view_popular_topics")}"} + + if category = @get('controller.content.category') + opts.catLink = Discourse.Utilities.categoryLink(category) + Ember.String.i18n("topic.read_more_in_category", opts) + else + opts.catLink = "#{Em.String.i18n("topic.browse_all_categories")}" + Ember.String.i18n("topic.read_more", opts) + ).property() + + + # The window has been scrolled + scrolled: (e) -> @examineRead() + +window.Discourse.TopicView.reopenClass + + # Scroll to a given post, if in the DOM. Returns whether it was in the DOM or not. + scrollTo: (topicId, postNumber, callback) -> + + + # Make sure we're looking at the topic we want to scroll to + return false unless parseInt(topicId) == parseInt($('#topic').data('topic-id')) + + existing = $("#post_#{postNumber}") + if existing.length + if postNumber == 1 + $('html, body').scrollTop(0) + else + $('html, body').scrollTop(existing.offset().top - 55) + return true + + false + diff --git a/app/assets/javascripts/discourse/views/user/activity_filter_view.js.coffee b/app/assets/javascripts/discourse/views/user/activity_filter_view.js.coffee new file mode 100644 index 00000000000..15e4701a5a4 --- /dev/null +++ b/app/assets/javascripts/discourse/views/user/activity_filter_view.js.coffee @@ -0,0 +1,24 @@ +window.Discourse.ActivityFilterView = Em.View.extend Discourse.Presence, + tagName: 'li' + classNameBindings: ['active'] + + active: (-> + if content = @get('content') + return parseInt(@get('controller.content.streamFilter')) is parseInt(Em.get(content, 'action_type')) + else + return @blank('controller.content.streamFilter') + ).property('controller.content.streamFilter', 'content.action_type') + + render: (buffer) -> + if content = @get('content') + count = Em.get(content, 'count') + description = Em.get(content, 'description') + else + count = @get('count') + description = Em.String.i18n("user.filters.all") + + buffer.push("#{description} (#{count})") + + click: -> + @get('controller.content').filterStream(@get('content.action_type')) + false \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/user/preferences_email_view.js.coffee b/app/assets/javascripts/discourse/views/user/preferences_email_view.js.coffee new file mode 100644 index 00000000000..9a15387e88d --- /dev/null +++ b/app/assets/javascripts/discourse/views/user/preferences_email_view.js.coffee @@ -0,0 +1,6 @@ +window.Discourse.PreferencesEmailView = Ember.View.extend + templateName: 'user/email' + classNames: ['user-preferences'] + + didInsertElement: -> + $('#change_email').focus() \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/user/preferences_username_view.js.coffee b/app/assets/javascripts/discourse/views/user/preferences_username_view.js.coffee new file mode 100644 index 00000000000..c67722c64a5 --- /dev/null +++ b/app/assets/javascripts/discourse/views/user/preferences_username_view.js.coffee @@ -0,0 +1,7 @@ +window.Discourse.PreferencesUsernameView = Ember.View.extend + templateName: 'user/username' + classNames: ['user-preferences'] + + + didInsertElement: -> + $('#change_username').focus() \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/user/preferences_view.js.coffee b/app/assets/javascripts/discourse/views/user/preferences_view.js.coffee new file mode 100644 index 00000000000..9176e9bd943 --- /dev/null +++ b/app/assets/javascripts/discourse/views/user/preferences_view.js.coffee @@ -0,0 +1,5 @@ +window.Discourse.PreferencesView = Ember.View.extend + templateName: 'user/preferences' + classNames: ['user-preferences'] + + diff --git a/app/assets/javascripts/discourse/views/user/user_activity_view.js.coffee b/app/assets/javascripts/discourse/views/user/user_activity_view.js.coffee new file mode 100644 index 00000000000..a083b26aeb3 --- /dev/null +++ b/app/assets/javascripts/discourse/views/user/user_activity_view.js.coffee @@ -0,0 +1,8 @@ +window.Discourse.UserActivityView = Ember.View.extend + templateName: 'user/activity' + currentUserBinding: 'Discourse.currentUser' + userBinding: 'controller.content' + + + didInsertElement: -> + window.scrollTo(0, 0) \ No newline at end of file diff --git a/app/assets/javascripts/discourse/views/user/user_invited_view.js.coffee b/app/assets/javascripts/discourse/views/user/user_invited_view.js.coffee new file mode 100644 index 00000000000..2901493bac4 --- /dev/null +++ b/app/assets/javascripts/discourse/views/user/user_invited_view.js.coffee @@ -0,0 +1,3 @@ +window.Discourse.UserInvitedView = Ember.View.extend + templateName: 'user/invited' + diff --git a/app/assets/javascripts/discourse/views/user/user_private_messages_view.js.coffee b/app/assets/javascripts/discourse/views/user/user_private_messages_view.js.coffee new file mode 100644 index 00000000000..a3cb2649e47 --- /dev/null +++ b/app/assets/javascripts/discourse/views/user/user_private_messages_view.js.coffee @@ -0,0 +1,17 @@ +window.Discourse.UserPrivateMessagesView = Ember.View.extend + templateName: 'user/private_messages' + elementId: 'user-private-messages' + + selectCurrent: (evt) -> + t = $(evt.currentTarget) + t.closest('.action-list').find('li').removeClass('active') + t.closest('li').addClass('active') + + inbox: (evt)-> + @selectCurrent(evt) + @set('controller.filter', 13) + + sentMessages: (evt) -> + @selectCurrent(evt) + @set('controller.filter', 12) + diff --git a/app/assets/javascripts/discourse/views/user/user_stream_view.js.coffee b/app/assets/javascripts/discourse/views/user/user_stream_view.js.coffee new file mode 100644 index 00000000000..cf59c560910 --- /dev/null +++ b/app/assets/javascripts/discourse/views/user/user_stream_view.js.coffee @@ -0,0 +1,31 @@ +window.Discourse.UserStreamView = Ember.View.extend Discourse.Scrolling, + templateName: 'user/stream' + currentUserBinding: 'Discourse.currentUser' + userBinding: 'controller.content' + + scrolled: (e) -> + $userStreamBottom = $('#user-stream-bottom') + return if $userStreamBottom.data('loading') + return unless $userStreamBottom and (position = $userStreamBottom.position()) + docViewTop = $(window).scrollTop() + windowHeight = $(window).height() + docViewBottom = docViewTop + windowHeight + + @set('loading', true) + if (position.top < docViewBottom) + $userStreamBottom.data('loading', true) + @set('loading', true) + @get('controller.content').loadMoreUserActions => + @set('loading', false) + Em.run.next => + $userStreamBottom.data('loading', null) + + + willDestroyElement: -> + Discourse.MessageBus.unsubscribe "/users/#{@get('user.username').toLowerCase()}" + @unbindScrolling() + + didInsertElement: -> + Discourse.MessageBus.subscribe "/users/#{@get('user.username').toLowerCase()}", (data)=> + @get('user').loadUserAction(data) + @bindScrolling() diff --git a/app/assets/javascripts/discourse/views/user/user_view.js.coffee b/app/assets/javascripts/discourse/views/user/user_view.js.coffee new file mode 100644 index 00000000000..523844c4495 --- /dev/null +++ b/app/assets/javascripts/discourse/views/user/user_view.js.coffee @@ -0,0 +1,2 @@ +window.Discourse.UserView = Ember.View.extend + templateName: 'user/user' diff --git a/app/assets/javascripts/discourse/views/view.js.coffee b/app/assets/javascripts/discourse/views/view.js.coffee new file mode 100644 index 00000000000..66dd672d489 --- /dev/null +++ b/app/assets/javascripts/discourse/views/view.js.coffee @@ -0,0 +1,6 @@ +window.Discourse.View = Ember.View.extend Discourse.Presence, + + # Overwrite this to do a different display + displayErrors: (errors, callback) -> + alert(errors.join("\n")) + callback?() diff --git a/app/assets/javascripts/env.js.coffee b/app/assets/javascripts/env.js.coffee new file mode 100644 index 00000000000..960efe3c8a3 --- /dev/null +++ b/app/assets/javascripts/env.js.coffee @@ -0,0 +1,8 @@ +# These will help us migrate up to the new ember's default behavior +window.ENV = + CP_DEFAULT_CACHEABLE: true + VIEW_PRESERVES_CONTEXT: true + MANDATORY_SETTER: false # make it more like ember.prod.js + +window.Discourse = {} +window.Discourse.SiteSettings = {} diff --git a/app/assets/javascripts/external/LAB.js b/app/assets/javascripts/external/LAB.js new file mode 100644 index 00000000000..e710dfea28b --- /dev/null +++ b/app/assets/javascripts/external/LAB.js @@ -0,0 +1,5 @@ +/*! LAB.js (LABjs :: Loading And Blocking JavaScript) + v2.0.3 (c) Kyle Simpson + MIT License +*/ +(function(o){var K=o.$LAB,y="UseLocalXHR",z="AlwaysPreserveOrder",u="AllowDuplicates",A="CacheBust",B="BasePath",C=/^[^?#]*\//.exec(location.href)[0],D=/^\w+\:\/\/\/?[^\/]+/.exec(C)[0],i=document.head||document.getElementsByTagName("head"),L=(o.opera&&Object.prototype.toString.call(o.opera)=="[object Opera]")||("MozAppearance"in document.documentElement.style),q=document.createElement("script"),E=typeof q.preload=="boolean",r=E||(q.readyState&&q.readyState=="uninitialized"),F=!r&&q.async===true,M=!r&&!F&&!L;function G(a){return Object.prototype.toString.call(a)=="[object Function]"}function H(a){return Object.prototype.toString.call(a)=="[object Array]"}function N(a,c){var b=/^\w+\:\/\//;if(/^\/\/\/?/.test(a)){a=location.protocol+a}else if(!b.test(a)&&a.charAt(0)!="/"){a=(c||"")+a}return b.test(a)?a:((a.charAt(0)=="/"?D:C)+a)}function s(a,c){for(var b in a){if(a.hasOwnProperty(b)){c[b]=a[b]}}return c}function O(a){var c=false;for(var b=0;b0){for(var a=0;a=0;){d=n.shift();a=a[d.type].apply(null,d.args)}return a},noConflict:function(){o.$LAB=K;return m},sandbox:function(){return J()}};return m}o.$LAB=J();(function(a,c,b){if(document.readyState==null&&document[a]){document.readyState="loading";document[a](c,b=function(){document.removeEventListener(c,b,false);document.readyState="complete"},false)}})("addEventListener","DOMContentLoaded")})(this); \ No newline at end of file diff --git a/app/assets/javascripts/external/Markdown.Converter.js b/app/assets/javascripts/external/Markdown.Converter.js new file mode 100644 index 00000000000..c9059e640b4 --- /dev/null +++ b/app/assets/javascripts/external/Markdown.Converter.js @@ -0,0 +1,1314 @@ +var Markdown; + +if (typeof exports === "object" && typeof require === "function") // we're in a CommonJS (e.g. Node.js) module + Markdown = exports; +else + Markdown = {}; + +// The following text is included for historical reasons, but should +// be taken with a pinch of salt; it's not all true anymore. + +// +// Wherever possible, Showdown is a straight, line-by-line port +// of the Perl version of Markdown. +// +// This is not a normal parser design; it's basically just a +// series of string substitutions. It's hard to read and +// maintain this way, but keeping Showdown close to the original +// design makes it easier to port new features. +// +// More importantly, Showdown behaves like markdown.pl in most +// edge cases. So web applications can do client-side preview +// in Javascript, and then build identical HTML on the server. +// +// This port needs the new RegExp functionality of ECMA 262, +// 3rd Edition (i.e. Javascript 1.5). Most modern web browsers +// should do fine. Even with the new regular expression features, +// We do a lot of work to emulate Perl's regex functionality. +// The tricky changes in this file mostly have the "attacklab:" +// label. Major or self-explanatory changes don't. +// +// Smart diff tools like Araxis Merge will be able to match up +// this file with markdown.pl in a useful way. A little tweaking +// helps: in a copy of markdown.pl, replace "#" with "//" and +// replace "$text" with "text". Be sure to ignore whitespace +// and line endings. +// + + +// +// Usage: +// +// var text = "Markdown *rocks*."; +// +// var converter = new Markdown.Converter(); +// var html = converter.makeHtml(text); +// +// alert(html); +// +// Note: move the sample code to the bottom of this +// file before uncommenting it. +// + +(function () { + + function identity(x) { return x; } + function returnFalse(x) { return false; } + + function HookCollection() { } + + HookCollection.prototype = { + + chain: function (hookname, func) { + var original = this[hookname]; + if (!original) + throw new Error("unknown hook " + hookname); + + if (original === identity) + this[hookname] = func; + else + this[hookname] = function (x) { return func(original(x)); } + }, + set: function (hookname, func) { + if (!this[hookname]) + throw new Error("unknown hook " + hookname); + this[hookname] = func; + }, + addNoop: function (hookname) { + this[hookname] = identity; + }, + addFalse: function (hookname) { + this[hookname] = returnFalse; + } + }; + + Markdown.HookCollection = HookCollection; + + // g_urls and g_titles allow arbitrary user-entered strings as keys. This + // caused an exception (and hence stopped the rendering) when the user entered + // e.g. [push] or [__proto__]. Adding a prefix to the actual key prevents this + // (since no builtin property starts with "s_"). See + // http://meta.stackoverflow.com/questions/64655/strange-wmd-bug + // (granted, switching from Array() to Object() alone would have left only __proto__ + // to be a problem) + function SaveHash() { } + SaveHash.prototype = { + set: function (key, value) { + this["s_" + key] = value; + }, + get: function (key) { + return this["s_" + key]; + } + }; + + Markdown.Converter = function () { + var pluginHooks = this.hooks = new HookCollection(); + pluginHooks.addNoop("plainLinkText"); // given a URL that was encountered by itself (without markup), should return the link text that's to be given to this link + pluginHooks.addNoop("preConversion"); // called with the orignal text as given to makeHtml. The result of this plugin hook is the actual markdown source that will be cooked + pluginHooks.addNoop("postConversion"); // called with the final cooked HTML code. The result of this plugin hook is the actual output of makeHtml + + // + // Private state of the converter instance: + // + + // Global hashes, used by various utility routines + var g_urls; + var g_titles; + var g_html_blocks; + + // Used to track when we're inside an ordered or unordered list + // (see _ProcessListItems() for details): + var g_list_level; + + this.makeHtml = function (text) { + + // + // Main function. The order in which other subs are called here is + // essential. Link and image substitutions need to happen before + // _EscapeSpecialCharsWithinTagAttributes(), so that any *'s or _'s in the + // and tags get encoded. + // + + // This will only happen if makeHtml on the same converter instance is called from a plugin hook. + // Don't do that. + if (g_urls) + throw new Error("Recursive call to converter.makeHtml"); + + // Create the private state objects. + g_urls = new SaveHash(); + g_titles = new SaveHash(); + g_html_blocks = []; + g_list_level = 0; + + text = pluginHooks.preConversion(text); + + // attacklab: Replace ~ with ~T + // This lets us use tilde as an escape char to avoid md5 hashes + // The choice of character is arbitray; anything that isn't + // magic in Markdown will work. + text = text.replace(/~/g, "~T"); + + // attacklab: Replace $ with ~D + // RegExp interprets $ as a special character + // when it's in a replacement string + text = text.replace(/\$/g, "~D"); + + // Standardize line endings + text = text.replace(/\r\n/g, "\n"); // DOS to Unix + text = text.replace(/\r/g, "\n"); // Mac to Unix + + // Make sure text begins and ends with a couple of newlines: + text = "\n\n" + text + "\n\n"; + + // Convert all tabs to spaces. + text = _Detab(text); + + // Strip any lines consisting only of spaces and tabs. + // This makes subsequent regexen easier to write, because we can + // match consecutive blank lines with /\n+/ instead of something + // contorted like /[ \t]*\n+/ . + text = text.replace(/^[ \t]+$/mg, ""); + + // Turn block-level HTML blocks into hash entries + text = _HashHTMLBlocks(text); + + // Strip link definitions, store in hashes. + text = _StripLinkDefinitions(text); + + text = _RunBlockGamut(text); + + text = _UnescapeSpecialChars(text); + + // attacklab: Restore dollar signs + text = text.replace(/~D/g, "$$"); + + // attacklab: Restore tildes + text = text.replace(/~T/g, "~"); + + text = pluginHooks.postConversion(text); + + g_html_blocks = g_titles = g_urls = null; + + return text; + }; + + function _StripLinkDefinitions(text) { + // + // Strips link definitions from text, stores the URLs and titles in + // hash references. + // + + // Link defs are in the form: ^[id]: url "optional title" + + /* + text = text.replace(/ + ^[ ]{0,3}\[(.+)\]: // id = $1 attacklab: g_tab_width - 1 + [ \t]* + \n? // maybe *one* newline + [ \t]* + ? // url = $2 + (?=\s|$) // lookahead for whitespace instead of the lookbehind removed below + [ \t]* + \n? // maybe one newline + [ \t]* + ( // (potential) title = $3 + (\n*) // any lines skipped = $4 attacklab: lookbehind removed + [ \t]+ + ["(] + (.+?) // title = $5 + [")] + [ \t]* + )? // title is optional + (?:\n+|$) + /gm, function(){...}); + */ + + text = text.replace(/^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*?(?=\s|$)[ \t]*\n?[ \t]*((\n*)["(](.+?)[")][ \t]*)?(?:\n+)/gm, + function (wholeMatch, m1, m2, m3, m4, m5) { + m1 = m1.toLowerCase(); + g_urls.set(m1, _EncodeAmpsAndAngles(m2)); // Link IDs are case-insensitive + if (m4) { + // Oops, found blank lines, so it's not a title. + // Put back the parenthetical statement we stole. + return m3; + } else if (m5) { + g_titles.set(m1, m5.replace(/"/g, """)); + } + + // Completely remove the definition from the text + return ""; + } + ); + + return text; + } + + function _HashHTMLBlocks(text) { + + // Hashify HTML blocks: + // We only want to do this for block-level HTML tags, such as headers, + // lists, and tables. That's because we still want to wrap

    s around + // "paragraphs" that are wrapped in non-block-level tags, such as anchors, + // phrase emphasis, and spans. The list of tags we're looking for is + // hard-coded: + var block_tags_a = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del" + var block_tags_b = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math" + + // First, look for nested blocks, e.g.: + //

    + //
    + // tags for inner block must be indented. + //
    + //
    + // + // The outermost tags must start at the left margin for this to match, and + // the inner nested divs must be indented. + // We need to do this before the next, more liberal match, because the next + // match will start at the first `
    ` and stop at the first `
    `. + + // attacklab: This regex can be expensive when it fails. + + /* + text = text.replace(/ + ( // save in $1 + ^ // start of line (with /m) + <($block_tags_a) // start tag = $2 + \b // word break + // attacklab: hack around khtml/pcre bug... + [^\r]*?\n // any number of lines, minimally matching + // the matching end tag + [ \t]* // trailing spaces/tabs + (?=\n+) // followed by a newline + ) // attacklab: there are sentinel newlines at end of document + /gm,function(){...}}; + */ + text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm, hashElement); + + // + // Now match more liberally, simply from `\n` to `\n` + // + + /* + text = text.replace(/ + ( // save in $1 + ^ // start of line (with /m) + <($block_tags_b) // start tag = $2 + \b // word break + // attacklab: hack around khtml/pcre bug... + [^\r]*? // any number of lines, minimally matching + .* // the matching end tag + [ \t]* // trailing spaces/tabs + (?=\n+) // followed by a newline + ) // attacklab: there are sentinel newlines at end of document + /gm,function(){...}}; + */ + text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm, hashElement); + + // Special case just for
    . It was easier to make a special case than + // to make the other regex more complicated. + + /* + text = text.replace(/ + \n // Starting after a blank line + [ ]{0,3} + ( // save in $1 + (<(hr) // start tag = $2 + \b // word break + ([^<>])*? + \/?>) // the matching end tag + [ \t]* + (?=\n{2,}) // followed by a blank line + ) + /g,hashElement); + */ + text = text.replace(/\n[ ]{0,3}((<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g, hashElement); + + // Special case for standalone HTML comments: + + /* + text = text.replace(/ + \n\n // Starting after a blank line + [ ]{0,3} // attacklab: g_tab_width - 1 + ( // save in $1 + -]|-[^>])(?:[^-]|-[^-])*)--) // see http://www.w3.org/TR/html-markup/syntax.html#comments and http://meta.stackoverflow.com/q/95256 + > + [ \t]* + (?=\n{2,}) // followed by a blank line + ) + /g,hashElement); + */ + text = text.replace(/\n\n[ ]{0,3}(-]|-[^>])(?:[^-]|-[^-])*)--)>[ \t]*(?=\n{2,}))/g, hashElement); + + // PHP and ASP-style processor instructions ( and <%...%>) + + /* + text = text.replace(/ + (?: + \n\n // Starting after a blank line + ) + ( // save in $1 + [ ]{0,3} // attacklab: g_tab_width - 1 + (?: + <([?%]) // $2 + [^\r]*? + \2> + ) + [ \t]* + (?=\n{2,}) // followed by a blank line + ) + /g,hashElement); + */ + text = text.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g, hashElement); + + return text; + } + + function hashElement(wholeMatch, m1) { + var blockText = m1; + + // Undo double lines + blockText = blockText.replace(/^\n+/, ""); + + // strip trailing blank lines + blockText = blockText.replace(/\n+$/g, ""); + + // Replace the element text with a marker ("~KxK" where x is its key) + blockText = "\n\n~K" + (g_html_blocks.push(blockText) - 1) + "K\n\n"; + + return blockText; + } + + function _RunBlockGamut(text, doNotUnhash) { + // + // These are all the transformations that form block-level + // tags like paragraphs, headers, and list items. + // + text = _DoHeaders(text); + + // Do Horizontal Rules: + var replacement = "
    \n"; + text = text.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm, replacement); + text = text.replace(/^[ ]{0,2}([ ]?-[ ]?){3,}[ \t]*$/gm, replacement); + text = text.replace(/^[ ]{0,2}([ ]?_[ ]?){3,}[ \t]*$/gm, replacement); + + text = _DoLists(text); + text = _DoCodeBlocks(text); + text = _DoBlockQuotes(text); + + // We already ran _HashHTMLBlocks() before, in Markdown(), but that + // was to escape raw HTML in the original Markdown source. This time, + // we're escaping the markup we've just created, so that we don't wrap + //

    tags around block-level tags. + text = _HashHTMLBlocks(text); + text = _FormParagraphs(text, doNotUnhash); + + return text; + } + + function _RunSpanGamut(text) { + // + // These are all the transformations that occur *within* block-level + // tags like paragraphs, headers, and list items. + // + + text = _DoCodeSpans(text); + text = _EscapeSpecialCharsWithinTagAttributes(text); + text = _EncodeBackslashEscapes(text); + + // Process anchor and image tags. Images must come first, + // because ![foo][f] looks like an anchor. + text = _DoImages(text); + text = _DoAnchors(text); + + // Make links out of things like `` + // Must come after _DoAnchors(), because you can use < and > + // delimiters in inline links like [this](). + text = _DoAutoLinks(text); + + text = text.replace(/~P/g, "://"); // put in place to prevent autolinking; reset now + + text = _EncodeAmpsAndAngles(text); + text = _DoItalicsAndBold(text); + + // Do hard breaks: + text = text.replace(/ +\n/g, "
    \n"); + + return text; + } + + function _EscapeSpecialCharsWithinTagAttributes(text) { + // + // Within tags -- meaning between < and > -- encode [\ ` * _] so they + // don't conflict with their use in Markdown for code, italics and strong. + // + + // Build a regex to find HTML tags and comments. See Friedl's + // "Mastering Regular Expressions", 2nd Ed., pp. 200-201. + + // SE: changed the comment part of the regex + + var regex = /(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|-]|-[^>])(?:[^-]|-[^-])*)--)>)/gi; + + text = text.replace(regex, function (wholeMatch) { + var tag = wholeMatch.replace(/(.)<\/?code>(?=.)/g, "$1`"); + tag = escapeCharacters(tag, wholeMatch.charAt(1) == "!" ? "\\`*_/" : "\\`*_"); // also escape slashes in comments to prevent autolinking there -- http://meta.stackoverflow.com/questions/95987 + return tag; + }); + + return text; + } + + function _DoAnchors(text) { + // + // Turn Markdown link shortcuts into XHTML
    tags. + // + // + // First, handle reference-style links: [link text] [id] + // + + /* + text = text.replace(/ + ( // wrap whole match in $1 + \[ + ( + (?: + \[[^\]]*\] // allow brackets nested one level + | + [^\[] // or anything else + )* + ) + \] + + [ ]? // one optional space + (?:\n[ ]*)? // one optional newline followed by spaces + + \[ + (.*?) // id = $3 + \] + ) + ()()()() // pad remaining backreferences + /g, writeAnchorTag); + */ + text = text.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g, writeAnchorTag); + + // + // Next, inline-style links: [link text](url "optional title") + // + + /* + text = text.replace(/ + ( // wrap whole match in $1 + \[ + ( + (?: + \[[^\]]*\] // allow brackets nested one level + | + [^\[\]] // or anything else + )* + ) + \] + \( // literal paren + [ \t]* + () // no id, so leave $3 empty + ? + [ \t]* + ( // $5 + (['"]) // quote char = $6 + (.*?) // Title = $7 + \6 // matching quote + [ \t]* // ignore any spaces/tabs between closing quote and ) + )? // title is optional + \) + ) + /g, writeAnchorTag); + */ + + text = text.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g, writeAnchorTag); + + // + // Last, handle reference-style shortcuts: [link text] + // These must come last in case you've also got [link test][1] + // or [link test](/foo) + // + + /* + text = text.replace(/ + ( // wrap whole match in $1 + \[ + ([^\[\]]+) // link text = $2; can't contain '[' or ']' + \] + ) + ()()()()() // pad rest of backreferences + /g, writeAnchorTag); + */ + text = text.replace(/(\[([^\[\]]+)\])()()()()()/g, writeAnchorTag); + + return text; + } + + function writeAnchorTag(wholeMatch, m1, m2, m3, m4, m5, m6, m7) { + if (m7 == undefined) m7 = ""; + var whole_match = m1; + var link_text = m2.replace(/:\/\//g, "~P"); // to prevent auto-linking withing the link. will be converted back after the auto-linker runs + var link_id = m3.toLowerCase(); + var url = m4; + var title = m7; + + if (url == "") { + if (link_id == "") { + // lower-case and turn embedded newlines into spaces + link_id = link_text.toLowerCase().replace(/ ?\n/g, " "); + } + url = "#" + link_id; + + if (g_urls.get(link_id) != undefined) { + url = g_urls.get(link_id); + if (g_titles.get(link_id) != undefined) { + title = g_titles.get(link_id); + } + } + else { + if (whole_match.search(/\(\s*\)$/m) > -1) { + // Special case for explicit empty url + url = ""; + } else { + return whole_match; + } + } + } + url = encodeProblemUrlChars(url); + url = escapeCharacters(url, "*_"); + var result = ""; + + return result; + } + + function _DoImages(text) { + // + // Turn Markdown image shortcuts into tags. + // + + // + // First, handle reference-style labeled images: ![alt text][id] + // + + /* + text = text.replace(/ + ( // wrap whole match in $1 + !\[ + (.*?) // alt text = $2 + \] + + [ ]? // one optional space + (?:\n[ ]*)? // one optional newline followed by spaces + + \[ + (.*?) // id = $3 + \] + ) + ()()()() // pad rest of backreferences + /g, writeImageTag); + */ + text = text.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g, writeImageTag); + + // + // Next, handle inline images: ![alt text](url "optional title") + // Don't forget: encode * and _ + + /* + text = text.replace(/ + ( // wrap whole match in $1 + !\[ + (.*?) // alt text = $2 + \] + \s? // One optional whitespace character + \( // literal paren + [ \t]* + () // no id, so leave $3 empty + ? // src url = $4 + [ \t]* + ( // $5 + (['"]) // quote char = $6 + (.*?) // title = $7 + \6 // matching quote + [ \t]* + )? // title is optional + \) + ) + /g, writeImageTag); + */ + text = text.replace(/(!\[(.*?)\]\s?\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g, writeImageTag); + + return text; + } + + function attributeEncode(text) { + // unconditionally replace angle brackets here -- what ends up in an attribute (e.g. alt or title) + // never makes sense to have verbatim HTML in it (and the sanitizer would totally break it) + return text.replace(/>/g, ">").replace(/" + _RunSpanGamut(m1) + "

  • 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/34.jpg b/app/assets/images/avatars/34.jpg new file mode 100644 index 0000000000000000000000000000000000000000..beceaad1f89f6d55670cbd588e4fde037ed9bfe4 GIT binary patch literal 5688 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 CERB5t literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/38.jpg b/app/assets/images/avatars/38.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12b9d2dde36a9f470e5cc9ae775033cabafeeaf9 GIT binary patch literal 25651 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 u@yf#Lr{W{r%Jk^(Dz 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 JkFx*22>_lDT;l)$ literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/42.jpg b/app/assets/images/avatars/42.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e8ca955577e30c406c85c9ff46764aebc00acfa GIT binary patch literal 2133 zcmex=M)G;tLF)@)>x3sk|ve7d(F#;LF z$jQmc!_6bX%PV1|D5GdZGWdUhL6C#No57ozQHg;`kdaxC@&6G9c?JeXRz@&jfC5G) zW)@a9b`DN1?*B&^whAyXF)}kVu`si;vam2PFxE0MF*C3TvI;30I#U-U>$dGX zcJ4ZK_{h;?$4{I*b?NeztJkjIxOwa0qsLF4K70P+<*SdMK7aZ8?fZ|Pzd-(CWMBsS z3PeCWhUPCp1|~)(78Yg}c96dqnaUX$nV1DxSQQP~gd79e6AOivj2byaoF*>Zc#u=s zIOv0DQqe^&F%^@CsvkjK1N)3Pk2R6yGq}eP{<_7$!_3IQB*-ktV9)U3%tg;xUat*g zFVA{iqy13iqu%sYn@+s0WQgC))4RscllT4v1OB~56BeIVa0xo&#~}Oqg?-yRz8x30 zM5suhT{P29*`N`wVcJSryCT-R3(-CzpxqnICp!LKBeZ)4(}U7m*8dsigq17p%?~oTeY;J~;)IrxtA#@HGFx`P zsn4R`?$~xMFOW@O+gG{9oyT8?x^14F*{001($&+bFJsxIC)YiXxh&SP+cINipu`5P z<;vTP!{3^CufBakp;KDe!Zm3LpP%KDW2N)?)tlYt-TLKg;$LZd$~ot=%*vpGr{Pz4 z=6pN2K5NHy)}HCpqgHJxd%eXiLkvX%FLOZ+FJ}*gzrClm3?}xsd`zph~}qbCtfVrzvb$iOV9le z9pb-R;M{y);rp7ie#hSyOwG|$*Shf{+urq3&L7!@M|q~lXH0cq4SveJ^4rOiHheyunS zh20|d?f#ec3jI3vJ>Y7D+LP^xQzp7qmp|`%W)r^TBwLTyO1qH7m4A+wURe2l@ocfl zORfhu9JS8%+EU>`jaFyly_fA@s5}kyWH52 z@BS}-`-VTS&wrJ5ds;ekp?BKNEe2^1z28a(xcej|e_Zc6O+(+tYLOYk3bAzN zM+9D#l^a-1n#8oc|Jvp^sh=JO{MlV#d?jq@E*lNcle{kj>tY+%<(`+>y>ZgHchQw> zQf69N`dYj7MPK&JT0ejL)2YSt3nLbtdAzhbsywQ;xlpOGAh}Rxl2-5D znY(vncFpZR^nB;q%*4$1Ow7Ia?yk<#wNq)cNS4rUDvaZDzhoIH5_j&IHtQ!2nPlEe zJ7ay{m%J?BJEtf=XcN!m<6EmFm@LldF$Q0^eLeGPoR00%C*C@Kbzv$D?0GkjW|s9# zop~ZAIGF%b#?uU4E{`==~5||PVk>n;NfCB zzC7RSeA}z1F{)?O&)n_b-M}Cz|1i8LC-(BgL`5T+4U#JV8RmQ4G&lU|BDeU`&h_@s z%H5OV{AV!FV_zD-A#B%d-l?Is+GbI%bCb@$t#VYEHj%MJeZB1J^Z#zmTeR28ElydM zUG(v+De-An-X+=}ROY|7S4QN$*vzNND}SGIzj!Nm&W`M5r@ij*Cq}XMFze1eRm*Q$ zb%SL)qk~Mi^`q?5-PuVWP6Tf7a}a&DHKl6hPOl@^rPl8G5jt0N^9f~%KR?&-I_|s4 zt-<&tf7kQYU_ENQL&et=cnJkx*==Yg2$(X zZ12sRL|I0;$bIFSm7#H& zq791f@)MRPYR1efUOwaS38%@Q{_O3`==*j}t}$^!2O>oJ(R^9}AlMFI>+varT)! T|ETwewAIcVOKNYa|9=wz>f5dd literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/43.jpg b/app/assets/images/avatars/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d602a8349e9496e34373edb1863541823591398 GIT binary patch literal 6972 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/44.jpg b/app/assets/images/avatars/44.jpg new file mode 100644 index 0000000000000000000000000000000000000000..656ba0fd9c589ffb4ab682a0af8b06131c1e0cc4 GIT binary patch literal 2458 zcmex=n#iR?;+B1Vl97jh^& zZ9FI%bn%0VaZ*teCzqJGgrtbvx}>nyN9P&a7buactm7Wa!P7i zdPZheaY<=ec|~Pab4zPmdq-#2q{&mJPMbbs=B!1Fmn>bje8tLDn>KIRx^4T8ox2Vl zK63Qf@e?OcUAlbb>b2`PZr*zM=<$=M&z`?{`Re1R&tJZN`~KtSFOa_&8JNMo0ud08 zq4`UYfr*icg@u`got1@!fsv`4fsu(>kcCyzkWI)jkUgG&j$OQFqp7+Xo z!(j0%Ai9fTvI28Y(w@)9>m|0F=QwvQKx6-YKS}09WxJMNzqxLG{Lj$&pW&g%hq~3P zH05&l@Fah^R}p`u>(9j>Gk-hA{P2%z)%$Y#<)V2>D!bDCXMDZ0Bgy}9-`1ze8$~m3 z&6V$*?>YHFMv~0xq`3>_UoZSt`FEjd%j_!GB;nt)rGLI#_xnJ+)Ryz&{<2dq@!AL0 z37V&>+I9ImzsY`-tA0GHZt27QZ%gO4?q2q1gH}i_zfHLKL;qXCt{=@iT<7)I8qTxX zF|)B>XZfPG!@|cZWLF_V;m|S7*ePwH|lg7Gbt@?+m_h} zu9~~-N^Sjvm@iEa=C5Dt_KEfN@k{$$KJNb`viRZt_9YP|(YnD$g6!|kaQzlxI45QE zpZ^R$o>r{e{5$VY&X41(_qHFl=aaTpQ?$9QYjO9yq;0wNGXu+4Az^zq)$$w9vpv6| zKGQb&)Q{2?PSTlE9|!(ts9pJQ>WBKylDB5>{%POtE}8XA_0}Yda|f?Hw$-i={$PIe zJ(p+U`adq$(|7m==*}NlB1c zE#PLr@gn`9pqJK}A8QVGeztn~aCy*&DAnwYZMUxf>|XvO>b&pH$csy+g`Q;n)_+E;>#7m+ z-}|Rl{rnj-d4A26w3zvOvbSBcvs>zUwdQhp`T_pmteN}yuASZ5{rqFt#?n&JUCz2U zF26~xOo_OXT7FiM^>EF?y3o9K(Qo|?HWD?gi&VmkqI_5G-6C)|CgK){P_WPhiN;C( zXWaY~7H{+KzFFgc#m@9k^u;f~^%*LrdtKVHd&#`lQCHW7U9=OR2EmiPq-UjcwsZ8DkLG=vaIf#ie}j6d@Gd=yWkK2fSL{Sy2Iw?dH@F9E%KYZTzFmO%*X1(Rm=E)N zcWvFb_M_3$N3$#+Z{OZ`W0OI`8g4_Ga@N%|wqJj8`C_c6YQ?$CeP+q>eWf#aRz2br z69_Vtdg~I(p!LD9uW3{I#5g54CdLz{Kku2v{OH_o{B;de$c8PCek<+Uy*@U6+Qen| z)?TOz)4y$V_0#8x{nwW6-qW4TD#0>=H{ErUx`m`l`n)~YRl=4pk6TspGpDxj!!bv( z=^3jEJ0{dM?QQp;|0GCSX^-{8y%(%%msuZK{zdfltlD!g+P|#7l=(;FPu||2H!u8M zl9JkHTj-NLdB@|WX;f?G^D%-X~|Tm$;WL9(=`IXE&caYr`@zwSWH^ROa8e{LgT_ zH}Q<;#83V<^Rhoj^?lCy+s`i-p?Xtk>$??acUrP<-|L@S`gzf$s<6;2-p?oZJ6~JU zc*BUH;;cs2S?$Q9#;^6;wl`!-)m0yqum9#+^=y7sm|&m9*YyHFvX1}OJ3jws()?e% yRePJ~s}#SCUmWx!@TZvikDeE|1HP>2edgz9{ACquXOOW^T!`?sZI=B1Zvp_@#&jA0 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/45.jpg b/app/assets/images/avatars/45.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b9a28eb6e30c2da2c2b4c51c1a3743af6dc54e6 GIT binary patch literal 3315 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 a#r+@FtkPH;6d2}aJZIU@C0`l--vj_389@jD literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/46.jpg b/app/assets/images/avatars/46.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abf62df72deb1b0ad1213b97e1912b224da03043 GIT binary patch literal 3238 zcmex=bkgih|so6e1#{6xc5_urn|+fI(t%ae-q%fDecRQVXI{@waObwU>3V%cH7B<8c>7 zL`E?%Fmf<3Fo>i>*fJn?5`=94VwaZ`lrS(bx`5cp8Hp(j42%&B3=BF&AwkXz42&%d z3=DkfNbDpec1mh-G6Mt44F(2=yySwS5(WmADGUq@jw!{-xeN@9Qy3VS{zXJaDL~v+ z;?2NdC(FRVd>SDZRm{M!W*Gy6xEexCLxO=pG@OB9hcQCza}YQj7{$&Prx_c8&12+o zVqjps_y7NAH3kOuNem2sC;tEcd(r>@e-|?_FyCQdIFOTET2uyB%fP_MWX!;jn^T$$ z(aYpjTow#6Q;UIt;Z0VeR{#S8gA4-$qgZynH%N^H0|S#$RYpiS0|SE;0|TQ` zRfe-40|SE?0|Vm`25*K$hFpeJh9ZVUhCBuZh9Cxa1}6qxh608nhJ1!JhD?S`h8%`W zEaEu~3Jhrs-x!J*6p&3ZSZ(mo;3eE71%vAbZw;;*EHqeR@H(}^-?!{XRy;zssVF`( z`F#Heh5)b|K=y&mg}6e2p@1O~>@o!gXNHFixlkTNR+k|g$?XXD=D^(=0QUpP%ru5S z=x${wF8h&gg>VhXC8_Ox-{2-BF{CmSGh{OqF=R57F{Co&FcdSSGAJ;VfI~$A+23$I z2$z7=gIo>|;d3RsLblf+?7PacBjz&C@fsYyPXXKI%vL&!eLN0`Il#*oiY!jR99 zj1(fyNNiZVDlj0Mkcz?ssR?6nVo+d!*qfsu$&koU0F8rGu#Z9MA_Hm{LrH2y2`K$L z=ND8KWu|A8C>R+S7%Mmy6y&5TIOpdUl$N9xDR|~3>***Y=Hw`V)f6ifr52|am8GWW zf%HQ1Jcz|0?3|dJT9l{&D%t{y^3yVNQo-U70>3Oo4H4x3+YHVO%uGxm#LUdh!pzLV z%E8LY!oteM&d$cc!^OkH&Be{l%O@nj%O}Xk%`G4%ASf&%Dk{puFD@Y_A|WIqDgrWu zk(q^sm4%g)m6cP3mz!6FWbpq0gCGZkH-k4bqaXv5AS1INKnUR4>kXewyp5eulRkr>XE5j~^q!%5#-jdN-_EA@o@7KXr)$RI{%B)AW zJXn3C35e@3EISD#t( zSc~`cM)~#El$U3B?AauLf5z)RE3JD{2}f5fJo~ufz>3%hQ5D4%d|j=Rg{~}7J$G-f zx`ViuHG_U$-N$K9m!CSP_+_fXR8=j_t4WN?v*ne3$K-C@B4)by`&2Kn)kLg#x9<_<2x0B~&#>cEWzFHUQeqK-&(gI%GoD;xdM9bhq2pV9 zSN!2{@;|)d&#O%iyS8ub%rjT}&(J@wKjb5Ski@TbZ(hmGSQC~eyvWV7YTC4>{|tPA zOI9=p+zK)eon$gyG`af2^zH47kIR4jvYhRLV9ST8QXRJ@EeT$7dnzlJmjAA~UncJq z-`n}|%OmSFi@fc!hine@T}#MZprdQkEL(bX%7SJgTbtXH$^_M?9Jk!uy6NT>!}wL4 zl~=cI4_4GU^(?I`NG~KRM^r_QF|^U9a$CNp)STSnZHcAx&BKFM-f-kRY;=q3{+cT# z)@GNJA4N$?O}M(wJZ$S!fhi3hhKD|{+uTxgOygLnO>*q+;NrAcKHZ#ENr|pke+Iwb z;d|xL8m?)Jau_@|1x=LscHeKh@u@h$V^e)Ztrg9kXHQyw<;m2wo!?^rIIKNrlgFVV z0K$%2@}li#Y>Kywy*#-#`e9GD*VHLTr%L6CA34xAeeGKzWA{V13Zu>Zr(G+v(R8}@ zTL1Rk`QD$tdx>uJy1bH$?V5QVbHSW_%4+fL9e`L|5-gNeqa4{kDhOP_FkM@C!+J`uUBVB z)U238_aX~4y}Y~Pi=JdzO)Uy>J*Zy$H+k-~aL=-eT(#@A%4Sbq7ri-e@NVAk#0{ns z76p~v`XjsNbH&Tl>B(}Ib^U1@wY^;que*G6V&VCwSQgDZ{yPktT;Kj@*zJ7F^X0s4 ze-BgC+p1m3@;!ZiW@Vs{b3&w_)vXZyC&EcA z`4ul7+eDXt{m+nf^7NV8$0|KlR(8cH%`S@J&0aiZS<<|PkG-|TJhq>?>DZMs>+GgG zeX|e!EqQv^sZrH1E^o8j8r}V8J-veeuAO#`x39f)d64f`?gj@1*@NAmoa_7kXzY6K z9r?a{wdTrY%{DWqJLvm_X&arj3a{_Xiar(8_DA~G9XHGTqxn6*tEJ+db}kJ}ShhIq z;Fa_3Vt1ohCS<33-w^M^xK2S<6HsAI} zv1!w@NkPqtbeD;~tkU8t^Hu>634)aKhRG7GXrQ^Gm z)!GL<6!P+U9@<{5tkrS1l0G#(I(N(Fj;A+$znUG*S)$+PpZAZSrKnbSwd57W3v2=3 zxwa%VaH>13?PjcFe{k>q8QJ96*ZKMv^+LT)ai%TZ$Ry?E6~vnB?EAj>L-GC@^*%rL zW#>D;WLJAJWtmDJ+muz)8s%<=&M193UC;CTHIWIq)!Zr(3^r~><~Iu#uzX*Muq=V;X82%3D|jrbpEQln6}x z+RiploWqv;>lTr@tFJLdJ#bxfWR|Xb?W2^iiv2T^lsvb1g!O$mGJ$i8<^)eeMd3$W S9+L%oIr{vTiv|EDQ{cwTw*63@n1ILW+itY{G$w>`H|qMvW5}awt1(JSZA; z@q>zSQc)8pmzcPOq?D?fx`w8fiK&^ng{76Vi>sTvho@I?NN8AiL}XNQN@`kqMrKxV zNoiSmMP*fUOKV$uM`zch$y26In?7UatVN5LEM2yI#mZHiHgDOwZTpU$yAB;ba`f2o z6DLnyx_ss8wd*%--g@}x@sp>|p1*kc>f@)+U%r0({^RE_kiQrin8CgR5fG1|`Ad+2 ziIItgg_(sNL#J%?b5^{2>iEK*XAakAUiU|Ny9**sj{oLKU-PNa^ziRVbuRL6 zRy@9PUAD5^_Ui4}Sg%j#jh{Z5@U;K2&pCe6Zy#4j9<6p;|8$X6=7W{awY9$eKfG;% zR6g53RK04RZgY0x&yschu0NJOk``JV(rOx=_imN)jOr!}`;I@^ZLXOzs~*frm)n|j zJ8{CgD9!LW=_`H(hpNg3n@y9Oa&?Y>-Gx7)OMi6TIJ-QiJ@r3BBzNy7_pkAj zzCNO`ZIX6G>FoM1zHVwqirp&mzfa#auO)nKMRNGYk8VBFC+bfvXg|HH!Q9aEPAz{x zb+enY#nP6hsTtdLudcINeDX-@=H|WT%V%y0?eRJ#IcM_3#-6f+i)QIet$VUb|FLWF z@y<=JYyAH+Fs5rC3V-`!&bhTKD>^4WzOZPT|; zS#~F=eB1Q>XSbbSxG2qb z%62t37bT4=Cyvx}@#xhD1{{{3cb0qZq@H#D4u^k*Z~kNW;n@5&db`UD^L&>cVLN^* zudK~_My&()kIC297FW$b{Cnw@Xb)bQI)!aP*Yec`UVVGK+;&;u!T$_=*)O?@!qew{ zX89L#_~g!>Cn+E5mS6bQr(N%NDLC>@a)FfLw7Um;e%Tk;O4NT{btv-X_p;BKzh+Fb zUR@Ltby|LUY2Mv$^IpF_@oing?byukKDq16P8h8;vUd6L<;3GxysUF=W=*+PcK_xk zy~lDzk`8(Gw-{FU7qHqNwo}aK$?jaCQJnVr={@%=Tk7x0tywA!FTftv6nikNf}I?saOb#?|KKw!zX{rp|o-EBDLy z38rU{u-#NW*d(SnN6qf@gaV1@7Ay}K&lS5C#q({I)Z1hH&9YNJ>5+-L%^|noPm0(7 zF}v1f_J(RCse9gb|55UXPja>AV(mv?zb(`$s|w6`v}MMY`{~ZpCud5e+cKQAh)?pZ zoH#*eS%SGy-H)DrK_#-W=I<{%K-o`OlfViYy=B2z$fCFBY{%e0BbcNFmkjdm4Tg9lARs;Y00}--0o= z|C(34zGYL@H+S*NSv}XIO2mp)zlE-S+TO`_bMC&C57wF=5qoqywoUs%7fX0`S}lv+kYS4|7rcg*N6TTemH(~*8AS4*B<=lJrY;>>C&@; z02lsKHk)QJ%ewjb23>uZE?JbbuE01tCbKFi+p2Cc>(TXd6efzuUfd`t$-eR6s_9Zw zW=+{>^086jkkIlb&euOD#?5>*pZmUA)3#sDH*VjJ_tVo$-PWJFcTd=d$Aym@=PtfG zBU$ojWsG44BpazefbKz zEn)Jld(7FkXG^`)H@m4aG4xwy!cOksLw-%FBg4ek z=L-9i@9o{{>Bh61rAX`O*QtHmlQ!OuR{6N{+_m$ksvq>ZrcO@loAfRCs^sOBrx)K? z_~Clcyidn|9r`2xR@$?1%BF^Mt!|f&6dWlz=V|-;LUQb)J^vYeFRl9$8zwzly5mWA z_3WurIVuHr>AA=5-8c2d9pP0sOv1M7=j%CIyzYBd+rPHfmM2zgTUYk1`&WCPYIv1( zUp~Jv%TiTm)xB_)C!I#M8?-#dm3G|LXTKYL|75}UaM#)I>i*<7zwRlH`t@ve@#2iL zvQ50s!6CQ0wOddA`z-(R-nOY8m-|h_Q=gsHJ|uGM$<+T0>w{Z=bg#a3KmPQ?Z!;Hq zSA4%?sjzsC_8aZK0uKB5y6p2gd(=x;y$ZL#xx;KC%aKnqj8oV%&Ig}=+H>{lhv}VL zvsb2ENpz|1?zf73HbIE<_YuY`bGW|vY8`pGtEQ}8G2-N5{f{Zn)$i@eIc?r1H~ZI~ zD@)!!n_j+f&Z}dFUe@0=D$);!{gb&oi&1@kp=Pko-W?L5@rmbms{CdMyQi_fdu`m( ztiGl0W#`;(mnU7>_G!ja*{eI0y0kLQmdz4e;HGu9i^#a0LAmde*gdg literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/48.jpg b/app/assets/images/avatars/48.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3afc22b7a95f62b4feabeaeca535e874d28f443e GIT binary patch literal 3692 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/5.jpg b/app/assets/images/avatars/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa888ce038a0ba14e0427221ab43e19fac314045 GIT binary patch literal 9591 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/53.jpg b/app/assets/images/avatars/53.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fed2bd52bec1cbd8c0f6484bf5cf604b5cb6d7cd GIT binary patch literal 1977 zcmex=Zx{q!N|UoI85kK@7#J9g7#RM)W8ia4$xljU zNIAg3z`*$bHbV;o2O9`*u(5IQaIkam@Nsc)aPbN7^78TW3JCJ>@$&NV2=WUFiwFzx zOGrpbNk}LwDJdzd!vP~F2L~q?CpRZ2Hy<}IH=iIMA0MBfFxUWL2|<2-ettm-F>w(Q z5pgk)b}1=EMFmAgxPJBj2N(o77`z$0nHiNBm;@P_1sVSzVW?wZU}9!uWMqH?RyGD^ z7A8h^WHE@O00Sd4GZQltCnqZ>ScH*@nT0`+RftW|P}ngrv9NKWlF=j)_K6!0It3Le z8;d421vjf~I^1y zm#Vc_Ma=J$o~%}QIb{8%M6=tU7A=|5$-lpJTYGNyw%Z9+wo5LE_0K(WM*sJeZA+^+ zsQzo(HLIliuXmTMbosGar&JCePf0mms+eojv5F(gKg+wzRmjETqUy0MZH>e!TOJAB z&g5_q_vh6VTku=5mZ#*7R{zrW*-A?Fr?g)i)wVM%xHI>_tNkyFl#g9@{+HEWu%_xp zO~*ec(ZADqrB?Xvm>0sNkf&4UaK@{uM~~5ATBq*Hsmd$nW#O%oHU&-Y*bbgAz)o;Pg%CJSGtrQ52m`!^{@@P_9{#f`4UKSExH6$?xhH|7zK zuG}De&5QM_?C+`<5n_)|HMT8HZ~LTT&_4UY?Ul}J`=0D*cp&E+x~O@2y>5NUpDXrK z_N(Ts-}>%PP2lZC+~Q8{70PEL4BLa|7XRqzTmL0s{-S2*W0#dHoSV<^>bk_g+%ND+ z;5^&sfXEsB+#5anHog&=l{jnPoDMIW?pC`?zIyM&)SPFw-Ze;G=e3c4t#M>Z>`|8q zeY2M;Z+B$4)wr+Wz0brWZ*%4xkw5lg=#9Zc;bJTfO&8#;f?1{;jyKdij6Cn1z?C}Qo zx9T3@ryLi(=ic`m~&?^n$V-}TDc?5}jY!Z&NW2Kz*gm*D~- z&wW-@IOT^On|EsdchLnK71V>G!n547{B!e`-2JKKCiC#SO#SIbL*8@#HRb;qc;il* zu&M2lIp@&Dzj|f*iKdJ#-Ctz4+j4C`=~?me#q>R_*I#TpeJ*AKYbPhmpDkx6o;loh zLecRh--H&i8mhrsDw${WbdCl5=Hu2~&Jg7Bq1mf?a*gNhn=5VqU@XSJJdFcMrcbK<5m%RK#kY!YuK$|tHWznD;+8@_+vlf84Q z^AZYPpLn9A_IXO2w~omMwk@S1Q?oAl%{x6W^qqa3tx?V!{on^1=rV zVr%tZUa}Ql5mP84Gk5vU{okYQPuA32dOiJHTv0Z6x3$6Pi+9ALy?Y*a2E5r7Gs!i$ z<;SdJ{)*!A)>3;4PncghZu59y?w&V9{f zyV}3&= zqzX}04~8oB#$~HmdarI=o)>c_XXXim+X4-Oi)^J=O|I6=tiJ5GWkp};eEko1PMtn{ zDsg^$rvR61;xxr2tX8e8ugbkHugH>NPgwqI3di|3IcseG^q$;qbfVR$;NLFmGo=xQ zDZE}D+@5|*xo_<~_9kXZOv~S+#yT^j+oHWPXR^*VI1#|1V!Ha$7q*GThvsPoDDM35 z_};hG(q%PIcKowVtyuYX^TM1Z6Bf1dx<{yee|-0D^v2ol>b6P(rL_3Q=cwVy{B1pFw^VG+t%YvYvT_u z59;x=viWvSSm;5efQsSO*A|O^tgel^B)U3ijqaf@zk?c?(hr}^yyN@)gYe@=JS8vs p4ja17RkaF{Wjylw>XYTYLi@YspT7L6zWdwHPai_RYS{n32>_EpTND5Q literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/54.jpg b/app/assets/images/avatars/54.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6068a2b4d3200019c1d7e3b8c2356b6ef6b8a09c GIT binary patch literal 4064 zcmex=Zx{q!N|UoI85kK@7#J7=7#RM)W8ia4$xljU zNIAg3z`*$bHbV;o6C5xzF)=Z-FoOtI77$=%V+8{?Hgl z%EHRY#>UCZ&B@Kn&&S8d$IlN|1f_T&Jg^WZ@&5pWAO}MLLjW_QAOn*iBeNjm|04_w z7#J8?m>C%v8DM~&m5qawfrX2anTe5siHR8@!@$78%EZjT$i^|bjY&mflNN1Kb~X`J6&GY+Vq#=w zW@2S#VFqah1tqhfq9IG55UZnbV&TMvN*^97H*UOWlw>UO{}uxeGb00&AhRHYJ;UBR z-#i{aY_qt(D0-RJ`bVp_tdy5i$jI|uD(-t`7K7jBxO3m0x$?a8sAHIB8~R)G_tzln zj50Z7-OIa;%UHT?@0MMfkjWKe zAj*DzecRUe_K_PF8(HVeJ^yZYjWh1{4&ILBWBSorf)N#;rY(47_xY>Q7gy;Hu^aQ= z{qEhkyT5DS-RQo@R@+;>we4P{i0R$!@n<$UA6167%JhKDgUl;#|_IxIO6I z(dlanWcITgJ3cFsH!L$c^(aj)XY!id(xMwL76%-=H1U*geOJQK><=OGnO99;sl-=4 z%dbq_km38!H?ZN+y@l~VGFMl(OyBvECGvjJ-u;IaJh!Xac%6Uwt3FgR;m*IT{apOE zVb`^ObvA77Nitq%dod?6AiU;=L+^hEx3i0<{`{B8ks9@%VS31RRnGqmnW}DqJ#J6G z*X_=nx?|ck-%lqC7H}r?Ybuy7_%mTwpPfr~GS5!o1WRj|?mgem>}-9y`TYGjt}Dly zw440fA5Win)y2Eo!^*+$o0z4OC`p*5z zSK7$wjYoBd3{&Q*#Vh_DUO3z8k-YayE6KOHuTrYhZ@+%=uJ_g5+%qxr!|r!EZGh)J-TKJO{9NGd

    \n\n"; } + ); + + text = text.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm, + function (matchFound, m1) { return "

    " + _RunSpanGamut(m1) + "

    \n\n"; } + ); + + // atx-style headers: + // # Header 1 + // ## Header 2 + // ## Header 2 with closing hashes ## + // ... + // ###### Header 6 + // + + /* + text = text.replace(/ + ^(\#{1,6}) // $1 = string of #'s + [ \t]* + (.+?) // $2 = Header text + [ \t]* + \#* // optional closing #'s (not counted) + \n+ + /gm, function() {...}); + */ + + text = text.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm, + function (wholeMatch, m1, m2) { + var h_level = m1.length; + return "" + _RunSpanGamut(m2) + "\n\n"; + } + ); + + return text; + } + + function _DoLists(text) { + // + // Form HTML ordered (numbered) and unordered (bulleted) lists. + // + + // attacklab: add sentinel to hack around khtml/safari bug: + // http://bugs.webkit.org/show_bug.cgi?id=11231 + text += "~0"; + + // Re-usable pattern to match any entirel ul or ol list: + + /* + var whole_list = / + ( // $1 = whole list + ( // $2 + [ ]{0,3} // attacklab: g_tab_width - 1 + ([*+-]|\d+[.]) // $3 = first list item marker + [ \t]+ + ) + [^\r]+? + ( // $4 + ~0 // sentinel for workaround; should be $ + | + \n{2,} + (?=\S) + (?! // Negative lookahead for another list item marker + [ \t]* + (?:[*+-]|\d+[.])[ \t]+ + ) + ) + ) + /g + */ + var whole_list = /^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm; + + if (g_list_level) { + text = text.replace(whole_list, function (wholeMatch, m1, m2) { + var list = m1; + var list_type = (m2.search(/[*+-]/g) > -1) ? "ul" : "ol"; + + var result = _ProcessListItems(list, list_type); + + // Trim any trailing whitespace, to put the closing `` + // up on the preceding line, to get it past the current stupid + // HTML block parser. This is a hack to work around the terrible + // hack that is the HTML block parser. + result = result.replace(/\s+$/, ""); + result = "<" + list_type + ">" + result + "\n"; + return result; + }); + } else { + whole_list = /(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g; + text = text.replace(whole_list, function (wholeMatch, m1, m2, m3) { + var runup = m1; + var list = m2; + + var list_type = (m3.search(/[*+-]/g) > -1) ? "ul" : "ol"; + var result = _ProcessListItems(list, list_type); + result = runup + "<" + list_type + ">\n" + result + "\n"; + return result; + }); + } + + // attacklab: strip sentinel + text = text.replace(/~0/, ""); + + return text; + } + + var _listItemMarkers = { ol: "\\d+[.]", ul: "[*+-]" }; + + function _ProcessListItems(list_str, list_type) { + // + // Process the contents of a single ordered or unordered list, splitting it + // into individual list items. + // + // list_type is either "ul" or "ol". + + // The $g_list_level global keeps track of when we're inside a list. + // Each time we enter a list, we increment it; when we leave a list, + // we decrement. If it's zero, we're not in a list anymore. + // + // We do this because when we're not inside a list, we want to treat + // something like this: + // + // I recommend upgrading to version + // 8. Oops, now this line is treated + // as a sub-list. + // + // As a single paragraph, despite the fact that the second line starts + // with a digit-period-space sequence. + // + // Whereas when we're inside a list (or sub-list), that line will be + // treated as the start of a sub-list. What a kludge, huh? This is + // an aspect of Markdown's syntax that's hard to parse perfectly + // without resorting to mind-reading. Perhaps the solution is to + // change the syntax rules such that sub-lists must start with a + // starting cardinal number; e.g. "1." or "a.". + + g_list_level++; + + // trim trailing blank lines: + list_str = list_str.replace(/\n{2,}$/, "\n"); + + // attacklab: add sentinel to emulate \z + list_str += "~0"; + + // In the original attacklab showdown, list_type was not given to this function, and anything + // that matched /[*+-]|\d+[.]/ would just create the next
  • , causing this mismatch: + // + // Markdown rendered by WMD rendered by MarkdownSharp + // ------------------------------------------------------------------ + // 1. first 1. first 1. first + // 2. second 2. second 2. second + // - third 3. third * third + // + // We changed this to behave identical to MarkdownSharp. This is the constructed RegEx, + // with {MARKER} being one of \d+[.] or [*+-], depending on list_type: + + /* + list_str = list_str.replace(/ + (^[ \t]*) // leading whitespace = $1 + ({MARKER}) [ \t]+ // list marker = $2 + ([^\r]+? // list item text = $3 + (\n+) + ) + (?= + (~0 | \2 ({MARKER}) [ \t]+) + ) + /gm, function(){...}); + */ + + var marker = _listItemMarkers[list_type]; + var re = new RegExp("(^[ \\t]*)(" + marker + ")[ \\t]+([^\\r]+?(\\n+))(?=(~0|\\1(" + marker + ")[ \\t]+))", "gm"); + var last_item_had_a_double_newline = false; + list_str = list_str.replace(re, + function (wholeMatch, m1, m2, m3) { + var item = m3; + var leading_space = m1; + var ends_with_double_newline = /\n\n$/.test(item); + var contains_double_newline = ends_with_double_newline || item.search(/\n{2,}/) > -1; + + if (contains_double_newline || last_item_had_a_double_newline) { + item = _RunBlockGamut(_Outdent(item), /* doNotUnhash = */true); + } + else { + // Recursion for sub-lists: + item = _DoLists(_Outdent(item)); + item = item.replace(/\n$/, ""); // chomp(item) + item = _RunSpanGamut(item); + } + last_item_had_a_double_newline = ends_with_double_newline; + return "
  • " + item + "
  • \n"; + } + ); + + // attacklab: strip sentinel + list_str = list_str.replace(/~0/g, ""); + + g_list_level--; + return list_str; + } + + function _DoCodeBlocks(text) { + // + // Process Markdown `
    ` blocks.
    +            //  
    +
    +            /*
    +            text = text.replace(/
    +                (?:\n\n|^)
    +                (                               // $1 = the code block -- one or more lines, starting with a space/tab
    +                    (?:
    +                        (?:[ ]{4}|\t)           // Lines must start with a tab or a tab-width of spaces - attacklab: g_tab_width
    +                        .*\n+
    +                    )+
    +                )
    +                (\n*[ ]{0,3}[^ \t\n]|(?=~0))    // attacklab: g_tab_width
    +            /g ,function(){...});
    +            */
    +
    +            // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
    +            text += "~0";
    +
    +            text = text.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,
    +                function (wholeMatch, m1, m2) {
    +                    var codeblock = m1;
    +                    var nextChar = m2;
    +
    +                    codeblock = _EncodeCode(_Outdent(codeblock));
    +                    codeblock = _Detab(codeblock);
    +                    codeblock = codeblock.replace(/^\n+/g, ""); // trim leading newlines
    +                    codeblock = codeblock.replace(/\n+$/g, ""); // trim trailing whitespace
    +
    +                    codeblock = "
    " + codeblock + "\n
    "; + + return "\n\n" + codeblock + "\n\n" + nextChar; + } + ); + + // attacklab: strip sentinel + text = text.replace(/~0/, ""); + + return text; + } + + function hashBlock(text) { + text = text.replace(/(^\n+|\n+$)/g, ""); + return "\n\n~K" + (g_html_blocks.push(text) - 1) + "K\n\n"; + } + + function _DoCodeSpans(text) { + // + // * Backtick quotes are used for spans. + // + // * You can use multiple backticks as the delimiters if you want to + // include literal backticks in the code span. So, this input: + // + // Just type ``foo `bar` baz`` at the prompt. + // + // Will translate to: + // + //

    Just type foo `bar` baz at the prompt.

    + // + // There's no arbitrary limit to the number of backticks you + // can use as delimters. If you need three consecutive backticks + // in your code, use four for delimiters, etc. + // + // * You can use spaces to get literal backticks at the edges: + // + // ... type `` `bar` `` ... + // + // Turns to: + // + // ... type `bar` ... + // + + /* + text = text.replace(/ + (^|[^\\]) // Character before opening ` can't be a backslash + (`+) // $2 = Opening run of ` + ( // $3 = The code block + [^\r]*? + [^`] // attacklab: work around lack of lookbehind + ) + \2 // Matching closer + (?!`) + /gm, function(){...}); + */ + + text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm, + function (wholeMatch, m1, m2, m3, m4) { + var c = m3; + c = c.replace(/^([ \t]*)/g, ""); // leading whitespace + c = c.replace(/[ \t]*$/g, ""); // trailing whitespace + c = _EncodeCode(c); + c = c.replace(/:\/\//g, "~P"); // to prevent auto-linking. Not necessary in code *blocks*, but in code spans. Will be converted back after the auto-linker runs. + return m1 + "" + c + ""; + } + ); + + return text; + } + + function _EncodeCode(text) { + // + // Encode/escape certain characters inside Markdown code runs. + // The point is that in code, these characters are literals, + // and lose their special Markdown meanings. + // + // Encode all ampersands; HTML entities are not + // entities within a Markdown code span. + text = text.replace(/&/g, "&"); + + // Do the angle bracket song and dance: + text = text.replace(//g, ">"); + + // Now, escape characters that are magic in Markdown: + text = escapeCharacters(text, "\*_{}[]\\", false); + + // jj the line above breaks this: + //--- + + //* Item + + // 1. Subitem + + // special char: * + //--- + + return text; + } + + function _DoItalicsAndBold(text) { + + // must go first: + text = text.replace(/([\W_]|^)(\*\*|__)(?=\S)([^\r]*?\S[\*_]*)\2([\W_]|$)/g, + "$1$3$4"); + + text = text.replace(/([\W_]|^)(\*|_)(?=\S)([^\r\*_]*?\S)\2([\W_]|$)/g, + "$1$3$4"); + + return text; + } + + function _DoBlockQuotes(text) { + + /* + text = text.replace(/ + ( // Wrap whole match in $1 + ( + ^[ \t]*>[ \t]? // '>' at the start of a line + .+\n // rest of the first line + (.+\n)* // subsequent consecutive lines + \n* // blanks + )+ + ) + /gm, function(){...}); + */ + + text = text.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm, + function (wholeMatch, m1) { + var bq = m1; + + // attacklab: hack around Konqueror 3.5.4 bug: + // "----------bug".replace(/^-/g,"") == "bug" + + bq = bq.replace(/^[ \t]*>[ \t]?/gm, "~0"); // trim one level of quoting + + // attacklab: clean up hack + bq = bq.replace(/~0/g, ""); + + bq = bq.replace(/^[ \t]+$/gm, ""); // trim whitespace-only lines + bq = _RunBlockGamut(bq); // recurse + + bq = bq.replace(/(^|\n)/g, "$1 "); + // These leading spaces screw with
     content, so we need to fix that:
    +                    bq = bq.replace(
    +                            /(\s*
    [^\r]+?<\/pre>)/gm,
    +                        function (wholeMatch, m1) {
    +                            var pre = m1;
    +                            // attacklab: hack around Konqueror 3.5.4 bug:
    +                            pre = pre.replace(/^  /mg, "~0");
    +                            pre = pre.replace(/~0/g, "");
    +                            return pre;
    +                        });
    +
    +                    return hashBlock("
    \n" + bq + "\n
    "); + } + ); + return text; + } + + function _FormParagraphs(text, doNotUnhash) { + // + // Params: + // $text - string to process with html

    tags + // + + // Strip leading and trailing lines: + text = text.replace(/^\n+/g, ""); + text = text.replace(/\n+$/g, ""); + + var grafs = text.split(/\n{2,}/g); + var grafsOut = []; + + var markerRe = /~K(\d+)K/; + + // + // Wrap

    tags. + // + var end = grafs.length; + for (var i = 0; i < end; i++) { + var str = grafs[i]; + + // if this is an HTML marker, copy it + if (markerRe.test(str)) { + grafsOut.push(str); + } + else if (/\S/.test(str)) { + str = _RunSpanGamut(str); + str = str.replace(/^([ \t]*)/g, "

    "); + str += "

    " + grafsOut.push(str); + } + + } + // + // Unhashify HTML blocks + // + if (!doNotUnhash) { + end = grafsOut.length; + for (var i = 0; i < end; i++) { + var foundAny = true; + while (foundAny) { // we may need several runs, since the data may be nested + foundAny = false; + grafsOut[i] = grafsOut[i].replace(/~K(\d+)K/g, function (wholeMatch, id) { + foundAny = true; + return g_html_blocks[id]; + }); + } + } + } + return grafsOut.join("\n\n"); + } + + function _EncodeAmpsAndAngles(text) { + // Smart processing for ampersands and angle brackets that need to be encoded. + + // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin: + // http://bumppo.net/projects/amputator/ + text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, "&"); + + // Encode naked <'s + text = text.replace(/<(?![a-z\/?\$!])/gi, "<"); + + return text; + } + + function _EncodeBackslashEscapes(text) { + // + // Parameter: String. + // Returns: The string, with after processing the following backslash + // escape sequences. + // + + // attacklab: The polite way to do this is with the new + // escapeCharacters() function: + // + // text = escapeCharacters(text,"\\",true); + // text = escapeCharacters(text,"`*_{}[]()>#+-.!",true); + // + // ...but we're sidestepping its use of the (slow) RegExp constructor + // as an optimization for Firefox. This function gets called a LOT. + + text = text.replace(/\\(\\)/g, escapeCharacters_callback); + text = text.replace(/\\([`*_{}\[\]()>#+-.!])/g, escapeCharacters_callback); + return text; + } + + function _DoAutoLinks(text) { + + // note that at this point, all other URL in the text are already hyperlinked as
    + // *except* for the case + + // automatically add < and > around unadorned raw hyperlinks + // must be preceded by space/BOF and followed by non-word/EOF character + text = text.replace(/(^|\s)(https?|ftp)(:\/\/[-A-Z0-9+&@#\/%?=~_|\[\]\(\)!:,\.;]*[-A-Z0-9+&@#\/%=~_|\[\]\)])($|\W)/gi, "$1<$2$3>$4"); + + // autolink anything like + + var replacer = function (wholematch, m1) { + m1encoded = m1.replace(/\_\_/, '%5F%5F'); + return "" + pluginHooks.plainLinkText(m1) + ""; + } + text = text.replace(/<((https?|ftp):[^'">\s]+)>/gi, replacer); + + return text; + } + + function _UnescapeSpecialChars(text) { + // + // Swap back in all the special characters we've hidden. + // + text = text.replace(/~E(\d+)E/g, + function (wholeMatch, m1) { + var charCodeToReplace = parseInt(m1); + return String.fromCharCode(charCodeToReplace); + } + ); + return text; + } + + function _Outdent(text) { + // + // Remove one level of line-leading tabs or spaces + // + + // attacklab: hack around Konqueror 3.5.4 bug: + // "----------bug".replace(/^-/g,"") == "bug" + + text = text.replace(/^(\t|[ ]{1,4})/gm, "~0"); // attacklab: g_tab_width + + // attacklab: clean up hack + text = text.replace(/~0/g, "") + + return text; + } + + function _Detab(text) { + if (!/\t/.test(text)) + return text; + + var spaces = [" ", " ", " ", " "], + skew = 0, + v; + + return text.replace(/[\n\t]/g, function (match, offset) { + if (match === "\n") { + skew = offset + 1; + return match; + } + v = (offset - skew) % 4; + skew = offset + 1; + return spaces[v]; + }); + } + + // + // attacklab: Utility functions + // + + var _problemUrlChars = /(?:["'*()[\]:]|~D)/g; + + // hex-encodes some unusual "problem" chars in URLs to avoid URL detection problems + function encodeProblemUrlChars(url) { + if (!url) + return ""; + + var len = url.length; + + return url.replace(_problemUrlChars, function (match, offset) { + if (match == "~D") // escape for dollar + return "%24"; + if (match == ":") { + if (offset == len - 1 || /[0-9\/]/.test(url.charAt(offset + 1))) + return ":" + } + return "%" + match.charCodeAt(0).toString(16); + }); + } + + + function escapeCharacters(text, charsToEscape, afterBackslash) { + // First we have to escape the escape characters so that + // we can build a character class out of them + var regexString = "([" + charsToEscape.replace(/([\[\]\\])/g, "\\$1") + "])"; + + if (afterBackslash) { + regexString = "\\\\" + regexString; + } + + var regex = new RegExp(regexString, "g"); + text = text.replace(regex, escapeCharacters_callback); + + return text; + } + + + function escapeCharacters_callback(wholeMatch, m1) { + var charCodeToEscape = m1.charCodeAt(0); + return "~E" + charCodeToEscape + "E"; + } + + }; // end of the Markdown.Converter constructor + +})(); diff --git a/app/assets/javascripts/external/Markdown.Editor.js b/app/assets/javascripts/external/Markdown.Editor.js new file mode 100644 index 00000000000..80aa78fc246 --- /dev/null +++ b/app/assets/javascripts/external/Markdown.Editor.js @@ -0,0 +1,2213 @@ +// needs Markdown.Converter.js at the moment + + +// To insert extra buttons: +// +// Before this file is required, define a PagedownCustom object. Give it an attribtue of insertButtons, which is an array +// of the buttons you want to insert. For example: +// +// window.PagedownCustom = { +// insertButtons: [ +// { +// id: 'wmd-bark', +// description: 'Bark', +// execute: function() { +// return alert('woof!'); +// } +// } +// ] +// }; +// + +(function () { + + var util = {}, + position = {}, + ui = {}, + doc = window.document, + re = window.RegExp, + nav = window.navigator, + SETTINGS = { lineLength: 72 }, + + // Used to work around some browser bugs where we can't use feature testing. + uaSniffed = { + isIE: /msie/.test(nav.userAgent.toLowerCase()), + isIE_5or6: /msie 6/.test(nav.userAgent.toLowerCase()) || /msie 5/.test(nav.userAgent.toLowerCase()), + isOpera: /opera/.test(nav.userAgent.toLowerCase()) + }; + + + // ------------------------------------------------------------------- + // YOUR CHANGES GO HERE + // + // I've tried to localize the things you are likely to change to + // this area. + // ------------------------------------------------------------------- + + // The text that appears on the upper part of the dialog box when + // entering links. + var linkDialogText = "

    Insert Hyperlink

    http://example.com/ \"optional title\"

    "; + var imageDialogText = "

    Insert Image

    http://example.com/images/diagram.jpg \"optional title\"

    Need free image hosting?

    "; + + // The default text that appears in the dialog input box when entering + // links. + var imageDefaultText = "http://"; + var linkDefaultText = "http://"; + + var defaultHelpHoverTitle = "Markdown Editing Help"; + + // ------------------------------------------------------------------- + // END OF YOUR CHANGES + // ------------------------------------------------------------------- + + // help, if given, should have a property "handler", the click handler for the help button, + // and can have an optional property "title" for the button's tooltip (defaults to "Markdown Editing Help"). + // If help isn't given, not help button is created. + // + // The constructed editor object has the methods: + // - getConverter() returns the markdown converter object that was passed to the constructor + // - run() actually starts the editor; should be called after all necessary plugins are registered. Calling this more than once is a no-op. + // - refreshPreview() forces the preview to be updated. This method is only available after run() was called. + Markdown.Editor = function (markdownConverter, idPostfix, help) { + + idPostfix = idPostfix || ""; + + var hooks = this.hooks = new Markdown.HookCollection(); + hooks.addNoop("onPreviewRefresh"); // called with no arguments after the preview has been refreshed + hooks.addNoop("postBlockquoteCreation"); // called with the user's selection *after* the blockquote was created; should return the actual to-be-inserted text + hooks.addFalse("insertImageDialog"); /* called with one parameter: a callback to be called with the URL of the image. If the application creates + * its own image insertion dialog, this hook should return true, and the callback should be called with the chosen + * image url (or null if the user cancelled). If this hook returns false, the default dialog will be used. + */ + + this.getConverter = function () { return markdownConverter; } + + var that = this, + panels; + + this.run = function () { + if (panels) + return; // already initialized + + panels = new PanelCollection(idPostfix); + var commandManager = new CommandManager(hooks); + var previewManager = new PreviewManager(markdownConverter, panels, function () { hooks.onPreviewRefresh(); }); + var undoManager, uiManager; + + if (!/\?noundo/.test(doc.location.href)) { + undoManager = new UndoManager(function () { + previewManager.refresh(); + if (uiManager) // not available on the first call + uiManager.setUndoRedoButtonStates(); + }, panels); + this.textOperation = function (f) { + undoManager.setCommandMode(); + f(); + that.refreshPreview(); + } + } + + uiManager = new UIManager(idPostfix, panels, undoManager, previewManager, commandManager, help); + uiManager.setUndoRedoButtonStates(); + + var forceRefresh = that.refreshPreview = function () { previewManager.refresh(true); }; + + forceRefresh(); + }; + + } + + // before: contains all the text in the input box BEFORE the selection. + // after: contains all the text in the input box AFTER the selection. + function Chunks() { } + + // startRegex: a regular expression to find the start tag + // endRegex: a regular expresssion to find the end tag + Chunks.prototype.findTags = function (startRegex, endRegex) { + + var chunkObj = this; + var regex; + + if (startRegex) { + + regex = util.extendRegExp(startRegex, "", "$"); + + this.before = this.before.replace(regex, + function (match) { + chunkObj.startTag = chunkObj.startTag + match; + return ""; + }); + + regex = util.extendRegExp(startRegex, "^", ""); + + this.selection = this.selection.replace(regex, + function (match) { + chunkObj.startTag = chunkObj.startTag + match; + return ""; + }); + } + + if (endRegex) { + + regex = util.extendRegExp(endRegex, "", "$"); + + this.selection = this.selection.replace(regex, + function (match) { + chunkObj.endTag = match + chunkObj.endTag; + return ""; + }); + + regex = util.extendRegExp(endRegex, "^", ""); + + this.after = this.after.replace(regex, + function (match) { + chunkObj.endTag = match + chunkObj.endTag; + return ""; + }); + } + }; + + // If remove is false, the whitespace is transferred + // to the before/after regions. + // + // If remove is true, the whitespace disappears. + Chunks.prototype.trimWhitespace = function (remove) { + var beforeReplacer, afterReplacer, that = this; + if (remove) { + beforeReplacer = afterReplacer = ""; + } else { + beforeReplacer = function (s) { that.before += s; return ""; } + afterReplacer = function (s) { that.after = s + that.after; return ""; } + } + + this.selection = this.selection.replace(/^(\s*)/, beforeReplacer).replace(/(\s*)$/, afterReplacer); + }; + + + Chunks.prototype.skipLines = function (nLinesBefore, nLinesAfter, findExtraNewlines) { + + if (nLinesBefore === undefined) { + nLinesBefore = 1; + } + + if (nLinesAfter === undefined) { + nLinesAfter = 1; + } + + nLinesBefore++; + nLinesAfter++; + + var regexText; + var replacementText; + + // chrome bug ... documented at: http://meta.stackoverflow.com/questions/63307/blockquote-glitch-in-editor-in-chrome-6-and-7/65985#65985 + if (navigator.userAgent.match(/Chrome/)) { + "X".match(/()./); + } + + this.selection = this.selection.replace(/(^\n*)/, ""); + + this.startTag = this.startTag + re.$1; + + this.selection = this.selection.replace(/(\n*$)/, ""); + this.endTag = this.endTag + re.$1; + this.startTag = this.startTag.replace(/(^\n*)/, ""); + this.before = this.before + re.$1; + this.endTag = this.endTag.replace(/(\n*$)/, ""); + this.after = this.after + re.$1; + + if (this.before) { + + regexText = replacementText = ""; + + while (nLinesBefore--) { + regexText += "\\n?"; + replacementText += "\n"; + } + + if (findExtraNewlines) { + regexText = "\\n*"; + } + this.before = this.before.replace(new re(regexText + "$", ""), replacementText); + } + + if (this.after) { + + regexText = replacementText = ""; + + while (nLinesAfter--) { + regexText += "\\n?"; + replacementText += "\n"; + } + if (findExtraNewlines) { + regexText = "\\n*"; + } + + this.after = this.after.replace(new re(regexText, ""), replacementText); + } + }; + + // end of Chunks + + // A collection of the important regions on the page. + // Cached so we don't have to keep traversing the DOM. + // Also holds ieCachedRange and ieCachedScrollTop, where necessary; working around + // this issue: + // Internet explorer has problems with CSS sprite buttons that use HTML + // lists. When you click on the background image "button", IE will + // select the non-existent link text and discard the selection in the + // textarea. The solution to this is to cache the textarea selection + // on the button's mousedown event and set a flag. In the part of the + // code where we need to grab the selection, we check for the flag + // and, if it's set, use the cached area instead of querying the + // textarea. + // + // This ONLY affects Internet Explorer (tested on versions 6, 7 + // and 8) and ONLY on button clicks. Keyboard shortcuts work + // normally since the focus never leaves the textarea. + function PanelCollection(postfix) { + this.buttonBar = doc.getElementById("wmd-button-bar" + postfix); + this.preview = doc.getElementById("wmd-preview" + postfix); + this.input = doc.getElementById("wmd-input" + postfix); + }; + + // Returns true if the DOM element is visible, false if it's hidden. + // Checks if display is anything other than none. + util.isVisible = function (elem) { + + if (window.getComputedStyle) { + // Most browsers + return window.getComputedStyle(elem, null).getPropertyValue("display") !== "none"; + } + else if (elem.currentStyle) { + // IE + return elem.currentStyle["display"] !== "none"; + } + }; + + + // Adds a listener callback to a DOM element which is fired on a specified + // event. + util.addEvent = function (elem, event, listener) { + if (elem.attachEvent) { + // IE only. The "on" is mandatory. + elem.attachEvent("on" + event, listener); + } + else { + // Other browsers. + elem.addEventListener(event, listener, false); + } + }; + + + // Removes a listener callback from a DOM element which is fired on a specified + // event. + util.removeEvent = function (elem, event, listener) { + if (elem.detachEvent) { + // IE only. The "on" is mandatory. + elem.detachEvent("on" + event, listener); + } + else { + // Other browsers. + elem.removeEventListener(event, listener, false); + } + }; + + // Converts \r\n and \r to \n. + util.fixEolChars = function (text) { + text = text.replace(/\r\n/g, "\n"); + text = text.replace(/\r/g, "\n"); + return text; + }; + + // Extends a regular expression. Returns a new RegExp + // using pre + regex + post as the expression. + // Used in a few functions where we have a base + // expression and we want to pre- or append some + // conditions to it (e.g. adding "$" to the end). + // The flags are unchanged. + // + // regex is a RegExp, pre and post are strings. + util.extendRegExp = function (regex, pre, post) { + + if (pre === null || pre === undefined) { + pre = ""; + } + if (post === null || post === undefined) { + post = ""; + } + + var pattern = regex.toString(); + var flags; + + // Replace the flags with empty space and store them. + pattern = pattern.replace(/\/([gim]*)$/, function (wholeMatch, flagsPart) { + flags = flagsPart; + return ""; + }); + + // Remove the slash delimiters on the regular expression. + pattern = pattern.replace(/(^\/|\/$)/g, ""); + pattern = pre + pattern + post; + + return new re(pattern, flags); + } + + // UNFINISHED + // The assignment in the while loop makes jslint cranky. + // I'll change it to a better loop later. + position.getTop = function (elem, isInner) { + var result = elem.offsetTop; + if (!isInner) { + while (elem = elem.offsetParent) { + result += elem.offsetTop; + } + } + return result; + }; + + position.getHeight = function (elem) { + return elem.offsetHeight || elem.scrollHeight; + }; + + position.getWidth = function (elem) { + return elem.offsetWidth || elem.scrollWidth; + }; + + position.getPageSize = function () { + + var scrollWidth, scrollHeight; + var innerWidth, innerHeight; + + // It's not very clear which blocks work with which browsers. + if (self.innerHeight && self.scrollMaxY) { + scrollWidth = doc.body.scrollWidth; + scrollHeight = self.innerHeight + self.scrollMaxY; + } + else if (doc.body.scrollHeight > doc.body.offsetHeight) { + scrollWidth = doc.body.scrollWidth; + scrollHeight = doc.body.scrollHeight; + } + else { + scrollWidth = doc.body.offsetWidth; + scrollHeight = doc.body.offsetHeight; + } + + if (self.innerHeight) { + // Non-IE browser + innerWidth = self.innerWidth; + innerHeight = self.innerHeight; + } + else if (doc.documentElement && doc.documentElement.clientHeight) { + // Some versions of IE (IE 6 w/ a DOCTYPE declaration) + innerWidth = doc.documentElement.clientWidth; + innerHeight = doc.documentElement.clientHeight; + } + else if (doc.body) { + // Other versions of IE + innerWidth = doc.body.clientWidth; + innerHeight = doc.body.clientHeight; + } + + var maxWidth = Math.max(scrollWidth, innerWidth); + var maxHeight = Math.max(scrollHeight, innerHeight); + return [maxWidth, maxHeight, innerWidth, innerHeight]; + }; + + // Handles pushing and popping TextareaStates for undo/redo commands. + // I should rename the stack variables to list. + function UndoManager(callback, panels) { + + var undoObj = this; + var undoStack = []; // A stack of undo states + var stackPtr = 0; // The index of the current state + var mode = "none"; + var lastState; // The last state + var timer; // The setTimeout handle for cancelling the timer + var inputStateObj; + + // Set the mode for later logic steps. + var setMode = function (newMode, noSave) { + if (mode != newMode) { + mode = newMode; + if (!noSave) { + saveState(); + } + } + + if (!uaSniffed.isIE || mode != "moving") { + timer = setTimeout(refreshState, 1); + } + else { + inputStateObj = null; + } + }; + + var refreshState = function (isInitialState) { + inputStateObj = new TextareaState(panels, isInitialState); + timer = undefined; + }; + + this.setCommandMode = function () { + mode = "command"; + saveState(); + timer = setTimeout(refreshState, 0); + }; + + this.canUndo = function () { + return stackPtr > 1; + }; + + this.canRedo = function () { + if (undoStack[stackPtr + 1]) { + return true; + } + return false; + }; + + // Removes the last state and restores it. + this.undo = function () { + + if (undoObj.canUndo()) { + if (lastState) { + // What about setting state -1 to null or checking for undefined? + lastState.restore(); + lastState = null; + } + else { + undoStack[stackPtr] = new TextareaState(panels); + undoStack[--stackPtr].restore(); + + if (callback) { + callback(); + } + } + } + + mode = "none"; + panels.input.focus(); + refreshState(); + }; + + // Redo an action. + this.redo = function () { + + if (undoObj.canRedo()) { + + undoStack[++stackPtr].restore(); + + if (callback) { + callback(); + } + } + + mode = "none"; + panels.input.focus(); + refreshState(); + }; + + // Push the input area state to the stack. + var saveState = function () { + var currState = inputStateObj || new TextareaState(panels); + + if (!currState) { + return false; + } + if (mode == "moving") { + if (!lastState) { + lastState = currState; + } + return; + } + if (lastState) { + if (undoStack[stackPtr - 1].text != lastState.text) { + undoStack[stackPtr++] = lastState; + } + lastState = null; + } + undoStack[stackPtr++] = currState; + undoStack[stackPtr + 1] = null; + if (callback) { + callback(); + } + }; + + var handleCtrlYZ = function (event) { + + var handled = false; + + if (event.ctrlKey || event.metaKey) { + + // IE and Opera do not support charCode. + var keyCode = event.charCode || event.keyCode; + var keyCodeChar = String.fromCharCode(keyCode); + + switch (keyCodeChar) { + + case "y": + case "Y": + if (!event.shiftKey) { + undoObj.redo(); + handled = true; + } + break; + + case "Z": + case "z": + if (!event.shiftKey) { + undoObj.undo(); + } + else { + undoObj.redo(); + } + handled = true; + break; + } + } + + if (handled) { + if (event.preventDefault) { + event.preventDefault(); + } + if (window.event) { + window.event.returnValue = false; + } + return; + } + }; + + // Set the mode depending on what is going on in the input area. + var handleModeChange = function (event) { + + if (!event.ctrlKey && !event.metaKey) { + + var keyCode = event.keyCode; + + if ((keyCode >= 33 && keyCode <= 40) || (keyCode >= 63232 && keyCode <= 63235)) { + // 33 - 40: page up/dn and arrow keys + // 63232 - 63235: page up/dn and arrow keys on safari + setMode("moving"); + } + else if (keyCode == 8 || keyCode == 46 || keyCode == 127) { + // 8: backspace + // 46: delete + // 127: delete + setMode("deleting"); + } + else if (keyCode == 13) { + // 13: Enter + setMode("newlines"); + } + else if (keyCode == 27) { + // 27: escape + setMode("escape"); + } + else if ((keyCode < 16 || keyCode > 20) && keyCode != 91) { + // 16-20 are shift, etc. + // 91: left window key + // I think this might be a little messed up since there are + // a lot of nonprinting keys above 20. + setMode("typing"); + } + } + }; + + var setEventHandlers = function () { + util.addEvent(panels.input, "keypress", function (event) { + // keyCode 89: y + // keyCode 90: z + if ((event.ctrlKey || event.metaKey) && (event.keyCode == 89 || event.keyCode == 90)) { + event.preventDefault(); + } + }); + + var handlePaste = function () { + if (uaSniffed.isIE || (inputStateObj && inputStateObj.text != panels.input.value)) { + if (timer == undefined) { + mode = "paste"; + saveState(); + refreshState(); + } + } + }; + + util.addEvent(panels.input, "keydown", handleCtrlYZ); + util.addEvent(panels.input, "keydown", handleModeChange); + util.addEvent(panels.input, "mousedown", function () { + setMode("moving"); + }); + + panels.input.onpaste = handlePaste; + panels.input.ondrop = handlePaste; + }; + + var init = function () { + setEventHandlers(); + refreshState(true); + saveState(); + }; + + init(); + } + + // end of UndoManager + + // The input textarea state/contents. + // This is used to implement undo/redo by the undo manager. + function TextareaState(panels, isInitialState) { + + // Aliases + var stateObj = this; + var inputArea = panels.input; + this.init = function () { + if (!util.isVisible(inputArea)) { + return; + } + if (!isInitialState && doc.activeElement && doc.activeElement !== inputArea) { // this happens when tabbing out of the input box + return; + } + + this.setInputAreaSelectionStartEnd(); + this.scrollTop = inputArea.scrollTop; + if (!this.text && inputArea.selectionStart || inputArea.selectionStart === 0) { + this.text = inputArea.value; + } + + } + + // Sets the selected text in the input box after we've performed an + // operation. + this.setInputAreaSelection = function () { + + if (!util.isVisible(inputArea)) { + return; + } + + if (inputArea.selectionStart !== undefined && !uaSniffed.isOpera) { + + inputArea.focus(); + inputArea.selectionStart = stateObj.start; + inputArea.selectionEnd = stateObj.end; + inputArea.scrollTop = stateObj.scrollTop; + } + else if (doc.selection) { + + if (doc.activeElement && doc.activeElement !== inputArea) { + return; + } + + inputArea.focus(); + var range = inputArea.createTextRange(); + range.moveStart("character", -inputArea.value.length); + range.moveEnd("character", -inputArea.value.length); + range.moveEnd("character", stateObj.end); + range.moveStart("character", stateObj.start); + range.select(); + } + }; + + this.setInputAreaSelectionStartEnd = function () { + + if (!panels.ieCachedRange && (inputArea.selectionStart || inputArea.selectionStart === 0)) { + + stateObj.start = inputArea.selectionStart; + stateObj.end = inputArea.selectionEnd; + } + else if (doc.selection) { + + stateObj.text = util.fixEolChars(inputArea.value); + + // IE loses the selection in the textarea when buttons are + // clicked. On IE we cache the selection. Here, if something is cached, + // we take it. + var range = panels.ieCachedRange || doc.selection.createRange(); + + var fixedRange = util.fixEolChars(range.text); + var marker = "\x07"; + var markedRange = marker + fixedRange + marker; + range.text = markedRange; + var inputText = util.fixEolChars(inputArea.value); + + range.moveStart("character", -markedRange.length); + range.text = fixedRange; + + stateObj.start = inputText.indexOf(marker); + stateObj.end = inputText.lastIndexOf(marker) - marker.length; + + var len = stateObj.text.length - util.fixEolChars(inputArea.value).length; + + if (len) { + range.moveStart("character", -fixedRange.length); + while (len--) { + fixedRange += "\n"; + stateObj.end += 1; + } + range.text = fixedRange; + } + + if (panels.ieCachedRange) + stateObj.scrollTop = panels.ieCachedScrollTop; // this is set alongside with ieCachedRange + + panels.ieCachedRange = null; + + this.setInputAreaSelection(); + } + }; + + // Restore this state into the input area. + this.restore = function () { + + if (stateObj.text != undefined && stateObj.text != inputArea.value) { + inputArea.value = stateObj.text; + } + this.setInputAreaSelection(); + inputArea.scrollTop = stateObj.scrollTop; + }; + + // Gets a collection of HTML chunks from the inptut textarea. + this.getChunks = function () { + + var chunk = new Chunks(); + chunk.before = util.fixEolChars(stateObj.text.substring(0, stateObj.start)); + chunk.startTag = ""; + chunk.selection = util.fixEolChars(stateObj.text.substring(stateObj.start, stateObj.end)); + chunk.endTag = ""; + chunk.after = util.fixEolChars(stateObj.text.substring(stateObj.end)); + chunk.scrollTop = stateObj.scrollTop; + + return chunk; + }; + + // Sets the TextareaState properties given a chunk of markdown. + this.setChunks = function (chunk) { + + chunk.before = chunk.before + chunk.startTag; + chunk.after = chunk.endTag + chunk.after; + + this.start = chunk.before.length; + this.end = chunk.before.length + chunk.selection.length; + this.text = chunk.before + chunk.selection + chunk.after; + this.scrollTop = chunk.scrollTop; + }; + this.init(); + }; + + function PreviewManager(converter, panels, previewRefreshCallback) { + + var managerObj = this; + var timeout; + var elapsedTime; + var oldInputText; + var maxDelay = 3000; + var startType = "delayed"; // The other legal value is "manual" + + // Adds event listeners to elements + var setupEvents = function (inputElem, listener) { + + util.addEvent(inputElem, "input", listener); + inputElem.onpaste = listener; + inputElem.ondrop = listener; + + util.addEvent(inputElem, "keypress", listener); + util.addEvent(inputElem, "keydown", listener); + }; + + var getDocScrollTop = function () { + + var result = 0; + + if (window.innerHeight) { + result = window.pageYOffset; + } + else + if (doc.documentElement && doc.documentElement.scrollTop) { + result = doc.documentElement.scrollTop; + } + else + if (doc.body) { + result = doc.body.scrollTop; + } + + return result; + }; + + var makePreviewHtml = function () { + + // If there is no registered preview panel + // there is nothing to do. + if (!panels.preview) + return; + + + var text = panels.input.value; + if (text && text == oldInputText) { + return; // Input text hasn't changed. + } + else { + oldInputText = text; + } + + var prevTime = new Date().getTime(); + + text = converter.makeHtml(text); + + // Calculate the processing time of the HTML creation. + // It's used as the delay time in the event listener. + var currTime = new Date().getTime(); + elapsedTime = currTime - prevTime; + + pushPreviewHtml(text); + }; + + // makePreviewHtml = window.probes.measure(makePreviewHtml, { + // before: function(){ window.probes.clear(); }, + // name: "makePreview", + // after: function(p) { window.probes.clear(); console.log("Total time to preview: " + p.time); } + // }); + + + // TODO allow us to inject this in (its our debouncer) + var debounce = function(func,wait,trickle) { + var timeout = null; + return function(){ + var context = this; + var args = arguments; + + later = function(){ + timeout = null; + func.apply(context, args); + }; + + if (timeout!=null && trickle) { + return; + } + + var currentWait; + if (typeof wait == "function") { + currentWait = wait(); + } else { + currentWait = wait; + } + + //console.log(currentWait); + if (timeout) { clearTimeout(timeout); } + timeout = setTimeout(later, currentWait); + } + } + + makePreviewHtml = debounce(makePreviewHtml, function(){ + return Math.min(Math.max((elapsedTime || 1) * 10, 80),1000); + }, true); + + + // setTimeout is already used. Used as an event listener. + var applyTimeout = function () { + + if (timeout) { + clearTimeout(timeout); + timeout = undefined; + } + + if (startType !== "manual") { + + var delay = 0; + + if (startType === "delayed") { + delay = elapsedTime; + } + + if (delay > maxDelay) { + delay = maxDelay; + } + timeout = setTimeout(makePreviewHtml, delay); + } + }; + + var getScaleFactor = function (panel) { + if (panel.scrollHeight <= panel.clientHeight) { + return 1; + } + return panel.scrollTop / (panel.scrollHeight - panel.clientHeight); + }; + + var setPanelScrollTops = function () { + if (panels.preview) { + panels.preview.scrollTop = (panels.preview.scrollHeight - panels.preview.clientHeight) * getScaleFactor(panels.preview); + } + }; + + this.refresh = function (requiresRefresh) { + if (requiresRefresh) { + oldInputText = ""; + makePreviewHtml(); + } + else { + applyTimeout(); + } + }; + + this.processingTime = function () { + return elapsedTime; + }; + + var isFirstTimeFilled = true; + + // IE doesn't let you use innerHTML if the element is contained somewhere in a table + // (which is the case for inline editing) -- in that case, detach the element, set the + // value, and reattach. Yes, that *is* ridiculous. + var ieSafePreviewSet = function (text) { + var preview = panels.preview; + var parent = preview.parentNode; + var sibling = preview.nextSibling; + parent.removeChild(preview); + preview.innerHTML = text; + if (!sibling) + parent.appendChild(preview); + else + parent.insertBefore(preview, sibling); + } + + var nonSuckyBrowserPreviewSet = function (text) { + panels.preview.innerHTML = text; + } + + var previewSetter; + + var previewSet = function (text) { + if (previewSetter) + return previewSetter(text); + + try { + nonSuckyBrowserPreviewSet(text); + previewSetter = nonSuckyBrowserPreviewSet; + } catch (e) { + previewSetter = ieSafePreviewSet; + previewSetter(text); + } + }; + + var pushPreviewHtml = function (text) { + + var emptyTop = position.getTop(panels.input) - getDocScrollTop(); + + if (panels.preview) { + previewSet(text); + previewRefreshCallback(); + } + + setPanelScrollTops(); + + if (isFirstTimeFilled) { + isFirstTimeFilled = false; + return; + } + + var fullTop = position.getTop(panels.input) - getDocScrollTop(); + + if (uaSniffed.isIE) { + setTimeout(function () { + window.scrollBy(0, fullTop - emptyTop); + }, 0); + } + else { + window.scrollBy(0, fullTop - emptyTop); + } + }; + + var init = function () { + + // TODO: make option to disable. We don't need this in discourse + // setupEvents(panels.input, applyTimeout); + + makePreviewHtml(); + + if (panels.preview) { + panels.preview.scrollTop = 0; + } + }; + + init(); + }; + + // Creates the background behind the hyperlink text entry box. + // And download dialog + // Most of this has been moved to CSS but the div creation and + // browser-specific hacks remain here. + ui.createBackground = function () { + + var background = doc.createElement("div"), + style = background.style; + + background.className = "wmd-prompt-background"; + + style.position = "absolute"; + style.top = "0"; + + style.zIndex = "2000"; + + if (uaSniffed.isIE) { + style.filter = "alpha(opacity=50)"; + } + else { + style.opacity = "0.5"; + } + + var pageSize = position.getPageSize(); + style.height = pageSize[1] + "px"; + + if (uaSniffed.isIE) { + style.left = doc.documentElement.scrollLeft; + style.width = doc.documentElement.clientWidth; + } + else { + style.left = "0"; + style.width = "100%"; + } + + doc.body.appendChild(background); + return background; + }; + + // This simulates a modal dialog box and asks for the URL when you + // click the hyperlink or image buttons. + // + // text: The html for the input box. + // defaultInputText: The default value that appears in the input box. + // callback: The function which is executed when the prompt is dismissed, either via OK or Cancel. + // It receives a single argument; either the entered text (if OK was chosen) or null (if Cancel + // was chosen). + ui.prompt = function (text, defaultInputText, callback) { + + // These variables need to be declared at this level since they are used + // in multiple functions. + var dialog; // The dialog box. + var input; // The text box where you enter the hyperlink. + + + if (defaultInputText === undefined) { + defaultInputText = ""; + } + + // Used as a keydown event handler. Esc dismisses the prompt. + // Key code 27 is ESC. + var checkEscape = function (key) { + var code = (key.charCode || key.keyCode); + if (code === 27) { + close(true); + } + }; + + // Dismisses the hyperlink input box. + // isCancel is true if we don't care about the input text. + // isCancel is false if we are going to keep the text. + var close = function (isCancel) { + util.removeEvent(doc.body, "keydown", checkEscape); + var text = input.value; + + if (isCancel) { + text = null; + } + else { + // Fixes common pasting errors. + text = text.replace(/^http:\/\/(https?|ftp):\/\//, '$1://'); + if (!/^(?:https?|ftp):\/\//.test(text)) + text = 'http://' + text; + } + + dialog.parentNode.removeChild(dialog); + + callback(text); + return false; + }; + + + + // Create the text input box form/window. + var createDialog = function () { + + // The main dialog box. + dialog = doc.createElement("div"); + dialog.className = "wmd-prompt-dialog"; + dialog.style.padding = "10px;"; + dialog.style.position = "fixed"; + dialog.style.width = "400px"; + dialog.style.zIndex = "2001"; + + // The dialog text. + var question = doc.createElement("div"); + question.innerHTML = text; + question.style.padding = "5px"; + dialog.appendChild(question); + + // The web form container for the text box and buttons. + var form = doc.createElement("form"), + style = form.style; + form.onsubmit = function () { return close(false); }; + style.padding = "0"; + style.margin = "0"; + style.cssFloat = "left"; + style.width = "100%"; + style.textAlign = "center"; + style.position = "relative"; + dialog.appendChild(form); + + // The input text box + input = doc.createElement("input"); + input.type = "text"; + input.value = defaultInputText; + style = input.style; + style.display = "block"; + style.width = "80%"; + style.marginLeft = style.marginRight = "auto"; + form.appendChild(input); + + // The ok button + var okButton = doc.createElement("input"); + okButton.type = "button"; + okButton.onclick = function () { return close(false); }; + okButton.value = "OK"; + style = okButton.style; + style.margin = "10px"; + style.display = "inline"; + style.width = "7em"; + + + // The cancel button + var cancelButton = doc.createElement("input"); + cancelButton.type = "button"; + cancelButton.onclick = function () { return close(true); }; + cancelButton.value = "Cancel"; + style = cancelButton.style; + style.margin = "10px"; + style.display = "inline"; + style.width = "7em"; + + form.appendChild(okButton); + form.appendChild(cancelButton); + + util.addEvent(doc.body, "keydown", checkEscape); + dialog.style.top = "50%"; + dialog.style.left = "50%"; + dialog.style.display = "block"; + if (uaSniffed.isIE_5or6) { + dialog.style.position = "absolute"; + dialog.style.top = doc.documentElement.scrollTop + 200 + "px"; + dialog.style.left = "50%"; + } + doc.body.appendChild(dialog); + + // This has to be done AFTER adding the dialog to the form if you + // want it to be centered. + dialog.style.marginTop = -(position.getHeight(dialog) / 2) + "px"; + dialog.style.marginLeft = -(position.getWidth(dialog) / 2) + "px"; + + }; + + // Why is this in a zero-length timeout? + // Is it working around a browser bug? + setTimeout(function () { + + createDialog(); + + var defTextLen = defaultInputText.length; + if (input.selectionStart !== undefined) { + input.selectionStart = 0; + input.selectionEnd = defTextLen; + } + else if (input.createTextRange) { + var range = input.createTextRange(); + range.collapse(false); + range.moveStart("character", -defTextLen); + range.moveEnd("character", defTextLen); + range.select(); + } + + input.focus(); + }, 0); + }; + + function UIManager(postfix, panels, undoManager, previewManager, commandManager, helpOptions) { + + var inputBox = panels.input, + buttons = {}; // buttons.undo, buttons.link, etc. The actual DOM elements. + + makeSpritedButtonRow(); + + var keyEvent = "keydown"; + if (uaSniffed.isOpera) { + keyEvent = "keypress"; + } + + util.addEvent(inputBox, keyEvent, function (key) { + + // Check to see if we have a button key and, if so execute the callback. + if ((key.ctrlKey || key.metaKey) && !key.altKey && !key.shiftKey) { + + var keyCode = key.charCode || key.keyCode; + var keyCodeStr = String.fromCharCode(keyCode).toLowerCase(); + + switch (keyCodeStr) { + case "b": + doClick(buttons.bold); + break; + case "i": + doClick(buttons.italic); + break; + case "l": + doClick(buttons.link); + break; + case "q": + doClick(buttons.quote); + break; + case "k": + doClick(buttons.code); + break; + case "g": + doClick(buttons.image); + break; + case "o": + doClick(buttons.olist); + break; + case "u": + doClick(buttons.ulist); + break; + case "h": + doClick(buttons.heading); + break; + case "y": + doClick(buttons.redo); + break; + case "z": + if (key.shiftKey) { + doClick(buttons.redo); + } + else { + doClick(buttons.undo); + } + break; + default: + return; + } + + + if (key.preventDefault) { + key.preventDefault(); + } + + if (window.event) { + window.event.returnValue = false; + } + } + }); + + // Auto-indent on shift-enter + util.addEvent(inputBox, "keyup", function (key) { + if (key.shiftKey && !key.ctrlKey && !key.metaKey) { + var keyCode = key.charCode || key.keyCode; + // Character 13 is Enter + if (keyCode === 13) { + var fakeButton = {}; + fakeButton.textOp = bindCommand("doAutoindent"); + doClick(fakeButton); + } + } + }); + + // special handler because IE clears the context of the textbox on ESC + if (uaSniffed.isIE) { + util.addEvent(inputBox, "keydown", function (key) { + var code = key.keyCode; + if (code === 27) { + return false; + } + }); + } + + + // Perform the button's action. + function doClick(button) { + + inputBox.focus(); + + if (button.textOp) { + + if (undoManager) { + undoManager.setCommandMode(); + } + + var state = new TextareaState(panels); + + if (!state) { + return; + } + + var chunks = state.getChunks(); + + // Some commands launch a "modal" prompt dialog. Javascript + // can't really make a modal dialog box and the WMD code + // will continue to execute while the dialog is displayed. + // This prevents the dialog pattern I'm used to and means + // I can't do something like this: + // + // var link = CreateLinkDialog(); + // makeMarkdownLink(link); + // + // Instead of this straightforward method of handling a + // dialog I have to pass any code which would execute + // after the dialog is dismissed (e.g. link creation) + // in a function parameter. + // + // Yes this is awkward and I think it sucks, but there's + // no real workaround. Only the image and link code + // create dialogs and require the function pointers. + var fixupInputArea = function () { + + inputBox.focus(); + + if (chunks) { + state.setChunks(chunks); + } + + state.restore(); + previewManager.refresh(); + }; + + var noCleanup = button.textOp(chunks, fixupInputArea); + + if (!noCleanup) { + fixupInputArea(); + } + + } + + if (button.execute) { + button.execute(undoManager); + } + }; + + function setupButton(button, isEnabled) { + + if (isEnabled) { + button.disabled = false + + // IE tries to select the background image "button" text (it's + // implemented in a list item) so we have to cache the selection + // on mousedown. + if (uaSniffed.isIE) { + button.onmousedown = function () { + if (doc.activeElement && doc.activeElement !== panels.input) { // we're not even in the input box, so there's no selection + return; + } + panels.ieCachedRange = document.selection.createRange(); + panels.ieCachedScrollTop = panels.input.scrollTop; + }; + } + + if (!button.isHelp) { + button.onclick = function () { + if (this.onmouseout) { + this.onmouseout(); + } + doClick(this); + return false; + } + } + } + else { + button.disabled = true + button.onmouseover = button.onmouseout = button.onclick = function () { }; + } + } + + function bindCommand(method) { + if (typeof method === "string") + method = commandManager[method]; + return function () { method.apply(commandManager, arguments); } + } + + function makeSpritedButtonRow() { + + var buttonBar = panels.buttonBar; + var buttonRow = document.createElement("div"); + buttonRow.id = "wmd-button-row" + postfix; + buttonRow.className = 'wmd-button-row'; + buttonRow = buttonBar.appendChild(buttonRow); + var xPosition = 0; + var makeButton = function (id, title, textOp) { + var button = document.createElement("button"); + button.className = "wmd-button"; + xPosition += 25; + button.id = id + postfix; + button.title = title; + if (textOp) + button.textOp = textOp; + setupButton(button, true); + buttonRow.appendChild(button); + return button; + }; + + var makeSpacer = function (num) { + var spacer = document.createElement("div"); + spacer.className = "wmd-spacer"; + spacer.id = "wmd-spacer" + num + postfix; + buttonRow.appendChild(spacer); + xPosition += 25; + } + + // If we have any buttons to insert, do it! + if (typeof PagedownCustom != "undefined") { + insertButtons = PagedownCustom.insertButtons + if (insertButtons && (insertButtons.length > 0)) { + for (var i=0; i Ctrl+B", bindCommand("doBold")); + buttons.italic = makeButton("wmd-italic-button", "Emphasis Ctrl+I", bindCommand("doItalic")); + makeSpacer(1); + buttons.link = makeButton("wmd-link-button", "Hyperlink Ctrl+L", bindCommand(function (chunk, postProcessing) { + return this.doLinkOrImage(chunk, postProcessing, false); + })); + buttons.quote = makeButton("wmd-quote-button", "Blockquote
    Ctrl+Q",bindCommand("doBlockquote")); + buttons.code = makeButton("wmd-code-button", "Preformatted text
     Ctrl+K", bindCommand("doCode"));
    +            buttons.image = makeButton("wmd-image-button", "Image  Ctrl+G", bindCommand(function (chunk, postProcessing) {
    +                return this.doLinkOrImage(chunk, postProcessing, true);
    +            }));
    +            makeSpacer(2);
    +            buttons.olist = makeButton("wmd-olist-button", "Numbered List 
      Ctrl+O", bindCommand(function (chunk, postProcessing) { + this.doList(chunk, postProcessing, true); + })); + buttons.ulist = makeButton("wmd-ulist-button", "Bulleted List

    gJzeN}Fh%*K!nTH= zcBYqFy%K(ObT&-VaZsxgd2c4xxma}D-ZYOZ(oOCMt%|D(-sXEuoy=WP_B5?)_1>5z zl3g3OxTe^ts(Kc%9T!~kaq))bwHXCxCQp6ADy8wmtJF?AzT(Rju4$hay?yrajlNw> zaDC-3`Np?CxiM#%Coay2?eR9vUMs|?_()RFyE?1c(e1XwPxa-6H+Zalzdwk(d__*# zax`rwRr<*kOr^>S5O zUXz0E@73AVB=XSS^!Ux}39-BH1gV+j+!Om6sZxDGK-V$6A(L6}@8-AbPs<8EnB?_- zSw!}}Le_<FUdI{rJQ`%+J@drzd{2xN~>mExy&tDo$!lQzozUXr7+H!5C~6;y%~gC2^K` z%>9M0#jU^es!jU*v!cj+!>30+1p&tw^j+BKt5UXV$!?bg+Ya9NBRjWd?u5*5ZH99k zB!e}SmDWBw<=4=}!+h}jot(sLcl+PX6yI|E*;eOwc`s+>?5Xt3JXzKM@-@T8cQckm z?tQM!tzqYMD4n9-m+Q_t{npeIeC(*KF{Amqhl+!B)D`yIei}=Sr#i>Jz3?%p zrqAif2j{@NQ(J0}q;wwta!KGp_WYCAb?X}(|1&6??YnqnX{4UumS4AL^Xh*NW#*XK z{W&h#dQw)#<&zrIU(GqLb?D_e$CF!CvOI2Hl5=&ucGAvo*Ju7)?-mO!3o$lxnElgl zmwf(S-e*E9G&f4s?^3ScDaSo&QS5TA{7H-5Vj61ttv^5b8d$sNl}M1RU6cEibGO`X z#c4XW`^4HCI{wbzU36phI? zsjJ|W*Z*GrvAXg&msN7tO7$x{6yL=MRBtT`eX#M%+PFRGH$(DsU!IDLSi$;dzRdRZ zjSDXt9#_^Zv^uwM(c}uIP-}-3--_ml?oKwi=(2IE&ic)afxnXl*Wajrv%m0$HT&ni zd^1y~JPO&6KSh512MzrtEE>mJ_`4Q;XG^>0ewpw3Zp}`exJCU5*PATD+-|QswW#$+ zfStW;-fqY5G6%P8m7bt>AkVGo7K0WWCnulfg?W23>%MAefBUPsxJPBZgV#B`%Fc?m z{|xMLHYK}Hcza}K2zcec%RCkmwsdI}^S4#3S_S8Cna&C|nyuulzvJjmfj{o&KiHJS z#5Z$^%=Q1oerd8-f7QaHN>3G|nzi3FOSEm*m?FHyUXK0onsrH!Gos%4?VB7bVcEep zy|6Utg-8}bQW`8a!T`1(S eXr{zfJ*!p*h6VK>N@K4{2c1-EX_eXf|0Vz)w8RJi literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/128.jpg b/app/assets/images/avatars/128.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b83526dde105b340c6dbe0da57bd9ece2ee1c14 GIT binary patch literal 2304 zcmex=Zx{q!N|UoI85kK@7#J9g7#RM)W8ia4$xljU zNIAg3z`*$bHbV;o2O9`*u(5IQaIkam@Nsc)aPbN7^78TW3JCJ>@$&NV2=WUFiwFzx zOGrpbNk}LwDJdzd!vP~F2L~q?CpRZ2Hy<}IH=iIMA0MBfFxUWL2|<2-ettm-F>w(Q z5pgk)b}1=EMFmAgxPJBj2N(o77`z$0nHiNBm;@P_1sVSzVVKLnz{JeR$jAT(tZWR- zEKKZ-5C9iuU|?imVrCU!U}R=yWMyGzVdn(PF)}f;FbJ{=DH=Kovjrw9i4-;(1tl4? zPh7ZBv}w~JXB9E=gBP8OCMgHIqzHmEGqJERb3*N7WDsOh6k>K1HVjN;Q8IE8S*UDW z*f??H!HY>ni&+2PV&GwBWMC3x7G$tz__k}R_S|pQw;>5SP zzQ-Bz>JBMpKTfb@HAzuxx+0!O0&Eq}d9C*Rg znn5Zi?mt7{G?|NW9^2>jzMubP_3zcM(p=P;-0J`zL)TCVc+Q{C>rb zy&{R-Ro{cAmn!LXS!n*@dop3+C@z##MY$jzzE_&)U^1I;Lly zXl7XGwkHRJnnWjbaO;_c~g9j3n7Sq$$~mD?*;PIn z7o#nUru^oL&g4~eJ*umHg_G0D;fBSmx7Q+TS(o4TUOV?i1efPmDUqbZM^D)Ws@dCF zKTy>QaNF|YQc#muP}v7j)p#cDp2IpP`Zj%O)x8-@7J0o^~Sk*o8%wC%0aiP_e!0*JB+I7n_uJ*&22^J<%N- zwyIh+Rd#!N+Gqt`G(3@-IP<;g(VUGtvJHU61?D{j!vj@yNI+*kUw!kD@~S<=n4D9bR5jH!8%;dlHqj!=oe%D)BXLueE%8VwQ5FL3oTk&$JTjul}W^>f~i(ovvZ^5 z{5z-4J?OlB#|0m=!no9kn+LX9s+~@(<~ng_+YjN~$9*4tzL@JbA5WXbG2`Yl<)?Nx zFFmq9wW{&Liaw97kg45E?gag32!EZ%9DIBKhjR>@EEEr({+l%G(3xZni}eoN zVD5Tyl2gX?H`iaSRqjDvhI2b-9rezg9<;=Eoz)yq&zqkm%)Y){!gXndy0eS7=oNu_ zb??)Kn!%i!0X8P@_9njcZ~pV6l< z_9OEmcYX<;CT`J_!gAn<(^SK7?b2tDc9!l~pXst@sd8z1sY<}M6)Zby#TN)M?7YGD z+2Qlf6F$Mu08yBiyb}h6u zWS4k3?bCH@g|(|^D!dB)$GFpU7T@a7*ar_!=W@-S@Zn@l&H6&?H`Tv)1a?i;s@gTH zXSz!1eXpanH_o5C^jSMNZ}F6mnmy>~uO3ag4`wniu9QxOVSIytQ@?nm_%*sR8+`dG|?vo8Ya4z9|aEKi!c3aNis+pVH}SzE3?*+39(GU7;EK&G$cpRATU6(?6Y?rx-S= z{q9|TdDs0fgO zb>hrZ@!R|+L9IJPnmo8zx2%Xx4exo)H}8y(4^PRylGavDji);%rf|<)?c~bzvgD+_ z@73pwDlSt`T+wq5i|dZxwfp6p*%J241vj1cxN@ePyL@}+p;wn~)q94m`t)EDgW>Mh z2&LM25{Gq?jQn+s`|hcDL~43Ho4RfP^5$h~R?|7vwVnyiOpIjfnzYPhO~ve6TV82i zE_}IY>qDIr5+^F&-1hPM^RzQ-y5V<;sK~;HWJ z_Chkw$fSVrcmJ#1ss9;0-x5t%w1w;WTHr!RObmAmZN-z(ey+Pt(keYU6X z^s6V?@oInf><#;xx2$W5ci!~d7cbuaeO`Xsy?@o^^{YeujwQZ0-LZwwxkFcT<3lNq zOF<^LZfhjp)ord9IL3M7XvB+CS1#KeXS*+WYr$IgTh?bKR(fu~a>w+^#_l_p(~HkZ zo!+-LH|=X-Zdhi;kK#njzDXBi+yhTXM>||Tkh3uUOSlIx!Ygg-oJKs?~j<%|8D{SU=IS{ literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/129.jpg b/app/assets/images/avatars/129.jpg new file mode 100644 index 0000000000000000000000000000000000000000..febde00da72f4d318d0e18b6898313724e0b39f5 GIT binary patch literal 2170 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 L{@HDB{Qo8Z<-ZTK literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/130.jpg b/app/assets/images/avatars/130.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b273edbffa238255a54e2798ab30cc043b31d8f0 GIT binary patch literal 3399 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 Yoqsp#3H_cskF%b6`nSc2{QqwP0GaxJCIA2c literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/131.jpg b/app/assets/images/avatars/131.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfa98c856b5c088b1c86a01b1dcaecba0f55b30b GIT binary patch literal 2634 zcmex=$<%PwSRFvdYWaQ-KK!z}~va+(XvGZ|o z@X3h?ipY@+{vTiv|EDQ{cwTw*63@n1ILW+itY{G$w>`H|qMvW5}awt1(JSZA; z@q>zSQc)8pmzcPOq?D?fx`w8fiK&^ng{76Vi>sTvho@I?NN8AiL}XNQN@`kqMrKxV zNoiSmMP*fUOKV$uM`zch$y26In?7UatVN5LEM2yI#mZHiHgDOwZTpU$yAB;ba`f2o z6DLnyx_ss8wd*%--g@}x@sp>|p1*kc>f@)+U%r0({^RE_kiQrin8CgR5fG1|`Ad+2 ziIItgg_(sNL#;;9B@9lYhsLtr} z)2oZRo(Ilc`=lr((!Nq!_?+d-v!%CYd~m%|Htl4=#3ep5w|=HLD^DmFaz8t99&h2w ztAXEV9)Bxs;V)j%R4-)uZ|2g>564ySOuX$W__OJN2)}Uy1CPU#mA8AE2lN4o5Y$XeUe4?G0Wo~<^x~W z&n~Ui%6=R8uq{NZdGhY&c@1T29tY3zGb;bAr61%koo$#sIWzF3+4R7_vt%riENzMm zd`oV{EvysvZ(QWfT_~qCONaHOOwYXMmv-Fee<^(Tb$71tNf7~UlQR-|E^>1|Rmz0> ztu4+i67vMp2B-m?j&a@dPX~6_$T}7`?a9eQ96@PFY}!uG*$b1 zr&g__cgIuKx@n(;oS(pL3*uYaQcJQTtn>aTneCcE71;o13}RwbmwTjlwRk z6g5kx^(@KD^RDhMEMGd?BBfELQg^4Z-owvjU)Ql8ky^TU+fos4t|gP$gti@?t~{}S zZA#Xxzh|s`w`5P&p0BB#Jolz;!~09SQvE_rUZm%>M?R8Oe7|O$;zaw36x|K{yN}D1 z|N3WoH0z(R*fufqcawC2779&ySf1WfetzY8e--YP%XjTi__Mo3p>YR~P`yrZTF}k=D;CRkFaOB>;nJyyubxl5EelruXR!J8`1O_W zWhWDt#vEvRckiy+OmDNdYmPR&J|3ri!bG<0eP~l!%V~kmKN}`9UYBJ}z4c?#FYlF$ zceX`WJf6%I`pKD(^JrD5(W_9?qVnW9s%kgihusQqfBR;MpsUbHwYt=n_WGdWc~_S& ziM<)^kQ{Nvxo2aIknx@R-kKjap^r6dTv^1b9(7l@39gPQYLMf5XJpUy?#=qIvO?da zwU4*Ge8(2&8YJ)}IfH%T<^5|5PBXuWTldUQ*Z7KjV4u61u9rvBWA?lU{#!+(5AL$v zwlL$>x(^$yI}E4U`!5x3?%uy^i&@B$uO0`lzqPSn?J88Cx@Eh-5f(x2>=x_tq94pW z4z`|0RhPHeh!(4u|7W;)Yi{qc`AXX-ebXw54 z4ANV9mChfS)&1g|d7;1YB154(L&XBg2Dv-wSFWG?a7QW5ChVx|p=}~7r33hOezp7; z`sM8Vp3>~)?*AED+#RG>aZ$GAOJ0PnUQb@^g}K>GYHb&zZMd zoZq}=3)~a-titry+3nyMHGGB^a-hGmzdA;Zp%cU1SpUMB>YSNx``L?^Fx=PFIzNt^^xA<;vE2-zd z>9A%(mVSX+n>b75M}{EBImr@<6XV`9r|$DE4SnHVy598faw&~};vRDM%qsI2v_>pY zbyS_rzCp1%^x>Ac7ZpG*C-7A!R3`AqQqh7X z^A?mW+UI}U^g^Gfz;R}~)g@#pic)613i( zxA=BeB>d{ENil-?8vU$S3eV=g_`G-8g6$JGvfY0cAIFxlXqEM3-Tn*J+?Oj8vz51O c-0djSyK%>94fUTFT}3}_YKg8AI{*JB0Ktj6M*si- literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/132.jpg b/app/assets/images/avatars/132.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95b2853ff179ad3d61b7d6413850459953658e45 GIT binary patch literal 2378 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 X*8laQ**pB^RQi0}7Pz%x|Nol+yBovIz$!vMUve z7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyoA)#U6 z5s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$K>lK6 zU=!0ld(M2vX6_bamA3Y25ac6aZ)Z^|e*JnGgFRxv=c~;80 zl$fx}eW`JU+g8R^^qsq8bK>Cq3sOZ>lGdwndigv3J-ujydXu)+w*=)|%b%|JQX5jy z_Qg?(Vb7#{S1)-!ta#$X`Jwixk7btj5w)f4nKDP4bc9Zt6;7P>eCz3Bm2*Ir8SBbD>MQ#WU)r<#$gdX96g_5n%^SIiF+XnYxmuZ!-Lm-i?(=Ce zwYmXJo8ARqxEN}p{eDYyZu%XD6P9mX(>9ugO}Y|%D0|tl>)ocDdh3>Sc$^kuo>RVF zb6(l};7{Qzb9Bq3wyl&sxnrWVB}>XbYdUFv5PNbw{4fH>TBQ&FXCamb1l7fk8SC?M;09+fuFa3S+!8xIXBPh z;`gmpCXqjaAH4kfUg)^(5kK7o>$@8dK3|soD#f+W)I}mxf@#Nl?&ydg-iK2>4hosx z)t=RM|Iz)HJiW6!u9%s@4PLwX^QZ^*%2@I=)KXM-P02oUJ_AvK4Z<{Y|&$e zx4J&9$~HS6r1@!4tlOb`_ssLk9_`59o%v4RzRaMja8CG@ay#KmPh&S9lxDI##h1-(vEw1)D zy7Q#yW&1<&{4wc8{>=xqHCKMQ-!5h+&o4K3Ma-d1MFATUzdq}Dcqiah`18z&E7u=( z{XVpPLS>V^5nJr>?V_Ki-(077CF-Wcbp9=Z@qsZvieA0C`M_$=zQ_mb4#w=U=PdbL z`)&O;pJ>bf3}F^)r(W!tdh=FAoLGI^wr!WrKRdA@H|_QL8q-Uq(%<&)YRc4$VAV-g?mAa6XYTcEsmpVc z*8H9qEb~fjBIDgY$G2VDSN#w5a(4Vob6{f-3XF*lSW(4ouw<9)rWIv+Pv$$`2rbmy zF>&#+tHFI5i}psp=vNedH}~zLBQAWEqEXjwPcNHzWBM(^b literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/135.jpg b/app/assets/images/avatars/135.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ea04ee28b7ccf1a17064b889b166cca3a01bfb0 GIT binary patch literal 1528 zcmex=gg0OmtM#4Atf3b!~MGP0g*WtdzCwUFzh$S!K+)VOithlK|({y)MX$p|tI ztQ1NxvobQVfDBU-WME=sVPaxtgvu~5FfuUTPAk_k1?ocKPH{pVf1%QR!S)o1S)?{?Fyzd`-KG*47rvcplW2pSkbe zmAlD{GOH@suANg&Fx<25*?$JLg;zZ;^65O?BgvH+zDe!Jn|G46M|}HV?NpmyHQ~ql zbgSdHt6dz{9xy*!*tIR>VdFdgwZZ4)AFfYhR*4DqOn$cQZtzl*T#xoi@{FHPJGPv^ z-{t#CuW{EF_xZm0D?5rGK0e3(_hNFSZNq%2LgSSJA#8S8e?FSzg(RrxAx;=wF^i3o=vU%t;1{aWzpi2@~G=-v02BCvEAsMKK)4*m(KSth0j8s-%O_K z?6Z&bR`_fZ*m^*A^S>_DRd?LeX1`MjIC~@g_o}io6Wcb$D~C5T{ji%VoHb8oH>b*_ zO|Q5$ow*BYv$ic)GyR=SE%g z^*W+c-oZJsxKTm&Kg0Z4r=yfOSrWP~rCgn*@orj}oj~tFxhFl09%*(NrImaVhS!?j zHul|}Cw^z%4dpw5y?PmISvG%Fer4Ymx;i7#-jn^t#Cvn{7J97fJiy0i zl=a78$+|TSVh<+2(5{JgTt8{O>zA!Zq-xUs`F{Ft&wi`#m92h$HS>|ba}t_gX_N9i2Fa2i_eLC;2(zNp0=Zrp%j{g}>UFKLVa65fB|KT4cw&|~8 zXT|eOmaFD6UUcYN)zWuMB`sRRl`pncid-)`z2dfOsraj75&Lhh(HKTzZu%aZi$8#a?Oc%cnezkNZsXgV-`At~zl^ zc9+HJ;)H3R+4|g$v+t1msvoMcadw8C(}K0mm(x=ZOjNbrcypE9&KW051nMp}pADb# z-s{1=)}3h|{cEl?@Ng|yyJ60(mpkoE_H(AJ3GJ=>^)xYdF*7qmP0+H{D>tZ2y<^*W zH2!LAv*mdOnV>C~tc4;sxvw=}`9dX<_vpDdd(s)cv+r0qU2hZfBR$J!i{^!kGq72x zPmJ>x;`3$Mc~~UTY2~T!D|5>hR~qhG$g(NVW zH@&xo`{$fVJPapx{Cw1!DP-(3Gw-T?^dx;FK2Fzvt1RUwnCYA@k_s}uwfk}7?^gDi SvybFuUz*%_R&Tb#|C<02qlsbw literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/136.jpg b/app/assets/images/avatars/136.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cf72453ce4f79a5393b6388561c4f7ee4ace27e GIT binary patch literal 1670 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/138.jpg b/app/assets/images/avatars/138.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df51a3c4996ca3015f4c4192f89cfa91776c35ee GIT binary patch literal 6516 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/15.jpg b/app/assets/images/avatars/15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b733a49acccfecd87fce16d84968bb74564a1069 GIT binary patch literal 1740 zcmex=Ma_kq1|1+FgY@Q`%$D&ea z_P4b){J5wq#Z9iQJ!Br^W{zn$y`|U zuAX6&?TW*5m(21#bNyu=L&?%LLDrF?vo8df=g0=;@twKm!K~xb_Hb74p^u)MLKEDy zcTX;vDe}+x@@|*o`MWAsK5)%i(&TZNZJ&X^@D+K(UtMdiPvTRZ^ft>yJjmeibLXnF zcM?Ll?!GK*t>G?wu=PCSuZf=5PHx?%-{JmnfAE<r`?p)0BVr)DP^! zvFDndg))Qt*ma~~f3elQLl;y6J7;=rSE}E(Z3&}(QSqrg+rv)ZRhhVYaj#UCL)lIv+jxdQVe86a`;GX|7+kQS*ec-PiZ~3i!7aAs7F&Tt@xc(rg z-r4)of!YnLH^%OHd)OrUkH-4<>5;;d8Fw@H$kl62 z*r)gH!?5^0pZ@MywPoGmfRov`TR-S~yJ}0gWCbp}xLNJ*aj_k@^GZ8@mAzM*(0c3i zvAg`2_NIHystBoX=8hHHbaU>yi7u~XHvOn9wOkN+wEh16zrm7spClBn_tMQ=>Y>(q zRe8hVh$nreOQr0$O;a)Z-NR$<{87{(_Cme8=VdddErQCv8Sk^(>|QMXHi^MQV#A}T zAEr;YzT9(mAMaYNIFsf|<=Y!oq<`{F;b>SjbH;?jDv#}@f&?aqO-Oq^;aSC1mkig& zjiQ~mcy>RT^uTTP1WUep|K98`?)tVhp&hRu?Fsv7xhd`HM%6~?^~t9nyOhG+`V3R$gTfw*T*788E zGaQ1E0ujmf=hw#jFZ1KHogF>(?9A`+H)m^jBpV)z+4_c2^z^rTJ7a#E=q)?;X}?k> z;}gxlYEv^ep30wD-}I~JU#7-7!NA(3TliL{U20=}lfzuJSIB0z>z0l4Z9=vtTwa{0 zRDOB)`_P~q-W~rLbiF5UemdE=^xYbMfdf*Lm@kw~SrpP&6rIMrPNM4T+7rM16kbRN z%s$Tdnf+4VZ)3ORCqth0-f{oCT8gvWgk|fA-Tl0;ZGY!kC}^eYh{*FKO#W<|@!+`Z zlQ-?t{8JLj+OuDoW}Rf3vB*M2dgqV7+6Kzq-21A!FMLjUmvYFYU7^5C+?ro>yHuuO zJg0 ac}rh9qa`Bm<7<_#hv=|r|I2hO&g&3F_7#J8C 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 f84k!NoBd}feEi$~M3u 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 IJ?sBX03iYxX8-^I literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/2.jpg b/app/assets/images/avatars/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f33b4ec055c6b167b59028bb70207aadb86c74fd GIT binary patch literal 5587 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�-$f~=edWjjOpE}t9&af z4%u({mwJ82X1Oa2FR%Q19kBY))o-e2w_hlDY-zbZa(UrRkx6q+^A_|^_pPnnx=YOV zKHJKJxj!YR?mk}rHUH<8J5Sad$1yD6Vv_yOpt2+MyZ!^GnjGEY^0uk#Zrx=s-ovwZ zlW5?Tb&XrTWe4n>YI#_DqkU`9x~lIQPhyh1-<{08zSHsTmFjJmR>bZuNq5?C;qtM9 zNI%QD8&Cdq@mMf}^Gfr|&g0p={Tp6?SX2H-!p5}eTS52olZ7kaT&VSXF~h0k=GNd( zb88)M?XuHLW$UY-*lKd(^z^3-Hu|L5a)$4jbJ8HUZ`Ce_k{d6web1^)+_!bw$>`== zu4ZzksXPpP{J#&#E~yh$>bf#*S@)X4DxQtK$_}<7{11Z!d1nWF&|qpfVI}Jx#kA|w ze!frZ|D86Tb1-?$@?$Aae_eFW|MK=w*1{6Qx$I@PHp;Jf|2pJPpUQIElVVegg4(2& z{slhz&!885R`$k$GZ#*Tng4RL^xJo7qp{%jsAC}}TitHN%DgzOdEC-D@y&JF)V`^T zZ4%XS0S7#l7IliqUEUx3VYSwqTN^se+>1|(Sx)c#BXGIs~uQ}ywbXNbBtCBqS{&U1D(~mPOm&qNu zAI-`*mM2u{Q?_N^ySn4^F5IeVf3;fFYTsgCYfrhmSzfu{ls)y%e7)wz2r36e*uo!w bSns&uKg0AW=CIeVKQ1r?MKr?#`~Noq)TaE< literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/21.jpg b/app/assets/images/avatars/21.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86dca6b9305c7b88c0672a2c7dd197631c9ba0b9 GIT binary patch literal 19340 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/23.jpg b/app/assets/images/avatars/23.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1b56de2e06a57039d2cb3c09c69f621db5b10d0 GIT binary patch literal 2723 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 D+7aSW literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/25.jpg b/app/assets/images/avatars/25.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93c9d81421b8cf2a37b29bf08527776d327d01e3 GIT binary patch literal 1576 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/28.jpg b/app/assets/images/avatars/28.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2baa6f7e4b65b44aa91a40a5e6526b9d9f42421 GIT binary patch literal 2901 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