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 zcmce;33yXQ_b{F`x%Z|wP?jdxCcXETMG)DgpaLoih+1|cyR@ZE7uqIilI~6SeP7bO zh1wQcwz3MyqA2i!Rz^7PaG@6lh3l}MC+63OvZtJlwZsM=tYN+j@4A_)$S4KeL{ z+R`JD$onJ`55Gu#NZ9Q^4iv+?7WmGOgo2SdOb(>sy<}2ktTk!YGm6(F61pGSjED_M zGD&4?;FZJyU)m57tDme~I|ASbOC+*5lhIq$ zMuY#HnX_jT=nt)l(T7;{&^TOg_O}}St&w{Fzxuc6L#?EGxDj5$n{WW_Z#9R6>0?98 z(f%P;t2t^%yjaCxv_^&MEzrB!>Oa)|(vSqb|MCz+Sh8e^#3(UIk|kzIlq5nDDY3$m zJ|vkfnIoACsV602@P3Cx59#$#%L4E9l2~~9OP-Y&B%$!u4DHEpi1;o{GE;091Iy=s z4^+~^3~ep&HA@oUm(+Y3S{k6;lafU7oe^N`CF|fDA&CbFAyD^e$!f_eiB7TtYCR=c z0686$Et6~l`d$rnb&?HG-wcqWL}>mn_L(q)+0dhVCJ#Z)7^o8>_U;}>xY))Y`Zhv6 zE6kkC@qfYw8F47o7=|7$&i1c1Bv0l*N(dIhpnj}4@@Oa{SRv(6fW>%74MQk5H8^#68;a>)RId;}0Dm-xW%K1q+{gybLNCrscc1owOO^Zk$a zuj=34AKo9;Z|G0&FYn*g-_w7r|DFEN`+x1f{hQZs>N|wN`b)b1)>6_xx_^BC;{G-L z!Tk~aJNr%jnf;ahZT(03FZ93L|7CywZ<60e155r&BDu5W&YC-mKmYdgn$OpaR*q&z zD@HS;>Cu!#GTLLbbhKpDol&<(4UYPK)NiBuN8KFt>!@GEm74#*MTP(W_KgJiI|~%x zDe;hHN=(uVa6V*85~xhVssH=;p7Iw6u|VCs^+=k0#X3Xjdtf9(xnZ~tX-nRbC#etR z8knA#XEG%ZiS>r^Vn6q!NjrI_*nTmoM+jODPm&%Up9o(pyK_f`3u%CRw~k!$SO52n z@$OvimJPRq`lJnkd$%pTBYleFfpYSMe2O?9l6L3szNbCz+>vKW=D|1qzs~9ZkY79m zXCA^~0 zhV$?w_2lrp`ySF_`=RI1x&na>!GvO4&>|tDqFdz@|!X1*n3v;;se|=_3)TGYv zy#MQ%VQ!-de0YWr!-KkVvF{;RL*=9H_T{dxh5X`s>kZ?HtULL7WJ(spm%tYD!{r1H z73!WJq#q#p;jawplC%g5p2IXm#yE_JyK}j>4C<0{@g4Ll!h<}(xjROHH3PmQ<(ZO| z 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

d^-+(?(Bwcv``WwKADc0C#_}15X55&`&&;0n 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 SZK2F^Vgf(_000000002urxv~d 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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 JP~$cE002r8#jOAU 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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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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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 literal 0 HcmV?d00001 diff --git a/app/assets/fonts/zocial-regular-webfont.woff b/app/assets/fonts/zocial-regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..5a91cf3056cf9553905927837b65c705900db561 GIT binary patch literal 21160 zcmZshQ*b6l~h(0`Nw4cH&ak%Vg&#|rv5RRf6@<{wmUGgG5EJX z*nc%V|I0PVmlNQb894omm9YOY=>PQn4FEH<_AmtiAT$5~X$Jtnm{}kzTFl(U!1&*s ze+Pn@5MZEEKK;6L_X&BXsi4y^^jZEoZ24gi4uTkk(FDE3Sj2#U3x(LW!!`9IIy zKaQBOAGl*<;Qnu4kg9)-@SlhQTOa^i0~-?nK>lCNps4@+5Cjk8iuQI+&H#Yo-ajwb zKix{U7Sp+2iadv_<0G3V@_(1CG1z~w;?rg!N4VSfAW|MsjJo|5#}Muen{ zqXyV_BZ&OZ9JN=w!M;A=_xIknUDYtW5DNMnBp}fRGV6cx=0-1*!~+0OS)r*h0ICz< z0S7?41+onQ{FgVqG0N)eo9G)@8b)S)f$2r7~!ro;j4uFJ&GzB5|6*l?B5(E}B z00wEA{LLveP6j`lcY&SuH~lX*x_=xB;Fm9a+J9>aC<#af3Byn8+|WbIND^rCx?s>k zV?-7xJJj2{Gyt6))UZ&7b?oPa&u9^cg^}~~h;12`=6?mt^yh0}RI&HG&m--m9#OP= z>HR5ZJcf=1_FZO%>5Xp~tRc<;Ec#%wlFS&+3{Gr;BP4I2p`4{t$m>V(0H{LxMKH80*W55@U7)~ z++keNIjn|yZei*d^^#)N19pRZnGm!B8Ne8bPiKg)dj@481SpvdmD>u5eZJyqw#B#G zaQod*Yr*B-s5CNBSh$kzeAdg{@V+SOLOWcBM*F;`n)|!s=jHvBZ`uI17+ca)s}82L zSHig=>xNjOwkh87YI>8Uy}Q#b^aVNnMmgWEklkx|s-!LcTKc3nG$IfJ6Q^4_Z2Mom z-+kw=5YZ}j%>O+jeSK4ZeH=&$NMsGLBbLBddU!PdCQ#%Cz`4Y42>3{x6;^yR?s5D0 zecVBU-=VPDu%xhWu=hyVU*AxbV(RyRGEG3q!S~^})HgS}**iPBI=DDJ-#z|$y8rut z1Pu?12!j9@8x|E26CNF@ASG+4KQ=ZsF*80nd_BbuSs+B4R#k083>H)iz*@4-ErQ6We@Wyawm~^xucsZsyXgZ`iRwtr6S~SK8uM}WLn2N0qyGnAS z&hO37!B6Gh{eu6(`;z>E_fiXU1kI14P28q1CV!U9oEw%c6*$H}|HDvnsG59;Jc}Hc z{7cGHT3WhUYEnu|nkjLew35_ITwcaDa*M`;4}vp995xmGHAy2WDd~x(Tai;4QPH;$ zwUkxVB$77MGW!C91HpyTg${uz+9rcDqp~TmDaK-V@zib{Z!>d)HDmXwFgSP$ePqCZhHSd~##EPE7QSTqk1f^ZcC(IBvyxJ()274+ z>zPWqg_@>H9TUxjWNXa?4Ejl&@f3O}p7AvpV+0QR8v!=qFi;J9_iqluYT`CpjINUtyI~w#-S;=I*f$I5m901jcyFfawONy8+fx+!hZFt+(fn*U zrN9K$VYyTuWje#N5>){^G89_38Y+-1^0jenjal#?4ejme7pzu&IfMF9k4EPFO&3m%>IEMI9O}GSp)WxSg~%#l ziYYfsB*It0^#;8FP9^wv8xpF)o1 zhLu=IcReOhnY!v+D(|Bq2VcCWRHu;KYTw6J3kUK=6?O$$aHYOqcIfQ(dOd>!ph*OG4A7&63KJA!Eje3tmzCQF(XbmMdTTZS>18n&1?`0Z+iN}D+G{;| zQ7E*_ryW*yrIlB;_d`T7Z(J!WZL>r}vIZFfU^%GJwecJeSO!R96_dtDQ9x_$5@XPt zHjsY!Ite!su+ zD}ATc{_*x%{Yq?+G`t`5|C~>_FHh~?AQFBlPrd9!v<}}Stmida-Lpcz=b$fun(s~$ zvrq|}P)4v!0!mjGwABOr z<~6ExBz+XWz$Ymo(UEd^y2t_*@>>+ETzu^cQu@AoipCN`TI=NVHqi-+7P*SOcf=NM z<+A2fYZv$FYvkSpq!;q+{Tb+rb?W>K?yH9()^hJ~gLZ}_6A77k7V-KHp6p}WoXOwRW1gyv1t>b;?SbD4}qv?N73S0#*0f^Ao@4V zAUM4+S3NK@cg+_A+Ra~T#B*m^I*p$t(|B+ph7SE}$nco7+37;|a{^Vth4ON%6UFlw znLSRA)NQvV0bcV2JLTW$ zKW#BJ2JI_)efUb&2Gr_zKcQusf1UhMNcgo_0W8w3HnNbO+amg2(G$w0doi}^Z~K$y za4T%2*N;R5bg0#c@_zFZ}7+Vo@a~p6&;o2E^#w&qjL0sBUUXU%JHC`;{3q$GF zKSXUF0We>u@37Xi#XFs!kW(mA!w4crn#z23fAvIf3fa!zp6maB9?W@fx_jQYOS_czS$3HoeR=_nWbL3b-j!Zrlu1NJfw3yV3+21+@wA_MGg!xK~_)?=Z?+ zdwn^o^RI6Ia%fkYg{YqxGeG)Ci?*EIB>%*wH4^x%NMXs=lZs84LQ9yFhWQiu=e{K; zEOGLY#u2&WN>3pvadbU-ytFk%Sijw-2Wz8tm5m;-bqiCqDvIdsLY=O*2dLQ)k?g2v z$9}T4zK9p;;_6oW!!hne0JAr=c~Hgi@N8^3x2-+C-l0Z-Y|!b!OW4R-GQVE1<~{Jn zH`UAb=0wNSe8Q*>MVf_o40F++dlTs4UPR(T+=MYFPW`~(? zf%@JT;;Ig40W4|?rDvX-JxD1wOTD03GOF2tjBczM?a?e zq7zj1dEBW>>@=yV@k<+Iej-#KNqH>xY!KJPtxPJjgs?=A&>=~}@KNUuQNtZHaUVA^ zyO&c+*$2hU3mEA4QL9YcmE!>cKDeuv@%b`#MAg@$f?*<>z+U7h&Mz?ysJpa)2j#QE zHA>UE6plMFK5fsgb>`EpE;AhJxh^AC!nE`>eLpj!Uyf7HuAp9WVpPw+7UnRb5T5u9JeCR%Z%w0bZn|>t?QVEQ55Oq-~IS! z5icg`D>T-B=U%nqg5xX}DP;N+2>N8XgkAJ&Hj6x&^$7Dz$~7%>fRZ)^%)TJiz|##s zjho7_xNX#5+v!AP`88Jmp@-g|D?1LSA7Y*S0LH!wMtXf<_M7lnI z%M+=Hx}G)~)dzQTqr~JTqP{y*NQR0kXco(4-H9E z`qvM|jHb&h{Vh2e!puWb*^Eo=YZC!pSmH6&Pb(NSBAdu5#!&9>+Hz;#$bY|_AFeXd zGamb9-P~ws`(14eyOeUpO^1BDd+wI9ou7gc5CqJ6|LG{j!mRy1a{7vK2Jm}0`}+Fc zY)qd|T?p|KFf;P?xb9of=bn8K(Zqk@Yzb?!SnbGTXIjwXF%ShipboAZw$LjhfTHb8 z>AZMC35iA4Yc~^dU7mzSPOU?LZ4ERnHPjDh$l0R$5aTCz;HJxPBu@X4@Z(_X?jV;e z3@~=FI0u#_(7L)|D(mL*VLe0jE%^Z{iV($-u(mcKORP{L@tYypt%}+$jT+alwwxb@ zXo=rLuI~Cc?Y`G1-`)WcL&Hi=^*H-)Y|WE0YNd^K{5rTp_7@I=qk>IF#zW<|=LB*d zRV%^x%f@;&wPp`1UjbUmAoJsIp`N>H^ywO00UG@3XxNvQ(<|G}!o1>HZ1AehpgrnP zYMaK5$LK9LDt2BD3=$%H^N(ao5OtkzUpBYfjb7UW+3m|MO-{eXN%hT#6xNCJ4&z1m z$(SpmF@3%UteZKR-TzKEvPshgSuhm3JqNDJ6PhF5togo`i$byWKg;X&FUEl+&nz3v zVNB6&7hBVuN1R7Tun~n@uidp=`+Qoh;Nvn*xblWL3;&S0T7P|b>GAzd>)!LZL~Dtc zb8i|)nHp^uWOYs~T#{rFP>-c@{Ah}N_OfWw;QD7()?uw}f7TquzT+pz+U9Ujf?WGSMmPc>h5W#ejvLb3z}q2NhSL>Md*pA z_$5Lc%rMRtcmdsU5|O8-P!M-DjvYB^{Hem0CM+VpP*fG0Hp`nQNP3`C1dh>T5}A&vvora6u&l;-4THR=;byTNZag; zu`Q3w=4k@VL)Xb`tM$N}L4v=Iy}-y=1rLxWa1KGl#5qQ`o2M1u^^K=n4l*Ncq9`o5 zNl_r#SaEq?R@EmD%6y9gyfnNOk3o7o(35Q>KMi~iJ`XM4kiLZ1DJ4t!SQN$WmlDY# z;)aJpNy;p(e0Ds!bg^=cA}My1)5k(iZ0!aYidM7TZpH2OEj%RFXhnHbwfYKvkbLUR zCHzf$yjL8bJ@S=v6)v8BS{%M!t0RepfeyZMbW*2d%vF2@-3|k^VE-{%mH=b6d^oEJ zaEx>t1}n<#>jZe1t*`fChhIFgw-q2&wI9C8!HZw5GC2Q2MGpxGjrO8;>SEUGAi9i( z&`RR9wJ3)dzK@tm11~QJgObuwM7{y#S_+sr1BEg5r=mN?IOLm1?wlNH6b;fM-S-Pl z)IWE^%N`ueY=K9lP^;PMWoEs=^JRJ|y5B6jmp}ZeUXulx+ufmzrYLeOIH1Dro*969&AY|bwsiC>FPjjKK`)2@snY0 zo%G)p_Z+q3yV9K@>DAK9V#C~AP;C_2>Us#GP@y5^`dwlI9x;e_`0tdn?d zZyEv=k(5sEM1Zc*0)mkIR!g>yoyQGN>^%hG6t2&!H*f0C)6hM$-_d@*6>@;NKUAr+ zaI5_b=yLVG5f0t%;%0w%mH;6ZAmg}`C$lHAy$E_5mbyy>cIf8W(##??a%)KmJqrQh z8V!BUUbu3kff`ySd!!wkRgK`?b;w4wSd;ZM)xj~;#LGxy`M=PH!|0t*IH5%WL7HqL zVX)!BX_As~$XAe{cSS~==?b-MU)gG)H)9_?=B$U2F&m$VuB56zK9Vn8XO2}o%QWr7 z0;aaPqW;2%k`>EmIO(SuE!FAOuQLy3U3vSq1cCkB72mO*C@I@$Ll|PawZ(_#G5r)M zJluCT=o=4gyziI=1t9DEoP|z9=@%CMW#Z+>-Pz;5ti$(x6Q#Y~Qlb8%!-Ue>#JUC8 zR^Y_~Cp%hdWlPDI@+Shhf&TIw+Sh&ix+W$d4jyo+alfM~_(SXN6`2+>+GtB5_Zu`L z_&byqwdZ#zCHUQ39j?S*Wanm5={5#v*-y$Mgq9#-9CHC%lomKgdC2`H%!p0Ac7`XS1e&X%Z_gWDM8A({?h z?$UN54I*NbPX*1DvTEJ4l=lvteNc8p5sWm}PP8e)Bp}DNN}p1&{;8;%C^)F^H`5Jx z6s$LIZi^Rs7;@c`K(PcT7K1aom8SlFvHtaVb&yYG?SrVip?vNaP2DHDA8s$`=O8L* z9@$D(_Y9;4c)X=Ua>DYXeyZ~2b(PuY_`sEf`d$Y|MG_Zdr~Q_Kf--0epXg)iuh8>v zwK7|4b*9pqeA~R9KmmhoC?!;T$6rF)#SxKKo0^F}DsqJx3t`y00E8koY-VP~k9Cl@ zZ~I^mp@||&V|(-N{W>GsFmZlOGdb>2Xq8dyqWTORfj&<9oHBcPwZRlcQsHfSsru>{ z6@Fp)(sp*NFJXAVyaW>YMF<4oQ;?6_bquQ@;NG4DlGUTnoj0+)I#QHwL8!+0(F8*8 zZX(}hcwnHy^KY@uUWS*%T&S;c*3{_q%ns#E);MBpalW?P-&QZX%-nJ{E;7DB*vi@- zOIYi!pr^~McvgNgM6L!`VJis;fDCIC4~CUQOyeG+eJ}iZ>$ttMb1{UJIi#>P2#U=| z-^+}}@I7FKL@l^!If7n;(|>};rX`4;8;lSu>OEQ&9--KKH9~$pp?pLFtMTxhIkJ!a z=*^U9V`EXPmg!SNHdLjP3ij(zq&HssDIvz`w&zNtyXPKiH(ly+AyA0VT42vMj(6fJ zg-X7v4GutegwuQSNAqYIRdO*b2p?M%R&SreoW&J4RV#1wA_*M2gbjJqtPfUcZM80^ zOrYtIwcWv=*^-c6I5UFf*3CK~v zYcyFMbNpKh?N)+iLE4FQYXeN>G(;EWPq%GL{&TE`WYv51tnUh}NJ{aK7!3*fMt44I z4qtfs*{}Cw%#W5E<{XOc95!ETpOp?UdT-^gl6p&7#-KvApw>X7_}g6zADqN~rqLso zb!?K|*$Lu?u7}_*-C8%Y(i)K%ST4{80hE=*3%%8QE9s(H$Z9RUO> zXEIICYMJKavwiA@<^w_ji}1l>N?1B;Ey%$Y-YXs5h}HUIFbyWdId9!O^ihdHP;LYI zr3EA}1R=UkR|l~@O`Fsr5Pyd{O?VR&02coF8LD>Me$vnyxuGhFq;sBPuG@9+qzpx1 zkOfe}?+p=yT=-4QZXeOH^$wmZ04bZH)rd=a zMI<<)TpF7Pc{oO*6yvFLvq*NdX_PTJ5R4iOJ`#L|(L`%mqWOHTzA~pGZ3cKb1&*l9 zq85;$+i!01`)7EVy}ZP42C5p2m5R}+7fjFg_Kg*^SeIkVWQ{IG-0B=A^1@;z_FwEd z)326)jl2d3cH-mDG0=>FZ%+SoDAvRL zi7?Bu|SJ?;Pytmtk&8gZ^mtYx9G z`NRKA7GEURXj8*L?R@|Qc;HVA%aY+50Y#)vhRFn@Y9tVRTDniP*IEWD&Y=Zz!AU}C zc?v|7%8UX{taKeI$M|k&gA6@2eTT}qA<}Re9(o~1tro!WQfko%0FO;opN(*xvHJO@ zo$hjomLEV6+5OVo=0jZXF!;rwHjkOez#fExUQsc7Q=%Gj2mSVeE0#~nAxkhYwg*38 z09*Lx5dWdQX=%1u9Ns4?yF>sq5}i!gXnkXbs&z-`pU0 z9O&(vN|Ah*lZCgon-1dt3hK|F@N-{&92FKzEL>i^AVl%7VKdi9-(h=Wz0wiyq#{uK zPXlXsO8H+hW;8y|l;)aa-k2a|ak>{3Pg@h|U*x~$)LfqsQe%U+a`Xj9*4iP7TmtM@ zdt}?wq)1EgXR!=%{QlA$_C8hdIk&|v@|MU5rs^R!vKnfvv`ja!uXiq2mnGxHBg6>A z**eu0nzL=l(x?#KBaCV2=gj4F9M3iDk~o7`5<3KCiYdP_i&|vxPvHx*C4vh|6?WK> zAkcluE|h_mmU?||?6r{UOr-dPyc!bg;v|NA$vC=IZ!I6kx+0KwA{8Il=N7;tio=f4 z#2}97WEf~{4YH-$v=NwQF*5VyXqo6~MvQC^yL>4P7F*QB=RmsjOTL&zaiE^)w!x&` z6C_yKci^M2t)P)?l3y-?F)oY|W4enq<&YEi?Tzx+r=1$*xNm{ECdeJ4blH4-MpEr! zXJo;&W-U ze=i~=JZ%QZyo|ZpE;=rbEhooI7_fA9Qg?)tsu z+xg*I=dzWdedRsZbBm=FvMT76Z>4nB_h#NGbG3R|hd>TsGvbrVi;Q*TJ~fr^LA@0` zo%pjBg$FXNMP*t8Px_E)){(D#1uCWYy!zf=N48y?7GR2%3ZIp>L1nVGa7L(Tp<6as zwpy2FVBQIy$0GJ@mE+xo1o8Qk$q$zpCQNHUP)!khnQ*P5&0jnwQd826x4$yq(bI^Q zE`mQurItzGK~l0tMgpZ#75)uJ$|zw-#x_*dkU<{%T*U^_%$o#gcGb0KrnBFu({ZJE z4Ue!wnpg7^4Eh_lPTsFQVE>Q%hV3y#>Hx$GVeBAHeT5Qul(DL1HqtfqsW*`h8=ji` zeB~_B3CQH8wLGNI2IVFJy?;Y9>-EE8;87R;KzzsMWGBBNbF)D{zPSMr#e%QCe)!-C zS&sF6wEer^%K;dY_j>?Tiu=QlcyIb|tI?o63zZRiDg_&JkLuK@avrTTu5Xi*DuLMV z_oa2JA(`UTo2a)ujdIsTonO0qxn|R6!}0Uq;v3ekEtQ=q=cwCk**eS4txb>VKNQk2 zzTI#dS3YM8gUUi>l<3OI#7v>4{K&6FY6vo=(}z$EX&R+}!?x@7rSn=KLc1PCGAJSf z=)D=U!>VPe7}G3LtRfwMMrq;e**yrP6%)9QmZdyFnpgpa;!=vDDuxE$W0M-;m$+g> zuL%e1T;x?xI52_MBBF^(wp?ip}gKX|rRi4>}I zed=<|v~>z&bv$tJdEgAgi@s*qgO1q^K%NtxHVTb)x1BR@NL z*5ebpS5F0yBvd7d%PJY=o3#>^hfkpFVAaS#UQ_M9N5S5AS=cU6{xy0+B@6D|4ei~J z>zf~9oQ3&XV(lv)MqZcq^b|oRF@~4N70c6ZSIBV7mlRo0R`zOy>fESa)(QRU+*TWX z)fO@LMV%-%Zq1yZw-#=O;V-#ZoD;qnQ)UtAvpdT&%iNS^6?aE}#8rKV6t{8rOn!|F zV>VKm-V{~3TI}+kTbBfGeg>Fg!WSo8GjHl`P_V4=fGZLlNU@f1XXi=t^?bqUm`0H*c9drOb6w(Q3G3UOmG zs9B-#7RE;j)C?jAwMxUTu&h8Cy10R11v{@nlL!GODG{tAU0sc1K=CDot1b0(ZXcS_I0u2 z)%!;CnBstm&tkZecv_Cv`-gUXK3h-DNn=H4ZNi9iLPhIUSZ)~4l$&;?YE+xLMD3Rr zD6^-bJLKl>QDJ4R@579hye#03(q}T$?#6D&aNeA2q#I*4(28^;!wnB9NbAP$h&VVE zfzbz95cKz8yeAJj&W1o(tzO^iH|iqPb{gMEeXo5KudslOPud%-OH2W3H0M{`Glk|4 zLg7+!}S%cpu_tc@Rjf5P^{5#+;vuhZcl$<4D*^pr*VZx zo7dH)(7KW>l~i8yl6&~0n*6h;X|%M>rlHU7P^FS;0dKlYD>P5%(SYUTg)1)sOh^`% z{|H}LA4E;lmG}Dahd<#)Eb?r4mS}4u`_M?5gm(<)fGtiQe}QK0J2DwGD4ey(sVsFL zo9+;KI(3RS-@@X(`4Iq#!9OT!XBLitP!J4U?a#h%Mvz=1?dE(u9d@ip?WC<64@His zt{HZsW9x|$iI_Gnd3^$_b#Ti&SlDpG=|TQmTauJQ=rsUlkzOe)qnJ*M2ZMt}u=9J|ImcW|VM27K_a zXDzd;CTh$3Bsd}BhM2soeC2?*=Lcy2bDz!DDbC2F>>V z^E`3~y1G=7%{JFhEe{33>fyl!-e{2M&vzMsM$64J;^Ql^j&wa}qA3IH8LQ3E?W|w& z7kpPVZzRG!D_9jO76KSYzokGJ@HiYh-=Kmh4w1q0jNGuexr;Y}hK0fP-5u4^&g&{{ zSU}6+*n|kD(r8MyjePnb#^h(+2PXMdhmm7h*&N*pzHWF+ze?gSn~XCPe-SGb3BrFB zI&)M>lLEp<)YgJ{@^{djDiR9dQp|rlP|vRWFDH&@ZyKd#y*xLuG4X?<4|cIS>Wz@#0hAFPS;{;Bf=FSIqwD|Pnl+`LT}&U3D_&1^5@b@6 z63B=~%#?Ny?=#x*Bd1S$Rcl~jmfrZyxLJkJ>b# z{e9ahQk}mOB)&)w?&ctk3gH;P5QDCMs$^O(uFN%PJ)P936j`zn-wp)(oMp73E2xX= zWysRHF@F=pf+NI0%_eEE45WBvYkb6ZOB81l>K8|80x}R6Qny&Il^k^lHKIE626kGi zG9do}Z9_m4Ri{2$5XtX7<_`+l2^blhx_CS@g{vH*)2W2);C$`oywy7JV(7Q;u-}~+ zmQ-@x9;A)Q1NWXU({uJ(=kA?2q;V7_i=XOXSS5tHWF|WO)s19Nokh1sqC&5xpf*m^ zVz2f~%wJ*>{;*=1o4$D)GnOt14$_IF&@{2-B#;x{aJ^jNdr=f|XIniB?`WebN7%^A7S>rB<=~!gsiJ&DH9oeo#4CQYv5m7glb)S!1(N>@Vgb*)D-;Ig&$- zE|_G%%i7N%QT1!D=gnOAn|?RDwYvoZH~A7JC{t6!slGxc0n?9}w)bYF?uUN5X9NUX zqR)@t2)Dj>?MyokrT6zU#;|Vb?HZApafQ`9#2j~^WBjTbOlnY@o=@Ov?wxmVVoMh|TFK64hJ6C| z1J17(@zkE$u`&ff04EWzjICr>f8Dz7*YZ^h=LaVHXkLl<*cbFF@Sh_iR1=cMsk~ssyzdTGAU^5Y4)oNQO-4u2#YeVAAgYEq^ z(+oD)fg2UVg#>3dOELKr;=U*@popL z8c+xoD&bW_KyWD9(|xO9GiyT&mw!Gp_MEfJD#)R5BF6iD`Cw$ukx`62p>RBPaf@Tg z=7QlO;F2(~#DY?}N{efTnkC))CEiKjrbYocE zT~4*SuPePT4cR}L#}x#!O>X|Gs8G*Tg)pz@bw#;D{HSpv|Bb_WZA=%2$2s2)*{el; zB}-w7iyRTybBxBf*JzE;VXI(0Fg3r?x2e z+F@vy5c7=rNLZ$`y}I~JWM1XV(e`!mhHZ%5V3S3;dDWs%4Q?lmwQ3_&1_VK@)R?s!J+!48?x`F*21XE}$gbSZ&mzlkAyIi^ zlQorCoNF&S(tK96$xu)uwp(fG_>9ys>&u*DZCwy|Og>bQbg&4TCV#_rxbgk8ie2@+ zc*w?7)1Pv(t|7L(8&IKd+YO%&K86^!Z)C~RK%wgprP!i&VyfjAcl)1K#gFfOYzA5_ zY6vYilPE1AZtgk0XQ%t-aiP3($C^4A+%P_8r|(3)3NJqhn~#1Gi0brr-^*~|N+aBS z^-)Z32Xu!!a-fbs-m)L4lTQ@87p=K?_}Uq>?5Rd-^Uqy*KSqd^Phw3!({rWryLPw2 z;R8au9Wo@+zBJhn2}{L6k%8GG@Z65l@0xPxEGG5b`k46hVlbe@Jgg&{jc~yU<{Hv` z<#Z(1&rL|pKxo^X?~_*=XMv|}?5j^jcu>_nK-q=VaNZYL-95wMI9ICe$Jr0>$D<$K zuvr0{DTHh>gUKV`V1YkaE=Q1^a3azva@J2tcCI6I8|>5vf9;Z)Arxs|4Kk!Arnd0`r9opl2Y%C(rgjhCZ!T=WrcFG+kb4r^ukUFH_96-%@Hp( zFay@NwHf-HhG+=OMuU1!JX+7-DMi}pvnSG2G|eFGpv#F-H(7zjCk>JcP7;J%crINg z&kuux1G*EKZY(zZ^>fW2Q8Qb4!8cUo-8eur?bkw<*gNuIMFi<#z!EpiEKD>gbg-C} zzd`&^L!9!#VZ#`61FR1xMyAkAq+d6pn5F}mY;m?cB`7wo6Wesn+BrZ>w}1LKX_vsQ z`&}t9X+;gJ{v;$9cK}^esb=2k@IZxoUItpa zbJXdR4xV-1bv)58%Kd`YOy`&t}>)4TU ztuzsZMbE)*N9ppE;lrUWunhn=(QG+B3-RX7I6OYnuE?7UH(3$=KT#Hs%2DZRY;X=N zu~M|*R(>6fl8`i@xTZN#kJ7Y;92Bo5pWb-41c!`1HV zp?f3I#wnDZPQ)Co!#_$gj{QwQlWo1`jF$bqh+;=;IyxX zO)`BmDS2O51eW_?~q2P1Nd;ncK z@+2v+l^3MN=>7(*@9>dm@T z%Vo0GP+X8b#Xp*ODR2lTM&02BX9jUh=1lG0Be!rS){*G3-76+gB$49gN#4%zlNiPp zpgko%f#{(e`zBXxG-(u)%$BhJRg#AOJK*F9G=K&%=~3J)(w{}(aYYOxZ2E}Vk^Ui@ zwqS5w_BX^xCDElkDBDcXBa5#Hcu_pyC(&kStk__`gta}T>4WZl-lMRP-Lb+*jJr^B zv)FqOp#rwu7hm85zFd7qvc^}zR7SK>SQHo(wdx6ou}7O9gg?cibgFTM5BfMW$~k9A z?@8w*2LJU-5v)MCNvA9Pk8_rg9kIKlT11&ZMdnD?i1SXjKS>MHRVGYL&ccJw3`Nwo zsXEr!CppzVD#HW{l;K%h!U^5V6IDC8j>WdmOS*fIz*~H0UxwpR1`%YUl(7f$jJ!kV zgGmCeae8!9{Oyl)a;o&xBV9C9Gk>az)A>yF+Z)!dS{iBA>n-K9%c1Nt(7Hn2jCA?g zX6|(#)SfJ3$09_++n&9(7B|-7B8g`9F~fKt6zlCrlULiwe?byG(n8GSmJ)A6wV+s~ zhdl~AL1+TzeEdERwy7O3ZOy&mdU3Hx3$WUhCMrx{Pc3b5JqLF zEir9|i~LNeZgXqvwvM`j&b;0$*Jo}DgE6+huL#?`opBFI>!i!Qy_`MGS!;l(dx_m` zdM(N1vN`B4m6Sjt0%;)&m6QZL_xX&dKJUi*OatA0uzT-D7x_pTe}k-y&68bXVqyxN zrrT_`+VO$e+zm;5@PgRvBcgQ?_$MiDaEbYISm}?J8+l<85a6A|A1cGOPE^=X(Z(h2TIcDSF^VikB$e#`MPddc$5e{4=!2!EF`i=z}*USL(g{B?cR zkcl)V!NKI_X@+`#dsw~l7^)%kIS4NV1-|7FGpEKzf89rn(*VTnueUyI_;O!{(Xijn z%V`RzdU<+rJ|QufS23C2-s^IhV<><7&`ALrRAf%?wkaMd2hU|;hokL4UN+Z68uy=RgIPO#rmv8-u*n6LB6y5(Fyus6p>;YwjLV6Zi)$6@0F81nKSoX%Y_TC4( z{oY`k_1+g%=)Qx#A7nx79>EXz6(!{wCC0$yP36MplH!T=7hm%>VBHucjspPQIcm&- zNxIWmo~*%?Sr3d{wwyr@D>gL7w={$t>v$Gfa>`Yha*7!Z$wa7j;9Hhyi}xmt)XT?vY$u50!DhL0(YX%Zn zvwnLIo`TO1!FF%AF70?uy3d{pwi+nA)!v7Gwc$?-OLRD{-HQL%nieZ;wpCPSbDqO< z0T&^u{eDpPm1MsnEL%Tp6cA{{W2cfGg^lf8=nwo8q={Wy;$Dm_+bQ_joVEI+d37g| zMxC`0ufpMlrk4)c@$VBARaMrbJ3aF4rv83XMQiAQGt4_9M$~Z36Rob2PTu}2jDH2D zve6zIl7O@4yVp)(o1W)6#oqfzOE;3Y;K9zlM`08W%)OVOVU1agvUmmDL%^qLbX|qP z5l2uk*xb@RsjKK+yV2h?30B8)lg5#R3)jXh)(qzlX$?1zX6&aBph5z1C40l32zAUD z$jR$7XS$_sqoZyrr9JbtLA?B;{$dH9Yp$S=(&~1ht((OXw@!A&a!G|zzbqy8nCXwT z-EZsfKA~^V;ECgVf~-~Dn`7ANu1c%IpwOEQ~QIBOurP#du?IAZP`N#L`0uv*RRtHlOgSdMidCznb zX}&d!)WhCM#C@wQ%x_=Yk7kb{)UGDkaqUBxSp(f5shcHjb)rF{@Yx`*Xfi$j)07@~ zB)reP$Wvec9o}b#$5N}~La~yJtv|~8O5`Hp)jyp)NDL;Mj1tz)0>~H4R{njTgtttX zX0XWX)NHYh1G>nuF>L>m{A@C)UY9W!=<$3xS--j2pBZ?Jn3;p8F1^SmaoF~ z-g60WkB@=i_%>JQ%HwrjKK~r!o7w82I-8nQ45k-KV+>=jbv`0uR^vyu$6#O$FDC|` z*bvOt5}r%V$|3^Iz4D+z*}BtXlKBELRZ+7cGX#w<7ec6-mi`^^EYZ*>jnT$>I289!z*;p=aM!JLpIZUAZNDfT2Qy-ww8v``QtG(c z9gWPK#82AcXlD}9JQlm8a^bHlGt_8%0Iu737C5PvGdMwWD=gV!967wrlGgfs! ztsQJMAC8Ww^*~VW49q|dXa5lG^{3a6!LAZ6F&W}S5f>7XI|Hy;Uy19d&DU$?k6fSt zIeS1VDpM%?O^p!BD5I(7c@M`mjiwu!pv!)`pOBq?!MbAq2x-OJ?OlZaBsa#cECt}Q z>WWage{Dr?IbNYn8YLUoC87aVyPkFD;Qr)#;B47OeaRtzU?EA^GJiGS*%-lQ zd7Rgd0SyOS#@QIrqw0!RU|~^@_R~7fnMmYqGUn4j@|q1J#7an7va2~P?{Fy7C-|B? z=9+7b3{5=lbG%Y&Kn}2MyB6Q~ymkCvUW~jFVssW;r%V|2gAua^nB-+Z3YCVLHE1^7Q2N zG$2Mk%kzF?yYo$K9&bp08Q zzRab*+A{IyWL;jJt*5#1LxeWz%5t~G@{+MO7;)YGlvmb@XLV-J?Mt)Uj>C2{8X8*S zXpJaG?7e3devR56yvpU6DJkI8tvwO!uG!^g)!r^O-zS0Fw=;Ba41W9jOyMd#BEu-; zmsBr;1T|7}$y*u6lI{iM6c!Pspmk(&GpvEO>ACYlQIPg@fTsU;ly|x+3s{}-0!)VV z_lC{Un>6vb^KL;ouu?BNI0-m6i~3lbs3rs)uP+J+v#l(@e%o&;(EQuMUoPE-GV|7= zAnPdTr%nmRnr?dtR0HUzg!qm%2=zjY{|RRNtvOh?1~OCw+lOZqW{UGsph?GlTBjhdYrudG1sUlfJNQICBN)*|JeoPxGB+Oj(*4&Va#QYBB*b0pusQLca+r>hBmB8 zHFzuGsvXCY>C(2c$yulljh0Z8^S%BY*^xtxo6lB1G;oC~Bh!Xj&0Cz>l|zRqV#1D5 zl-L!^#h$j1~SS#t}e;>wH0>f)nG6Kmgyx z)}IVu!uRI`xKgJpY%?*Gle7|=qTbW%y@_NZ^|~wQ6adDOCPG(LIe4MP^Jx%dEtb)T zTq%>V?i$;j?$4ShXgH2B36eC>ckTCs!iD<9{|g8b_w67xKntr(KA9vKEZ^^QlipE$)EVpTjCF z2)<~>5pcU$VAmUxrk5*u@4|pvv3ngBD|A?CnuJ=JNE~(y4Y_COz4evR9l2+FH#_A8Amp$&1uo>%UO zJ(U?OKD3nYO~%1*ttm;7lcGVxCq|0pRU3f1ix)YFP^!vX z(}Bjrr4r^S7rBE<4Nxmg3yWGYek|LJx$GciK5LD{M18=t{3IpRYH*OAMVM?7-%M|< z^(A7B{$ybSy5j7<-u_NxTzzN%=*%=)dMj9(wn)6C{^4B{VVi}QEZ6xjBMr4D3h|WH zs?+%hLMK0UY|pN{#wV`%$Mj{Fu1=UR_V!<~@22CsG;jZd#(uk(g-_whbppn)g2I<+ z033D}@~sxzL)ZHT2Q@w8ij={1olWEYrw?7-2{)}X@_)Kup~W?RZstQmW`>^v*tH`X zjx8C!YtsTJ2@z^db1I4&&E?AQ_SJVm7a=`0Sp&pLu=1AbL-YMDE*oJNWnb#`OJP z`q&-bU@*DmRbW4UJRJ*0WX)3mORmxJm8CsBI_wp&5`;Y zk=2cF+@)g28M~W`XyYR_eC8g8wRmSYGX>=F@w8@p+4gt6PqNlYCYUw%SEVvIv?$UK7>&8f;Z3*vcR z5NuLNNg8kN3G>kN8{;->*{Rx?0nXuc*u*(}SB*C3hTp|{gY^YFXagkaZa#x0T5n-K zzHd@}*scHz00lS|T3)8uX3^@URqCxbSwsO}ez`9bu(*U#2Y@u7^A<+tRaC!B3G6#! zrx`o{_~&{hnj2ktdBKrS4i*^Bk_;6jwtug$Q1ceb*{Kj$u+CWo_|t!p5T*ybA0XZ) zGQ|Ozp+$`WZdzut8BXE;<{wsAC3|^5R;yH(g&;=6!hHOKVurz6&roSScgEEY zt&`dwuC>3lZWW_TE7RDDs5f0QY8ybjF9_PDg|7B9TR4(tyU?tYvzhi%HY*KV2~F~U z61?P)5DE>rXodGr8$Z~&bC08A%jnwIDg}CXM|ylqhhx9}qcNXdm1xFd6Jd~!f}pn) zu&}&86zeT66t$2q99f?#tasOKoIhl@TN+}9XZ_*IXs#=h&U94NFPDo@<+OCfX0NTP zM8d&6Rc%dz)hErDVz9pyH6KiKUI zW!JOGh$LWkm*!wdcPYQ_?Ckv6`-h_AizBy>l*$8{?06Jj6G;a9Tos!&Ec4Kb{3{%` zOt+__(C6`SOt{bOw2OikaY9=-s`OPQfwm$`CSkLOb36P_o`*0zH(SlG>8%7X_i`&N zV{7j0;3AA*@dd&=dtFIeJfZ>B*3i62*I5q2v?~@uUVODYKC3Fj1J@0uQ+{STlx^un zt7f!=qMGEv4P>gxIxQmigkN(^rS*TL-4Mm*L>Bu;Xp6#)BpB?4U&s1(HiY2*!9;%zzr0vDKWK9p+29^v}@7ROG+1xm+&V-QTv;TTC3^ zNTN*_B6ip~B`&O}zmV;2zs>TpOGur$q<%RN(SAE!+Jzu5Y9`^Xczka>ZhkC1917=i zgVCWKW5uG!8||2yOJ_o1|C;&3t7b;?iEwD+fEel;TTEsbwiau_unkW8CF|nx-|s|B zq!v#k;-+k)O*T92!nHejk(qt+#Qglu%{Pr6h(ZY+g6M{jd&S~|Cyq}|7YgGMAYX@0UB2Vt z&urh=T|u028vggXmMrwbM^W62`4N{qnQA047!a#TN*T$6IQpSWXI(5;zyNBd#NeZw z?tA*_QN$uqnwp+%GITJ}!>5xaYr`^f^0Ch?LIz6GTxGl>a|65VhdpbV`5U^`aI9nH zIuCHFyeFh59d1U`6ONUS-n1>}D*3jr_CU9QUFK{)D2>14|EJISqbck87a0~Fqny}J z?IBf20GpQ9gXPdNp7t$2o6~FxlTy@H7rjaz?q+sk>LhY)CMyZW{6GJ1dsh?N#1Vx( zyX)Px*Zbr3{(8N(*Y^51aS|ulb>bvAkOB$$qYyO?s0uBmgd&s_2&&WrY0IgiR8YYQ z@gu~EqNuHULA{`gA{A9aJ@r&7^@6xjsB%c`&f3PL^wMJwozu>YcJ=vb-pqS%-ury< zorAl^$3_ny9vl7rdfOD9h(R_`vJ{Q30E-trb`ULr%K%3P^j{q6SJ?b*uH$}IQ- zBvCyr2s)Aix(HkKe#vd8V6(9zW~Jc+Vro2u&T9fg)6B2kNy|!hC$(TubJgST=dpR@ zE0?DpMb=zVht=ENOrXYNfwfL^ z@Awp4uYM@pe9-J8+{U>f@EBQtJ19KiR7^px6I2wQDLk_5H8vi?p`$+pv_0Cmrdi__ zxVRs->X~L2DX)3JH6a+_-V&n-rm(2Dddh%~`M1G({Muc+iC#nQK`V-Jg`GH=;g5^J z7({HtF9r<1+8=a;~V`|Af!%oL|lZMryf9Q^SR9KKY2I#s@N zsd~FyeIHD$lq=7lSIR3cy!K};kK9GGE+5p`6!btZxW0GT{hT_S7Ke^yr;>H++H%;f z3zGaI0T^w>np-8AO(oxyg1&j&+0Yu7(0D6t%b_l;lX>RA-{}KheZ5hu+YHpU$`=E& z&9^ewH&s{E3vQX=ZFyNGFpBZB_W}Vi%zmS&8843$81R#?X@17%!HIT`8B$e>V0c+p zSdOI_c8+0{bYF3FW%dmmWA%xtinCMnE{32&q5fpTpOIxRg|!JhK)e)?kT^Gjps~@(MI5Tg{V7!>$?7l@2~A4^6oO$LyJX|&;da`VNq<)w?RXb$(3*%BSkuG(oDNKXh!Lj z5Z~_kcw%>~Qwvpp=`uh<({iDikx%GMZtm;FB}K`0^w`Zil_K=pqV*cz$jd5U1Q+Tg z#o*N-=k?{~8_UZ-t*)-Eu5Nr@%AnCqsgzlNlqnr_CT=W)XU^2x>c+^+snUx$UkN#a zIvEl0G-a@6p^TGGgW7q_9wMOCB{X=e;2s`Ekp(rnB{$7;qsTV@%zW6gcS^ztwBX&S zs@t*c%JGok_Hf7mhA8QRB6ej$E9Ou-EkMynK@1b;CR4?@tke3`mWfJNs54@4x~~iR z0fdJHsa?6rzCl&$@0)fZwQ6kuI|Q+bu34u>rS6Y86kjjyQDg~irEf&)TrEy70?k9H z-)KFFv6=1YIP;Aa+krHGVWVeTPZlaxPW2h2sg0fP4ar)DrX~4UcU#B)kKR-x6rCj^ z7|~VW_gNfZXzD7Vs<~{GkWjw2m(jPKDTbByut;bsiYiMxc24dt@9oHYsL$-u z=EG?z9rU%g0krRcrV(U*;N00OS6%Tu3--YeQxqj;d-Q&D zGCfkbr3P4<7d|+~hS(GbWkQ9AYimmj{zRMIEjt1Ucx75*yHq|F?rX|}X354L1UJ2& z`u`fZGQe-3J?jtZeb--bwh}b}004N}m6AV?(=ZsupR~QJD&PhNBm{$*n664H-7OtZ zb<-`VTqPuKa}%eDE{!YOt<(kaS@;HQjC=w%R>Z={S3o>=U3#1l5{VT5^8R_=*Y*qG zA-*EP?sV*D&9IW$+akhP;NaxTR{tpW>>xZek=Z z^lEGBMdidO%|>EU=(!TJt#xW?#bujov(iR7RSdRee$&RBgJcjd>nW>rhGTvEAd>ek{HHTlNy004N}ZO+F|LSYbw;dkI5QY%OOACm*kp@scF42K9{U_{$Pve!P~em^&bi={E3UcW zmLhkQ#3EMF#KxO6QRbcs4?OZjRqWC%4snW0+|nYg(kAWVkq+q;FCTo0Py7;)poAnW z5orR^2+dCS_7Ry5R^Yfnx19h0 literal 0 HcmV?d00001 diff --git a/app/assets/images/auth/facebook.gif b/app/assets/images/auth/facebook.gif new file mode 100644 index 0000000000000000000000000000000000000000..b997b358f78c96357c36f288395789ddc4c57376 GIT binary patch literal 2075 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 E17=sO82|tP literal 0 HcmV?d00001 diff --git a/app/assets/images/auth/twitter.png b/app/assets/images/auth/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..16dfa69477f4f4b676ebffb36115f6da7337f0e8 GIT binary patch literal 1313 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Q!3-pIZrslUQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn~YUU}gyL32_CAGpu>by7n#my0={G-|}vFE4cBU#O8N$Ti+{gd#}6egTd|( zW_v$a@Bip{;G^rIkM4&*c^v-ab>vgvu}{$_KgXW>oOt?k@|n+RXTKC*{91bHYt5Cf zATvk7Xb2325Lk6)E;}%vFq8!O1^*w}fFbxhyDBiwI14-?iy0XB4ude`@%$AjKtZVz z*NBqf{Irtt#G+J&fW*wa5hJyShH1A{L`3xTRCJY5_^G=ftvg!8o+@UR55 zZ9Bl^z5cuX^1|qjmi>>GyU3|83U_VvIjbgn`Qa>v6RW4bJhJFpD&wTEJjSIHxPoeb zJPbB_X|nrEZJUrnTO(emZ}}X-iY~ ePh9nfUNTk5O!_J5^7$?($$7f^xvXrIb?D>k<=p7w-06N?k+!11Z%BingssxX*~`Jx%e>NQL4U@#&si&Ry{X0d`1)-{ zg6ib$l60Y~mAI;tw^}Z8;o0SWTajTmc&LxG+tT3I%-z$;*=0U@n}Df z_WAbn_i93aS}k+@`~3Iy_*yJ-{r&yp+~-;?aeZ2la7u;o?eq2W_P3J0;iQSMZ9#_O-sRiQ;BHNT`1AO8Qj6r> z=!+x&Fkmx*3aAJ-s-85w)XV*n|rAH`~33k^Rb@1vYox} z>+;~*+x%&C>Lw4uMvz|_vc)vS@X=;7?8j0^uVyl!LrHg=Iz3>%W_GG_VoC(sJZv``HXa* zrIxkU(csd>*m+iriD#Si^7g{9%5+bN>E!JE{QaMVtz9y8td_W5GInuEg!AzAjBA~X zY@AsvasU7SA^8LV00000EC2ui08{`F000R80L>t9BSw)JIS9nHVe#jm!-o(fN}Ncs zqD6~fM)VmW02LY`Stc0KkV8WON`_FRxX7}l%ZU3P9D0C2ViSKjMS*eC!QC5NWc*24 z$ACo`hlu15G!rIFqD1JxyfmSQfQkeLyuEbT;aCwDIQ`|T5~at(emLt$WH9QCKO?Fj z!YZJpKo=h-$7uT!(ZdXCA3nU9VnV{d0N()k(Y5u#B%yvAamGe5)veXFd%|B&z}{E8T{37 zh=$XgAq(IDLK-DxqXs0h{KJhuWN1QBJY)EyRU!TiVM;~maN!RZP&~xT1YQjCP&*>v zG{z^SKvar9Z%BlLKM^>@P9t6rA<+h8P*4UH{%m1KMF#8;qhgZOW6=OR_%lH)|M;QC z8ZSfy%{eR3AQ2<}h+xkGOhf{J3Vrwkz(32laK<*D3lQa{dk%K=0FpwEPj!g6c z8PB|?!Vn>}!~`5T1t5_zE=)iG0UUIK4SoL5A(0aP5b%#W8tjnDD-wa@&pQ_U;|wMK zP_awA|9s&=3UeHwj6-G|f<{Y6;N(Ia64h{zIqvjAj2hSc^NKS(WVVJ5CDigyFgPgS zk0p~ZbHfV$&=8I(61-3X6MR?_!$S{5GXw`Ytg(h5N(#^hz#+8og#&*SW6=pXX^~7s zFkB+QLkzgEL@`eIumT%^WMK#(^!)R|8hsQ|gbd{TLyHi#R)~`zC)5;?9Um+JL^Gdc zPzgiQO?9dAYKu|J14=HfQCJs5ExCItCfU89hC~?OkX(YSVLmi;d zz!!K_6YW}g;8BGXI9aiX4Mdod4IRil;>SO66v75h2HbJ^?H7Hao9>T4MsJEFFH&Hw-a literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/0.jpg b/app/assets/images/avatars/0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..333bc6f6e33c00b07ed2f8a9cc4565ac89a0221b GIT binary patch literal 3969 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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 zcmYk22|Uw}8^^!f*oGNnYHl{73I80SGW2teqPgNHX^xP)$W^YG`R!Z z3k(ntgu=lPz6b&!|5pG20T37>C=P)6K>!McL1BMae`kUK3aWfiLeh*x#_GVrlc-+F z=-chb94_GgcwJCYX|6h3r|WnvMc)DifWcr81S0sqb^J%7AOaG~2T5jRZ20R9NkQHO zfZ*>1qaY~21kj%)lT%;3YskEx=|gjDM-Us!o_*N8;%XjFIwgoNE~=ZAE}Mk8sVNyp zKRDgEAg?VkZ0Se-H8v3cqflXBLozlnYox(I$%`5{M<*=9E(WQke=U2G5=|;W))B7d zB$hnYy*zq@+3##?>m0by|EKOvK_E6|;M3dsfyuj+hLbaEQ>D=YX-UQ8 zHrD+R^~{K>WfuGEx)1HWhr0&}%{WmvI#J|iT}sP;;CLI>8Z)JtztXlk5P+?&t$(Ak za&-950JfuLdt!<179{MWQ4{z4xsKa}u0;j>rRX z&tZ9Ei35xxztoBS-bQ!QZ5|O;WW&hAGWWLcGHaSN&s3qW8@g2F{Gp9nFGj6UlW zbfl5El{HQpe6~OMCD(sVO5EP6t+v*(qB@h&JcZX6y-YbzQPi+zU%#OKqYe%6+8}sOa?*50sKZ%b zB8}9ezHkX!?5Sydw*sMP>cX><(q3w|?17Q58*c_pdV|nzZ7bcPET{f1Q%L%n`m3J7 ztJfs#aU-Q=Rop^?=Z8BtJzi|SZp$&Qt)S_u8k_ev8gf{|>$4_-^^)5*#7O#22K0cG}7`8G#)6TI*n;Cy_vO5J!gxfZ|0~d zg{$<%-Z^=3J889jue5ewOKWkB$MH<-+-i(#M7Z{1_fLP=Lzzzc-nR-!zfMkync_|7 zV9~w|pTtwn$@PrCq~#u&#y~YZxP9PUJ;6&<0tM>TT~t6^T}0ep4rxBKM2u>2#1Av{0V1`e z-m+6NZ&Ch9^lkDAl~5hNC@?d5mP;MnoCL=(2CmT#a5x@qapuKzeHI>wRdmA?y&78vNsy@jbII2tVzA-JqRtc6U5(g=Zv(cQ!tBT6I2skP7czK@%Q{r*- z>d!+jd#i%DG-WsY>$Mgb&XKr;t;a<_Tgn3|j~iG_H}cIzPp#BM>G*+%`l)0afDAZe;PV3v}yFWg@CHIfVN07=W2 zuVWzJ9xhbhJJ&ja8#GRZO~|9@SK_C7 zs>g<23D$sWQhQ=#ixXSQ`YLr-K6@25_mkk++HUM)!c;ttYm!dR z@z`8-m!`xP&(qPQBpF54<5U}Er zk#Fnp?#{5~Me9PYkCm+SSddB(B+6GerlV`Me@0uQF~`ek1lM&gWAjG%qrOuC6p7gQ ztq{^=KI^H@GfS<--l92HNj_E>eCB7y&;=~JiaD&6u;36bHe|`3c~3o-*D-c@wx&6m zHcph1KM*KK!dGAsh4@@4XL-{gOk|Fl^xoY3H3Z2m6Y`w6h^@FoTyICvkw9Mq<8L;D!`C}`Y6blPsX5|HD RttqlS&Cu1{m5(`Z{6GJWwi5sV literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/10.jpg b/app/assets/images/avatars/10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8f45dcd4315b7201fe17823830240db3f757b61 GIT binary patch literal 2147 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/101.jpg b/app/assets/images/avatars/101.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de9910f0840ca3d2e2250b20634399842b011d1d GIT binary patch literal 1458 zcmex=_1P|rX?qqI0P zFI~aY%U!`Mz|~!$%*;qrN1?DZF(ct*k%^gw zm5rT)lZzXuV5!ybuCbyfklv2NYT)dO*k--U8zvSsBz*#4rQl} z2StM}eo!$^Dr(~75)+q@lu}hw*U;25F*P%{u(Wb^admU|@bn4}2@MO6h>S{3Nli=7 z$jmA(DJ?6nsH|#kX>Duo=8f2KE_o9%~}YXK;@p{B?_ghnW!=dCYKSO&BEuXZ3E-@)YfoUCy@Wdep~xtCwUKM|x-Ub%{>gb7&{agE`eHbtMPh zrxk>(Sn*&&rTe_E&wD>wY3TnuS-ISgBjD+yga^#?_S*86T7@lV+sqUjaYl7}U2Cqt#iN6O!-_P!SI+}erfq3+Xu~;R-ITiiD3sr zPuh%*C#k+qKCuQ&6n&!O9$$66;(~jFbtuzk>1Pj?B!?T9s%*H$= z-&W0K6A4ch0SpBs1YkBb?Lb-`gDUR=?e7W`S%hRM%v3**@z>yJ&mGvmRQ*5xS$XAactk^i?f z_g0O=<$ovTzNI7>ge*L<>T*VXs-&B==P`E4Rm)xP6vb|KkXyJYtL>q9<&&-#VUBT? zi%$G!$n1Y+dRtp|^;w3@HS={1XH1?{xguGed6uW=*9GkFWX}ffX-s2ho;71q_2rle z%S9MZ-;X}eGc$j-tnF&O?B@aQepj#GTahta+4SW7V@*y>T@1@@?-;p=@827oeT7}R WUH;AGbyFQIL<1Hz_XIQlzX<^DVp4+u literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/102.jpg b/app/assets/images/avatars/102.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7088c12b6dd1aea53d8826daecc756d0a3c4ff49 GIT binary patch literal 3099 zcma)63pmsJ8~<%KmRlA|sMbs&vy0q@3L}>&*^oHQEQVcd!=(C8oK7Kf&!kRLZiz~+ z(K=2!x+%A?ayfFVOwrMW&dzkYoagzU{?Gq?p5ODl-}m=^KJWYeen0P5+9w?Wv>f^L zeE{I%Vg$f|Zzg>Sz=_e+h&TWQKxAPX0FaKzZ3^S@*aQrQ$u*&bu!3nOR2Bonr?4?N z6D$U>*~({As1YT_d;*`rX3%&P1fLPf=qVPTBGV{upv7LUQ<(Kri&DV~7EB0d{ZR*e&~kFcBQ^tqO7WsCg0 zso2<9lUP#|7AF*gv$C>U;=tq4vJ5mgj>)6&(M+!17X~7YOXbknJUWYsSYo6Ev!Z#n zNLit4rS+$LcXxsdlgpzpsWca&EmFo{ zLZ^oi9Eq0Z=9XsWc8*v}9FFK@?_lrfXiv0q*lcQNZn@dw3zo>DMl)zk-WP1hH>|~X zu}e~5uw|8rG!8w67UINVF%X}&OrU?im(Abh`-~0welKR<#bRX5V3scS9~b>4Bva3l z`&G8G#aH3em@>6tVnY`>%g2~Inl#~?} zl@t|~)s#P(nzHJ0wdJbH>gpOA>gu{WIy$=Rz8XkDK|w`XMN3UhOIs7Jsr~iG|LaIa z02~H50ZwutH~@x&ropY--$dz@2Q*7m=ICQ$J2@MzSQ#dX-J@PpfZs z?Bpb6kbweM&Ie_Vh(E2@bFwFqGs+9 zs%0eZ zSGi1j?aXo6-q*6Ipg+pm(H9HLd~za6^1JJs82857VZ|wwgJxj9l@WhfS$8P)>VLxe z1w*c$7uyZSGuKwz&GN3yCM$ZzJ@Nr@2d~yh+{{wq{U#vij+eYi4ofVa3@f|m51t=Z zieG0@k7oqsO-|;zB)_Pw%Xt&k+i$lcYaF>IA~VDLnux60J5bOv!p&D1B7ZnCYK_Pt z_kK`vxbI_2bS)bZ%oO$)*W3TZ5obw(h#N#r4gM|nE80d#y5nqBGgdR#ql0N(uxdkH zO;dIr%Csw~(4Jc)1^z7EHsLI+>U1ya>KDvRv%;BT?*)^7-iGnL<82Din~v>|e!J;; z=$6RqtxhmAHa2K`?Oo>0Yrnz|#bWoc!3F%c`Y$*TrWd4Vp+>(nR4#k`_ft*+H?jqXdU1s@$efA%bFw)-bxkR|3| zkxoeFnOeQ3WzUt;tM3Z;um|qBIdaJUcg~CgfM@d9;&~%7;rV*a`z$yx7oNd=_N3+=r!RX4ZrAMSauM($5c$ zyxU4II2DJk^i)bt_}IBKco=pmcm5JwGgAY*#o)S)p)d#((BG?r{$qM5dV^gb!b9(a zb_fV=8g(lYv?IeR^JBeo>(jJ}2ZN7)+=gV{RcjBbZZI?&>)E_;=ahOTe;9bB4tk>$ z`ZC`9u{hF~f!-9g$F)A@GI=tuwR1FpA z+vNqOWv{EKP$D?(yko;Yv3`#)~9R6hMJJ*W@awgJQQn^ z@;oV3DY@dE{dipRzS0W8u2`jJor<{I&MP!1;^_4anmK{LlJ4zKy6$P&B^Cq@ZvY2v z$^OwWb5^un%{$v~RcD#tTnn^jfSf&Cn-kz%TAuUDQ3TtTUY$wp&c4&$ol}}y{w@vZ ze7_iHtorBssoeWrAGcq8^ssAZMcLShpsn!Hm3iM}$5tv6!g#I!c%Qj`#m3Wz3V#nz Vl-Q%Uyb*1Br9L9a?*d8t{{kJm^j-h} 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 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 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 zcmV;O24eaD*#F=F5K2Z#MgRc;000310RRC1+W>?B2?hoe5d{?#5EK;@6&4m27#I^3 z7aA^-vr0Rs^M|HJ?s0006500RL40000000000000LB1qJ~E z0|@`b05}i;0s#X71_S~K1qA>A000010s{a95fTLkAu&Nw2NPj&B7qbYBQj!gk)boO zvcb^^LQ`{s|HJ?q0RRF60RaF2000000000000RU70RjaE|HJ?y5dZ=M00II60|5X4 z00000009C30}%uvA~7;S5)<(S|Jncy0|5X65d#qbKLB!3MHR@KfjlW^y}mcWZ97M4 zAJSQK_L;`JC<8Fvgs!skt`GGAFt<|n(J|GNrPyUL(}BYb9Ot;LmgV@lYqTd3FgEiZ zNarfwmAHO{164xR0^>qswt@aCvu|t|rPy*PjY9=2g#c0<41x%$`)h8$9Gg6HKI4n6 z6_W6~dQJZ1qsjbO&y^|e>IcR11y8v(t*o#raK+(86je)w6jd(wZS!Za^{7(p!4qHI z3_)VejyhFU+a8$fPz{n`JY50z?`I)hKnKY@ms73?_4o}}ZGG~N8{-sl$vmT)L^2fi zC%?$lZM!V@`_E@Aj*PLpDP@er>Oc~J%HNlP{8e{zX&Ty|K1yV>`DaF=dy&VP_axTb zuZTVW0Ap1v0Az2jh2S?tFOmD6{sYFz zv9BXw0b8SxIcGo^{l9u=(ob-<^~Hdg7@=V`#E+oLL%yGYh{iFV2O7EX6y(|0=|0X$ zV>w9_GLyjI_Z<&^QAV@2*og#56j4PER4Y5bdl9a8d+gU+#QtE9{z0XY)7+~zJwUA; zaaIl)B35|-g{MbdD(f&U!wd(PByHC^M{I&?zS5o+zAJMmRRv5@)>)&bjARt ze$(9>SQ?OW_AhfOQ4iZP@Z!qS`GAw@frSH^J?X8vmQ4=lTcm>yB2vKgX3LO$My!0Qw|D$M zvx>&u+5luo<0mY|e88hEpq)Ci$2jL&x)TxTK{NhY3MitpF%{MxD_t2C=C_E%ahT&Q zB?GwBa8F%09kbT9_Pgn0BmtJ{01rozQHP@|5JB`Jk&CoAP}ge5;tGE-2l>}}&-3bk zfykh>hp`=3UL)+-9J{@(R}u=YH1Y>iI2TcnUM^hrtpJ%%YhM-eEjo!HMF#%JrPK5gDc zxGb#53Ck*l=hUexN|WjD&y7p9*&^#~!)X}ANuo*d{@9R$iSEn?$w{oO#>Cnd!DF?$ z4;wm0iz0&R%)wL)gTsjZE4J+K9nGcFG!p7A72Y{Uq>-_PVt(?rM=)?XVwR(f_V%Z8 zF?GQPW^8^@Sv}VA77MwAQjeqDbcxs%fBN5(dvHFLte`qF9AN+mKA}YvR%OqUh4HTI zese_?=tCI33EtmmV&H?%83*w6r%#9by4M~P!Gac4l2?qLL^GVLW1$%KARaiuD4|>A zxMq{Y=$?C=Qu}!FpLWU1Nvo{7WK;{>1F5sa?v5OIDgLqegN_4JjD8aBkL^VjTx1n! zS$8pWrdSJ*>4q5|z59<^)9lUozlzu-bB9sDdFkd5I|j%n=1mk+=CrrwHY=rlOL%-+ np4!`04Y=Bb=U;=>Y=>FL= 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 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/11.jpg b/app/assets/images/avatars/11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b89d1c71a5f78fa57dc1ebea2b692897dbcf30b GIT binary patch literal 2296 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/112.jpg b/app/assets/images/avatars/112.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6f30e6d8bcba3cf6dc9e85e75e9aa685ca2c570 GIT binary patch literal 3162 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 Rgob|lcxeN#vMO*q{%-^YrzZda 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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 WV6L-SMi(MBRl-QKX20D0tA7F2lSCZ= 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/119.jpg b/app/assets/images/avatars/119.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b6e7b0397f3706b046a4edaec99b1342a44a228 GIT binary patch literal 2171 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⇔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 ToTZYpE$H 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/121.jpg b/app/assets/images/avatars/121.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5df73cf42e3ae5b1a966f1607214edc602f3f048 GIT binary patch literal 7313 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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 zcmbW%c{JNw9suxPL?qTo1VKcR(o$PUY_(MrMLnem&nrsogNi-Xdb&`lrB!rMw5rxe zsV!b9N(F5#tqP&WzP2h#oAO$dzBgy)ocU{JzW3bkKlgj@`F_s#oVz!+Hw{SIk!{HU z2m}Bi{sQ(U0BZmO78Dc&L-+{-fe1mxU{HR*MMZ_h5O5?C0Y@ODWH7Q)D0yiF0HN? z#ogm)KdOH~U{G*KRCG*iTzmrk;-$+esaMh%**9`>^KRa{eW&Wu&_$~qdSOlRzTp)os{stoiAAmZE9 zg`^zS5M$Qz@s#$%vO~@v#+A((4Sfa8oxjBdWD&(pYY7+1~^1vie7tY!xG|zlfJbl~ls3r9E6D>Or zt+Zf+d#?0)L{^t#Xh9RVkip&q{C-u4oBTWC^c5*95UZ7s71K-etr9#^ZMek^`;WN-uZMLuFqC+8z`dz zfpa2DOF~=~0TiW*ERuuLPS_4ub?9dm@h%>7@pVzznRX2`;dq*Q)F=mCES^7H7V@Zt z@HW(ndaZchAr=tOx;tzBAS^W8z>$zRYPui?7%D{vme>3iJwry`n2e7x$#x=-UZ3R& zF7_*snP(<&EpC|RH|0BYidI6k-Ofny%tE%4vYWq;^qHul7mX)2Mot_ZaC0P37I4i9 zXAhdQ%IxL{I#QLqJG|acZLQsSpTsNUJ?PBauM*1|3XV0L_3GEl4*H@6@AgXYOlYn6 z9xGNub4^Mu!xm_2KA(cW;RJ7+X~0#THq(Tq5+4iT9xfxk)Z2Qh;`cq1 z2h}h3t$4MEsf5TU9>+}$E451CO&J3O>YL-u4y4j7f#LiU=WP0!!Nm1-6Z(1c#x2=o zEmCeO2YsVWpd!2^&cbdX@G7a6TiJI;Iv~%2Xh7}VQu}?otv){4)@ts4hxEkFndzd& zh?DtBUNk%5px{$~?~xEqCPg(Hx=nvuP#+6mY~LMTDDNHO5+BMGl>Xucf%bdPych1Y zNQv@Ns0wkOn(QAua4Xx!EFMFnX>wxF9QQ(57}C-;c^xkODWLYI$@wx`Q~HYh%U;!- z3r0BF**J?_zkE{vtNJRPU}9{P_rtslT;0GcRe|ebQH3Q$p~%q|_X(x8z|F8f+V0<4 z5H&WnVRM(sp;B&d{WD*ls|t1O>41wCS}Ageb}1(}9@yFM8pRYG>GAw5Wnlj|F8rX? z9*}qUE|GTjOeiY@ilggyAHgp?ZOdqfj5(N+B1^^`&j4Zyyz2H<*+uSL_mP_L!u>F$(Y-!STZ`FR z{l-)q`ZCe;iS9>(OE-8T`LmCbKSZyQ*$v0s4_p(?_ra@*53`2?!PxDA_z=y!wVW^N zcPjM@jNLiKWzMoTr4y@aNC{IZ0+`x)zPgT@c)TA9a@_rAHaFDJU^ zu^hRZuBf zA%k((TW>J6)jwLhHSKWI=DVpM}Mm$9#65U8(nB`u5Co#gcP`BurRfQqU)qsC(rT8XOQQu`neG~cxrldCqcV- zT)Nlj#kcyIzI(a2j0lx^CZsk2L+AfN=%5GwjZa?aIB9(F?nq}-s&ua&S0j!Yt#rvR z5iAhF#8B~9-*&nb4ocKm9zHAKIO9>l?33<`eoqY{Qu2^0jwW!uxclTuSaBU8OU7!} zzF;S=08(AP`Pv#Qc4_k`xaENwo^4}PcE|vWLQ8i_naeh%=#;KB$)8P%xaz`e550l3 zH8i&q%eqD{q@B-kIyIJN5%99SWbxWN^1A&eEoMZ0*OCtkXg)qy2vpL4fgWqk)I2y( zWnm*sjR&zU1F&MoM);r;E~a+vu}#-LeE@Gcy$9T7TzJv#<>Kt1(Z43Ve}Fv4Tv8q4 zlB6AkvHr6~a;sPZTeS}PDzucPcKQktUAz3=Cdq2Z^@XGOMCEPF*UcLRn{{doO=^0j fZ8f6GA0u<^tCP*Ia7*0-#SG>{KecU(z43nla~?Gh literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/125.jpg b/app/assets/images/avatars/125.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b8e3e97eeb0c3ff565581119958d3b3c44613fd GIT binary patch literal 2932 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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 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 M6lQ$$=JF^11Yi#W-v9sr 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 zcmb7>c{tSl8peOK8O(?oGo+~O8L}5CW8VhFL|)5O5?M2Z;?^$CVDL|GB2_;lEj(Lb*^)rf6x6q|2@xh-=FXG-5cMV0z?SrR^|W*1OhC11?+tS zOaKTN{JVLA@*2hugF&G%K{%X`A1R1LA_Nf#p?zo(p?#=*2!x232uc)##bS}d;`_xg z`_ULI=C=t5!n=XO1Yj@$j1WQy^M7lv13>Wu)_^qxBm;m^AP5Sy_Xdyz03I2S_P^qT zLt$VDKM3GWPm2H`9yJKYBS!pt0|bUZ0T_x8Ev*3;HL`cd$OOeT%4%kocJgD5r{%PW zmxJT8-m+HLc-Imjfam-_)&TGEeBj@)M^U_3FaU#sVE+jQfq7Guw2X$4Jq#@>i*XN% zD_z}V14synM+-p#2Efzh`47use-irGiTD`@!v#tVPC2yeAk=HbQ1uCm0*__GkIRx= z>_b{itrLzl$*U^iJ)lvxNRA&zWd_p5dZU90lWS|B6yd+>M`LqqNpV68 z5kGJxu2A4}}!6*c|po zKys?-$z`NAUBs1Kq>df+`9iG6(??%Pzt{dN+A`R9^=I8xrJxIn_&++fKy$=j=1oqd zWLH#PJaUvqH8=Gtd{oF~3 z`9@zmTr}<$Xx4qPq!Ix01kM=;=L^)LRV-GkC^HBk`=ACt_e6hdf| zj65<9`MGbBSHhU;rg!& z&R~eyqjQ~bMt$An3%?7@P^hw0A|f@bSSZzv>vbx5jT1F|tRtiF)StRbyC15&2BV>3 z&evZsD2brf?VTFF+NG7(HS;&ld9*C!`m-GF`5*_M7aUPmQw!4GYAX($E!5F@;P|oK zxB2eKie|Z%RG90SXSLQbVVX)w#Z>M6Z$U@6YYd-4n@ig5zqeV39l@`EzguzfodUqP%&%03P zrHny#LqqW7e~fYDEAKx|v~33eTFI06Raf zBuCs8eqY&rnNT5tE|pP;<{a!5Snrkem?K6R-zTXT_#E^Wkz+bOQoxDL*n zaDKPJc&_(Qe538Yj+?$Gox%VEbj-NZlPgOCmioZ{Qsyc08;iKp@|IQxbGxCQ!I_)B zN^AQS2T~%{=mG^-KhK3!OD!cm!XK{>+Mu~FgJ+G6iZY+yzvj1Cas)y?@(4Q%Vp&ivnrv8Vir1z>`UB0-+O?Xup+QSJmn%1EOm4G z#Dtu}8*Wbo%Xuo8n&}1;-!5E>I=Q2qF|2c44ctDSlR-@jqRzJMBFmb?azk1A)QJks zOzC9Y(R++!2|_p_ZdI16&A#5$vZB$@e?rORKJD)ride0d0=MRxTJz_r@lM5erf(;U zjjXM!4?5BxW~e2Jswt_k8ooePrI4u&5&g9$#~00diikOevq3YtIiY&pG|wf>_aSKZ zmopk9zVBXltqlo17)aCz^+R+Z&8MC|q_=GFeXUYs#Zi%a_oBTLt+!?3RZ4%01DSMF zcldj5+_t^VGnnfLA0fVVi%4AzS($d0U11d6V`X&W`nJy*jU|jvC+LP~;T<$@lHL!w?oyJS=!IOyQokq+5*WBgGG&sit<|E;YYj zOsO72oU=OPEIDdoE8Zu7Emisy`+Y5*jd?u#T0(Z6TGx?RiyCV!iI(y{b&;NMshE<% zaU?CpA~{TaPx65EGppA2fSY3!e@YG`5^SB^!+Ngd;mNZ4QkGZ|skci{jiMlsI$-lP zvf*&mO%izBFjqSK;6@8RHt77}B_QU7&GIFLS3y+4SzStRL8QO#lN+XiNmZkRyVwvF zwi-lB0Wy~q)1CTFKAt^Uiq3|`$#<`}yl8x7@s8xnd?Sxg5&(n=>z&Jb&cP2|LYob* H?tT0ht_;Ef literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/13.jpg b/app/assets/images/avatars/13.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef0af0f5725d9fe391788afa16eb4cfe8a4dbf4f GIT binary patch literal 3261 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 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 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 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 zcmb7;dpOez7{`CR*qCh$VZzqTr9*@Xt8s)3>4b17Zq| zE{Q@HCuOd&rd+dAx~M2=XU-oz=il>v|9HR8^L@Xc=ar60UjWK(yIgkxAP@+k$_9{5 z0FHnH3@#6cDaga+5eNlEl)4fMi9~Hw+n}tD*C7z_IyfBBh-5-EFgL{Ewota1TUnFI zWIbbhCwm)5k}cVK9Rfli5GW){OG!z~S|6ux{l6vc1TgY|JKzoh5dbg-1i^r$-M~fw z07KTl{UJFR1PTX%0a>_J832PI5U?B=28R550FrGeMowiD%v_b=;2EM83*TU|lUdJx z$L$)BHL##{+z*z_K;%GR=sJvmk-?zg|Hd*JW|KKoMb%S{U>PeN2avKZ7z4oo_JGz| zuTxVkn$^w6HykgwjGOz^lLC!dA*2D>Gn7;X)!2D%2}zSk?&71oPHK` zT0f4>Y~J^hxu_)Y?#I2X3x^O7__&77H9z;hLW-iE&c%V2`W#L@nauQ%m@-?NT*^IS zcxU2YPWQvt215NQspVR+mOSNsFgyCU_oQf_p$s@w>vWiEtK~D+#qEPP1O6Jz`kjd; z=6?>p*&;C8bE9$K&9{xzyXn{j8`1oXuxJlGCi04_N;9Ib4F~mfH=d3+c-qaHD@a^5 zLD_t)ymT}nVALRx-rEZs%PuOKNkW(`XX2MsTtAbFOgilS-SJB#&-6~6#_yT>e346d z$s%#@<1yMQ|M+ndC1cajy+-hgU4bgSOuJ2iC~S}@Zgx~Wl0t9hR#{axW#202u*Pgs z%I3CDU_<+0hxAxzx*caYXw}7+UB3hQTb%f^cDx&9%dk3`-#~hJ`^2L=dW%1ex;@}k z9ag7yowLm`jh|d2?fd9ETidX}hzc0-aO*ZnIHSOhXX16FKsl!`fS>?9m?=Co%rROl z^tDsY?$Vvf0#U>5B90}ZHO)s(zG1SSmuZN~#`Hv<*`^T!XyfvMM8Em*Dt@ZXTaP4k zPDp(&qu}174yTYY#@a%RM%%^0w83_#{hJK~qo<;Jg1pP8Qa@cS9wJ{{`FeO#W%xpf zy(@f-EiR4bQftq4qR|%gZ(A?d)}*Sx$a`g+yx*ZNx6b+Fjc%>v@b4ZUmhIu=ED6Od zh5_kbD?OMdF-q|KWH=KLQmBsgZkml#TjjV2rND;SvNb|sLdra7w}XQecr++qtvo?% zQ@XcultPmPa)Ob0x(tM6<=xLoR~D~eZPNYp1~L-WM&tUbCY+CHNP0E*KCH-`q?YGR z^>?xtjeI)zFGQ)goe7kW)zJ>A&F|Ahf|C(al%R7>w?u+ZZnjbQKZH>f@-*4QWf!}t5 z!Y^ReytCkT;lE@s&Yx!oeM05d<6)r^k#MA9o^f*lNVT0ioxkXA_jg}cY?z5#g5F67 zY)?2jENe0t`|C_fjr?70t*1gsn5G!3M6@Re7G{ymX_i%t7c7F!e<0LpwdspLShxgZ z?Ya-YrTfXu$Edy}!ft1Uz;Tck*2&i2UjK}*+j8OIQRP1d(jNQezjb>dPHzc+|4Z^v zDiTp4xL(RxXt5{VQ8-lNll{ln*^t0X5D1X$b+wvzome2EFnfZB1Ji7u;I+M)gxgj8 z8(aj|yjMhjR8Rlwb{en@zr`&wZGcRf+Rjy$`Dp+!8$))Gy9(L^+Hy}VWGC;@GB4`* zr9|^qF0>(fM@}rKc+bd(_g%Hrj9vklX2Hz?E{$4=n-ss4<|2Uyx4ulJN2*xvE{+~H t+n;M@fmU$-&bP(oY%}SL)AF($Z<}VWro)R%x}y&Z^O%oKOYqWX{{RuAiDCc% 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 zcmY+8e>~HPAICqRP0Wvtk9{~184i^xzdOH{YV%{NZFehVx@1l#Q-qv;Ug~=h&iLvg zn)uG#)?wF%aVqqKN{MmVj5b%vhC_+l+36mS?>!#(d_NwqKVI+m>-~P~e$|ZwW)Y-t z5&$9qAYrutof?34W*kb+20%a$007TbYZ}0WB&5bOfrLA&4ycm>xd2N4BddxsK^dS- zFh(ep5ylLS#-Pz=kjbiIOdwNpEQ~cbwX(9dwz6_`aBy&R`3KMtg)%fUG&VFe#u%fG zF%V`I2>bT}tQBOs3S?#Z2@J!ZSbmIKTjOx{INU#Z7u_8ILIGrej07D31Oy@>P}dEd z1povR1i{rm|BpUWZw&%8__z7737P>25DBh9q70Dezo$V263|-%;XKT-`XQb$_29AM zeuwR}*>lxR@s1XEZ+N{-`&RgTN4k^uPNJm&^sh4?7eKlZzyt}dzJr7S0`La|rf#Ez z+3fBu56C>m|C;~)I`i|2fI@LPx;8B?(${mp%a-#WYMoqWC}E6!r)%B@_s)`SY>@>g z%L`7?Ns%3KjHdCi|NLC|$|7}d!J_mtA-?+e4^tIHO$o7zaFgRU))vx6-1vwsX*5n} zZj{G(Ok1jU{025xFCX6DBCizhwmYK7$7pvcK3~vq+K4d4Vj``)@j^rDcwDF ziRRM|U1b4-?mxoVQKcJ^b~2HrvUP&yYN}YUd#sv7C=a13HZ^{ew7JLY74m2+88{AR zu5F*tR)xr96MX2wI#z{|%3CtD!O8Zf$W=1rbZ+)Ti_$TXb7yz8A0 zbM_6M5ygrGI>7J%_5HI1g%a1IDg&A#RpGul?4mNdW?=?yPJw@w^=%c!S#Ii-MKq4| z6H1|$_jwsPN6t<=rA)>X4hoV5!7(a(_eg4}@%=+Bi0$Fb#T(xvYLfgLIOXUlXYzOK z1bG)DAVg!(Pum;Bm&bP(k9Nw1J2p8wCS|S9%4djbRQQ!M)9oacmQb&BfM`gGuuQ=phlIyiHfH%yiAo(SIt zOijsmb+7&GH*xFKTDGV2DLZMIbJ#8AbkgXkbkBy2ADVvY8D*wDz*|4{<~tL3Y-uj8 z$Rs&=#;jNWntgV?o>B*%)rR| z0VJoAdZ)<_PIO<~M8g=wZhYj?^(eo2OMKlEuK%3hvnev{5|VjzW_Ivif~#;toR z_m^1t;%%-hzoM&{b-cI%JJNU7lD;kMrL89L)>u%(<&3h$T2&R1UJw^{b6sx84GzBb z3zo&hi*GTZ7bX+F8)+>YK8N2|s^K=+RSx;1Yf=!4+cUgdIyjO^8DD-uS{U(oSK)QH zl2F(7Zwd3z1EqH$UUaeQAo))p=~~6LdofI5t4+Szk0OhewU(8D6{?{O@~ApXAZ@_rg;Wc2sI zja~A=MP=}9dg@^MUE9Zr8%P|D-VytP$90W)=i+3%-8PQPyT6(fxSTd&5ykfDE6>NZ zm|#Ta7H%)&N&Kg6qT*;;D0BRK|BHFY)zK97@Ef#?N|;p{wB=UbbTawq@maqJ*3Bzg zgTXyk+TdBv@_*sB!_vKMo|im^pE=upevtvzkJUGQO&Cl^sV|tmt9?c}5-_VqUV56L zKmWzvPS?lty(gwwQR&PTR`;dAt{K6^TV#fdbEi3@1D48{UbJnBA5t*2GA??9yhhTI zhtc56hTLNcYRl4J2S1Sp!4#NE1f#F6)8Fh`8{1V)u(rdhZ~D8!rYolk_YK*!8ev${g8yuu=qY~lux)*-| D;R@kH literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/137.jpg b/app/assets/images/avatars/137.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6962b18cd38c37f62138ab0bbf38688d6287a951 GIT binary patch literal 7485 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 C+2^YO literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/16.jpg b/app/assets/images/avatars/16.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3475ef53ddb0688d80ad8c714899cc8ec88d1a3 GIT binary patch literal 38040 zcmeHw2|QKbxA-v+iG&o1L}Yf&bLKhooY}?2z1MKBF;ps*q7*`sl36l~kQ5@B$<$z; zm3j6*_m)!MzWu)5`@Q#h|Mwi9v+v$(ueJ7CYp=b}KKrcWY`)w42<%f+QdI(QaB%3|wh{;Gu$SC)a?xCciAS0uoIY>oCLq&Cvk_>x%`}tb< zHO1MxXU|^pz5B??_feCRlT%|7a_X-nl>dam=5v6O7*GO~@Nk#`TuK}~N}SDJP;G+E zmpC$@lms}~0~8o@;DL^UPe4dSOhUQ`bcdfSaR6Mrt;&4>4n7VZE

+5g{=F9+?1G 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/18.jpg b/app/assets/images/avatars/18.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d179eb8e0674dc02e4ef2a05b11cf9e6e924f453 GIT binary patch literal 22951 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/19.jpg b/app/assets/images/avatars/19.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3077d922114bdb44734a75ab1228214d8565a959 GIT binary patch literal 2953 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 PVe$uo+Me$hPG|lL?^P&} literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/20.jpg b/app/assets/images/avatars/20.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6bd1cfb567112a61f9e46300da5da6e06f246cf5 GIT binary patch literal 2292 zcma)6cU05K7XGCW%2EtOnj}hbL4zPwI?|hT2u3id5D`Lep=FgKMI;E)qzQ;p6eJ2r z0Hr8RgazpV6vbqz5fEZoATPZ0cK?3g+_^L7yXVfmGjnIy)9eM{khQs$IRF9!fH$WB z>@@&x8sSBV20#E50046i#RLS6yo0Xb0q;%@17gntNdOdb0FH*jpq$Rl1%+~P^T1%- zFc=RX4=)Eie0=-|;AjB>et!4?5dQ)M<>KPu<`LrK6G8|I3jWLg-xGEx0OtX002>Gh z4uIhx2pq(I17rXI7z_b{K%7MX2N*XG2+ReA@N&ol(?2|CgmQr)Fc9}401V=61_a~e z^j|Xw4B^<|(l8ZaZX?Ib@iHQakStZ%a$_eo9?F%3Y&lU*NRAJb6YHPlI6iP`VW^6c zBiCh_c-3-a5jG9rhj3!TA#lJDc`rT18fqeCl3$ zD@i{ad)IN_E(v$_W%F$hMoZ%ccJ1Q2lIW)qc>O~O*{N^U8{Zv5-&Bk?<8qs}3;nYi zBz7(2dyERZ=ISO57W~MXc-h+4l8KaRjo6D>#Y8hY0yCjgxu}s$&b{i#2b6I{6;=rv zA3>nsm73E_&u%H7=n0vf?#Y)zd)-KFIn9f)8}LDP)@0irVH{fn4%-am_*`+`3*FX{ zL`O_)?-e3i{?yj0+0-*EQlHA-#PL35);aW-JwJ4VRhv9|o)}4fm0KUDV8u+Cl)FWJ zpA>12jaED=w$V%=hYFeus}?t}YWUtwSX{f*I;ZY-9Le8GaaD)yH-X?dXUFrq}Am}5snM`(kQZrJhHm*jm06w>^WfW=q{hkO8@Lxk$ZoTp^BJ-C?1OiXl=OsQ zY<=&`yDPNoMaf|r2S3ouhc9@oFAyT+Dm&D_$s(;OlC@dO6bFd$CRi^C0AxCDMfFaIt@~n3Jb)jd3)ICxP+VhU)dw7W*hnmUVyD z1(&k5?4Y&%P?Q{xeS{6%_4OsciL9Fyk8vJJq#(G&w}>~D^#X_?dTxACJ8zy1q-1$WU=hjZ zOAOsYiCoMjLNVQGHP6#xWJPN(*FR)FLVOqhT1W=d)Zd=vkvjcg<$8;o3v-HQ=4Iwy zDnXwNz?w`+Z$75CD6+IFEtQ#G&T^^hZn^fDojJa-2mwEv#ScZVbqshm>14y-SaEG4 z2XpSAFG+gq0nJ&BjM6va;sy=Fylk;?FeHhR%dXU=E>+q@<24N(mCcwRN)r zKl@4dq^txsU{me5pIkBV`@{0*cN)#|Pw7R5%vooMUGxl4pI#zW)X9BNeVdbKS0y=g ztYFsoE%S^c^=HgFZsKZ-aX;QqzvtLV-uDl9}9T1s|S+chogSHfQAXtuBc&Y+d|19>%3D)tU7bC%o+S*UCRUtEo z>=KQ@vdny25~-~i*} zTTk}~)rz~ko>cXE(|?Vc1Z}T(`;~{QlyFDVC`YTmuDa}!<*M`tL~}!(l8?yjJAP&Z zO726*>CSf}{g^Yq%(d-ay{D+bUtH*QQExJzz9_Xcc%o0+L*RP8N^FIdodd zRHPwLV;#;Lk58`A8d5ba!UjdP^V7Caro+mzZ|E>S-QfDXyT)UEr}_h#>n75svOE67 zCyI~vP%#p{U%#DS(bz1|euU~Kc#uyIsDfCG6IV`(2T-5^Ki(htTzIWFP&oQrWMe7w zkG|3oT3pJ?~YNEK@nS KXrRoHJ@X&bru@(V 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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 Bl6?RG literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/22.jpg b/app/assets/images/avatars/22.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa0181c12350ed32caa1f5e9b962d94470f2cbdc GIT binary patch literal 8759 zcmbW42UL^G)9{}(2%%R2DFH%n(u?#SAe4ZJ^cE%bj({K_O^SrxMU-9@lqMnqf)tT1 z0xCti2#A1!$QSi5!xL_hr5*g(Y=!qxtPa-pT;vD?}07`ML55PIQ68RF5Dg4Z_nnYFt064{s zf3efQH~@E(7$*Q|di#X<;cvJGAO)NSkrE0D@<=^gum>(6K-9$1+1=641*z%n>Eq}X z0sw!l`Fs>Wcb;1$G0CzL3bL}Il48X4|1JMx=igTUGo0`3Ul#kO|JgGT)9^pKf5!f! z^L_{b@(0A+5dP6Qig27m?N0C)faKopP!zB z6Yv9qfm=Wn5CtXq76;3N)xic}bFeM=2G|!I3XTEa1LuMtf@{Ie z;8)-w@Dz9fyahgh01$Er6NC#Q3Xz9sLX06+kn0dXNCYGik_~wXsfV;f`XLjL1;|&( zFDMC=9*TsDLN7!0pjV*IP+w>SG#Q!?t%Np1d!ZB1Md&W{4~!DV1`~!U!q6~F*bP`P zEDn|pD~COUy@pM}R$zxDBqU5E{3LQDdL-9K+(^Pml1Yk48c4cG#z>Y)4oFE!SxALR zl}U|B9Z3U7<4E&JYe`>{j+3sC{)CgmIpLCU9k>~=z8du=^^wy^qTa}^mph>>0i^YFpx0t zGoTsV7?K$37)BU&8R;0M87&xZG8QntU|e8=F!3>=nLLd~7zg}dxc=@99 z#l(w^7iZbPY(i{UwlKCwY{P5^>>TX6>^|&y>^yk&H-nqz5t=*^AueV&l@|3gjx`8sR$O=I6e`9nIaq{gDU3BhPc4CzGd}XBWkZ z!k})UYEZMhWW4gcuDm(C{k%tf{CrpW;`v(m*7=$F(fpzOHT?4elme;(z5)*gCIv|Z zY_oSHKL1ROk##& z(PAxP-^5YkR^n;m{o;Qv$z1ZdRC;Mnf=)tTB3hzd;=81fq_bp! zqE@c9rY@-Nre3T5P2-Y=pT;wdBTYrkaLq0)h?cHaqSlBuo%R*&eCMS6@y)T))?V!obWR-(bm5$k5NQ9RtSbV=^%FM!ZH| zMlHsGG1@r8_@fEGiLc3XQxa1X(*n~~tOWKJw%?52%-*cp?9g1pJk@;eiolh?E8P~< z7B&`D7DrdLuBKmIuoSlpw;a00dJTWA)r!>0!m8Zrz*^fn%X-B|#wN~Y+Lqt;rtN?o ztDT443wvsNNBbrRn8Q_vYKPyB#*Pmi51i0Wg-*N9n$9`STP|uYnJybRWn4OL?Yi>y z^y}+4ly79**l<;K&365Y*Tm=J_uTZ{irtRfjomBU&pfVrG29X#8-=)By$dc8Tk zZ+egU2>ZnOEchz=X8G>=8Tgg^gZyp%TLTz~hpFK}fxy_n#UPcSf}o$l7Qsz7X>WSn z91al*xf`+;suNlk1`Tr#>%PTxE9%x_xO#X=1SrBOqWd<_?U>suk-CwUQHUt_sJGFV zqSK>)+_`$EJ%&9dGG;keH?}5@D$XzNef;J4;sj^{K4Ijp)ZM(he-d312a_%(Whebk zc1|8lkx0o+IlFiL-bku!>U{zU!HY1RrkYlnPMaQ@zMO%{XwF1tCT9M~vdJ1jo(+hUti2#oK$@L0RLd7M7N~* zA>YI7MShNr?019z5nGK*Q

{tAd{?UD4a`5TU^YG*-@h8jA%3t!o`j4+3 zubl+{CjFgzDtOxd$KcQWndjNr*&LvGe$V(vz{Ee59dzK9h{FMe&NJX|1tT0YR4JEx8 z7spLx@XnlNaXVU3Q+^Vj_rXQwSLd83c|d-m*=xZ8RqB69LaMNq$Cu>D~yRv3En6+ulina_b_3t=)PQ*WWsOGxO(Y`Q+T49Fd?` z$lzZoAz3-Doy(C)<@eK;9K^Zl)Egh^I2p7;kY~X45>=5zJl&l3@>W3ob8;W?*n~h)SKY-LEo!WaDmjr0%v9p zyD3)p_Hh+ji$7-T4lv|zwY43}>VSCFOI5cFBPNgb7)!(GD!)y5_KdR{eY}wuDYaN8 zR`;G2mswinC8{o{q3c&hKZ63$Dv|iNh@Mh^^67>pp0*2~?}I*El1$)xu}X;W@qxoPI9=Xm4FUpe@fh9Zxp+}!b~Lsld5|rDqjyhkfxAsikg?>!@ER&8l3?=WBY(O%8LPEZ zE01V&JZ;0ETG>y|&jO0wb2eRQ{mS6)%X*<$#pWXga{cD&uwj>*AL?bpI2H(2?DwKM zx<0XD;RQWdBlCu@PTL-V&d%l*<6`93zdy~hYQ1aV+2%X(nZ;^WDP5(*D1MJkc{Sa< z#Iak1K1xyBM12cZh&El-x^Av}EsJ)Nlr^vn#?_lf!0P5A*Dc5FP@kUISYxkbS@4*$ zyj`d@D}ICWwRb+8>Z4Po<2K?1MRF4~yb}dsg0C?hH{LHj!pJ53)b>+}yRh;54RQDE z+&9dR@9z9w*|Gm@kuG{CO)0)qhT$dcs&ldZ>zpe5N9h315cA52k8(2ac~0r#wv0|> zdU31SZDM7XDB%xWnCQ#Vhqt<>2{Ro?qa`>#l$v(qxZ5w}&-TO0m7_9umBIO%=H%1) zuW_Uu(#^9t^-KrnM(pKEmtXhSj6@$4mM>v9;r{OA52 zhtr~`opQokM_Lw{(VNv+1-de&C2U+q^sOkkhL19tjK5o3patYXg{UFMaMK#*E=a0x z^`y$?klMuBYSXKzr~E^*Rl2PkL&DR+E$k{b`+GkruVnFfcPi5_R3%JMq02;(NopWa z3z;$Ar}RWAo&jjtnWo^#^v;**eeLe)%}nFQxPDhk(74q+>rK)r-*Yy)J9iFI$M~?M z#jWfB!8D9S|E`Abc>+c^UbWYnmmS+7rAmxfy$sH<|~<>q;b^03U0qP$`g;k*e`E`@V~p( zb|_ZOU+p|&t1Ug5`1rEJBHc41i&zR$Ir|*f6()Z>9De^a&z?E6=9Q>dXZ`fW>xzNO zKC3}1Ke{+h@+FNy16SlOa-pV`y)SKMqn{=GwY2NQSl}l6=ZH&>9kXr1OAQlSiWFk; zrq-tqu0IHP<>DE!*4^IRJXQ7~=sDF(mTIjS`Bu6z{?u)WT5BR&x^6G7nVdeml+hpIZ#tin?&?7 zk9w8+nP>=~CH0I#1bC6@{`Zb7H4`+dA8OwO+21@+hV z$HV~eI!Ymo%)XMFsF^F!J${mk@s0)c>cTNf^a*TL@As#%Az{B+#W z)jlZNnf=%mG?V=nj~PR~O3n>9CZo#@S>>IuaZu`{6#V^ke+7>4#DB?(dT`6l$_SIQ z+GQ%cyLtsJ%i^WR;b1 zk->cfuXu;v<}hF%wML5R?84&pQ^qPiV^2*IlAL|l8w+f`5NU#?4+v}~UzgpE1^l3# zm5TNlbiB1qO+1F0ibULkpytcnYZIdBZM&yEuO)ZOdL(Py&Em^dLdJ2PWyqJ-@s}aw z2=qyKfL!F$QmK#igZc?d>nd~onPBH+rq4)MEPTc6M8${il}}QAdf1J9*_X*hlAnJ+ zJOg@<)#z?ZDxCDNdL6XjCbVjaaEn4YaF{{1K?Bd|p)-(U}}9Qnwj5 z&6%p`l81KH!oM+=c#Hg*S&yZSEKCmr{Oc$i*G+Q=i}35}hp{4yyV3Gp6)g>)(`x4| zKF(hdt@2+~i!0wWWi!p-Lg2(CQ5C!($M|bPJP1^}+BcbgT5MPk0aw*fse03Yfq5Vg z$2C-?LU(h+sPl>cJnObfs_W#nLcG48m6pYdfs5iW_hU6*^v-<+RM3xKkgCRafHfi$1ffQoKEr0c>bB5Y)@!8T>aU6vtCAhra_fW)bJUdR!^CkB@$gKR=}`fNdDS=D48zMREG?4H{m zT_&^?D5}_2r7Ehi44XxQDph6B&pXe3$PfZ`~2GUfV{ zFwVGWfm z#8HtTUhzJ4oa9rc9Q)9S#dcpIisyUHY8Cjhw{yOucud0Yy{I>GT!JX76@EL3HuJ`2 zb|xy>jOjA|Z`@cuhTZUIHYF|r4|t|o;*Cy9SZ8aenzNg@%CObn>SizZ9M>)>VO)+D z*7bGA9Qh}|Tx8(0bHJo#Xn&utFZkW2MK&+DWGPy)dcnAL>-mVto`v?5fxHQK>ASs* z^2^IVuS^_=mk6b+p#0-#750Cn829RK8wdT_voe6@Q)!N~2%8Lhb~61r3|MsBIWQWJ zIL-4>(0$bLWqpqa;|rGxd1|ugQQ3^8n;q9>`>mml1~yiBRhEG-lXDgDtD_d}UHG;i zNgD57d`k+Q(5sl>lA%+IRa^{SJ`tgL7LuOHG`0_f%Pjc?v`J^D3>a@wq!4;GkhWJk z?A_ta)TU4CTAmB;HEiCRwUt1NY8Tu$RD$yqxbK<0d1{0F&(kBfm{1&mg6QgFGEp<$UL6!dA-D#>jdH-#%3|)=1YQ#ZwGf zk$6qBLQzj~y3km(n_>@tbZK7MOF0xE%~QNu8xU-sIBB3VSw7*&ROMUa<0Ls~_ErFg zo8yOmnME6B@we99RKGVe%=@m}s#3eZn0AMpzT#LU%;NPo%Xr6i2TXUMlHYrlIkA{*P(|*O z<5@Dr9|N@2(jUz4BDB@x$GCFnSL5mY3d8-Rs!3NyHx1ldWk_p-c?9cEM+3%%$LjN% z!#`5;RzADRV_pOQZ54tBpZCVn>- zdGo3^RrzvBE$4nQcZnG^I(*{{SQ0jP3?t>*xKM3cRZ5lvdyANTI4K-RTHtjV&i{Iz zeqCZU;!~$xd&Jji^1TVJXTm~si0p<9y~z`5c@yWGiDh}i0-_R?7chlMO|tb z+S!9O)BLFy#?9M<6nDi`e&%4Vd*n5UY8&{zXGegvwK(D1ksw9x-ox*6L~j>;t^4%VaM`TBZX9MZJLGwf3?%np*=>udFVwDCh}JIEXS~iJDi12^ z@it+oHj8SRBJ)Hd`S)|YuN05;=1`3-+2Z0cbi9bGK|HxhByxyMn&}046NBF3m{pnT zofAq{d=ZOjuAMEs{?YR;!yA!)Ys!Yyr(}Xgm+Ikf4wh7`9?CNt#10nr59bz0B@20W zu549AeIMtlnG$ZS*9sf*ZJ3=?Uud5B{b5ov>vk{A2Yvs8zCcewA<#TE`yNZ1EDekX zzQTxpD)h3|yh@^eZh+~>%r~7PSRh`kKYuU^p_w9z6GneWri6r--N_A5;-1QrMbuFzm2U;W6SG~@&uRt_gL$+_hooJ z9~pj={2~)Zij#@YYl?Ox)x?5fB)1$6>8{zN+l{~--PkUa>!b+1{9Z;K(q<~2ut#Vp z*ZdYfTBHgY%zl+^ic@-!e+IZ|>uq9wsp-5O;QDQ&w3=N0=y#6WJ{besuh_Tj@t?+Ko_&{Q}v{Q%hyG1OeoVHQK@)c{U zYRR#08y0Av%%fjNCtFLIFAR-5pWbm~4j*g3>arqQUNg2qqrh`Zddv3ZVS%unubYPO?S5f=uMfB2|3hx zIJEymeh;?$vo_skmDTU&qXuTC%X+;_e5^fLc^-)cmh*Qo!umdolq8=^Mm>H7)VR$& zQg5lev{EAS+7ZReKg%yq(LaUiuEdcPYeh>#ga7&*+s5q-aI#B?T+naWD&}^=bY~4DnQTxGsQBLm zSs2f;>=XqT&FJQuklSjLMBne=`O@NU*g@vmP+hamBeB`I{akj=`*7c9`(lb5Z;QqK z70F6euYp@xM|pZP70s=?)Ux&0_I!9imZRm2ae^B;xa%;6G}Erc(G%K9O?vQbUlG=# zG`adj?U@U@?i;08#G(y0-yESdGyDh=ZN8PLe^H-)<()7#v17ML>e5%_v#4RknDHMC ziipr$`q{66EkX50rhFg#vCX@ysNMQ#*|+%(liMxZ?ZYyhA?1g_uUg(=hEsK8uIh-< z$CD!tn2gRMGSbl~#yOHRpvRMKh+ngyj)A%)KGvvCyB=LKPg7_xc3tqUfQbSJFDk9L zQz!EAwPh(}4kM0%5R$~%LFviI;IhX%R76+fC&%f8{8&9n5X$1(mN?OjKLdCkOwUy7 za$RuuG4JAf@rPWf0IOprE2AdgbHCD5BWnALI(vcw>3ge-jX8)XjIuRldNLPN`W`24 zvujI|Sz#EM1auzu>pdLK;Z5w2e!5wpKjY~JnbJmPREySRdD+tk*`{fMT~!ZR*^8Z0 z-!9g^xKumHz4~d4E8wczQus@4!=u^qAzuMPj3aOFqSig!{FDeDdr64PmE%&hLkaFsnREKN>!2m*dl6WHULZIWV5$w*&%xGQh> zF^Y@cZMIZHOVmH-?OR>NMTO(EXhADnWOv6XIjWe$5HWRc9rLIvo&=J`JS*d0XZ*ZV zFNG)j5E%7h>jzC=cA!yE9HGgk@j)uL1?V_o(t}rEbhX{wAa*q_V)^CIbsqXFL3q?2 z=U0c%qzrReC|7L550Z=GM*b_qvs;{>?9Dn5*utopuq(H>^ok1d?C|AVi~4U#5s}89 mc!Sa-C4iDDeaED!&%ygvImu^$*xIjqZOu)Y+6uI1AO06Rk26aE 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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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/27.jpg b/app/assets/images/avatars/27.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34c999a05b33b286a2e910e8ba63c3e42363c61c GIT binary patch literal 1975 zcmV;o2T1t;*#F=F5K2Z#MgRc;0RUtGWB>sF+WI1O*2R2L}cQ z2M!7f2n!Gn5fKm$5DyX*8Ws{07!wZ=79STF8yg)R9T65FA|D(g8XO%Q|G)qX2mng} zO92590RO}Q8~^|U0s{d70000000000000FB2M7ZM2>=5B!~i)E00IF60s{sF1Ox^H z000000RjUA1rY!S5+N}M6G2g7aTFqvp$HW+fnu@2(H0{lGeS~BQ*!^>00;pA002J# zmT#0D`bEo{42=!jwG|Vz@lJ8woDBJBb!8cq zzVo_&srcCG)Sve0qEU~oPv2YgowjbMiF19K`Fy-+gnura#++>(x?RiWz8XombA~@5 zVmkQaO!f}kY}dQG+hrn-wr`d`@a8u@TwVv?QajYudWDa)A}tv$SUj@w@1+jh?}TG>!FWQ+d*i5sE}c#+Kdd+HyzT%&r9 zIXSu^JbYQ_=l9f)x9cFOft^C6pYd_x2DNp&wwT&jj3hAQxEE zNaMSfRgZ@m!u;O29{Sg<+VymjLhEsl=TPB>MgixIT28=wM3(VJ+gEYdM?Je`tfxEYi z+pBn9FH^S}s;YStJp%E3zd!)}webbnqin03o_zlRmY(c;iJ(XVFbtyrG5sew&$ou1 zE%(Xh?-mE)d5|u0czCc#C(Fm}q7&X>iWsS!2N=V!Il=SwAKP2L2aS;WewWZQof;Pkff=RU^PQ6rZ6w<}Eq~ekBJO$%6l!FZ5=j)5ULpE1_cZJxig&BtnG;(DuHLV|i{yCi+axq(4aX`FE{%11pOg&?a? z5>5bm;Ax84v95J=GTf%T+bnjqeif>?NrsgF00Jl_zm~P1X4EvIdOM@tB<6k~f)&5{ z8O}6ng2lgSDVgZ+bxBK}Y9?g^(?Y9Y-YO*co4sU_fz6EWf3BA%n*RVC)Xz0#R|>cJ za!ny1duLaV@N?dqBy!YLJw)?|la1J(Mb9Ch4u|*Duejw!zE*>b@&5oprn}W7b+*c= zBwY8@(joKaq-&9V$XR5Gmjzg+KH6on+SVh*!ZV*AO+CFVH=Vyl6(uUkd#RAc-k+GH zU|=c($$5j5>!X&tZGO$9do|7#HAqELN~?wLm<18%CzvDXb&+neTcu=?OG4*3^48ro z&XV?zPVpjua#VQeed}*f#T=4P!Xn^25db=lob@2~KfCCt>Gr)2#DD{~mmM!xO0w%gZJJ5mbTJ|iHHjH9D}*;sTsVYzmLChJHk z%G4vo!P({@3@E~`2VZ?>mbxmq(O(%IdFXMu#c!0fXNEzNJx;xCTdwP?ik)O>3F4Md znO6uooMepZ?S2-v74L3XZl4hfQrjzM6T<-@zH!3D3so4; zfE=8AVESqer;2E#k~yPjq(Vb0j1@j0gVSECYz&9af<4f|QPUn7(Kv2xD*KMQ^T^U? zi?2-i=(UE9rr}#pOG>2G%Ig#u@n#?a?XHXV9l29z?5bV2xGR;e_V#s=*cDO>5&$Qt z0OL=xZ>_&0vl{wxN&f)aH5Tnl!>lw^*GdVfKv}5Ghy%n^V0^)u|<52ttuK6K=ghSja@F2=tv4n=6H6Im z;=@=D#<02K6p>)_{Uc2GI3l=NYaywPWQjvzNaQd%W6K&@+I7_xyH4LzJgp?}5iIAa zAd&qvYK~`;1!rPUnb8=dN#c0rMUpodWnqv@1$Nq J*bjYw|JfiSo@)RA 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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 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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 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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 h4Q~1<{jjZ%flI)0Z?`1OrJ!pe!7<9s#zW#a$< 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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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/36.jpg b/app/assets/images/avatars/36.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e858d53c63f55a296c61a48a936055bf7d6c7ab GIT binary patch literal 1894 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 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 zcmeIac|26#8#sPv#=h@l9eXAFPO>jkw(LY=W(*lK%#5|9R4R%HEs}~B2~qY?SyIw! z%My_+l}ISteD58R-kDA<)e2!?PVJ&o2T*aYuOB;p~?oHV|U z0TB?nNdN`HL$u5FVM(?=L0BhqHzyDUk<;YUhX`QBU3}p_QjJ|b8K;xu+@Zl5Z-Jx0XFkDYZG)J z&dzr)dR4#`%^)C=956^Eh8XH=MC^x>v|vdh`~%Je|BrMgB#e_Yfnp);fQNcwHJIQr z$iKroknt26-aZ0vr<}cMc zfurj0s&z!;m+|%_w2}LAwNURNzR+MUXl#Og2aQtNoz}B*v^)-4Op6Q;{_1mfT9OWo zBWRQxR@34%u2Zx$Gc5)q7;U7;FOP4QUtbZmqi3RFe$6Df5y%LlskXx0#{;(rMVr3s;UXq|u>%iv24C1A*Z znQdqaR5eX>Xo%v81RR*A1!yR*O`A}NLCa|v5+ZQG`TxqNr5VWh05q2Dg13ey1niG` z=xKQ%8d_->X$h3s8s3aJ5-~LR4-^BD6o3mL{F-NM=8h0|I~oq;!R`}EAzESySdtF~ zivbaUQ)KYUO3JcK3}K)gR1gjc-u~C^M}(5_YnEWJMo9U8Vr2ARXK zB+B2AyR4x9Bxm)-nG*3t(i-J*FY`CCT+INB0JcN|q-$mhF&NzZ$k??5hXoG~q<_G& z`4TDMfcghKE7-;UeQEv02_G04JT;u^33IB9`pWN@PRpvl2Djuy~13!uzRkz|kvf`5mZ_T_o}M$yV1iTsWKk05SzFbUkOVD=!j zItEJyw?)_y5XOg7f+0NAYChjU2!=!L!$P5ngRlnSxUc|hI0(0bunaylC;)_^m6|UI>jO?^I!L236fD{wgjGP8 zjpXD2?sjxr0f31Ow+8lI15>~e4AKIo#NbF;pCUJ+Hz8GZb#;(d*l;|SLQ%B$K?nMf zFi2BkP_Pdn5&)Ll43z?SAl)KCC2OhbYH2B|DM9PhO8A$VD@6b14)yIa$<$6-pTPv4 z{l@(+{2NES3a}~=k0DAUB1`z&P5C50N*2n;X%i|gZcypEjK5r#} z>jfWx`0@;(<7EX9o|nKJ*lNF7GrIuL%yX3(ULN-#4Cd3~KO%S%n1qu9Xxj>4>fnS# zhmyjUN$8*(J-Ekn0(`&*Kpc<;HiG-R8lVm614e*3upO`ioB(%VH-HBGfgpecgaiA5 zLqHsm0GtNWfD1qtkOSlb1wb)S2HXc80*yd3@DgYPx`BRR2>1j{05iZm_~OC{V~6p= zHozocvM>dh8cYYa4Q39rhB?68VS8XW7y%Xv+YdVoOMs=oF2Jt9a$!ZV3fM!~6WA-* zTiAQpDC`?-4vv7c!TI1~a5=a#TnBCp-vM`md%32yceB z!TaH#;L`{I!HN(-NFo#wItWvQ9l`_Qhae#iAmS0}h^vSKL?z-e;tir7@fq=xj)9Js z4oRm-r%z`^=S+vD3!ytecarV`-A%eux_Y`dbnodV=$7c&=|$-k==JDP^ltPx`f&O< z`gHp1^dZN^&0*Nj7qKbTmVB$(8gESNl)2u!g|=}fnnYM5R#4KvL%b1};@ z>oMCgW0)hElbCauE16#~4>8ZPaI?s>7_d08>}5H`a*m~drGce~Wr~%RRf<)Ybth{8 z>p|9Ytan(OSl_e$WaDAm%x22w$rj3%$aaJ60oz-)DRy>tId&s<4|WQBB6}`-9s4`> z9~`_KN*pK-3`Yz{21hB!YmRYFW=>g7W6s^2QJm?VcR62he&%B4lH)Sv^5HtbmBCfP z)xkB*&C9LIZO0wNeUkeY_Y>|B9!4HH9&;WH&k>$%o;sdEUIec+uPHB@_b_h`Zv*cT z9|NB}ABt};Ujkn~-*dhReja`eei!}-{tW(V{(b?3fSdqI056avP%O|cFefM`Xe@{o zJRw*h_*!sQNJPj;2rCpXR4CLYG`9h{!F)sDhU5)p8+wK5gf|QC6b=`@B-|kUS%gnS zUj!`@FH$VhB?=eaEb1V-Pc&Qfndr2bxR|9_u-JLAI?uQZFajNs^C>}RJv7pRJW_fs#dCgQ`@YDR?ARpRcBYX zP>)eBSD(~S(7Mukmf;aT662l1Yiltf`)9wCMvggqfvTyxDVe9&=~&3+C@E zq%3e2c@`6vnwI-4A6U^_?XXI=>OhI1(5PJ0#CGlN(c9~HutFK-`WU$v8Ar~S^1ogW=k9rimscI0*RcD&^{<7DEL zL?Xz2T}ZDAQ< zKf+zY??!M(5F(yMZjL+=IUHpXb!{KrKJ>mv`z7}u+W$VHTd zv^;q85X+&!LoKl?u_>|N54#?&JR)}F;E}GKO0{4ca+m}C@Q6uo%j;%p`+^Yta8 zO9feCSqWKlmjf<$Ua`DVdR6XfdNxCLSoX&pmz>Afbgt!I7rvfweenk2M*mHRoAtTc zxw*GQZzbiy^Fs4RZ+qT;nQxX~UZ7ZTrBI+S;SO*o^v+n(o}%{R9mS9C>f9~3CwuQ= z32#Y!DXcWIbfV0^tiRm7{8h#Fibs|Dl_gb5RX6TS-p{D!uTH9AsX0b|Uewe?laYs1$M-^W=-xJ@<)tmlK^xf6IO?`#^TK(1U&E7v7a2)6!L=S%YK>n~WbmSxZ$Mj)| z;oK3mk^7?-qc6vHjSYPY{xttN?hE&qi{l%|?|n7;`fS2&VrY^yN&R+mYQxlx?;779 zP1{eun+ckkpN;>q;m6INIzJ!Jxy}vGhc7TLoLk(qSh=)gsfQW_e!KVruo+{BzF2Ql z8}LnI9N?g(0L($~$pA*}295x1OiWD7Ol-`|Y}~9Ytla#ZY;2tTLcF~Eyu3o(Y_#y} zww(BD3}a_yW#?e$;^5%oaiHbT9;*4o=U=z(kK= zQwKA-5pD3M;^Fb0kba*wPF5~;2 z6q{n|$d4v#Ov*Aq0x-&HK6(ubku8WZch;g{2UbP+=Mu>O7J=FYupwx5as!6Iv{MR7 zc9TpBYCB3M#UaJo%3mqupr*_Od@5=3RL7j3<>$dSbD3HU8P#@oKWI#i;`>HAGjxON zpPtOS?8P)`#hN!ZXM+7;nXPf$(4%svc;qk@kU6NwX(ic61#TOt=;l0c7V$?O2pjft z>|OMVXP)9YwOcoEq1H_8q>4U90{z*dDcUra8Vh?0Rw@`sx_qQ)b#q>3_Z%peIANJ@dQ;Mrh5k<{tyH*qy5?@dACVF0G z-e-|S%vf+{b9-{-jJNzd9#1OJnpiVl{qp=7^wG2Sv*_ME3$rR3a~Uz(`@|bwZaP#H zlfleq^*JX6#kZmfN9xNzHN*CG#9d<24irJ*qn3ui@i*qv>}kbMdw10r^_SG0U^FQ| zaAiqp>H1(#qw||)WBj=qDj=bMhJ;HL+R((KA)YynX+Y=(CpAn~hP0G+SRKR%?~y;~ z8CLLybHSxMl)ZBNhSz~?j~T5>FTX^Q>c-}cvr0u-jx~8jC2^FGh@Cyn+TAs{@R}E{ zp&2piQ62fGz+bG;1L0TC4+e?e@_gK&b43Cj&s)1Q)yLCts+(&F+i3kM_8u@--pBtb zT7AaO`N?QaVc`spA*w2jkY4)a`>cD}=+a!abj9w5);YnppxJ5Lyaem=!^vmJx4UIZ zuj{^CJT)7IpJOplxUp#eypCXL^PsMlzkn<}i;fM~7~i*}IB&Y|I~CAHNt~!R;$?0+ zNH@ImWc1T%h0e5O^aJmaa>Ie^HH8VS0Zmut=WO@g&fZ)h-u%|F_-3RJ6|ibFxLuJo zk=DJ$7*kLnJtkpYkPwwucbG@LPK8 zqu_9D=1W1zTmykk)K_bIO4crS+S>NKRn^AK0(}o*+4?E=z1s;}5{nk4YR6*u-4??} z#qydAJ0%)E8RjnHM@uWxi}Mz<1L*TbKP@G@468nku=d^3`DU!8xycf#rm?XiW>?g( z^GNG};dQk7rjDA%E(x#nAU6JrkJg=*#c>>29}F_kjwGVqcei%Cf~a zUa_?br#tvSgLf&-rq4@NMBUaR>nU!@24@n|s3RY%cDhPUuQFsv_vGP3;9REZ^Y_!w z%cip=Ga2)IPI|J93ijE!bfBXpXKpR(le|I|dqer}_PM_Fim@0Ksul$H_-FQ<5yfB}))L*+WlYd~hTH;0v-)r1vI&U$uxjC;ifo&F<9 zwYd+*c)ahEQp~J%JSN3aLt>oIl5%P8_V7o8d}|^rM=@p zx;AcjU$TAiSDntY9}bH8=gu%>!W2bHM{cWXRw}t1*v(vZ(|P0rtLMv>xY|8Iguqh$ zpLQ`7yPfppono9H>Jo1|nHS^*qNIeo`l|YnC zL9`=jw`>mgcZJ2aHw7_cILo}8J>E%P1?AfYeaH_2Qrfj7v)a7iMa+#MJSWOC&t2o? zG427!ovjHpYN-IV^>-h*_u_t5*4~bhdbJ7_K98vw23NwI=4L9OFH!hmXv=u@B3(>l z**9JP+r<28Q;{2#^beS?-&;Q8M!G~X31Sb)h9Ou|?Tf*s2_kN3?*UsAaq~eD;m;|o zNBJusz1(y9VHM$vlj>dnCyxuI^511Noyy{F zPqQ!j;vF5MoxKU6&qDNEop3Jox}imF8g65y6%QLdgciFmh%BY;+A8(&d)+Idkc+Fc zlA<8~F`y>y+48R4dCuRZsZ`%uI*co2E~;Qq5ARwJl+Z{&^J(;l0#nwaV|7p{Bhn{t^K`|_!PyZYC8i{0eg_cT=Wu{JaJDq8Sr*ULr? znzglW`V9++R@q#?V=4m!#tt0zIP?~o#u0yc{&6cS{*$+h>fA9$L;vQYnPXi>n7Gav z^={YeFRu3WdI^5+k@)VNQ2TAi1uDRA_#+-{)yY~au&uLl+Vk6wn3lQ)x4hmb^WUg| z(4AWsa{ZoWl-z%G0VRJBxV(|$P=HK^Uam}vISWcA#gW?nTW4U};q0msTt5_rvtF2^ z0x$DF^)l^gBZu@T7d)E1S8i(B*oT`woqEJL^^}EP%DGr8go8JL3itle`Y~oGO=70^ zM9iS`c`A_Z6w^(#o}X1*B2S#rzI$eN$D?Zs_i7hhLQnt5*5+xnD2ObHi@DVWF2%P@ zsX$}dC&tC6kHB{HEq*j3->?1opfFH={Oqfk2D>GxBEvytaN{dgs`gp59%UP;buF6P zr>H$=KGe=#>N%|YwX3hECpsZSPmT9@YS`(b4{jJH8L`HAluR;hN-b{$9e=hqO{s8^ zcRt9~1=lWK^g3!AW7k|&LWt)~hh$<*^}~jmuDXkT+230uFXIw}MVcHINbfIVqD06% zPTkW}3tj@TXM+#XbJB7&w1Hv11TTV1+~g*GUvs{ z1Gjvi?WkQ4zF(qhdRSDlmd)%yW9m?Y?v4ssu!E!8php-G*dFuOC(g6dOX_pp4r8@0 z83}Jf`qE;$0%NW>W#)69-FMuJgxd7;U0<%DXMoSXISUkGb_2L5p5M7I4LyzfWJUjc z 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/40.jpg b/app/assets/images/avatars/40.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ecaa03810adde171c6790ea1215ff8af07b2afd GIT binary patch literal 4101 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 F`465DT;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 zcmbW!dpy(o9|!R7>}G5Yje|yG(=dry?kvfcDWXIYF~yKObLpH^C#OWBhAo$bb|#L> za$8Q3I~|!@=;pFXl3GPcIXdU}`28M_-(SDqdA%Q>&mW)n`|*A}o{!J!G8g(QXmtbmag42(WWkm$zoEdZ+V~-OZmtamd zFv3O02ZXcYl5lo7i>(T)@3N)#%2`q_az_%0)bRSs-sZqWF4#y`Tx%9eLz_r zZ~$lCOe zYkdHs3{}xFb%3pR4}j}NW5_47OXTs}Z#AoW^uHyT1;(60D5(9QuA!;7iKuU2NZD#` zVQFRUxWkD?-|5WQyU%mKm-hi5X3&wN!6B^B*tqxvc4AWU>7UP}{c`qPdd{WGoZP&8 zF7H}tS^0JTuY!u(HNrc!b@dI6Ee~4T+B-VCy2S&7L&GDFN5>{6r=}&+nU}M#-pSs7 z__(GSe;7YG3V&04$vhW(dIdCesUfq)_K?=FxWd+mUgAy6Gtn2LitJRo|#F8QQ9 zW_xzYt!4z?%;T+UU`)S)8i6vQ_wGCGFWLVFJN1ub|Azg?H3lHTpta8fD+5&EZEwFb zk1=PWHNcxYPMW~HGtR5H-8q*8_}3saD_xyY&o7#wn_@1O_TYAS^tu9Cb1$iBMeFMO zg$D?OljZ}i&1WNrOAI#j2eA%PA7LMgzy>Z2y31dog(R-=MRp*ir4Po zjeSb-5Z$uKcKA}MBFdM05kF?L3KZ;T>o!Gtn2e97ZL;h%)OE7NF|XUfT{%*p`TE-7 z2zQuL?MLmC4IOiyw3;idG(1w^dCO^x=_Ex!V~SKd$zftP@qSjYZshZiz;EISAh* z78gMhnn2b+m%a+?soF|RNWmD$+B;ufy(b)cEuL{}X+b}Yay zeEc$u>LdxR)>>~w|`inOMFMtacDz7eVhnG{l!h(q_W(;v}eeB({x?Hs8hT%U}rX_mw8Cw8cLXERc1)!$-k zea#%m-v-y1!AkE+zip;z%$%MF1!Qf=(;#S1iOb76)cR3(`vk4C(tPg|Jx0L=ODp$$ zVts{MrhUy&{0%2(=Xa&c#4W0cK^x9)co57MRCsCf$6d5tu*d5c@pa;o*8ZI@U%zpQ z$RgUAIkhUiN?@B<=j6!ovxaM4ACXP$SrJ8<4el>*wAFX+Le0AWbm-)7$NI3MTRDHc zIhX{~G&c<0Vkp|8I-9|(F0PYsVvD1_uk}uqr|gsTsp4BI8VHjqwvUqZuQH>tIfj`{ zTv0tMz3_a?OhXkbfVCh8&V2UtM(AdHLYgI0opdVNPk}DBI)L%}LrQ|m>CIWQG*qa)JRiKzLYGL|$hjyvBp_(dX(*yn7^1(&$a{rtA z8?T@^o^~X2AE&~=zWHPaLT)xFj##aAqwm{T(X}RPnjc;Zt~$lL?0u1H8Gg`$zQF&16{5`LMvZo$fbX zx2a0+1SJa^7_B3kRd+vm7OK{C;?-9^SE3w#A63)`O-DA)oatZ|%fjqiWRqW9b5pp; z906bsOuen>W81W;%_92p#)oc(=3brZR^qY@}PieTEVOvQb*gD6% ih$uS*ol>@NE2&0iU+Il-^I2#iZR#`AAPG;bj{XVi+pY%y 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 zcmbW!c{tSF9suy)Y>j=Lky4pti^!6FOF~Fv&sG>TmXPc+7+JE8;3Yz!;FbDzxLm>xUv#N2deE`Z26F8};e@M{M4K5al zP{L;wvYon6*MqbgToqTw+>T@C5IQV;Kd8`7Y&V!FPWHH+t}J& zwRdoI_wc-d_44)!3JwVk3y+Ar8=sJvbT2t2JLk9ixexLlJ}N3MDJ?61`mCb9p|PpC zrM2zF@4bDm`bn<`-V6;>MyRyWvGM7d*}3_J#ji`>*48&Rx3+)McYYnXKmg=#7Hj<* z_8%^OmJ1ApLZI*i7YH22nh<^{?4;r$0ewrjTcDtr5}pllA*-;ihy9eY)hZHmdyqp& z{M@v}+5zn^*?$L%`@dxWg8kby4sbz0tj~k+1A4%o^s&ujRvGMMQ~&RP`Y#Ko6d(r$ zNyBt(kYa=z$!s5}7Sdf^SB^m3PU*(~+T|EuV*<%cU>dO+U0HGZgkJ}j`{q=*3nhgy zNPoDi?@UKKCdhBTT`DTTh`+$1^R_;Kjuu4YDQ^1C2iU6x>Qk*M5& zC%@73xJv^+w`X7*sK3iU!2ArVlf1;}jwbGQ#H?RU5CPSVV?G5Qqn_F zmDO+mz!qONQvb5&)3!{xDhp3tqy%KMRZWc^%l3>jhPsz+iGY{@{*JA0etNXYWKpYU zS^?OBgl7UcbK-}}{N^$}%Zevu6kN;~=gqh;#F{Fjb=Wd#=;g(=E(W4_x+|%~KG;dl zy3a~)GS6_^Uh%O<1A__B=fkTTcKsPQ>7>feq+UH95iQA++7oi>ljI{hVOk3c8sBW} zI_hz}$^|;)+8A#g_c!#Arx!%L@6TGYo_@A}e>EmKct!QczU)M5@S_EZ@oe=EJ(O7; z*%<3pwO4;|m;}}^F4C~A<`#184wF8*cm8mGQJW6W#h-Uu&-q#T8*TIJmY@6#H7r0r z*uz!0lFvwi?W^y6&}k>WY@DWO$*nn?+G_KVJ9*76h(`A6t_Hs?Sq(`I+XRUtQp3l; zIUN_glF0Z>0viYS=IRq-NKBx{d66Nza%hSQ-5+Q^&Ho9RDS)oV;g*Xtrc;V4R(h6} zuRA}s-kZPrxVrv z1iBeRX2^-1!n(8suhA1R5gRcHiyBIT-yQIHsPI2%7_wV@AI3AogL>KVie_u zGqJYBCZv9ER=Y-GzB~@lfA4r7o`7)rEv0Ul_=Z4u5x#@UW+NhP^)t>y0Xm zw)Ia!ZWCg)g`;3a;#Y4wnm_AoM=7RVIFXQSU4pKOqR3~ z#r^D(f%2Rxo3zQEq6=@Hx%S2E{YE|e*Vg6nskoSTi}K}t5mEu_KPx`_D1H*d?JMY{ z2RnYgE8d6+dysV=r65bDA>WcpzbTk33<&ps7btOGtI<7cgF7U7efc}?;i_WV38A53 zDnc*s{hc2V)qdD@K&E*xAJ5IhLq|^?VFIx!+k2Y0L7qUo3(mxmT{H!wQYp0%u+ztd zg${GgomgD5_U82ibq#2+5$4GiWzbB*sSYfMqtoum7OV7XL@p%^44>(O>N`MuGq`= znrkk(S!GjIA0zF~PH2y;Z)6durR^Q5?l56!CO6iwUP}FlIJTgJCT>?=e!U`i=O!+2 zwO?Q8fmcP~z0Byi&LlK(&PqhALu$C;cL=n&5$=kn&IEMGxl+> z#KSXDC-AawPU~#xjVAJ2+WJ%OkMM$~XZQv=>QoS+zfQ%eZk`y~t|iciZF2SLi~Us4 zm^aj}t3(Z;S+3c&gu8&v2J&l!r+g1vQ`FA1^BBWo%Y-ENnSeO)vj!6&rMtZ|$y!Hi z7x->CW^CNtBk-QEmlzXk`tkIAn+Ck46YUqWQIs8NXG<|#%pn+1OYoygK=^xUpZBs3 zuauY1CbqTuG`;d0!NyHrt@fUYw=Ut+B(2`5B72R@2 jNQ$2Jb;4rvY5KyIE6SS{uw*Oc%hzoLsm&U^%&|WK+s1Sn 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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 LY!$BooX`IT9~nUi 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 zcmb7F30M=?7QWfo!34r0EgBF(5F`+l7J&+pB?)U-Who{hAP|z61OydDq$<{;EFo0H z%2F0Vtq5Y#7TNSGYN=&WqLoGEiC~4QU=>X7fC_!@dwt(KGk4~nbN+kIfA5{Sqqw6O z1bDhT%^jdnDBuYXpcux5(x}uZKc=rc&C3l20Kj>&ghC#g1b~>s7co6tNuis=NXp$n z8NeuFERI;{;^*fzhaq>)`M1kd-#oY58p-vy(Eol=7r}x6pj0507(0(YMlgFGlM%dK zB9uVRCIoY~vZ5glh1g0I$fQD?39(k}BFtWdqq$-Z0N6W_!{-P^Fb_5#VwY$!ClU6A z82uI*GxR}|FaU5i0swP;!51b5ptb@4eX|AMDgyv?Ljbr)S@1n)&dmc#uS*<5v71YW z(r|@yd|#n>ZU%sIE&#JR3dNgJg<`f0*0=}26&@!^lsw0UV$c)-5_w5b@0=}xR}C&d zC;;9~q0SRru^WP|Ak{0HwFznkYay0Lb2quY^B2a%xziwC1zUTJ$UO+&9bwt;Ka0F&Agx!n*HQd4AS|;o6hHd|e)CDax5PJRWI| zBPNNsVy-Be8@&eUJO9li2uA` z(6I2tso-!}EKW^XSxH4hO+!OnO+Z4hTdy^ESIwxn`nFZgJgM8*)Yy>4w>MLOBPWgoPA*{@ygoDj zWLaTtaEwl=J8efnL52co`IlFvu7SYs)8JR4V;K$efTG9+c;n z2bABH;?yjCn~GoLeXsvR*5r%f4Kbha8;x2WTeJJN#GSOVcHC!_)RBL3pSF|Z-P~k? zdH%Ie&wo+Z-(wqfN;S3jLSuljRp&^|A?BLEFrKdIGE~rB$J7e~3&Z1y;tQ;#Z|p;u z)puM}+wA0O1GPPp4ePr(!(oPoM|;oM2RBIZ`RSgvt922Q! z%{#?rx%K`T@a&>@&v30;K`9S-)-iKFo*M9xQ93^-T$Ot1ZZNi|7UfpR>$hLoFFXBIo8r+b-xj{!x1cZC z(ZaQF%;s+KH;g}~>AL6W-PLMJL)0frusaU^66^oEWvH}6y32O2X@Gs!ST0d1$BO zN5z$u&JUbVPiC`r`_M0vGwZK4nLcJdVHC~O9Ex63uQqtyuqXOf=p_{{6%o)_3cUmNJv& zGe(!6r;KuCoMoTxJ`!_oHDgoTneP6aZCx3WSPTA=d!WwksRCT0%4wq~F3g-{g^6|b zNA$@9k`>;~KBY910RdiE^z_VjC$pY-@9SM(r}}$Qw`}%tkO$g4)L~-wR_7@MDcSz}RMvCr{q z*+v_$;MI0F9YXeG#fNt?_s@JJzvup`phIx@%}&E8*YCge-%?Q)+|si>!u`PV__)yn znjKlw1`P^OYh4&xO6~P;s5yTXOy+|UmZ&buQEI$ zpSh!Rt}AP_wwI7Cq8e;D)n05v{Iw#wM*LJ7P(5hE7297JH_oUV$z|?i?H(y<=Cu`# z?}=jU2rr3f3y!!I738w~H_G!8%G%9Y`wQ85mKA-}vtCAwuwTFX%6o0D`z7_GyhnL= z*H8BD%TEKW7p$&?8{EL-XPxW3o%4b{V>Xj=E>*kyUcGbm6;BdhpfTjso0?|j;qXzX zEIhIP{J}^4-Y?g8@XBqnefe*fU`1)xHA{Ppe^K(AR;y>HtD0{-{UvI*^5Fe}8%CVS zF@epkH9_=F)tGP3p$+MDCN7cc{Y*R|ZZ6#8_3Fn20d-W_>~VgDX|_`Sse--B`hyCS zMrCVg(|yFFi96LzLxH2a$i82A5<3A7=WIB($@Bh@aCBs5w$vk|px|Ryrp%SDJ?Pn| zor;P`-<7^S6N{IA6wXp9O~&t{mZ{JyTTIqmSMOK-vvjdyE%WJ#EKI@HsCJD4oz(aZ-O-Pb{wKLx&Bz)wUnA_DCC!4o+z< mWSh|HJ%h6++K;N%TO6g?8tV+JdFJ8SBgBx;LbIC{{eJ<=s2)fF literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/47.jpg b/app/assets/images/avatars/47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f736eba3de5065a059c454ce507b88285a65daf8 GIT binary patch literal 2561 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 WF^AEQNrNAKNGX*b7gQsuWB&mx3-yoy literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/49.jpg b/app/assets/images/avatars/49.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a71e67c8f96b4db7ba974c6a35bb4c5ba22e842f GIT binary patch literal 6148 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 I>(0CX0457bkN^Mx 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/50.jpg b/app/assets/images/avatars/50.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47498194a8cf93fd4b02649fb65a3bfa8c2d6bb3 GIT binary patch literal 3797 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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 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/55.jpg b/app/assets/images/avatars/55.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ecb6dfce66c18c611c69b6364921f5ff3fb4a8d GIT binary patch literal 1794 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 OXP`9;rLOfJzxfYu6!5M9 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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 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 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 YJ_Q+^(%!#OVfVlgY;~UkUp<=s7r+HI+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 zcmV;;2{QKo*#F=F5K2Z#MgRc;0RTtjPf|J{XJjpEaAjv8b}=q6 zASiWnX>MmANlHf`N>D{dAa*t~DJ&pybzy92ba@~>AUQP(|JwjV00RO70|EjA0|NsD z0|NvF2n7WM1O*BQ2L=cX3JeSj3JVJj4iXRz4iOFu3lJ6%5fc;@6%`B*7Z?^47!ni} z6#u{g3kU#9080S@5divBA+6BQsNDa)Oew z!qN#B7$rkuWTNo@+5iXv0RR9$0E4jx)+^O4qMVzVrf=rTLpEjiRqIZSI0bjDJOS+% zJ-A(eXr_{*FjC>_4KpkhX^WXUesHx&qJC&4bH zf7JW%uiFZd@-DYXsxmiGQe~-tkET6Ed{7Ub9~(>NL0j3`_d@r*Au!$Xx{`54u(1@Z zmzX9Kx@6Bv0q#Nv^&BBHsgbR_M9*S6ivCop`YUQ5HKdS@?*NqF9Tm>nolMY;Ba>1> zQif@96BYz-&Nvgg(mmi4+zvT=Nu_2TW7H%?iiawhin}nV-7VLt;Ygn$WMB`l>9)&9>-a1NX@kz&m}v;8Vd|5U2d=1K1u#8M%w3B z9M3tijI{;gx?LQQu!C^ylfg&7bb6!D8h2tH2Ww1dgEdy8kHUJJL!&~+7;GLPJ<3-z z9uChbe(9YDxn!IK+RE5M0vKb zeIt`@_Kw5Mcw-4^-gd6&4xqf$*zU(bU!&AuFNXRr%y*7p{rGKd8AgYwSxzQqr71EV zir-3?8~*@Rg>fUxpT7ZZ<^!HIIp|L-q?b=@Al&i0b}2u*!xT=|Oq~f#QmdAo2)Bcm z`*9~S*3BzLX%wUzE?7WPM`g;-#@IHcW>o0rjx-t}HCYHH3F|L7FMrt|Rx5U3(xI9& z3Ug(7zM2eYcjLC`zob2T@1D>Py!c`HuRB$>rPQ}5nR&+K=9iIT=d_4PBidJL`xEAI zgK9N-wVCoKPLlMwau!^5_g1ATY9{29*NsJ_TWZu8VVX94TIVtVLv@4;x`FyoJ)!>L z$F}$>*35}R)*35yT6~D=o|gBb)EOa3aX&#sa~~0e4xZ-u*(!XTr(Qyuj-`~LF7j<> znEh2^6*(g(X8MINAM)yg31}W&b{6Yuct|MaA{6CzWq{ADpRDMJAm<7@8#c(uR_@yN}y5VM}IB+qVs48 zT)7e)=^Z^}?$~>V5IV21RCq2uD<@SHgmEGTMBm9S543sV9RjJHG*+az@?$?5GL`Gb zd=)V7dPw1Z@r$g*SEA~y1iaZ0>g^|jSM3h#{N(*u3!PAtE+Qk#x@vUwZy{%z(mU~8 zDqww5NZ^?YZOeDxjwQ8GbS_(rl4VO*LfPv|M*?wm9=^P{Pfa3-lJ!mR$~u8^3GDCs zuydw*K?yIWtC`lBP6N_MWuEPEYh`_y7*+8e#z*DI9B)7)? zIHptQdxyIcVZNlBrD3ye-jMv!-QR*LEp;@IQ%ZullGV-SB%A%Xx<*#dS@5L}l{Fml zZP!C>kJ%q~5AuGMS6*pDXUUhoVQdun|FWe z7!;C*3Q3BW`Z4pCs|;42c##n9tQ(;`conAO1(esT>^2n%sPCt%a0B+@-MvfBS$th^ zP|zPa$f~!#__l$yK6R$sqD?o4(u_~@V(mL>>JkzX5lFEA0EmC90(p~Y%|*^mls{d0 zkm0aq18Ha;;kqyJ$I6+cdB-;H%&K(p7+K-@~sJ9{Z(IQehGU>AsK)0F2OOc3C9PCKHX#2s4DR5JX9EDkG;%!Ao(yc}e$YKaZx#jnC#Vh-w_X*VcH%u(jKN|TS!&P7g134Z~8IU;&2f|$WFk3?q-8KoqT~#@trQf_gy4-n+rE(4_0X@P;(Gr8^{}VR zc|$m8wQ;w~d6Lo-pXsfH*#ajo zBZxVDls}hqQ)@_45Tz*~^&UKa0|t6o8LHNsPLDYPODGQ|C|^(sxcJ~-XS&4NZl}{D zMv%6n%3ntNW7%;wxCD6Pe#gsnywOH>omPOwLJQ~t#vexVPY!*@u#O|E9NE;0R9X&t Xt<&JO&_j; 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 zcmY*Z3pmqlAO6n{Mox1`Z<=gKlUF$;r&^R{#B4+=wAqq#qvcfTU>%)bOX*YbI!sxF zQG{~Z7>iP?;dK}~n&Yd3v~L}*uJ5~_>v`_y`rX&>`rXg(dY(u2QZ@o;xZ&_P0Hgo_ zRQUj89{|KoMsRon00JNY0JzITQb5g#8cm@A)JO6NNHzeZ0APjhkgs4U7z~C&Az&~B z3WI(J3=UJ20|tjHDJv^0!Bu`h?K?Dn0|bUZU@({p9Im3NrlO{){aw*U{Lm3UN#hs& z&iTKM>=A%~12_N&1|a|i1PF`($=ZM%0FYY($!-3I+zlA21Ob5nx$wUV6s7=%fD|_V$s33OLr_o)C!!{qUeISbGm6$a{n(kJBNGEEaz_dXFap2=@AA>6O)j6C!8P@q zL_J*awH|8WW$L6WJ*Xr7tqiyTz8@9RSXDYYHQ^({ zb}M~C`v!7V`?s}rt_Yp%U&$MuJ2bPkCGMGr@&jxldV zDc=)ydDVC9K(?Nh0rz+{EWEPey2{s9Wu#7`Itn*Fyl`JNXUo)`t!H#+uspFpk%PJyfX0@*?DF+R3RH2cV;oa+L}p`5wEXlYjt_@sDN)x2f@zy`skE_@#uq|K z_KoNo;{hR#)5qLECXckh)#G_#=qnQuUeHX_cP81l54TxczR)c=PLc41Ss0v*Sc6> z%h^7>NlVW$t(kt%2a7jKEAv9_QOvra{FD`#Z=xe`6Np>xJjEgl=k!+G?d{Md&IMbA zgZ^BviSBl|`;-;6M{91wOw;J@?g6oAJgN$Ntsn2R2yGMD4F1&gLPHXMuR2Z}yt?BxVoRxd0}*OPr}^S5us zO?PLXF~9S2f9}gLS`I1A=qf4tKY>`E_GHZEU2cbsV+~YqT@G+R96j7pJ8<7`HVPTy zj5S186_iy!r!KkN2`{$YVPavX3i>DY9CUnV|ABc*;pm3R>WhlB4EEP|_7kTV0V;iO z^|AVnjm)fkbzE4P+fA6OYsVoL1FOGePnxcoTi(xGOWTh<{8d$uh-gpdE@t{Kxea>9 zyh!Uw{EYi{TQgUACq}C$yW>&!_N+@?yq))BdP}Gs4Afyd_p&w{IdZ9UZyCGyVzwO# zZjFxB6*OzbAg^^caB956lkpx$#3ItH)LaJCG#tN)ulPIidiKP|;IF*$=7S;TZi}_) zTaQyp^^blvo1AE4?0)#F{(xs|ax2rlvgCY<)Sx`mwWp;AW$C4tfgZf;;_;Nlo-*BD zxBkIs;;XRNQRj(U_9upJmIkNRXt zljP1cX38AS+srOg+!|JYHT+6@9J&j=gtbqfuNSv_wj^6UIw}J~+fRYXr&8uZ2_?cb%}gbtdC^~S6}N^eW1Y`C2Am6pAyi~lKy8|87^DW@zy zg1MW1+;Vo(@94^hF9J63MkS|`uSoEkHzR}oWtfw+<1mJ_x*4|P^4QQVB0S{nvnS%1 z$&l0}#_D?`TO~3;uUf39cgAxC0^;m`@M!TC?g+`u+;euhp&7}YAMB0EV6;~FdpWS? zmb=48yIlU@hee6T+w3m9m*kt|99YO-OHyh!ic4S~)zQtFnWd{o9=!6{J?!T*A^(gnN(7^` z316wHHenlL$?i^3J43RynME@O-vU{A4j8Bh{Mye>62Xs!Jj1OYOUC%_1vHxu~bG}X=86?Rw|5F-PkLxJUlo^#2rG>4#^5UWz3iaONxO>cDH z2DTQxSqU{c;*inAu8ZJakp`|k5OQTs7nKy0AyNuGJQb4uyf?A@WPk0cZ$6}BMa%eq z@gvC`x4lhuimB(D$()-?b$rReiGl}UbXO3$k7iS_40m|E2F?+lW~wU{BQyKynd}n< zy!OPzlVfv*9?p7*7H6NF;_+{wocCH&-^~{Mlg~yiJ>B!%j zMv-%t1wKum8i#g|G_RU-Lq<~Gk~~}B6>x~x6DNayw{YSc4x!Mhn^qG}5Tq9eq+eQb z*V=P&&{gcUORM_y0EHa2H;FJ5;p?%lDc76ZW88`04P6jaU4PS5gCba~Z*t~C@y&Wj XmbI;`HxHlJc*8mCSK(iTmA(2ewb}|c 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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 iC{T;!x5d6>m;~tIrMFx1_UmB2JExjijU=erTou literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/61.jpg b/app/assets/images/avatars/61.jpg new file mode 100644 index 0000000000000000000000000000000000000000..329264f2000d5be7c5544ec6908cf7465e05337c GIT binary patch literal 7344 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

iK3lr0k!?eWX=jkBxA0dQ} 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 YrNyasD-LN!1$HcBK7N!d3P1k80HblDG5`Po 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 zcmb7Adpy$%8~<%=%aobhFj?B%DJF(9NwU|_a@mnwvM%E|pIk~r4s~#j9CBzhxvR}> z)`>AJ6^`s39jlQ-E>SMgS?&sFXMNuH^LgL*&-eTM^?bjd=lgx0NA_Aa38;FI$Rq#+ z0s%C60kToR6@V&2pb$kU6at08pu6CzaJZ5ZTtfx1TNS0Dt&P&q($d{)h|xu3^|ZA1 zS?t3a8Jn7!>R>FbEKRHoO-xO`nt)(17g82NX3oi=u)v#$R1i>W^~$bC>C;C~|iWh58&A?1IP=l_=s zLRy2>6x0p&yZGQ`BfxI?AQ-8D1e^g6iRMC_$Haz3JGU<=ETpKUFS6;)O09?5UT-D9 z902iDCD1Wx0w?ZO=t|mnllgH&RPwvZ?Uyl_E!d;)N;0TpSMK~(+e)0=;KFDVT^#ZD ziZ$b|_dsCTS?`!FQa-Wz0(gtVDmUVi8%=F2zX&3zNyT4X&oCWsVoY zDW1oIr#GK&_A6()Sqs$$2M2OkCXUaCK*zEt^U8HHj^2~(w_PoW+leFy`BZb)?1yTS zTjTSkj@(&bPo2*Pu+3JVD+T)AGhA(OJuU&IL0&y;K7?NlVbCrx7?`D#Kj^pO#mdzQ z9-`!7X~sgD#V5h#n~ja3@kx_wowt8!o5?>+Y_HCPJyyx3XM5FEAH=r=Me2>;x5X1? z1)7EEz;?#ZhnRj}*!@mCYri8|NfiglS19p_E9x4Ssp2kzZ3 zR-K}Kl+gI*PV`<+@9OWB>g?HlE%(tD*EKFdZAy#Zo-m3+)VLK#x5S9OtQIBg+yUZ@ zz=zAowSFSh6f=DpMs1P0qQ`R={7ZD~#ce{a`r^r>miUs)ku8m>4!0&L?mAfe ztQK`s;TxSg|71s>V{le)!!RyoNxwIl=0Y!uJ;DEd;j+WcI(Ia00@7w_Ng-D|deutj znD+6{p8f%eV-Zph<;An6p&UDv@!^>ILrM-0(hc~Z@^Q4?-2qUJO?anL)9hweB&OK8 z>45q&%KZy5)at44xg6EktL3lV5}jRtT^t~npA=l8+C@(2lzsdDej}&qct3GIw4!j7 z`Pu9B)A)-XiAki*ephy8MsKDL=0b$Qfhc#OBe^zej_G`=@JvvI#rC_9;xB>GYX!Sg z&*Q0tod&(^uxX#D@!KT#S$%OXZlim1{R(BhE|HTw3*EqAuX*qNlxVk)ZQFIbDp<71 zwG5I0P2D<<1I`D@rER*x<-*ajJUfHHp;_jWYr+4}M3wYYV%K|enc=wLZQLNQEHifP z&ULp~R<}Gkh$n5DP#N}C)b(l$$^@=r4^t&lI=k7u*La>k9M~~QB{?Y!AcQ++2A)U4 zUga;G^4*B5**La5{D+~(Z@zcD1A6=p%pyKoRdojTQ<{ZFdEGTBe!43!j^7-@4W9Og z>DTo8Rj8}oP_e{J;UGv(tK0e88@Tij^JXk(Nyyt#8%?l4f{$fA->&@ymtj{Lh~gd#vyGc6EI7YgQk6IKRyJzzFX5;5lZo z=ezKtj-IQ{JOO^~W#DN>;7oB@X#x-u;0`QmPdcee#p!$pW6oO-z0^dt?(al zvzLUtdcv;SjPFZLci;z?vnu&e9`|7A$$DhkjU0kTXr+Xj$s9Z3C>c4g$MvLG*~@^o ztoAA>gkw`F%&9s`>acDlT|#?!Ezv)b|M>y?gO*}o>7M6PW7Vuj7WZ=VcW?=KtXaUS-`S(K!V^E^GclJ<45LhssG_m_#hmWwa&I{!E(K+IW<&g{XbDoYFpu z{`YuU)!fYWXxnVv0@xBF$;2@o*5)uy(a&qy=E>VykPL7s!u}ROxIE_DK=8a8GOyWZ Xh|g(dLr`dMoT-v_7ec@0jBNOC;hX@Z literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/64.jpg b/app/assets/images/avatars/64.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d991f98e2f081509624f89d83f48b4a185f019e8 GIT binary patch literal 2950 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 HfI0IowrXdz literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/66.jpg b/app/assets/images/avatars/66.jpg new file mode 100644 index 0000000000000000000000000000000000000000..edca436cd5a3b11f2f399082990ede400befd618 GIT binary patch literal 4042 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/67.jpg b/app/assets/images/avatars/67.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85e6554a61abb99b218ef5309bdd683e5310b7cd GIT binary patch literal 29871 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

    LFVm|ywUrJ-Jl3o6`esTgjTH> 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 CH91ndWK3g|x^m z!aZRub19V)#Wb{y1XEKpDH!)M9U-}N@9q9|&zv)#_rLFR&i8#k?|Ebb*#w~G=IrVW zfD`}#BtL*W+3I;L?6{s!1kqN7`jdCqCMOMDOP}!gOqgE&ZCc}j z^H~K?78ViT+rD@HD3pI77@@wy!ckH77Et+qAp(p59029D#%1L7w4TAS#U9k7OevDu zrXC~GF4cY;?wI1T&nh%R+Tu`T5tBKR>Pvcd(+X?WR8yC^f;44VnTPmf5fYr$-uY_g z7*DZ=Kic)bFG!8VukIY{j`2V4J=)uOdz50h#I{><)5u(CEDbv}pN@e=-6L(DoGHAR zE*Af4km$km{pZU+83Q_Rcj5ZlUeE(CC+<##d~BG}iZOueMh_>WR2@ZGAA3H`8X`o-He+X>ywmaH+bIa^e zu2W<4%;tXc2LqYblwCZpq1S9>caz+FuwB7!Ah%<yD`^JAgrR)JL;)yvnl{3i(1SZ z`gCugTR5cL*f#6H`T3RU5??n(6 zk7M_pOD)n}*E1NW=8eBymA@VzVRIg*GaY-vC9x&0{4;+X5)n`m(KS3s2u2)y+>B2N zDd#Q)t2I}9c+*bi_dh4P!>N4xsA6)!6mNlG-(JjwErbLXHI^CU&x*ASa<_09iczk% zRGjVDrSpf1hE{scTHjr%dM*}n9+t!tter<^#!^qAhQ`wx2G-8>-f2sh0rxxN2<`<7 z(l?Oi9Ha|4qqdF?uX?v8c>0l6V=w5#J%tU_w4Gexe5C912$xOctsmKj|Z|{FL2M%#9Osfa~;lPG(OgNa|Y>!^PRRj(7l4P!+Csz&k*O+J$gjYMU-xB z-7~l^caGP*hh<3l0ItLt&pEQ<)5cG2BvZAP4Bz*vUVWIc=%3YoI?gPf6W7hkmRj{s z&;mazs=IyKcHxS@bykvZ>-fBSY{qZ%m-5H9CbCo#M3a1{aaA;d*sFSUk1 zv)1B-0ss)j+*3|bO@Dw&Z zf8~I_tQy?IQ}x#~ukDc-Er!s_HX27)m%cQmR_1;2+s2du?idfjgNl1mAU-3x$Ioio zvk(i~BqjypoPJtuA=+P%9NUpymbZQDXZ|UUX@~35rzs!yQ1t#thv{G)QtM?Qw4Hub zD7@=ei6Pvdzf`EUN9RLD>5-`{I5MXVZ4k&d37Mjv(5_2C6A|eC3MnPj^Gxi*PFqfT za7jEy-JWV|V-NA-{?6$qH3U`Pvf-H}gHH|zOryj*9_}54OCi*#5(gjtGx@Gw$>J^z zcg0-O4%^v!tYy!{w+5$?sgAb0#^==jar)1~Az@O3yMEd;W25GRn)M?mgmyJ-Y@gU- z*ncrfq_w{K!e-y%6W=Up{03OdO82H>;c_ojlL6zJ1f0M1{*!*bZbdEPTg1=TVu%5+ zer=j8JT&m+NM1#a-iYQi2PeD(ow*!}ibbW6lG`7BeZ3UJnq+mF5@!3>+$7TISTuj| zP1WdFT68C4sN-wT^{-J(tM+nrW7|Ds2d=2T9Cve-S-%(}nX0EndDxoVQVsg$oNV}C D>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 zcmbW!c{tR090%~<9Oh@nD1#Al48}3S8isP^2(ymaG8l4gu0%QXkdubp~r+D55qY*lX1=m9LP9^sS!aB z7ex<@43CY+S>bk@poA}geSkOu0V2f2K@dbD#ZhQkNwkCnT0vT7yR5RJs*19rk`fMY zpp8@4(@;{<*-g+hB$7xZRc$k?Jw}!W#w4SyBM>AKiIzaiOG?TcsVS)${pSep0~m3@ z1#p2u)Bz|40>eOr1AwXsDF*o#;LkvyFt`{36i1>YL<_A_02Bg)LE$hlF*sbbohX_E zaEzF=8qpRZ;}!_2N68u`<&}wR*xl>HQb(5X#zE1^NR-?Tc?CsHEo~iwF3H4n_Z~Cz zefAEHMUfu_Nf4{$PQ}G1q?}JpyO5rdnO{&?R9tfTO6l$L ziaV86)irmUnp;}i+B=w?{SO8PSwj!mzm9Uayys*5@rl<{({J9+%)XnOUtamRy0-q? z#;46K7X*NPXNmfE*gsqtkqZik!{FeS3j#eQdN2%JOpS<;wsivoqh!>LlEh{0^2+Y@ zAvKJtOW2_35tJOB^jdRyi}p?S?_kOQOZFG+Z`TBXhCxK12g3l?z_OIiok0p(iw2y! z6Jwvw+wCzIy3789Y;F&QUJ52J()Uc*V)z$oCWXM-LQ~^X!fp9Cu4#UloEE%fMcgna z^T4)U+{%qZGhW2rhx>t?q6_q;MUQp?_S8of=%dG~jY_#ymHJe^j(tY0&fexT{7FGl zYmBeqhWg4dXSmz0DX)L~>&;Q_i1)Mtk)>-%8!iuBr}a_yw&o|?AjnShxg1Li`q@eN zp{kw)xs=Hhctpwe_YX|UUwChH7f$ z!~`*F2HiNH82-H9@zX&Ca-?DpI>0?<U3Fx6L3my*9VuaSEw7ILmCM?~CrJA)oN7 zKjOHB!qY%Gq`0;2LvHNGlJ~81Hb*P)fI~-5F zccDrC*eblVv0vqtXjH@F?bD_6dIBt><{C@jij7F?ttFSuQRj^j#KG*;d8bKgR<0p) z(3slX##^0>tWSHV>1T*2E3D)8FI5fnSPzs`vV)3WPR>3$NX#Iz`@nj$dcm-r94^U^ zmNIz^wCVDF6ju??u}~oo3)b$-V;MWYQr6njTrNvCec_{QH8>3c-Q1Fp_0Ys~Q(9TK z1X;c{g5k3(tkkxg@zpwI3+g3WOU}xxnPl6dAYz{1&5W~(;iVtSG&lVzCrAxFEEvJc zoH6I`d9mA^RwP+yJ%1}(ef9;j(#3gD|1e7;z2XPOYuQR;1ux@bc0{MYow(WotTuRe zGNm=6#u%ULD{wiKh@uf)N~HU33Nt@c4zQXgYn~ZiY2APNg8^5bGBOuq*dlg!(C;i~$aVnKVk6aC$ z+i#kk5^H^$S0Y@h;^yrXYEC~P9}#0?4uXQRf?$3 z$zU4kE9J%ef!RE74aacbh3pQ>E1$6@UI||AVS{-N8Ql@Q;KSfJHJ+Kh(PBCn+-?5L zC*bFf@>Y{p>TvuzHU-w0VH2F0Nj_m1oxrUj^55OzxgU>4?9%<{-7iO*?FsaMq+RSd w{jzz&>qwFw<;WE|&0e0O`}HAclg}aVn+t9NnHkIt$uQ%_Ajn;&ld5q151lj8bN~PV 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 zcmex=C5UDGKfoZ!!4SX@z|1Jfz$D1XEXer(2ty9g z*+9b>f$oF>PA(2^W)@a9Mr1*-qyPg08xtclGZQN-R524+Av=eVFsGmhm#A2oc*PD& z*KOw8B?K{a|G&k+1GI=qkXewyo?&+b%sw16*Q`Is>w9{|f4#dFzx|y*!y^0c_$T*| z+rQr3F@J|_6?2II1Fz)m_&-ZG?U%n(zhj9*uGo)l^}JThAOHRP&rlS7AR-57GMn0G z`R16Y=l?b~U9Q=2^*_VxsC!#$dTvgbdVcRVRsNf?4_ANd+LCks>esouX4*Wz?QrMG zgm0&<0vG;0A34dWb4d{!$E)-G{_StIH*Y=nzU*{|iFzgK@&*I2&r zhVole&;3gx%tO}jtiQB;(d_ka=WQ*zSa;v)q{hr1pOy;@49%ALz5T73CnGIa`bku; zwCrS`G)b@i#kvT^ck(AJ18;Brt^0kI?#1^O5yxKov?|uta`z-(W>6LHjtRO@qjNd* zpWVlKtv|C@WL*;eG$B-eSKf5}q<=Va-hV%99e9=Yilda-jR_^$)zW9@RX}(8|>w?FXFTCckUDy|q_u@cK zl+JJVqFF&vl5<}1%6V+{lkC2(d&+H-pI6)*_S-M)XR%(LY!Y*qy|T4J(JGzEnhXI?Dx&K)54kp$BY8=gkFS89_-1Hn8C5;$@Vkb zYi`c=I9zDmdFykC+N$)NYj1b1z4SZo;HBkX)l9W6%T~sEMx5g?yyFSzA;l+FIH4SgpE*C!D8*n}~LNmm7)6=7@Q-3+9W!}EGv7>(Vj-S!} z4QsAGyt%m4%hB_BVc?GmS$CDTTHkvX>Z11u81T%!DM1C3R_IO2Ua%|OH6=_j#4}}z zp2s4uWi=9AY72SiNbEdTI4AwGg5u_>_ZV$LKmBqGI$iZxhHv-2(`zRrF2cB;-zIp%E<%^@)3Ab;Prs*h6+?_9S}(#ET^?r!bs z)9;+_C0~kk6;E_soxL_~^^}b_PnQ^d%bj-7NcEUkjaJg~D+~R5gf*Y+b>qD7@O;a9 zDI2MJ*|bZ0GFF|;sW>bfHak9B=Y4jLS>Bbm)Ab)L&GYg&7A&90@?m-r>zufvnf*P# SzK5PX6o#4@;VHBJ|4jgQb`k&p literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/72.jpg b/app/assets/images/avatars/72.jpg new file mode 100644 index 0000000000000000000000000000000000000000..399336bedf6f414423a7dc6ef00d8ef502d999bb GIT binary patch literal 4478 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ǣdLm>7%1?o_B-}`I5~BvmFIpR{5tK3cqSnQY>1`Z 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 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 zcmbW%XHe7G8VBHiNFxXXL6${^5{eqiA|;^;TtG;Ote8kyka8n6^Z*eEDqSRtvVb69 z$rf&^Uj%h-ZOIq>QD|BeB`g4CPr#uFXKit)i-!6d z+9+Q?e=;p38bzg%LnzU4VuDG)1`vh8;4r8t91ceyM8(8qB*YIL5KI`3zg_}DAQ0k*#N{L;sQ9b{wst ziNP8g8Jn2eoU*mU;q3|MoSa=;e{gg65e_RLkP;LXO}iKq8%Iw`O}m{rX=T8k;!HEv-+Vbv)<3c-h%CI5a#mIyU}#VrF)3{@udjd*0Ie z#^%=c$DQ51{jV+%0RDp|-2Z_6j|(Yui9jG=2>h!HBoZTBU?c>pq6d?am8 zqB7Rm#q1{tH3QPxHy0uY#AMYmGe_6I(telyf3W1gCHoKTzpe>D91IdZ9vBH&0u`66 z9%wt9sf>Btw?E|WCDT5(9q8jUtixl!ECTc~SFDet?vQ2?8s=?QkTrxd%{`uQiR z5t*dReYJ6odTho}WaY};Glf3d$Q1LbA^W9X>YmG%gW>h@PL|=@4waw8Gm{b%_D9Gx zes=>KelpVdGllek`6#}i<*sjKZ9wau|)Kw{7*K6bgBCo;C z%C$~y!}+n@^Hg4uR?qi=r?V9}^+7HlXaO;p5PDq!)$PRnCDG^ZD-k%zx7aggS?r}8 z>q_MJn~9R((Ysan`YY>ropxpVMzBU>^qbx(Y_Nq}h<4GhrOe&W%(b5e-0qRh16h`# z*wSoXr6*JMa7uE%I2NFkZ~s|Z;HQnL$iA3jootBT{JE_#{Tx?`;PdRXYHsigD$SU zaf&s!`(4leKyGeriOG%ihyVPs_CvkOux}S`!Lz3}EtxBm^^NiDw`wbc;$!$~FAzy+xj9v~Ih87W&KTK_!F~ zo_oqEzdU?-RaHR~l&O?gIIH~Tx5+NE3aye~oAI?re)Rd^Apowm9LUm_J6ZIJvR9hR zv@4L@XoDI_=%km-F3vQA?xKg4;y_w52jyKd-QCOMgl`$w=U zh0hw`t8Z*78jBzKh@mtLoKHW)9-hWs(*E&@2KP#XYo$CzOHHe2|7uDU zH4J&|8hxI*#_~!K34;2?u7sv=fSf7GE`}yqbR+Lo7h-LZqz$>1U)$%=l#mzvY&!m> z58xQ)SpD4>86vS$DKtIu>8>f?DGA%W16ka23ZId%%Id~e?f;UHCgU7g{N{!u!kZ7O zXf)<^C#0F5)T+W6b(=r*cHrz1ZLL$oBSLdH=~&~kV_LT(B)!gmLYFX>7%m2ug4h2B D!AnoL 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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 Qvn1aN>IcbdgW2uFFJd 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 H!?Aw>I7jj4 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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 EAD!=|RsaA1 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 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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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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/86.jpg b/app/assets/images/avatars/86.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d814a8864341b56cb4fb6705c72c31ae2066b02 GIT binary patch literal 2852 zcmbW#c|6qJ9tZH>n6a-TGnS`}Es}N0nh+JC43l-xSduLYDP(!@M1=|=%ATzZilN3X z`!*QH`p8(aGqN;>%++)6>$$Jj{p;TQIj?j6Ip1?$-}mbr#wcSN;4?NbG5|mz5a4(; z0LBDx5r8m(!C)rH(E>RNGdm0OQ8?MySlGEaxw*MHxwv@v1fV>;$9TE8_=Wh7!Qg^| zf;>>+--O{J0&qe2uS-C`PBJrdu&{8zdAWGu|8p3P0F(_d1I)l634jR-0z*NJ761VN zAm*cPe>MECfSAA#W)@a9b`H*?0z4nU1p2FcW@ZTFs5W@d!F^``-O-y>3oRaz~Ej>5yZGJ&vQSrNv6_xm^ z>QA2u&0ktt+uA!iy9P-^!{m|Cv2n`G?A-jfg~g@i&F@>=JG(zu=eA zxS&TaCI|!!Vg2O-F+Dh%U?_xH9Ld73XU^*6draa?1e<_Qg3j;TsoIYv!H7p&HS9L*tnC8-k^av|uzycDap9~(P1nJq)J z)H}`_-pDbvsoNC$oI_KUE$K=~QCk8)yR~_JTwkrxvgfXfCMv_aqkPxGRfQeSpo$RcO!$PjN%cuo< z%W)c>dt1A)gwTh(Ehg-)Oea`TkDSqg#ME!1b=@X(j;wb6KLgvFx0-%tsphX|945H> z_2`n7G|-w&tx9dY(R5-95m@{RKR_N&J=fZo^1|y}Ks{&od@1panC2~^FG^@Y@>3a# zGd4wwTSNO~#oo^OE}G5sCSN*P#+CAVzkxT1&^lE#xYYklesCB(|JY1@K_+Q!BwS%Ui+IzQsvX*a@;(FTNC;Qz#xfv9DAkl`jHb=tO`P)?@y=~Ny$Tk+g z6C8=Ct8NE!n3Wmp*d2#!;xR3l*1nj+$_IjphJ04d#6qd`}@R=5}(8eLNqD7Txx86qk$&`>E(zSo*)0=+8{XS|Q-m7*iVvc9S=A3|vP zJkJZ4(v{-xY4!3iQ^;)V)<4J}ue3+hhJJ0UzfU#Id%r~A&6#Ciovj^Kjd9E3kJxp8 z(h=`J5kWguW-O`@`oPdz@tSl{9-&%3>30z+aU<@`7Ct%bnn%d zY8Cv+06NwgfH&f?`XLj|WPWil2vg9YSzeui<@R~)FBN-8R?gm4%51J}n5M=w>%c$6 zpazrzKpMTIF^Sq7D$h4aq+aI|2}TYZ(18xuiywBMQzW?9;(J+`hiuIN*VtRq=9&8z zYFex9!PEvI#ICNwl7!oSnR(ZAjJwI=w060v?2gkQ=KzW}A*fq`7Gy->Lbrr8@9v@jO z>Ev#$X*%yAkCwGI6t-e5lBhMD{n1EdoeVs)VMAR{^)AGEEV_+GL3{EN-`>|rULt?F z?)5s=C6@b1abNblSHtoG5snbRFW!-;LfY*GjqZb-8G!M=?yk=u_7Y7gXWTf+P_Ef6 z;iN-J+^U_>8u=4(EQ^ATD$zkK1aIekhSd1J63tr2;3j+YE&d z8bmhUNUpBZMFWKKmO85uH)nBrrSB%)tzUHHBu_i)Ee7HuC^#FtR-_G5xvT7rx{K7! zXOqvr)GOcpN;AOQy=K4v)>sJgb9PPg?ro${hxvz(*ZfVCn^o_)*Kd|+TWoZ7iNahN zz#m~9rvNq!K+6}i7}$G}g5|~jjMkD$oHD}AiZ{a>8)b^^?;(nIV8sRQ>B+;SiB|sT zOH+Nl`}LEo!jLVJwq{ZOD+=t?RPI;+$0yIyyviF3sx!`})j47t_vQ}S8Ndjx--BKj zrP{gEt4LukOZFU8Nqf!uBHPhrl$=fNd#Ae)^YbSISg{hQIM4syobcX?uqTOmb@gH) zB%6NdmU&<|Fgqf@9VyN5TczYEr50O7jy;k!Ll9WrXXG(+FU-lS0IySC!Zr(bAE(nRJP*&1hGWh1DX zu4hY8BKLE-HRU-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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 L_Ltne_~pL%K@gbvb01(e=Y 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 F{{r)|_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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 B3ZDP~ 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/94.jpg b/app/assets/images/avatars/94.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ee77cd453fbd9306b51deaeda3c1d2ebbb1d84e GIT binary patch literal 2096 zcmb7?`8(8$7so#{pP4bX8N*mYwwXzTsj-jkYpIJFOLo~s>Y1@5#Yku)*|(^aou<^d zrkEI#k(;%WJz8+3JEAM)7Rub|K2LwZ_kGUuoFCrjyw3UI2&aUzfDFx^Y7aml5WrCs zfN%!b2Y^uM&lCwJN;nb@hr!?yVqyrSl!TO&q=clTG)h)R8ihegO3En6VC1m!^72w> zMI{BSk}Osp`x62IMKdtCI2gZ_!c3ilnj<cTI-Z>_4ZjDy zENklDQTeUboEJv;&~j<0T0Dw?H#%G1B*A08Ws})u3GgoS>4S?M$_6_R?&we*Uh+^j>*?ptms;h$b2_+9MPRBgN%g`9%ta;)C`C3B? z=f$V9nr9ECQ^>hcEsjXz_iG$xKE;fe@*C8@IoG!?n@|di zGqCm>8o3#H?->ULDT;SUk_n`)$0gG1q+Ld5n#~d|bsYPz=@ICtMJ1Wj;5p$Ro1)lTY`>o>#m0 zfk7qu2D*DSyT!pBH^FGiJsWWe0#oUM z#WIB$4-d2*C(uBaZ7}molJj7P-!Z;l{203j_C8kbLep173nuvf2a7-R#XgpvuEVW< z?4uW7u9TooWd&t+e&&p>B!^yF$}qPuJ&OIzmo8b2kPth=I_`hE|ABF|=ckaUR?cVb z-iN#V9|){8$xl64gO`gS_5o$H|g^Dp!N z^mA_-PHG1ucljq?r`g5bpL`_|^xBv-=n;u%G*y&oLu>1jw9`3rL^ZLp!o|Z!B0~3v zx14*N)wTO$0jutDo zUVHnpu-~WsRkOKu`hneQdpqXlVd%Bu4NvUB*V|*k(?{0UvjU3;PDM4%WO)FVI;trq z8i$W%-LH;XtxiI#&Gwu$H9jG`R-vvRLcv)J@To?TegR?q7oY(-b$tO~CZA(n;;U8Y zFf<`p>A+gsgKhNen(45&apOAehC}M8Tf^5Gwhl6jJT zVC%MzUQKa&;QBCVg(=UiRd%lD)+fLN&TW7jUZZRwpcqf@nKd1Zc7%n8I&NQnH(A=6 zyXj4j*VEjSx+y*nCL_evZ+{msjl~sO8|G94S#qOX!_DD)CKJ#j=Os955q4Y7P65(9 oRr`eAV~m16*HlI@{nVcJ*mzw(H_0irnTaVi9|}{rDbtA1qB5Oj1oaf zo`98CkpBY#?VJh<2#Uku;__%DTK@mm_8R~R2TTD|2uKM4BS8=(XuBT30RRZL(-s8$ zSJ0h`a0o~Uykj5T1%MzB@J?|+K;+*E5EudlU`PSHAnKr@1X}4loJ38|6H?YRitLoc z5VY*vqoPwPyLN76K>!%?zhGd80uccH;i@73a3LT;*ni&s2}6;180w&s1p0hra>ZK` zHLvsA_8=e%+3}DNB%luzR>^Zr8hB6Eq+0xQQ~2^sCwa!rsoa-eE%vDrvkU&_Pf!k< zV@LRIypW1^V~oJrR4nb;LkHbtGxnER5Idtvcz9)bd@^*cT^HanGGgmpPf}G?4h2a%{M!Svk;~%jMbO z+FXi?XvXwdkHb;L9-mz{k8@a$tKL83etJb zacyGWM0JnHF_vw@%}$29_r50z7~S~1J41U`CDF{2&@aV*TohcbTKXQ1S z#{A&9=*vE;$d + 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) -> "
  1. #{content}
  2. " + "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 /(
  3. )?((

    |
    )[\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) + "\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
  4. , 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 "
  5. " + item + "
  6. \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

    4fvyON4*wFzY&id2POQn%gVpG)myIH4x+k_8>-;FWEKaROWkKb zv#X-p^ZA$evpYG>fE+2 zv!!OA*m|Ut)mk?B80*Q;nfy_50OI9SZ?x=G-2QIqjTTtiaK=?dDno z>MZEVd*4}m>NUqmrUkMTDz!#u$o6CH#^mY)@P{MQ+=wp-IdLv3T+3$w&O_xDE(k;idn>)!cZY{k7gj8HHs!* z7|TDzV%iQao+b)eSD#GHkc?5uJ=TQRpH&VF>y?At3c0{~zw+3x|F@d)aBD)0SC6UQ z_&skLmDCMqO|Pw5R%eAcIo$J*uC7D37!VHkA(d3GJ%682{gC#pX3KKJ<51swhNsFc z*^;R!2%T-$jMEhkzmDzR21MnomR5tB$xaiT%!-ah`>_&Z_wa(~ZkF*2c2!*&%@9rm zPuCj=zosaPMlM^dhj%iO&p&RKKmrjre%gjwXGn7lpiw=vBh=sSVraI%misvSSz2Mh zC67w5xL{Yj3CVKi#M#L;y<8@Qh37a+b=ZBhI90mA>}3eQjndQ~HfVK=z!eVlhJ-F*Q;SDjHJmS+ zx0h#vl80%d3L-roDOiQE2M2_)nFRd55#VtmpKOvCQZrzlL8j`u(ho7!{5Dp1ZLLU;feyV;)8e zRY+}`RAI@e)Yw%++cTf=2A-fCFUbLw%*G0qvxM{jBnRC{@-CbYJbOWF+CIfef$ERC zkwd}biO_8T6;84VbO~J-X72vy%NIzlS3i9n;j32IqRq`sHO|IuILBgN&Bp0``C8iW zPtYvgD(8c*x{qIhD1b_S1pwkzONEE3Q{Lk3+%#u0$+{v>UpP=laW|=!LnM}1In`l7 zCC&dr=NpGc^yD7Xn)?sw{>hcs;$${?aa#&2uA*P0@zwj1r?5@9_V^R4S+3kV|2}b7 zXDgfIvg1Wv8Od$2=ojX~HdKyfcdh)ysLU11U;1R~;D*d=iO+hlw;!WrMo`|cYSsW3O z5$wO_JImg5RPtlm9xM&+@wrGfaVq}E*{CjH-W-`Gghi-iimeS67iXnUT^lcpu%bC% z3k>dgGAafVS`E_x=I^|s^(8sPNad6^G)&a(p&H}7sS!TviH;_+wZRFi`6=cRs@N7q z(ed~d3MN>$n(p_}-$atHo*tGy=F-RuD`}8e({A;}>&L5>cCC(s9V(J@PM_IN%&y0n zIW!qDHW|zL@wXqPBr10b8|L7zIeHonYKOf EFOlrLBme*a literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/96.jpg b/app/assets/images/avatars/96.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50a2fdf0d34df2af6287e6f62b72cf879aab9432 GIT binary patch literal 3255 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/97.jpg b/app/assets/images/avatars/97.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9de3139140c99b3ff83a1474f0bf47361902c99b GIT binary patch literal 24975 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 NVvCXjrZC+8{|DE@cH{s6 literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/98.jpg b/app/assets/images/avatars/98.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3459eeadaa4d0485e9a7e7cef7eae6eb6f46a5af GIT binary patch literal 4928 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 OZidRL!)D)}fBzqBlp41H literal 0 HcmV?d00001 diff --git a/app/assets/images/avatars/99.jpg b/app/assets/images/avatars/99.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd61d20d640456b3f8934d98ad3c866b11e8b6d5 GIT binary patch literal 3901 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 Fe*h^wC1d~q literal 0 HcmV?d00001 diff --git a/app/assets/images/cool_avatars/evil_trout.jpg b/app/assets/images/cool_avatars/evil_trout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d46c42e4f5b958feb8412d8c15cd713e0c13a28b GIT binary patch literal 14574 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/cool_avatars/hanzo.png b/app/assets/images/cool_avatars/hanzo.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcf8e0f1003e1af754ac5af0d4b965283b2fd23 GIT binary patch literal 14877 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 z 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 Ef+8CmQ~&?~ 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 zcma))&npCB7{}j@a&Ryq2ft=^XNyovoJegFii4Ab#FoT~i-T5b50ryQDdplq3GJvY zd$Qx^=np_iNhzTmkUXC6%)C2e2kYIQ_nCS3`F!8+`^+mufPac2c-F*Jp%4{9hYMOUawEn#^r~PhvwePqon~Kz3tV~$C~8fzp3;7M^<{;yftZ>&w`#f zoGJNG%^da2Jpai<2mSEyQinn{i=_8G6T|%-COVy{CBQ{ZEZqLm|(%gn!&C z!ui8hx70ZN^lJ}SFETVRkv%&+pnoy&2%I5YcV}t9$L`~2)=T{Ol^XhYa(!#g9e@v4 zgMHvEdiR4JZC4ZuF6FWbuo%oL9JrHCO@xBAG0P9KrbcqvZJTswN5krct0VQk<%CQ5 lpP0p+L|;sg4xX{5`G^u;DdH&L2;`3h*PU|xHFHEld;#sY*$Myv literal 0 HcmV?d00001 diff --git a/app/assets/images/favicons/1282043220-favicon.ico b/app/assets/images/favicons/1282043220-favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9dbcbb7496164f2c2a66642bca5fd14a35d0cd28 GIT binary patch literal 1150 zcmb`EYeQa1;$% zxj8knjk&2?+Sx^?yLjD5TGAY%Ss9-qDuMKNKGp@y({mP42K8c#Ah@gUPdRZ_2PJ)F?5SYKp#!?#g))Pnn2E>ueWC_fmY zMY8dfzi~zuF42*t%LxAD5L_vRf2sntoEf*I11QV>fOE14@^Zdv6<#Fd3`||5gENH~ znk~YxPz=UH;9EKFaW-(-V>ly=qVVQCsvHm$9`Fi3#HU>y-m%lv7cPMR^H~I<=fQXo zdHvBVs4Q`!q;wWa15jmRvNO3Erx$5)K(Fr@^$Z+G-|z|ahfcvemJi>j7|%LcgX;Qa zDC+>_3#KO4Z-Y?Pje>aJ)s;hC^bp*xT=aO3fbk&m>=SoTzcL8zVhGimC8%mx|2ecu z{o3=tH)c?3&V<7%h0~S|#zW`mb?E1<&@b4bTcptb@EKKn;{Ru_-$UOu>_b=6ess5_ zqupJM#%T=;48zYHd^i 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 zcmZ{iZAep57{^cO#nLn@@ueJ%-pJ_Ad$+miMWd}vw{kY;HY+N&=G}JDwXt1YO5j@r zLZp_KAEII=^+ijB=*5=`MXaGlS+j`zpsO^p%rvZaIOsRGb800UcGm1E81yVA22p)dWDC_JFU3pEV@V-tI5gJf16j&X;dGgH@!ed zD;$agF60%9mN`(k6D?YlGKn_+scz_fR28ujjMen->aFsOVcV$$Z-gX$c)ol`e=PRB zS=nA+GL2#j@KL3H@8QrD<>Q9l;H>MuPKoIDaJ5Y zomSBocV|uPiPo@7Q_1;L-22v!EpG&FiDFYsUr~9TBfZ|$YuSAI@I&D}zp!REIeT8P zXL|N?ue@@?HQs2pKY1>-O-%nB3|pSKI-x1+pdK~6g_ZAT3ydsHnVd9ofKQNooFs4} zMN5*DP(<+sI3c76;$qLn>OT@}_5#LS8caZR8qO!Rq<|8LDIxhgp>}W~_y;nB3NE{u zbsL>DP}+9>Y%}5PsxnQet}3G{7XrtMHC?UsVPJnArg^ufpcvL zS-Yf89#e)0F)wAWRC@bXxB!JYOTs#h5}27H8a;s7Sb|iJ@z8XnC`yb#pp@sx+N6f6 EUmX8^fB*mh literal 0 HcmV?d00001 diff --git a/app/assets/images/favicons/apple.png b/app/assets/images/favicons/apple.png new file mode 100644 index 0000000000000000000000000000000000000000..82fa120fcd06983476dc47740f5780075115b639 GIT binary patch literal 753 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UASkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e`PGJ=6YykO3*KpUV0Qz^9Q*O8St<@*!!RPM#mD22RbA-PkePR8b;azWP6dCqV)^KXf6WQp9L?&EX9Sph3qlkA3%EC(k9#!D z)pe3$f&JlqGahoZUv!nfG&`>HtnNOcyzt7mg$xnzDC_gOqG-s?PsvQHglI6Z)HN~> zF*L9;HLx-9VJXf{9Y&KaN*F-#@lnJFb1Kow6J z<~;(ckVI19o0*$hQdyA70CtmpW^(>?1B-KLHu;7CRWTSEn^>5enwyvyS*3h50V)wj zGAB5*DwP4~ZwqfHrvz2U5}>p!l5}X0Cqr6hPAV_}(h|#nw&dvniMSj-bD%;7Pgg&e IbxsLQ0Lnt`9smFU 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!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpafHr zx4R1i!>V3oBOs5nz$3C4NPB>>+sSM@pwZc$E{-7@=Tj$c^banSa6SJwN_yT}(^(k{ zp6R*><3EfjNiPDoPBotW3p0>sQ_IRvrINV#fYz2T$!g2UcYY_l>X3IfEkxT1pQ z?LY76A#$#&I6tq5g`s!R{;$$M=E*Vcszb4D z{~B*g9Y0`f_tN)QUXp8nO=Pb}tlD4O@{&`>S5E0-`Ea;1 z78w4jC9V-ADTyViR>?)FK#IZ0z|ct7&_LI~G{n%v%D}|R*jyJ#8W`|KiY-FXkei>9 znO2F=U=(6xU}a=vWoQi1aL@MhIiLnNkPXH8X(i=}MX3y)xrynizKQ9X$=M2KdgglO zx@HPsD-A4k4UH564b2oXN=gc>^!3Zj%k?rrs(~1&S}(sSJ@EVY+dvZ~KqiJ{l;$Q` zS-IpVm*%GCl~`E?0F@Rq7}PAjX7)XemZ5(ZhF&G+~SQ;4_n;RRS zo?}r1R3eOIPH<*bDubz>shPKvQ|{6dKA^NLl5}X0Cqr6hPAV_}(h|#nw&dvniMSj- QbD%;7Pgg&ebxsLQ07!~gP5=M^ 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 zcmZXSYfuwc6vuCDaVTh;sZ_CpZ9XVvC|Ndv5W4b6Xn>>`nuGvFT1-e5$UsO+Hp$3z zG-`G5L1`T+OtE5l1SkS21_hKZ4?#izAEBinifBPp+SGBBsb#vo(J!=}*?Z49dw%Eq z&%JXGOOg}U`@HD`09Y>)3S`jIJ9E*i8D55pn&{nr z&=GBJiL5<`l^0B3uXw+&mTQ0Ks6EQsj#QpUt2%es?Uv~#PW^?5#*2~7J(&aNsumhf zFIu;^lhGZ$v0Z&oJ^y-V$D_LL$93eB+BmXb&_9qcbO{b48XGFU-95fiGx4PQY1Lk; z)SPtnvUp-RdD0=dF(SL=EWO*YT(g%tVWLi%s78}ydPF`q3TIAV99PZ__w6z)W$&V_ zCdy`{x{Vo2S2EpK;VJM3qg{%9ld+09p7fD6J?rT;#h?s6R(z25h1)#)hix38{=!F>uXg$6VBslV8 zpwlQ4@a6t4l|rG;=6Q{VoGA!evsC;n;N)LHADBaQ?1AhkLNzxV6H{JX*Yb*V^DP)IN$l^)D!PLu3RYi-@9 zuiP15Z{67L>M#a@;e+m9opw+20IlEsJpzkr+965?&C>vvOUlh>3Qo}b75_nKj{iqVEQb_eg@s3Q!a3Y9?#)K+8xYyB zs!xih7!nAJlN1-XXEq}Yrnjt0r^-YiM^k{q3&>HLph_VEx2%F!xex@R_+&wAoMQh! DCyet) 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!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lvoVM{u}eoKlERDMt{~}hXqIFC+(Ye;j#U;#|azGpL_m+f6a^YufEK? z{aK)USN@)x>!1Ai|NpAkK1I#j15$S;_Izo0Q;25V;bUDY=3vaz(?OJxnv!bCim2 zpR`hP!umBUm;?g?LxaP^uU`lWZQLCj;qC1mHd`XTiIG8ktAKcXZjuntMXDvP5hW>! zC8<`)MX5lF!N|bSNY~In*T6Ky(8S8n(#pg_*TBTez~JZ-Yb6v7x%nxXX_dG&Z28$d z52(QnWJ7U&T1k0gQ7VIHZen_>Z(@38a<+n*p1Gd6u9*VZN&^dBLnDPiLoP)#zYf8Hn4MZvvYG0 zP0z`FQ_=qgx@+f(L*ep$?sx}mFRk^}sdB@8FpPJ2^i+8)tv3htxprxqz62-)z#xy0 z(Kt=h*cv?o^d}M1dU=w6YN5Q@@-O}4nc^xLj5fJ$3Utr>T5@P*D29_^e00b2! QqW}N^07*qoM6N<$f`x~Cng9R* literal 0 HcmV?d00001 diff --git a/app/assets/images/grippie.png b/app/assets/images/grippie.png new file mode 100644 index 0000000000000000000000000000000000000000..6524d4167d2d6e3939cfcf3111ce520acd66bc21 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^(m>40!3-puuch|@DVB6cUq=Rp^(V|(yIunMk|nMY zCBgY=CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5X*aCb)TzBu@{r~^}iVZzqfg(&L zL4Lvi8J=!8@B;EgJY5_^DsCku9AK6xWM-3k!OUU6z#qV1KKathOF(%BPgg&ebxsLQ E0Ke)mAOHXW literal 0 HcmV?d00001 diff --git a/app/assets/images/logo-single.png b/app/assets/images/logo-single.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc9748d9ff0f9d6b401de48dee4611efe643ed6 GIT binary patch literal 1318 zcmV+>1=;$EP)pUX>tCmzAA?i0HAhTQ#Zeh!kFX z0IF_})`bA7cp)e)0;S>!in|As$Z*Vg_n}{Qb9Ce5R{*PwK)q-X zu2$$PB-Yi{-|wOTtf?4GVLv-Os2n4l9V2)hB5WQa0IZ-NF*;x#A^Eg%fYE;duH`Qu zAONk=3xTfqt7sfLM*yi>{_mv?c%kPfBpO3h>_8&`tAg@oD+HX?`^bXxa5T*vB=A%s zFt}m>t=sf@JpA006kT2VzIy2|BkD6F0Iai6!fh5+ZUCxe&+44?i&rU;WJew$Fe4!1 zUq+-wA@z+;5@u>EZB_!Ly2?=^V8?UXA0+KaBcL%NKB-pmXf&khY+qOBjZ5zk7dF}hpPdc+}HzrAED(icm>KBn<7cr|xG^LYBSPu#}%TPvB z*vR3OdmtN8tRwq}Tmh+h#UX=yB&aFQk#%Q4^eg;m(+ z7&=h~E0j%OETEEkm>>Sm7~OkLXN8;zL{&C{d+**@PDPZ7Q6OO$l@L&^viq4m2D?=0 zxFLKqg#3YOonQX7ItI~+gdv=uB2?S_^pPZFk=d#e8m6_BE=`89Y8;_ZXkB&83~cStm87UT9-}fixdXS4G2y3L z5jO{V!6W)%v6pHFe(h`-br?IP^3sG2u!;>qknu>(i4Jgyzaa!wazPbLnDe;rhVb=a zBFGYFsw)Dt?T8U6?}}IfcqSQ^*mX(NyM#^YK=k&w*equ z&kC7^ze1b^|EFTsfp1kmL!{${0q#WM6F_WMmLZh*<4fLVqC*fjyU3m*mK$>tUQ9x? z6yUHcgaw9Ji-n>*p-3Gf#S+O!d7jV!fOz1@0!t)v7Y^ezg-rm?+r&M_67iqy_xdU9 z2w;zSEmPe*TDJqfK$KG?JR{!#EV1^-L3er^qch#>n-eCmKMQC<7OxS>mz}=#SD=x} ziKiPI6BCp0D&we#o;muPk0pMKcCK%XKe_80--kGjSp|JqvdZT9t6 zYli^%W{WK&rz`*81t>jrg@`h}+|OV07*qoM6N<$f)9&TKmY&$ literal 0 HcmV?d00001 diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e67461e6cb8c6743a8b99aaf91d18beab1cf035d GIT binary patch literal 2291 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 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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 LoDw$pAXfbg0%og- literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/admin.js b/app/assets/javascripts/admin.js new file mode 100644 index 00000000000..06ada5e0976 --- /dev/null +++ b/app/assets/javascripts/admin.js @@ -0,0 +1 @@ +//= require_tree ./admin diff --git a/app/assets/javascripts/admin/controllers/admin_customize_controller.js.coffee b/app/assets/javascripts/admin/controllers/admin_customize_controller.js.coffee new file mode 100644 index 00000000000..b1ea1505791 --- /dev/null +++ b/app/assets/javascripts/admin/controllers/admin_customize_controller.js.coffee @@ -0,0 +1,18 @@ +window.Discourse.AdminCustomizeController = Ember.Controller.extend + newCustomization: -> + 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 @@ +