diff --git a/app/assets/javascripts/discourse.js b/app/assets/javascripts/discourse.js index 82b54d0cb30..4cb81bb99a4 100644 --- a/app/assets/javascripts/discourse.js +++ b/app/assets/javascripts/discourse.js @@ -22,6 +22,9 @@ Discourse = Ember.Application.createWithMixins({ // The highest seen post number by topic highestSeenByTopic: {}, + // Helps with integration tests + URL_FIXTURES: {}, + getURL: function(url) { // If it's a non relative URL, return it. diff --git a/app/assets/javascripts/discourse/views/topic_view.js b/app/assets/javascripts/discourse/views/topic_view.js index 8d1f629e944..223df8eb44d 100644 --- a/app/assets/javascripts/discourse/views/topic_view.js +++ b/app/assets/javascripts/discourse/views/topic_view.js @@ -388,7 +388,10 @@ Discourse.TopicView = Discourse.View.extend(Discourse.Scrolling, { nonUrgentPositionUpdate: Discourse.debounce(function(opts) { Discourse.ScreenTrack.instance().scrolled(); - this.set('controller.currentPost', opts.currentPost); + var model = this.get('controller.model'); + if (model) { + this.set('controller.currentPost', opts.currentPost); + } },500), scrolled: function(){ diff --git a/test/javascripts/fixtures/list_fixtures.js b/test/javascripts/fixtures/list_fixtures.js index 48a94c82398..7d6f83b67e8 100644 --- a/test/javascripts/fixtures/list_fixtures.js +++ b/test/javascripts/fixtures/list_fixtures.js @@ -1,3 +1,3 @@ /*jshint maxlen:10000000 */ -Discourse.URL_FIXTURES = Discourse.URL_FIXTURES || {}; Discourse.URL_FIXTURES["/latest.json"] = {"categories":[{"id":1,"name":"bug","color":"ae3a27","text_color":"FFFFFF","slug":"bug","topic_count":338,"description":"> Bug reports on Discourse. Please be sure to search prior to submitting bugs. Please include repro steps, and report only 1 bug per topic.","topic_url":"/t/category-definition-for-bug/2","hotness":5.0,"secure":false},{"id":2,"name":"feature","color":"0E76BD","text_color":"FFFFFF","slug":"feature","topic_count":354,"description":"Discussion about features or potential features of Discourse: how they work, why they work, etc.","topic_url":"/t/category-definition-for-feature/11","hotness":5.0,"secure":false},{"id":3,"name":"meta","color":"aaa","text_color":"FFFFFF","slug":"meta","topic_count":59,"description":"Discussion about meta.discourse.org itself, the organization of this forum about Discourse, how it works, and how we can improve this site.","topic_url":"/t/category-definition-for-meta/24","hotness":5.0,"secure":false},{"id":12,"name":"discourse hub","color":"b2c79f","text_color":"FFFFFF","slug":"discourse-hub","topic_count":4,"description":"Topics about current or future Discourse Hub functionality at discourse.org including nickname registration, global user pages, and the site directory.","topic_url":"/t/category-definition-for-discourse-hub/3038","hotness":5.0,"secure":false},{"id":7,"name":"dev","color":"000","text_color":"FFFFFF","slug":"dev","topic_count":157,"description":"This category is for topics related to hacking on Discourse: submitting pull requests, configuring development environments, coding conventions, and so forth.","topic_url":"/t/category-definition-for-dev/1026","hotness":5.0,"secure":false},{"id":9,"name":"ux","color":"5F497A","text_color":"FFFFFF","slug":"ux","topic_count":88,"description":"Discussion about the user interface of Discourse, how features are presented to the user in the client, including language and UI elements.","topic_url":"/t/category-definition-for-ux/2628","hotness":5.0,"secure":false},{"id":5,"name":"extensibility ","color":"FE8432","text_color":"FFFFFF","slug":"extensibility","topic_count":26,"description":"Topics about extending the functionality of Discourse with plugins, themes, add-ons, or other mechanisms for extensibility. ","topic_url":"/t/category-definition-for-extensibility/28","hotness":5.0,"secure":false},{"id":6,"name":"support","color":"b99","text_color":"FFFFFF","slug":"support","topic_count":276,"description":"Support on configuring, using, and installing Discourse. Not for software development related topics, but for admins and end users configuring and using Discourse.","topic_url":"/t/category-definition-for-support/389","hotness":5.0,"secure":false},{"id":4,"name":"faq","color":"33b","text_color":"FFFFFF","slug":"faq","topic_count":38,"description":"Topics that come up very often when discussing Discourse will eventually be classified into this Frequently Asked Questions category. Should only be added to popular topics.","topic_url":"/t/category-definition-for-faq/25","hotness":5.0,"secure":false}],"users":[{"id":1,"username":"sam","avatar_template":"https://www.gravatar.com/avatar/3dcae8378d46c244172a115c28ca49ce.png?s={size}&r=pg&d=identicon"},{"id":19,"username":"eviltrout","avatar_template":"https://www.gravatar.com/avatar/c6e17f2ae2a215e87ff9e878a4e63cd9.png?s={size}&r=pg&d=identicon"},{"id":14,"username":"clay","avatar_template":"https://www.gravatar.com/avatar/e371bbd32ba2e9b27842e60ef5952d47.png?s={size}&r=pg&d=identicon"},{"id":32,"username":"codinghorror","avatar_template":"https://www.gravatar.com/avatar/51d623f33f8b83095db84ff35e15dbe8.png?s={size}&r=pg&d=identicon"},{"id":5483,"username":"briangillespie","avatar_template":"https://www.gravatar.com/avatar/3baf9989e97ccf45aff1cf61fb730931.png?s={size}&r=pg&d=identicon"},{"id":4757,"username":"cerberus","avatar_template":"https://www.gravatar.com/avatar/cf99a7295aafa43c75ce25668b24df29.png?s={size}&r=pg&d=identicon"},{"id":247,"username":"chrishunt","avatar_template":"https://www.gravatar.com/avatar/4fafaca2401263fd03b62ff37a157a35.png?s={size}&r=pg&d=identicon"},{"id":406,"username":"RGJ","avatar_template":"https://www.gravatar.com/avatar/55c791f0242e5167536c65496046eef5.png?s={size}&r=pg&d=identicon"},{"id":38,"username":"frandallfarmer","avatar_template":"https://www.gravatar.com/avatar/6c38e00d92cd9bd3ada3392b15015553.png?s={size}&r=pg&d=identicon"},{"id":5425,"username":"mattengi","avatar_template":"https://www.gravatar.com/avatar/b66610f025dda14e96453bc5a0124685.png?s={size}&r=pg&d=identicon"},{"id":562,"username":"nightpool","avatar_template":"https://www.gravatar.com/avatar/d73164d2180b4cf6099526e42e33a7fd.png?s={size}&r=pg&d=identicon"},{"id":4939,"username":"stevebaer","avatar_template":"https://www.gravatar.com/avatar/7a42855912a58f4c3c5d0ce82e33905f.png?s={size}&r=pg&d=identicon"},{"id":761,"username":"marcoceppi","avatar_template":"https://www.gravatar.com/avatar/4ddc8924e79bcec03256821af65fca91.png?s={size}&r=pg&d=identicon"},{"id":1681,"username":"juanformoso","avatar_template":"https://www.gravatar.com/avatar/4dfc8f56817006ef21327d5ff19ce04f.png?s={size}&r=pg&d=identicon"},{"id":4612,"username":"Iszi","avatar_template":"https://www.gravatar.com/avatar/8f8571493d71202986f2a6ab0dbd7c23.png?s={size}&r=pg&d=identicon"},{"id":1995,"username":"zogstrip","avatar_template":"https://www.gravatar.com/avatar/b7797beb47cfb7aa0fe60d09604aaa09.png?s={size}&r=pg&d=identicon"},{"id":1219,"username":"Gweebz","avatar_template":"https://www.gravatar.com/avatar/62e7d47ca49b942923f36eb90c1a31bd.png?s={size}&r=pg&d=identicon"},{"id":388,"username":"Drew","avatar_template":"https://www.gravatar.com/avatar/12b37360428acef73ff2c29cd3f272ef.png?s={size}&r=pg&d=identicon"},{"id":1566,"username":"hamburglar","avatar_template":"https://www.gravatar.com/avatar/57b39f59fa025f64e173ba6dffb8f2f7.png?s={size}&r=pg&d=identicon"},{"id":2,"username":"Neil","avatar_template":"https://www.gravatar.com/avatar/42776c4982dff1fa45ee8248532f8ad0.png?s={size}&r=pg&d=identicon"},{"id":5382,"username":"Charlie","avatar_template":"https://www.gravatar.com/avatar/4ae31ca93cd8a41fb44dace9d9d65166.png?s={size}&r=pg&d=identicon"},{"id":5372,"username":"computerdruid","avatar_template":"https://www.gravatar.com/avatar/34c3b45c075a6d85555beb674892d0d8.png?s={size}&r=pg&d=identicon"},{"id":1263,"username":"ChrisB","avatar_template":"https://www.gravatar.com/avatar/1d75aba12b3961894f93959b5b013de0.png?s={size}&r=pg&d=identicon"},{"id":5438,"username":"hpesoj","avatar_template":"https://www.gravatar.com/avatar/c6f01bdb4443d3686d8a11d8899c0100.png?s={size}&r=pg&d=identicon"},{"id":2770,"username":"awesomerobot","avatar_template":"https://www.gravatar.com/avatar/9744a2573a43bb6d76deef82b7424023.png?s={size}&r=pg&d=identicon"},{"id":5174,"username":"Maria_Sergeeva","avatar_template":"https://www.gravatar.com/avatar/3e8ede783ef16c8234c03473a5b8780f.png?s={size}&r=pg&d=identicon"},{"id":2291,"username":"PabloC","avatar_template":"https://www.gravatar.com/avatar/82c793022ec1bce6ea7573bc27b2340b.png?s={size}&r=pg&d=identicon"},{"id":3657,"username":"steelmaiden","avatar_template":"https://www.gravatar.com/avatar/ee057e3db79dbbf327ee1e2d3af3320d.png?s={size}&r=pg&d=identicon"},{"id":5502,"username":"ankursethi108","avatar_template":"https://www.gravatar.com/avatar/da27d97199c2e567ff848bf70984d405.png?s={size}&r=pg&d=identicon"},{"id":5271,"username":"royguo","avatar_template":"https://www.gravatar.com/avatar/7e795755fe8a817981c3a81620faf359.png?s={size}&r=pg&d=identicon"},{"id":2063,"username":"amoiseev","avatar_template":"https://www.gravatar.com/avatar/56c19d0f5d2640d4ddf730e25acf4364.png?s={size}&r=pg&d=identicon"},{"id":3987,"username":"Sander78","avatar_template":"https://www.gravatar.com/avatar/e7069beb46df22270a41afc7b277fe50.png?s={size}&r=pg&d=identicon"},{"id":3,"username":"supermathie","avatar_template":"https://www.gravatar.com/avatar/44ae1b2d44d48aed3d432129a5703942.png?s={size}&r=pg&d=identicon"},{"id":4220,"username":"kirantpatil","avatar_template":"https://www.gravatar.com/avatar/99d5ef2d7a453192340ca2c8adc21aa9.png?s={size}&r=pg&d=identicon"},{"id":471,"username":"BhaelOchon","avatar_template":"https://www.gravatar.com/avatar/413ef976f0d2ca993005c9aee4769254.png?s={size}&r=pg&d=identicon"},{"id":2316,"username":"pakl","avatar_template":"https://www.gravatar.com/avatar/42910619ef3d550e37f7150caa0d94ff.png?s={size}&r=pg&d=identicon"},{"id":5293,"username":"nick12377","avatar_template":"https://www.gravatar.com/avatar/de9a910f6c145938e047f77a524df50b.png?s={size}&r=pg&d=identicon"},{"id":1374,"username":"naggie","avatar_template":"https://www.gravatar.com/avatar/43675ac6f4ef94f40b5e44add2a984c1.png?s={size}&r=pg&d=identicon"}],"topic_list":{"can_create_topic":false,"more_topics_url":"/latest.json?page=1","draft":null,"draft_key":"new_topic","draft_sequence":null,"topics":[{"id":1,"fancy_title":"Welcome to meta.discourse.org","slug":"welcome-to-meta-discourse-org","posts_count":5,"reply_count":5,"highest_post_number":23,"image_url":null,"created_at":"2013-01-31T23:52:28-05:00","last_posted_at":"2013-02-07T16:50:41-05:00","bumped":true,"bumped_at":"2013-02-07T11:57:34-05:00","unseen":false,"title":"Welcome to meta.discourse.org","pinned":true,"excerpt":"Welcome to meta, the official site for discussing the next-gen open source Discourse forum software. You'll find topics on features, bugs, hosting, development, and general support here. \n\nDiscourse is early beta softwar…","visible":true,"closed":true,"archived":false,"views":9279,"like_count":84,"has_best_of":false,"archetype":"regular","category_id":null,"posters":[{"extras":null,"description":"Original Poster","user_id":1},{"extras":null,"description":"Most Posts","user_id":19},{"extras":null,"description":"Frequent Poster","user_id":14},{"extras":"latest","description":"Most Recent Poster","user_id":32}]},{"id":7418,"fancy_title":"Auto-suggest topics shows Private topics","slug":"auto-suggest-topics-shows-private-topics","posts_count":2,"reply_count":1,"highest_post_number":2,"image_url":null,"created_at":"2013-06-12T12:08:11-04:00","last_posted_at":"2013-06-12T12:32:08-04:00","bumped":true,"bumped_at":"2013-06-12T12:32:08-04:00","unseen":false,"title":"Auto-suggest topics shows Private topics","pinned":false,"visible":true,"closed":false,"archived":false,"views":7,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":null,"description":"Original Poster","user_id":5483},{"extras":"latest","description":"Most Recent Poster","user_id":32}]},{"id":7392,"fancy_title":"It there user’s birthday in user profile?","slug":"it-there-users-birthday-in-user-profile","posts_count":5,"reply_count":2,"highest_post_number":5,"image_url":null,"created_at":"2013-06-11T19:02:05-04:00","last_posted_at":"2013-06-12T12:23:06-04:00","bumped":true,"bumped_at":"2013-06-12T12:23:06-04:00","unseen":false,"title":"It there user's birthday in user profile?","pinned":false,"visible":true,"closed":false,"archived":false,"views":42,"like_count":2,"has_best_of":false,"archetype":"regular","category_id":2,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":4757},{"extras":null,"description":"Most Posts","user_id":247},{"extras":null,"description":"Frequent Poster","user_id":1},{"extras":null,"description":"Frequent Poster","user_id":406}]},{"id":7420,"fancy_title":"Federated login for Microsoft and Apple","slug":"federated-login-for-microsoft-and-apple","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-06-12T12:19:23-04:00","last_posted_at":"2013-06-12T12:19:24-04:00","bumped":true,"bumped_at":"2013-06-12T12:19:24-04:00","unseen":false,"title":"Federated login for Microsoft and Apple","pinned":false,"visible":true,"closed":false,"archived":false,"views":4,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":2,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":5483}]},{"id":3102,"fancy_title":"Please visit our Discourse Forum! (Directory)","slug":"please-visit-our-discourse-forum-directory","posts_count":36,"reply_count":16,"highest_post_number":36,"image_url":null,"created_at":"2013-02-14T14:30:38-05:00","last_posted_at":"2013-06-12T12:18:41-04:00","bumped":true,"bumped_at":"2013-06-12T12:18:41-04:00","unseen":false,"title":"Please visit our Discourse Forum! (Directory)","pinned":false,"visible":true,"closed":false,"archived":false,"views":2458,"like_count":32,"has_best_of":false,"archetype":"regular","category_id":3,"posters":[{"extras":null,"description":"Original Poster","user_id":38},{"extras":null,"description":"Most Posts","user_id":5425},{"extras":null,"description":"Frequent Poster","user_id":32},{"extras":null,"description":"Frequent Poster","user_id":562},{"extras":"latest","description":"Most Recent Poster","user_id":4939}]},{"id":7419,"fancy_title":"Non-authenticated users see all topics in mobile view","slug":"non-authenticated-users-see-all-topics-in-mobile-view","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-06-12T12:11:13-04:00","last_posted_at":"2013-06-12T12:11:14-04:00","bumped":true,"bumped_at":"2013-06-12T12:11:14-04:00","unseen":false,"title":"Non-authenticated users see all topics in mobile view","pinned":false,"visible":true,"closed":false,"archived":false,"views":4,"like_count":1,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":5483}]},{"id":7417,"fancy_title":"Oneboxing “non-traditional” URLs","slug":"oneboxing-non-traditional-urls","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-06-12T11:42:19-04:00","last_posted_at":"2013-06-12T11:42:20-04:00","bumped":true,"bumped_at":"2013-06-12T11:42:20-04:00","unseen":false,"title":"Oneboxing \"non-traditional\" URLs","pinned":false,"visible":true,"closed":false,"archived":false,"views":13,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":2,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":761}]},{"id":7411,"fancy_title":"Unable to send digests","slug":"unable-to-send-digests","posts_count":12,"reply_count":7,"highest_post_number":12,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1078/030dd27562e8cc64.png","created_at":"2013-06-12T09:25:21-04:00","last_posted_at":"2013-06-12T11:21:10-04:00","bumped":true,"bumped_at":"2013-06-12T11:34:35-04:00","unseen":false,"title":"Unable to send digests","pinned":false,"visible":true,"closed":false,"archived":false,"views":26,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":1681},{"extras":null,"description":"Most Posts","user_id":19},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":6130,"fancy_title":"Make it easier to close large images","slug":"make-it-easier-to-close-large-images","posts_count":10,"reply_count":6,"highest_post_number":10,"image_url":null,"created_at":"2013-04-24T11:35:04-04:00","last_posted_at":"2013-06-12T11:26:21-04:00","bumped":true,"bumped_at":"2013-06-12T11:26:21-04:00","unseen":false,"title":"Make it easier to close large images","pinned":false,"visible":true,"closed":false,"archived":false,"views":124,"like_count":6,"has_best_of":false,"archetype":"regular","category_id":null,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":4612},{"extras":null,"description":"Most Posts","user_id":1995},{"extras":null,"description":"Frequent Poster","user_id":32},{"extras":null,"description":"Frequent Poster","user_id":1219}]},{"id":424,"fancy_title":"What are the ‘consequences’ of changing your name?","slug":"what-are-the-consequences-of-changing-your-name","posts_count":34,"reply_count":31,"highest_post_number":34,"image_url":null,"created_at":"2013-02-05T17:37:52-05:00","last_posted_at":"2013-06-12T10:56:54-04:00","bumped":true,"bumped_at":"2013-06-12T10:56:54-04:00","unseen":false,"title":"What are the 'consequences' of changing your name?","pinned":false,"visible":true,"closed":false,"archived":false,"views":953,"like_count":41,"has_best_of":false,"archetype":"regular","category_id":12,"posters":[{"extras":null,"description":"Original Poster","user_id":388},{"extras":null,"description":"Most Posts","user_id":1566},{"extras":null,"description":"Frequent Poster","user_id":32},{"extras":null,"description":"Frequent Poster","user_id":2},{"extras":"latest","description":"Most Recent Poster","user_id":5382}]},{"id":7410,"fancy_title":"Twitter oneboxes are bust","slug":"twitter-oneboxes-are-bust","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2013-06-12T07:19:42-04:00","last_posted_at":"2013-06-12T10:50:31-04:00","bumped":true,"bumped_at":"2013-06-12T10:50:31-04:00","unseen":false,"title":"Twitter oneboxes are bust","pinned":false,"visible":true,"closed":false,"archived":false,"views":31,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":null,"description":"Original Poster","user_id":1},{"extras":"latest","description":"Most Recent Poster","user_id":5372}]},{"id":7403,"fancy_title":"Deploy Disource at local machine with juju, lxc","slug":"deploy-disource-at-local-machine-with-juju-lxc","posts_count":7,"reply_count":4,"highest_post_number":7,"image_url":"http://cdn.discourse.org/assets/emoji/rage.png","created_at":"2013-06-11T23:23:09-04:00","last_posted_at":"2013-06-12T10:37:03-04:00","bumped":true,"bumped_at":"2013-06-12T10:37:03-04:00","unseen":false,"title":"Deploy Disource at local machine with juju, lxc","pinned":false,"visible":true,"closed":false,"archived":false,"views":32,"like_count":3,"has_best_of":false,"archetype":"regular","category_id":7,"posters":[{"extras":null,"description":"Original Poster","user_id":5425},{"extras":null,"description":"Most Posts","user_id":1},{"extras":"latest","description":"Most Recent Poster","user_id":761}]},{"id":7362,"fancy_title":"Should post date/times be moved to remove ambiguity between user join dates or activity?","slug":"should-post-date-times-be-moved-to-remove-ambiguity-between-user-join-dates-or-activity","posts_count":23,"reply_count":18,"highest_post_number":23,"image_url":"https://www.gravatar.com/avatar/51d623f33f8b83095db84ff35e15dbe8.png?s=40&r=pg&d=identicon","created_at":"2013-06-10T18:52:34-04:00","last_posted_at":"2013-06-12T10:35:29-04:00","bumped":true,"bumped_at":"2013-06-12T10:35:29-04:00","unseen":false,"title":"Should post date/times be moved to remove ambiguity between user join dates or activity?","pinned":false,"visible":true,"closed":false,"archived":false,"views":114,"like_count":9,"has_best_of":false,"archetype":"regular","category_id":9,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":1263},{"extras":null,"description":"Most Posts","user_id":32},{"extras":null,"description":"Frequent Poster","user_id":1},{"extras":null,"description":"Frequent Poster","user_id":5438},{"extras":null,"description":"Frequent Poster","user_id":2770}]},{"id":7412,"fancy_title":"To group posts by a user","slug":"to-group-posts-by-a-user","posts_count":3,"reply_count":2,"highest_post_number":3,"image_url":null,"created_at":"2013-06-12T09:35:57-04:00","last_posted_at":"2013-06-12T10:06:38-04:00","bumped":true,"bumped_at":"2013-06-12T10:14:51-04:00","unseen":false,"title":"To group posts by a user","pinned":false,"visible":true,"closed":false,"archived":false,"views":16,"like_count":3,"has_best_of":false,"archetype":"regular","category_id":2,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":5174},{"extras":null,"description":"Most Posts","user_id":1}]},{"id":5689,"fancy_title":"Wordpress plugin to include latest topics as a sidebar?","slug":"wordpress-plugin-to-include-latest-topics-as-a-sidebar","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":null,"created_at":"2013-04-07T16:08:21-04:00","last_posted_at":"2013-06-12T09:58:21-04:00","bumped":true,"bumped_at":"2013-06-12T09:58:21-04:00","unseen":false,"title":"Wordpress plugin to include latest topics as a sidebar?","pinned":false,"visible":true,"closed":false,"archived":false,"views":139,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":5,"posters":[{"extras":null,"description":"Original Poster","user_id":2291},{"extras":null,"description":"Most Posts","user_id":3657},{"extras":"latest","description":"Most Recent Poster","user_id":5502}]},{"id":7401,"fancy_title":"Shall we add category names in top_menu?","slug":"shall-we-add-category-names-in-top-menu","posts_count":7,"reply_count":4,"highest_post_number":7,"image_url":null,"created_at":"2013-06-11T22:47:34-04:00","last_posted_at":"2013-06-12T06:55:03-04:00","bumped":true,"bumped_at":"2013-06-12T06:55:03-04:00","unseen":false,"title":"Shall we add category names in top_menu?","pinned":false,"visible":true,"closed":false,"archived":false,"views":35,"like_count":1,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":5271},{"extras":null,"description":"Most Posts","user_id":1}]},{"id":7393,"fancy_title":"Cannot click on image immediately after uploading","slug":"cannot-click-on-image-immediately-after-uploading","posts_count":3,"reply_count":1,"highest_post_number":3,"image_url":null,"created_at":"2013-06-11T19:05:32-04:00","last_posted_at":"2013-06-12T06:15:02-04:00","bumped":true,"bumped_at":"2013-06-12T06:15:02-04:00","unseen":false,"title":"Cannot click on image immediately after uploading","pinned":false,"visible":true,"closed":false,"archived":false,"views":24,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":5438},{"extras":null,"description":"Most Posts","user_id":1995}]},{"id":7391,"fancy_title":"Upload image button doesn’t work after uploading an image","slug":"upload-image-button-doesnt-work-after-uploading-an-image","posts_count":3,"reply_count":1,"highest_post_number":3,"image_url":null,"created_at":"2013-06-11T19:01:56-04:00","last_posted_at":"2013-06-12T06:14:01-04:00","bumped":true,"bumped_at":"2013-06-12T06:14:01-04:00","unseen":false,"title":"Upload image button doesn't work after uploading an image","pinned":false,"visible":true,"closed":false,"archived":false,"views":22,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":5438},{"extras":null,"description":"Most Posts","user_id":1995}]},{"id":7409,"fancy_title":"New Relic installation","slug":"new-relic-installation","posts_count":3,"reply_count":2,"highest_post_number":3,"image_url":null,"created_at":"2013-06-12T05:11:58-04:00","last_posted_at":"2013-06-12T05:20:30-04:00","bumped":true,"bumped_at":"2013-06-12T05:20:30-04:00","unseen":false,"title":"New Relic installation","pinned":false,"visible":true,"closed":false,"archived":false,"views":22,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":6,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":2063},{"extras":null,"description":"Most Posts","user_id":3987}]},{"id":7405,"fancy_title":"How to add “/faq” link in top menu?","slug":"how-to-add-faq-link-in-top-menu","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-06-12T01:28:32-04:00","last_posted_at":"2013-06-12T01:28:32-04:00","bumped":true,"bumped_at":"2013-06-12T03:12:30-04:00","unseen":false,"title":"How to add \"/faq\" link in top menu?","pinned":false,"visible":true,"closed":false,"archived":false,"views":31,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":6,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":5271}]},{"id":7408,"fancy_title":"What are the options for hammering a bad account?","slug":"what-are-the-options-for-hammering-a-bad-account","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1077/43066a4fc47d1d70.png","created_at":"2013-06-12T02:33:53-04:00","last_posted_at":"2013-06-12T02:33:53-04:00","bumped":false,"bumped_at":"2013-06-12T02:33:53-04:00","unseen":false,"title":"What are the options for hammering a bad account?","pinned":false,"visible":true,"closed":false,"archived":false,"views":26,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":null,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":3}]},{"id":7378,"fancy_title":"Discourse Release Announcements for each tagged version release","slug":"discourse-release-announcements-for-each-tagged-version-release","posts_count":5,"reply_count":2,"highest_post_number":5,"image_url":null,"created_at":"2013-06-11T10:31:03-04:00","last_posted_at":"2013-06-12T02:18:33-04:00","bumped":true,"bumped_at":"2013-06-12T02:18:33-04:00","unseen":false,"title":"Discourse Release Announcements for each tagged version release","pinned":false,"visible":true,"closed":false,"archived":false,"views":79,"like_count":7,"has_best_of":false,"archetype":"regular","category_id":4,"posters":[{"extras":null,"description":"Original Poster","user_id":4220},{"extras":null,"description":"Most Posts","user_id":471},{"extras":null,"description":"Frequent Poster","user_id":32},{"extras":null,"description":"Frequent Poster","user_id":1},{"extras":"latest","description":"Most Recent Poster","user_id":761}]},{"id":7406,"fancy_title":"[missing {{user}} value] in user’s home page","slug":"missing-user-value-in-users-home-page","posts_count":3,"reply_count":2,"highest_post_number":3,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1074/09013263c0ffc523.png","created_at":"2013-06-12T01:32:04-04:00","last_posted_at":"2013-06-12T01:47:03-04:00","bumped":true,"bumped_at":"2013-06-12T01:47:03-04:00","unseen":false,"title":"[missing {{user}} value] in user's home page","pinned":false,"visible":true,"closed":false,"archived":false,"views":17,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":5271},{"extras":null,"description":"Most Posts","user_id":1}]},{"id":7400,"fancy_title":"Mockups/Ideas for extended profiles","slug":"mockups-ideas-for-extended-profiles","posts_count":2,"reply_count":1,"highest_post_number":2,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1061/8a6ac964893019ea.png","created_at":"2013-06-11T22:14:03-04:00","last_posted_at":"2013-06-12T01:01:26-04:00","bumped":true,"bumped_at":"2013-06-12T01:01:26-04:00","unseen":false,"title":"Mockups/Ideas for extended profiles","pinned":false,"visible":true,"closed":false,"archived":false,"views":34,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":9,"posters":[{"extras":null,"description":"Original Poster","user_id":2316},{"extras":"latest","description":"Most Recent Poster","user_id":1}]},{"id":7146,"fancy_title":"Getting rid of sugar.js","slug":"getting-rid-of-sugar-js","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":null,"created_at":"2013-06-04T03:22:49-04:00","last_posted_at":"2013-06-11T23:50:46-04:00","bumped":true,"bumped_at":"2013-06-11T23:50:46-04:00","unseen":false,"title":"Getting rid of sugar.js","pinned":false,"visible":true,"closed":false,"archived":false,"views":133,"like_count":8,"has_best_of":false,"archetype":"regular","category_id":7,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":1},{"extras":null,"description":"Most Posts","user_id":19},{"extras":null,"description":"Frequent Poster","user_id":2}]},{"id":7397,"fancy_title":"Incorrect string in new posts counter tooltip","slug":"incorrect-string-in-new-posts-counter-tooltip","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":"http://i.imgur.com/7557h94.png","created_at":"2013-06-11T21:15:40-04:00","last_posted_at":"2013-06-11T22:25:04-04:00","bumped":true,"bumped_at":"2013-06-11T22:11:00-04:00","unseen":false,"title":"Incorrect string in new posts counter tooltip","pinned":false,"visible":true,"closed":false,"archived":true,"views":19,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":null,"description":"Original Poster","user_id":5425},{"extras":"latest","description":"Most Recent Poster, Most Posts","user_id":1}]},{"id":7390,"fancy_title":"“Topic_count” instead of actual count","slug":"topic-count-instead-of-actual-count","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1060/6496b3226de5168d.png","created_at":"2013-06-11T18:58:20-04:00","last_posted_at":"2013-06-11T21:48:17-04:00","bumped":true,"bumped_at":"2013-06-11T19:48:20-04:00","unseen":false,"title":"\"Topic_count\" instead of actual count","pinned":false,"visible":true,"closed":false,"archived":true,"views":28,"like_count":3,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":null,"description":"Original Poster","user_id":5293},{"extras":"latest","description":"Most Recent Poster","user_id":1}]},{"id":7389,"fancy_title":"I’m trying to making linux container(lxc) vagrant box image","slug":"im-trying-to-making-linux-container-lxc-vagrant-box-image","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"http://cdn.discourse.org/assets/emoji/wink.png","created_at":"2013-06-11T18:56:31-04:00","last_posted_at":"2013-06-11T18:56:31-04:00","bumped":true,"bumped_at":"2013-06-11T19:06:13-04:00","unseen":false,"title":"I'm trying to making linux container(lxc) vagrant box image","pinned":false,"visible":true,"closed":false,"archived":false,"views":25,"like_count":0,"has_best_of":false,"archetype":"regular","category_id":7,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":5425}]},{"id":7386,"fancy_title":"Mail settings shows password in clear text","slug":"mail-settings-shows-password-in-clear-text","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2013-06-11T17:19:41-04:00","last_posted_at":"2013-06-11T19:05:33-04:00","bumped":true,"bumped_at":"2013-06-11T19:05:33-04:00","unseen":false,"title":"Mail settings shows password in clear text","pinned":false,"visible":true,"closed":false,"archived":false,"views":45,"like_count":5,"has_best_of":false,"archetype":"regular","category_id":1,"posters":[{"extras":null,"description":"Original Poster","user_id":1681},{"extras":"latest","description":"Most Recent Poster","user_id":247}]},{"id":7175,"fancy_title":"Relative time something was posted","slug":"relative-time-something-was-posted","posts_count":105,"reply_count":90,"highest_post_number":105,"image_url":"http://meta.discourse.org/uploads/meta_discourse/1007/0f5263b3ee0a0f45.png","created_at":"2013-06-04T19:05:09-04:00","last_posted_at":"2013-06-11T19:01:41-04:00","bumped":true,"bumped_at":"2013-06-11T19:01:41-04:00","unseen":false,"title":"Relative time something was posted","pinned":false,"visible":true,"closed":false,"archived":false,"views":433,"like_count":94,"has_best_of":true,"archetype":"regular","category_id":9,"posters":[{"extras":null,"description":"Original Poster","user_id":1374},{"extras":null,"description":"Most Posts","user_id":32},{"extras":null,"description":"Frequent Poster","user_id":406},{"extras":null,"description":"Frequent Poster","user_id":5438},{"extras":"latest","description":"Most Recent Poster","user_id":1263}]}]}} +Discourse.URL_FIXTURES["/categories.json"] = {"featured_users":[{"id":32,"username":"codinghorror","avatar_template":"https://www.gravatar.com/avatar/51d623f33f8b83095db84ff35e15dbe8.png?s={size}&r=pg&d=identicon"},{"id":1,"username":"sam","avatar_template":"https://www.gravatar.com/avatar/3dcae8378d46c244172a115c28ca49ce.png?s={size}&r=pg&d=identicon"},{"id":1995,"username":"zogstrip","avatar_template":"https://www.gravatar.com/avatar/b7797beb47cfb7aa0fe60d09604aaa09.png?s={size}&r=pg&d=identicon"},{"id":2,"username":"Neil","avatar_template":"https://www.gravatar.com/avatar/42776c4982dff1fa45ee8248532f8ad0.png?s={size}&r=pg&d=identicon"},{"id":19,"username":"eviltrout","avatar_template":"https://www.gravatar.com/avatar/c6e17f2ae2a215e87ff9e878a4e63cd9.png?s={size}&r=pg&d=identicon"},{"id":2600,"username":"NinjaFoodstuff","avatar_template":"https://www.gravatar.com/avatar/3709f34da1ff5433b41bc56df94dd453.png?s={size}&r=pg&d=identicon"},{"id":406,"username":"RGJ","avatar_template":"https://www.gravatar.com/avatar/55c791f0242e5167536c65496046eef5.png?s={size}&r=pg&d=identicon"},{"id":1353,"username":"sparr","avatar_template":"https://www.gravatar.com/avatar/7906663b1197829751673465948e0b05.png?s={size}&r=pg&d=identicon"},{"id":8,"username":"geek","avatar_template":"https://www.gravatar.com/avatar/b0b1ce3a4e0a77abd157ec0309b72922.png?s={size}&r=pg&d=identicon"},{"id":4,"username":"stienman","avatar_template":"https://www.gravatar.com/avatar/281486f2a20201375414760dd347951d.png?s={size}&r=pg&d=identicon"},{"id":1274,"username":"binaryphile","avatar_template":"https://www.gravatar.com/avatar/82564a08aebae1de68bea8e3df61ef93.png?s={size}&r=pg&d=identicon"},{"id":1263,"username":"ChrisB","avatar_template":"https://www.gravatar.com/avatar/1d75aba12b3961894f93959b5b013de0.png?s={size}&r=pg&d=identicon"},{"id":38,"username":"frandallfarmer","avatar_template":"https://www.gravatar.com/avatar/6c38e00d92cd9bd3ada3392b15015553.png?s={size}&r=pg&d=identicon"},{"id":2839,"username":"baus","avatar_template":"https://www.gravatar.com/avatar/57d4030570f672f515a7385cc74c8cfe.png?s={size}&r=pg&d=identicon"},{"id":2664,"username":"Odd_Bloke","avatar_template":"https://www.gravatar.com/avatar/af881deb1a7ef0a1f568e18cd967c0d3.png?s={size}&r=pg&d=identicon"},{"id":714,"username":"jcolebrand","avatar_template":"https://www.gravatar.com/avatar/c4cca9bfec5d5e77f625d9fbe8e37a41.png?s={size}&r=pg&d=identicon"},{"id":810,"username":"ChrisHanel","avatar_template":"https://www.gravatar.com/avatar/467863a322e1a3ce557bfd17f4677600.png?s={size}&r=pg&d=identicon"},{"id":2291,"username":"PabloC","avatar_template":"https://www.gravatar.com/avatar/82c793022ec1bce6ea7573bc27b2340b.png?s={size}&r=pg&d=identicon"},{"id":1674,"username":"colin","avatar_template":"https://www.gravatar.com/avatar/4cfb483116a822652d698dce303ec842.png?s={size}&r=pg&d=identicon"},{"id":2128,"username":"ultimape","avatar_template":"https://www.gravatar.com/avatar/6fe82efded2ee5e218e0452644a07e2e.png?s={size}&r=pg&d=identicon"},{"id":811,"username":"jpeg","avatar_template":"https://www.gravatar.com/avatar/4a214d4a12b7223b61ec36c7aa224c97.png?s={size}&r=pg&d=identicon"},{"id":5468,"username":"pixelBender67","avatar_template":"https://www.gravatar.com/avatar/4f4cc88cc2ebd747240c7bc53af99261.png?s={size}&r=pg&d=identicon"},{"id":2471,"username":"robconery","avatar_template":"https://www.gravatar.com/avatar/31b18bc48108bc410884022764dbeec6.png?s={size}&r=pg&d=identicon"},{"id":4217,"username":"mshappe","avatar_template":"https://www.gravatar.com/avatar/36ffc752906110cd16e1746d5c95516f.png?s={size}&r=pg&d=identicon"},{"id":5460,"username":"ned","avatar_template":"https://www.gravatar.com/avatar/bc5e09a5ce0a85bf02a3fceb9b0bfaf4.png?s={size}&r=pg&d=identicon"},{"id":2399,"username":"passionate","avatar_template":"https://www.gravatar.com/avatar/bcb2185dd24051bce727b29230a2c171.png?s={size}&r=pg&d=identicon"},{"id":4263,"username":"mcwumbly","avatar_template":"https://www.gravatar.com/avatar/e217128117fe24525c7af5ebc5e45745.png?s={size}&r=pg&d=identicon"},{"id":2465,"username":"finid","avatar_template":"https://www.gravatar.com/avatar/989a7705a77732d888ddaff8b440fc3d.png?s={size}&r=pg&d=identicon"},{"id":4939,"username":"stevebaer","avatar_template":"https://www.gravatar.com/avatar/7a42855912a58f4c3c5d0ce82e33905f.png?s={size}&r=pg&d=identicon"},{"id":3507,"username":"mozCallahad","avatar_template":"https://www.gravatar.com/avatar/a2746e0bf42c3245bfd80dea9b3efb32.png?s={size}&r=pg&d=identicon"},{"id":704,"username":"AstonJ","avatar_template":"https://www.gravatar.com/avatar/03af361cc843bc56e95cb6c406d06f80.png?s={size}&r=pg&d=identicon"},{"id":461,"username":"kuba","avatar_template":"https://www.gravatar.com/avatar/1835cb6a5f35bd4089e416a99af90f5f.png?s={size}&r=pg&d=identicon"},{"id":1566,"username":"hamburglar","avatar_template":"https://www.gravatar.com/avatar/57b39f59fa025f64e173ba6dffb8f2f7.png?s={size}&r=pg&d=identicon"}],"category_list":{"can_create_category":false,"can_create_topic":false,"draft":null,"draft_key":"new_topic","draft_sequence":null,"categories":[{"id":1,"name":"bug","color":"ae3a27","text_color":"FFFFFF","slug":"bug","topic_count":361,"topics_week":24,"topics_month":93,"topics_year":357,"description":"Bug reports on Discourse. Do be sure to search prior to submitting bugs. Include repro steps, and only describe one bug per topic please.","description_excerpt":"Bug reports on Discourse. Do be sure to search prior to submitting bugs. Include repro steps, and only describe one bug per topic please.","featured_user_ids":[32,1,1995,2,19],"topics":[{"id":7288,"fancy_title":"Digest mail ignores secure groups","slug":"digest-mail-ignores-secure-groups","posts_count":7,"reply_count":3,"highest_post_number":7,"image_url":"http://cdn.discourse.org/assets/emoji/smile.png","created_at":"2013-06-08T08:54:12-04:00","last_posted_at":"2013-06-08T13:00:38-04:00","bumped":true,"bumped_at":"2013-06-08T13:00:38-04:00","unseen":false,"title":"Digest mail ignores secure groups","pinned":true,"excerpt":"People receiving the digest mail can easily read posts not meant for them. That's because the digest mail ignores the secure groups a member has access to or not. \n\nQuite a problem as I unfortunately found out. [smile]","visible":true,"closed":false,"archived":false},{"id":7554,"fancy_title":"Loading (never stops)","slug":"loading-never-stops","posts_count":14,"reply_count":10,"highest_post_number":14,"image_url":null,"created_at":"2013-06-17T04:10:19-04:00","last_posted_at":"2013-06-20T11:25:38-04:00","bumped":true,"bumped_at":"2013-06-20T11:25:38-04:00","unseen":false,"title":"Loading (never stops)","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7655,"fancy_title":"Are invisible topics broken again?","slug":"are-invisible-topics-broken-again","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":"https://s3.amazonaws.com/lechat-im-share/77734fb7713f41c1c642d106f04848c29297c12c3563ec4b5b7863a1ad83c605/clip.png","created_at":"2013-06-20T10:14:16-04:00","last_posted_at":"2013-06-20T10:14:19-04:00","bumped":false,"bumped_at":"2013-06-20T10:14:16-04:00","unseen":false,"title":"Are invisible topics broken again?","pinned":false,"visible":false,"closed":false,"archived":false},{"id":7654,"fancy_title":"Grant admin failed","slug":"grant-admin-failed","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1167/6693820be81fb347.png","created_at":"2013-06-20T10:01:27-04:00","last_posted_at":"2013-06-20T10:01:27-04:00","bumped":false,"bumped_at":"2013-06-20T10:01:27-04:00","unseen":false,"title":"Grant admin failed","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7652,"fancy_title":"Onebox with Chinese failed!","slug":"onebox-with-chinese-failed","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1166/59abf864c9513bf1.png","created_at":"2013-06-20T09:21:32-04:00","last_posted_at":"2013-06-20T09:21:33-04:00","bumped":true,"bumped_at":"2013-06-20T09:21:33-04:00","unseen":false,"title":"Onebox with Chinese failed!","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7613,"fancy_title":"Site Customization not working","slug":"site-customization-not-working","posts_count":9,"reply_count":6,"highest_post_number":9,"image_url":null,"created_at":"2013-06-18T17:47:54-04:00","last_posted_at":"2013-06-20T07:36:24-04:00","bumped":true,"bumped_at":"2013-06-20T07:36:24-04:00","unseen":false,"title":"Site Customization not working","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":6,"name":"support","color":"b99","text_color":"FFFFFF","slug":"support","topic_count":300,"topics_week":22,"topics_month":90,"topics_year":299,"description":"Support on configuring, using, and installing Discourse. Not for software development related topics, but for admins and end users configuring and using Discourse.","description_excerpt":"Support on configuring, using, and installing Discourse. Not for software development related topics, but for admins and end users configuring and using Discourse.","featured_user_ids":[32,1,2,2600,406],"topics":[{"id":7645,"fancy_title":"Why does my logo come out like this?","slug":"why-does-my-logo-come-out-like-this","posts_count":8,"reply_count":3,"highest_post_number":8,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1163/9bdb455a1fdef5bd.png","created_at":"2013-06-20T00:07:35-04:00","last_posted_at":"2013-06-20T13:03:44-04:00","bumped":true,"bumped_at":"2013-06-20T13:03:44-04:00","unseen":false,"title":"Why does my logo come out like this?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7630,"fancy_title":"Google account login redirect to 127.0.0.1:3000","slug":"google-account-login-redirect-to-127-0-0-1-3000","posts_count":13,"reply_count":11,"highest_post_number":13,"image_url":"http://meta.discourse.org/assets/favicons/stackexchange-40d494822da7175d54657ac327a01ab4.png","created_at":"2013-06-19T09:04:16-04:00","last_posted_at":"2013-06-20T10:37:01-04:00","bumped":true,"bumped_at":"2013-06-20T10:37:01-04:00","unseen":false,"title":"Google account login redirect to 127.0.0.1:3000","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7642,"fancy_title":"500 error on posts","slug":"500-error-on-posts","posts_count":4,"reply_count":2,"highest_post_number":4,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1161/f8e0a36aceeab57b.png","created_at":"2013-06-19T18:32:41-04:00","last_posted_at":"2013-06-19T19:26:18-04:00","bumped":true,"bumped_at":"2013-06-19T19:34:02-04:00","unseen":false,"title":"500 error on posts","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7409,"fancy_title":"New Relic installation","slug":"new-relic-installation","posts_count":11,"reply_count":9,"highest_post_number":11,"image_url":null,"created_at":"2013-06-12T05:11:58-04:00","last_posted_at":"2013-06-19T18:56:43-04:00","bumped":true,"bumped_at":"2013-06-19T18:56:43-04:00","unseen":false,"title":"New Relic installation","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7604,"fancy_title":"Airbrake’s license has changed, not MIT anymore","slug":"airbrakes-license-has-changed-not-mit-anymore","posts_count":9,"reply_count":6,"highest_post_number":9,"image_url":null,"created_at":"2013-06-18T15:58:13-04:00","last_posted_at":"2013-06-19T11:37:39-04:00","bumped":true,"bumped_at":"2013-06-19T11:37:39-04:00","unseen":false,"title":"Airbrake's license has changed, not MIT anymore","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7583,"fancy_title":"What’s the best way to add global Javascript code?","slug":"whats-the-best-way-to-add-global-javascript-code","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-06-17T21:45:31-04:00","last_posted_at":"2013-06-17T21:45:31-04:00","bumped":true,"bumped_at":"2013-06-19T08:58:05-04:00","unseen":false,"title":"What's the best way to add global Javascript code?","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":2,"name":"feature","color":"0E76BD","text_color":"FFFFFF","slug":"feature","topic_count":379,"topics_week":21,"topics_month":68,"topics_year":378,"description":"Discussion about features or potential features of Discourse: how they work, why they work, etc.","description_excerpt":"Discussion about features or potential features of Discourse: how they work, why they work, etc.","featured_user_ids":[32,1,1353,8,4],"topics":[{"id":7581,"fancy_title":"Category preferences","slug":"category-preferences","posts_count":6,"reply_count":2,"highest_post_number":6,"image_url":null,"created_at":"2013-06-17T19:40:35-04:00","last_posted_at":"2013-06-20T10:25:15-04:00","bumped":true,"bumped_at":"2013-06-20T10:25:15-04:00","unseen":false,"title":"Category preferences","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7651,"fancy_title":"Easier way to stop watching or tracking topic","slug":"easier-way-to-stop-watching-or-tracking-topic","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-06-20T09:20:48-04:00","last_posted_at":"2013-06-20T09:20:49-04:00","bumped":true,"bumped_at":"2013-06-20T09:20:49-04:00","unseen":false,"title":"Easier way to stop watching or tracking topic","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7450,"fancy_title":"We need an “Archive” Flag Notification button","slug":"we-need-an-archive-flag-notification-button","posts_count":9,"reply_count":7,"highest_post_number":9,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1098/fd9f66b93330aeea.png","created_at":"2013-06-13T12:31:05-04:00","last_posted_at":"2013-06-19T23:55:25-04:00","bumped":true,"bumped_at":"2013-06-19T23:55:25-04:00","unseen":false,"title":"We need an \"Archive\" Flag Notification button","pinned":false,"visible":true,"closed":false,"archived":false},{"id":4415,"fancy_title":"Scaling Discourse","slug":"scaling-discourse","posts_count":8,"reply_count":6,"highest_post_number":8,"image_url":null,"created_at":"2013-03-04T10:17:09-05:00","last_posted_at":"2013-06-19T23:53:21-04:00","bumped":true,"bumped_at":"2013-06-19T23:53:21-04:00","unseen":false,"title":"Scaling Discourse","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7631,"fancy_title":"New topics since last visit are the same even after logout and exit","slug":"new-topics-since-last-visit-are-the-same-even-after-logout-and-exit","posts_count":3,"reply_count":1,"highest_post_number":3,"image_url":null,"created_at":"2013-06-19T10:12:41-04:00","last_posted_at":"2013-06-19T19:34:15-04:00","bumped":true,"bumped_at":"2013-06-19T19:34:15-04:00","unseen":false,"title":"New topics since last visit are the same even after logout and exit","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7640,"fancy_title":"Confirmation on about to delete first post in the topic and consiquently entire topic","slug":"confirmation-on-about-to-delete-first-post-in-the-topic-and-consiquently-entire-topic","posts_count":3,"reply_count":1,"highest_post_number":3,"image_url":null,"created_at":"2013-06-19T16:30:07-04:00","last_posted_at":"2013-06-19T19:10:54-04:00","bumped":true,"bumped_at":"2013-06-19T19:10:54-04:00","unseen":false,"title":"Confirmation on about to delete first post in the topic and consiquently entire topic","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":null,"name":"uncategorized","color":"AB9364","text_color":"FFFFFF","slug":"uncategorized","topic_count":173,"topics_week":6,"topics_month":24,"topics_year":173,"description":null,"description_excerpt":null,"is_uncategorized":true,"featured_user_ids":[],"topics":[{"id":7644,"fancy_title":"Is forum migration really worth it?","slug":"is-forum-migration-really-worth-it","posts_count":5,"reply_count":1,"highest_post_number":5,"image_url":"https://www.gravatar.com/avatar/eff1b72d56a97459a27161ccf7f20c89.png?s=40&r=pg&d=identicon","created_at":"2013-06-20T00:07:04-04:00","last_posted_at":"2013-06-20T12:30:16-04:00","bumped":true,"bumped_at":"2013-06-20T12:30:16-04:00","unseen":false,"title":"Is forum migration really worth it?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":4533,"fancy_title":"Did you reply wrong topic in discourse forum?","slug":"did-you-reply-wrong-topic-in-discourse-forum","posts_count":11,"reply_count":8,"highest_post_number":11,"image_url":null,"created_at":"2013-03-06T20:41:25-05:00","last_posted_at":"2013-06-19T12:56:54-04:00","bumped":true,"bumped_at":"2013-06-19T12:56:54-04:00","unseen":false,"title":"Did you reply wrong topic in discourse forum?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7594,"fancy_title":"How to add links to the title header","slug":"how-to-add-links-to-the-title-header","posts_count":6,"reply_count":5,"highest_post_number":6,"image_url":null,"created_at":"2013-06-18T11:37:53-04:00","last_posted_at":"2013-06-18T17:12:26-04:00","bumped":true,"bumped_at":"2013-06-18T17:12:26-04:00","unseen":false,"title":"How to add links to the title header","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7602,"fancy_title":"SMTP Errors on latest","slug":"smtp-errors-on-latest","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":null,"created_at":"2013-06-18T15:30:04-04:00","last_posted_at":"2013-06-18T16:09:45-04:00","bumped":true,"bumped_at":"2013-06-18T16:09:17-04:00","unseen":false,"title":"SMTP Errors on latest","pinned":false,"visible":true,"closed":false,"archived":true},{"id":7600,"fancy_title":"Any example or tutorial of using doorkeeper with discourse","slug":"any-example-or-tutorial-of-using-doorkeeper-with-discourse","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-06-18T14:23:44-04:00","last_posted_at":"2013-06-18T14:23:44-04:00","bumped":false,"bumped_at":"2013-06-18T14:23:44-04:00","unseen":false,"title":"Any example or tutorial of using doorkeeper with discourse","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7558,"fancy_title":"How can i get discourse to use for my community?","slug":"how-can-i-get-discourse-to-use-for-my-community","posts_count":5,"reply_count":2,"highest_post_number":5,"image_url":null,"created_at":"2013-06-17T08:30:56-04:00","last_posted_at":"2013-06-17T11:05:31-04:00","bumped":true,"bumped_at":"2013-06-17T11:05:31-04:00","unseen":false,"title":"How can i get discourse to use for my community?","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":7,"name":"dev","color":"000","text_color":"FFFFFF","slug":"dev","topic_count":162,"topics_week":4,"topics_month":31,"topics_year":162,"description":"This category is for topics related to hacking on Discourse: submitting pull requests, configuring development environments, coding conventions, and so forth.","description_excerpt":"This category is for topics related to hacking on Discourse: submitting pull requests, configuring development environments, coding conventions, and so forth.","featured_user_ids":[1,32,19,1274,1995],"topics":[{"id":3823,"fancy_title":"So, you want to help out with Discourse","slug":"so-you-want-to-help-out-with-discourse","posts_count":19,"reply_count":17,"highest_post_number":32,"image_url":null,"created_at":"2013-02-23T00:46:11-05:00","last_posted_at":"2013-06-05T21:09:56-04:00","bumped":true,"bumped_at":"2013-06-05T21:09:56-04:00","unseen":false,"title":"So, you want to help out with Discourse","pinned":true,"excerpt":"People are wondering, how it is they can help out with Discourse. \n\nWe have seen some chattering both here and on Github. \n\nI wanted to create a topic @eviltrout , @codinghorror and myself can keep up to date with clear…","visible":true,"closed":false,"archived":false},{"id":7638,"fancy_title":"Styling Discourse","slug":"styling-discourse","posts_count":8,"reply_count":5,"highest_post_number":8,"image_url":null,"created_at":"2013-06-19T15:23:36-04:00","last_posted_at":"2013-06-20T13:03:52-04:00","bumped":true,"bumped_at":"2013-06-20T13:03:52-04:00","unseen":false,"title":"Styling Discourse","pinned":false,"visible":true,"closed":false,"archived":false},{"id":4403,"fancy_title":"Comrades let’s join our efforts on ukrainian and russian translations","slug":"comrades-lets-join-our-efforts-on-ukrainian-and-russian-translations","posts_count":38,"reply_count":18,"highest_post_number":38,"image_url":null,"created_at":"2013-03-04T08:04:53-05:00","last_posted_at":"2013-06-20T03:36:05-04:00","bumped":true,"bumped_at":"2013-06-20T03:36:05-04:00","unseen":false,"title":"Comrades let's join our efforts on ukrainian and russian translations","pinned":false,"visible":true,"closed":false,"archived":false},{"id":6013,"fancy_title":"Image optimisation (work in progress)","slug":"image-optimisation-work-in-progress","posts_count":14,"reply_count":11,"highest_post_number":14,"image_url":null,"created_at":"2013-04-18T19:55:04-04:00","last_posted_at":"2013-06-20T02:33:06-04:00","bumped":true,"bumped_at":"2013-06-20T02:33:06-04:00","unseen":false,"title":"Image optimisation (work in progress)","pinned":false,"visible":true,"closed":false,"archived":false},{"id":6669,"fancy_title":"Integrating Discourse with current user database?","slug":"integrating-discourse-with-current-user-database","posts_count":11,"reply_count":4,"highest_post_number":11,"image_url":null,"created_at":"2013-05-16T14:55:47-04:00","last_posted_at":"2013-06-19T22:04:47-04:00","bumped":true,"bumped_at":"2013-06-19T22:04:47-04:00","unseen":false,"title":"Integrating Discourse with current user database?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":3943,"fancy_title":"Give me those authentication hooks! :D","slug":"give-me-those-authentication-hooks-d","posts_count":5,"reply_count":3,"highest_post_number":5,"image_url":null,"created_at":"2013-02-24T02:18:13-05:00","last_posted_at":"2013-06-19T18:58:45-04:00","bumped":true,"bumped_at":"2013-06-19T18:58:45-04:00","unseen":false,"title":"Give me those authentication hooks! :D","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":9,"name":"ux","color":"5F497A","text_color":"FFFFFF","slug":"ux","topic_count":92,"topics_week":4,"topics_month":15,"topics_year":92,"description":"Discussion about the user interface of Discourse, how features are presented to the user in the client, including language and UI elements.","description_excerpt":"Discussion about the user interface of Discourse, how features are presented to the user in the client, including language and UI elements.","featured_user_ids":[32,1,406,1263,38],"topics":[{"id":7362,"fancy_title":"Should post date/times be moved to remove ambiguity between user join dates or activity?","slug":"should-post-date-times-be-moved-to-remove-ambiguity-between-user-join-dates-or-activity","posts_count":49,"reply_count":38,"highest_post_number":49,"image_url":"https://www.gravatar.com/avatar/51d623f33f8b83095db84ff35e15dbe8.png?s=40&r=pg&d=identicon","created_at":"2013-06-10T18:52:34-04:00","last_posted_at":"2013-06-20T11:53:13-04:00","bumped":true,"bumped_at":"2013-06-20T11:53:13-04:00","unseen":false,"title":"Should post date/times be moved to remove ambiguity between user join dates or activity?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7614,"fancy_title":"“Your topic is similar to…” Always comes up","slug":"your-topic-is-similar-to-always-comes-up","posts_count":4,"reply_count":3,"highest_post_number":4,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1146/9dea86f9a04e59c8.png","created_at":"2013-06-18T19:27:03-04:00","last_posted_at":"2013-06-19T13:36:04-04:00","bumped":true,"bumped_at":"2013-06-19T13:36:04-04:00","unseen":false,"title":"\"Your topic is similar to...\" Always comes up","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7493,"fancy_title":"Activity reports on admin page","slug":"activity-reports-on-admin-page","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":"https://s3.amazonaws.com/lechat-im-share/aa059a2e2227e1772ce49cae3611363e2e209bea8139d5adf93df0031e8bed75/clip.png","created_at":"2013-06-14T22:29:00-04:00","last_posted_at":"2013-06-17T11:16:11-04:00","bumped":true,"bumped_at":"2013-06-17T11:16:11-04:00","unseen":false,"title":"Activity reports on admin page","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7479,"fancy_title":"Expand topic details button not always necessary","slug":"expand-topic-details-button-not-always-necessary","posts_count":3,"reply_count":2,"highest_post_number":3,"image_url":null,"created_at":"2013-06-14T10:54:00-04:00","last_posted_at":"2013-06-15T01:53:18-04:00","bumped":true,"bumped_at":"2013-06-15T01:53:18-04:00","unseen":false,"title":"Expand topic details button not always necessary","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7449,"fancy_title":"Categories view constantly resorting","slug":"categories-view-constantly-resorting","posts_count":3,"reply_count":2,"highest_post_number":3,"image_url":null,"created_at":"2013-06-13T12:27:55-04:00","last_posted_at":"2013-06-14T05:37:27-04:00","bumped":true,"bumped_at":"2013-06-14T05:37:27-04:00","unseen":false,"title":"Categories view constantly resorting","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7400,"fancy_title":"Adding “developer” labels to the post avatars","slug":"adding-developer-labels-to-the-post-avatars","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1061/8a6ac964893019ea.png","created_at":"2013-06-11T22:14:03-04:00","last_posted_at":"2013-06-13T04:57:29-04:00","bumped":true,"bumped_at":"2013-06-13T04:57:29-04:00","unseen":false,"title":"Adding \"developer\" labels to the post avatars","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":10,"name":"howto","color":"76923C","text_color":"FFFFFF","slug":"howto","topic_count":38,"topics_week":3,"topics_month":11,"topics_year":38,"description":"Tutorial topics that describe how to set up, configure, or install Discourse using a specific platform or environment.","description_excerpt":"Tutorial topics that describe how to set up, configure, or install Discourse using a specific platform or environment.","featured_user_ids":[1,2839,2600,32,2664],"topics":[{"id":7461,"fancy_title":"Wordpress to Discourse importer!","slug":"wordpress-to-discourse-importer","posts_count":6,"reply_count":3,"highest_post_number":6,"image_url":null,"created_at":"2013-06-13T17:58:43-04:00","last_posted_at":"2013-06-19T23:17:47-04:00","bumped":true,"bumped_at":"2013-06-19T23:17:47-04:00","unseen":false,"title":"Wordpress to Discourse importer!","pinned":false,"visible":true,"closed":false,"archived":false},{"id":3395,"fancy_title":"Installing Discourse on Ubuntu 12.10 and Digital Ocean","slug":"installing-discourse-on-ubuntu-12-10-and-digital-ocean","posts_count":112,"reply_count":82,"highest_post_number":112,"image_url":null,"created_at":"2013-02-19T00:48:11-05:00","last_posted_at":"2013-06-18T19:28:40-04:00","bumped":true,"bumped_at":"2013-06-18T19:28:40-04:00","unseen":false,"title":"Installing Discourse on Ubuntu 12.10 and Digital Ocean","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7582,"fancy_title":"Twitter login with Passenger + Varnish - quick lessons learned","slug":"twitter-login-with-passenger-varnish-quick-lessons-learned","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":"http://cdn.discourse.org/assets/emoji/smile.png","created_at":"2013-06-17T19:46:31-04:00","last_posted_at":"2013-06-17T20:11:08-04:00","bumped":true,"bumped_at":"2013-06-17T20:11:08-04:00","unseen":false,"title":"Twitter login with Passenger + Varnish - quick lessons learned","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7531,"fancy_title":"Building a new community, why you need a blog as a front page?","slug":"building-a-new-community-why-you-need-a-blog-as-a-front-page","posts_count":5,"reply_count":1,"highest_post_number":5,"image_url":null,"created_at":"2013-06-16T11:05:10-04:00","last_posted_at":"2013-06-17T13:21:54-04:00","bumped":true,"bumped_at":"2013-06-17T13:21:54-04:00","unseen":false,"title":"Building a new community, why you need a blog as a front page?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":2349,"fancy_title":"Installing Discourse on Debian","slug":"installing-discourse-on-debian","posts_count":94,"reply_count":69,"highest_post_number":94,"image_url":null,"created_at":"2013-02-08T02:43:23-05:00","last_posted_at":"2013-06-17T11:52:06-04:00","bumped":true,"bumped_at":"2013-06-17T11:52:06-04:00","unseen":false,"title":"Installing Discourse on Debian","pinned":false,"visible":true,"closed":false,"archived":false},{"id":6089,"fancy_title":"Import posts from Facebook group into Discourse","slug":"import-posts-from-facebook-group-into-discourse","posts_count":15,"reply_count":9,"highest_post_number":15,"image_url":"http://meta.discourse.org/uploads/meta_discourse/864/a39dd8d9b5a7768a.png","created_at":"2013-04-22T17:27:54-04:00","last_posted_at":"2013-06-17T05:40:11-04:00","bumped":true,"bumped_at":"2013-06-17T05:40:11-04:00","unseen":false,"title":"Import posts from Facebook group into Discourse","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":5,"name":"extensibility ","color":"FE8432","text_color":"FFFFFF","slug":"extensibility","topic_count":28,"topics_week":2,"topics_month":3,"topics_year":28,"description":"Topics about extending the functionality of Discourse with plugins, themes, add-ons, or other mechanisms for extensibility. ","description_excerpt":"Topics about extending the functionality of Discourse with plugins, themes, add-ons, or other mechanisms for extensibility.","featured_user_ids":[1,32,714,810,8],"topics":[{"id":7534,"fancy_title":"Has anybody created themes for Discourse?","slug":"has-anybody-created-themes-for-discourse","posts_count":15,"reply_count":13,"highest_post_number":15,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/1114/a1a6f1260ebcb974.png","created_at":"2013-06-16T12:19:26-04:00","last_posted_at":"2013-06-17T14:47:00-04:00","bumped":true,"bumped_at":"2013-06-17T14:53:17-04:00","unseen":false,"title":"Has anybody created themes for Discourse?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7464,"fancy_title":"CSS documentation?","slug":"css-documentation","posts_count":2,"reply_count":1,"highest_post_number":2,"image_url":null,"created_at":"2013-06-13T18:25:19-04:00","last_posted_at":"2013-06-14T05:05:14-04:00","bumped":true,"bumped_at":"2013-06-14T05:05:14-04:00","unseen":false,"title":"CSS documentation?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":5689,"fancy_title":"Wordpress plugin to include latest topics as a sidebar?","slug":"wordpress-plugin-to-include-latest-topics-as-a-sidebar","posts_count":5,"reply_count":1,"highest_post_number":5,"image_url":null,"created_at":"2013-04-07T16:08:21-04:00","last_posted_at":"2013-06-12T14:10:44-04:00","bumped":true,"bumped_at":"2013-06-12T14:10:44-04:00","unseen":false,"title":"Wordpress plugin to include latest topics as a sidebar?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":531,"fancy_title":"Discourse and Wordpress Integration","slug":"discourse-and-wordpress-integration","posts_count":57,"reply_count":50,"highest_post_number":59,"image_url":null,"created_at":"2013-02-05T18:56:37-05:00","last_posted_at":"2013-06-10T17:35:34-04:00","bumped":true,"bumped_at":"2013-06-10T17:35:34-04:00","unseen":false,"title":"Discourse and Wordpress Integration","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7213,"fancy_title":"Discourse as a Job Portal","slug":"discourse-as-a-job-portal","posts_count":5,"reply_count":1,"highest_post_number":5,"image_url":null,"created_at":"2013-06-06T04:43:59-04:00","last_posted_at":"2013-06-07T14:23:22-04:00","bumped":true,"bumped_at":"2013-06-07T14:23:22-04:00","unseen":false,"title":"Discourse as a Job Portal","pinned":false,"visible":true,"closed":false,"archived":false},{"id":31,"fancy_title":"What is the most awesome plugin for Discourse, that does not yet exist?","slug":"what-is-the-most-awesome-plugin-for-discourse-that-does-not-yet-exist","posts_count":153,"reply_count":105,"highest_post_number":154,"image_url":null,"created_at":"2013-02-03T06:43:18-05:00","last_posted_at":"2013-06-03T08:41:19-04:00","bumped":true,"bumped_at":"2013-06-03T08:41:19-04:00","unseen":false,"title":"What is the most awesome plugin for Discourse, that does not yet exist?","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":8,"name":"hosting","color":"25AAE1","text_color":"FFFFFF","slug":"hosting","topic_count":41,"topics_week":1,"topics_month":9,"topics_year":41,"description":"Topics about hosting Discourse, either on your own servers, in the cloud, or with specific hosting services.","description_excerpt":"Topics about hosting Discourse, either on your own servers, in the cloud, or with specific hosting services.","featured_user_ids":[1,32,2291,1674,2839],"topics":[{"id":7595,"fancy_title":"Installing Discourse on AppFog","slug":"installing-discourse-on-appfog","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-06-18T11:43:50-04:00","last_posted_at":"2013-06-18T11:43:51-04:00","bumped":true,"bumped_at":"2013-06-18T11:43:51-04:00","unseen":false,"title":"Installing Discourse on AppFog","pinned":false,"visible":true,"closed":false,"archived":false},{"id":4864,"fancy_title":"Discourse behind Varnish?","slug":"discourse-behind-varnish","posts_count":7,"reply_count":4,"highest_post_number":7,"image_url":null,"created_at":"2013-03-18T07:48:24-04:00","last_posted_at":"2013-06-16T12:12:47-04:00","bumped":true,"bumped_at":"2013-06-16T12:12:47-04:00","unseen":false,"title":"Discourse behind Varnish?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":6783,"fancy_title":"Installation instructions for Ubuntu","slug":"installation-instructions-for-ubuntu","posts_count":33,"reply_count":26,"highest_post_number":33,"image_url":null,"created_at":"2013-05-22T00:53:38-04:00","last_posted_at":"2013-06-15T18:17:55-04:00","bumped":true,"bumped_at":"2013-06-15T18:17:55-04:00","unseen":false,"title":"Installation instructions for Ubuntu","pinned":false,"visible":true,"closed":false,"archived":false},{"id":6779,"fancy_title":"Storing Images in the cloud","slug":"storing-images-in-the-cloud","posts_count":14,"reply_count":8,"highest_post_number":14,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/926/05bfcce4f39b1d06.png","created_at":"2013-05-21T19:56:32-04:00","last_posted_at":"2013-06-11T16:48:43-04:00","bumped":true,"bumped_at":"2013-06-11T16:48:43-04:00","unseen":false,"title":"Storing Images in the cloud","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7284,"fancy_title":"Meta.discourse.org stats?","slug":"meta-discourse-org-stats","posts_count":3,"reply_count":1,"highest_post_number":3,"image_url":null,"created_at":"2013-06-08T03:16:26-04:00","last_posted_at":"2013-06-08T13:58:53-04:00","bumped":true,"bumped_at":"2013-06-08T13:58:53-04:00","unseen":false,"title":"Meta.discourse.org stats?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":6992,"fancy_title":"Has anyone used webfaction for discourse?","slug":"has-anyone-used-webfaction-for-discourse","posts_count":7,"reply_count":6,"highest_post_number":10,"image_url":null,"created_at":"2013-05-29T11:41:50-04:00","last_posted_at":"2013-06-01T11:28:29-04:00","bumped":true,"bumped_at":"2013-06-01T11:28:29-04:00","unseen":false,"title":"Has anyone used webfaction for discourse?","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":3,"name":"meta","color":"aaa","text_color":"FFFFFF","slug":"meta","topic_count":61,"topics_week":1,"topics_month":5,"topics_year":61,"description":"Discussion about meta.discourse.org itself, the organization of this forum about Discourse, how it works, and how we can improve this site.","description_excerpt":"Discussion about meta.discourse.org itself, the organization of this forum about Discourse, how it works, and how we can improve this site.","featured_user_ids":[32,1,38,2128,811],"topics":[{"id":5249,"fancy_title":"What is “Meta”?","slug":"what-is-meta","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2013-03-25T18:00:52-04:00","last_posted_at":"2013-03-25T18:00:56-04:00","bumped":false,"bumped_at":"2013-03-25T18:00:52-04:00","unseen":false,"title":"What is \"Meta\"?","pinned":true,"excerpt":"What is "Meta"?\n\nMeta means discussion of the discussion itself instead of the actual topic of the discussion. For example, discussions about... \n\n\nThe style of discussion.\nThe participants in the discussion.\nThe setting…","visible":true,"closed":false,"archived":false},{"id":1421,"fancy_title":"How do I send people invites?","slug":"how-do-i-send-people-invites","posts_count":13,"reply_count":10,"highest_post_number":13,"image_url":null,"created_at":"2013-02-06T11:28:45-05:00","last_posted_at":"2013-06-20T05:34:30-04:00","bumped":true,"bumped_at":"2013-06-20T05:34:30-04:00","unseen":false,"title":"How do I send people invites?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":3098,"fancy_title":"Ember and SEO challenges regarding discourse.org","slug":"ember-and-seo-challenges-regarding-discourse-org","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":null,"created_at":"2013-02-14T13:40:31-05:00","last_posted_at":"2013-06-20T00:30:18-04:00","bumped":true,"bumped_at":"2013-06-20T00:30:18-04:00","unseen":false,"title":"Ember and SEO challenges regarding discourse.org","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7618,"fancy_title":"New posts, read posts, unread posts - I like this","slug":"new-posts-read-posts-unread-posts-i-like-this","posts_count":4,"reply_count":3,"highest_post_number":4,"image_url":"http://cdn.discourse.org/assets/emoji/wink2.png","created_at":"2013-06-18T21:21:00-04:00","last_posted_at":"2013-06-19T23:10:46-04:00","bumped":true,"bumped_at":"2013-06-19T23:10:46-04:00","unseen":false,"title":"New posts, read posts, unread posts - I like this","pinned":false,"visible":true,"closed":false,"archived":false},{"id":6633,"fancy_title":"Discourse.org website is not available in Turkey","slug":"discourse-org-website-is-not-available-in-turkey","posts_count":18,"reply_count":10,"highest_post_number":18,"image_url":null,"created_at":"2013-05-15T05:40:32-04:00","last_posted_at":"2013-06-16T20:37:29-04:00","bumped":true,"bumped_at":"2013-06-16T20:37:29-04:00","unseen":false,"title":"Discourse.org website is not available in Turkey","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7431,"fancy_title":"Embedded images are not loading for me","slug":"embedded-images-are-not-loading-for-me","posts_count":2,"reply_count":1,"highest_post_number":2,"image_url":null,"created_at":"2013-06-12T23:37:29-04:00","last_posted_at":"2013-06-12T23:41:12-04:00","bumped":true,"bumped_at":"2013-06-12T23:41:12-04:00","unseen":false,"title":"Embedded images are not loading for me","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":13,"name":"blog","color":"ED207B","text_color":"FFFFFF","slug":"blog","topic_count":7,"topics_week":1,"topics_month":2,"topics_year":7,"description":"Discussion topics generated from the official Discourse Blog. These topics are linked from the bottom of each blog entry where the blog comments would normally be.","description_excerpt":"Discussion topics generated from the official Discourse Blog. These topics are linked from the bottom of each blog entry where the blog comments would normally be.","featured_user_ids":[32,1,5468,2471,4217],"topics":[{"id":7478,"fancy_title":"Discourse on Ubuntu: Video Walkthrough","slug":"discourse-on-ubuntu-video-walkthrough","posts_count":3,"reply_count":1,"highest_post_number":3,"image_url":null,"created_at":"2013-06-14T10:47:53-04:00","last_posted_at":"2013-06-17T10:55:31-04:00","bumped":true,"bumped_at":"2013-06-17T10:55:31-04:00","unseen":false,"title":"Discourse on Ubuntu: Video Walkthrough","pinned":false,"visible":true,"closed":false,"archived":false},{"id":5751,"fancy_title":"Discourse as Your First Rails App","slug":"discourse-as-your-first-rails-app","posts_count":43,"reply_count":31,"highest_post_number":48,"image_url":null,"created_at":"2013-04-09T19:08:33-04:00","last_posted_at":"2013-06-11T19:00:14-04:00","bumped":true,"bumped_at":"2013-06-13T05:22:30-04:00","unseen":false,"title":"Discourse as Your First Rails App","pinned":false,"visible":true,"closed":false,"archived":false},{"id":5575,"fancy_title":"Our First Partner: How-To Geek","slug":"our-first-partner-how-to-geek","posts_count":22,"reply_count":16,"highest_post_number":23,"image_url":null,"created_at":"2013-04-03T18:42:46-04:00","last_posted_at":"2013-06-07T19:27:46-04:00","bumped":true,"bumped_at":"2013-06-07T19:27:46-04:00","unseen":false,"title":"Our First Partner: How-To Geek","pinned":false,"visible":true,"closed":false,"archived":false},{"id":5898,"fancy_title":"The Discourse Servers","slug":"the-discourse-servers","posts_count":29,"reply_count":21,"highest_post_number":29,"image_url":null,"created_at":"2013-04-15T15:19:09-04:00","last_posted_at":"2013-05-30T15:44:01-04:00","bumped":true,"bumped_at":"2013-05-30T15:44:01-04:00","unseen":false,"title":"The Discourse Servers","pinned":false,"visible":true,"closed":false,"archived":false},{"id":6744,"fancy_title":"Your Online Clubhouse","slug":"your-online-clubhouse","posts_count":7,"reply_count":4,"highest_post_number":7,"image_url":null,"created_at":"2013-05-20T16:26:44-04:00","last_posted_at":"2013-05-23T12:07:47-04:00","bumped":true,"bumped_at":"2013-05-23T12:07:47-04:00","unseen":false,"title":"Your Online Clubhouse","pinned":false,"visible":true,"closed":false,"archived":false},{"id":5366,"fancy_title":"Forums, As Seen On TV","slug":"forums-as-seen-on-tv","posts_count":7,"reply_count":5,"highest_post_number":7,"image_url":"http://blog.discourse.org/wp-uploads/2013/03/30-rock-forums-1.jpg","created_at":"2013-03-28T16:53:41-04:00","last_posted_at":"2013-04-19T16:20:08-04:00","bumped":true,"bumped_at":"2013-04-19T16:20:08-04:00","unseen":false,"title":"Forums, As Seen On TV","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":14,"name":"marketplace","color":"8C6238","text_color":"FFFFFF","slug":"marketplace","topic_count":4,"topics_week":0,"topics_month":3,"topics_year":4,"description":"About commercial Discourse related stuff: jobs or paid gigs, plugins, themes, hosting, etc.","description_excerpt":"About commercial Discourse related stuff: jobs or paid gigs, plugins, themes, hosting, etc.","featured_user_ids":[1263,406,5460,32,2399],"topics":[{"id":7305,"fancy_title":"I would like to hire someone to install discourse on my site","slug":"i-would-like-to-hire-someone-to-install-discourse-on-my-site","posts_count":3,"reply_count":1,"highest_post_number":3,"image_url":null,"created_at":"2013-06-08T18:32:07-04:00","last_posted_at":"2013-06-09T00:27:21-04:00","bumped":true,"bumped_at":"2013-06-09T00:27:21-04:00","unseen":false,"title":"I would like to hire someone to install discourse on my site","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7221,"fancy_title":"I want discourse for small business","slug":"i-want-discourse-for-small-business","posts_count":8,"reply_count":5,"highest_post_number":8,"image_url":null,"created_at":"2013-06-06T09:05:43-04:00","last_posted_at":"2013-06-06T19:52:47-04:00","bumped":true,"bumped_at":"2013-06-06T19:52:47-04:00","unseen":false,"title":"I want discourse for small business","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7054,"fancy_title":"Contract available: Web developer (RoR, JS, Node.JS, Discourse)","slug":"contract-available-web-developer-ror-js-node-js-discourse","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-05-31T19:30:52-04:00","last_posted_at":"2013-05-31T19:30:52-04:00","bumped":false,"bumped_at":"2013-05-31T19:30:52-04:00","unseen":false,"title":"Contract available: Web developer (RoR, JS, Node.JS, Discourse)","pinned":false,"visible":true,"closed":false,"archived":false},{"id":5409,"fancy_title":"Looking for a Discourse specialist !!","slug":"looking-for-a-discourse-specialist","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-03-30T02:15:56-04:00","last_posted_at":"2013-03-30T02:15:56-04:00","bumped":false,"bumped_at":"2013-03-30T02:15:56-04:00","unseen":false,"title":"Looking for a Discourse specialist !!","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":4,"name":"faq","color":"33b","text_color":"FFFFFF","slug":"faq","topic_count":38,"topics_week":0,"topics_month":1,"topics_year":38,"description":"Topics that come up very often when discussing Discourse will eventually be classified into this Frequently Asked Questions category. Should only be added to popular topics.","description_excerpt":"Topics that come up very often when discussing Discourse will eventually be classified into this Frequently Asked Questions category. Should only be added to popular topics.","featured_user_ids":[32,1,4,4263,2465],"topics":[{"id":6724,"fancy_title":"Where is this development roadmap?","slug":"where-is-this-development-roadmap","posts_count":12,"reply_count":8,"highest_post_number":12,"image_url":null,"created_at":"2013-05-19T15:15:19-04:00","last_posted_at":"2013-06-17T11:03:07-04:00","bumped":true,"bumped_at":"2013-06-17T11:03:07-04:00","unseen":false,"title":"Where is this development roadmap?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":2408,"fancy_title":"Private Discourse Forum","slug":"private-discourse-forum","posts_count":14,"reply_count":7,"highest_post_number":14,"image_url":null,"created_at":"2013-02-08T08:25:22-05:00","last_posted_at":"2013-06-13T04:49:27-04:00","bumped":true,"bumped_at":"2013-06-13T04:49:27-04:00","unseen":false,"title":"Private Discourse Forum","pinned":false,"visible":true,"closed":false,"archived":false},{"id":7378,"fancy_title":"Discourse Release Announcements for each tagged version release","slug":"discourse-release-announcements-for-each-tagged-version-release","posts_count":5,"reply_count":2,"highest_post_number":5,"image_url":null,"created_at":"2013-06-11T10:31:03-04:00","last_posted_at":"2013-06-12T02:18:33-04:00","bumped":true,"bumped_at":"2013-06-12T02:18:33-04:00","unseen":false,"title":"Discourse Release Announcements for each tagged version release","pinned":false,"visible":true,"closed":false,"archived":false},{"id":3059,"fancy_title":"Two different unread counts","slug":"two-different-unread-counts","posts_count":8,"reply_count":6,"highest_post_number":8,"image_url":"http://cdn.discourse.org/uploads/meta_discourse/266/screen_shot_20130213_at_11_32_07_pm.png","created_at":"2013-02-14T02:37:50-05:00","last_posted_at":"2013-03-24T15:40:45-04:00","bumped":true,"bumped_at":"2013-06-04T18:20:22-04:00","unseen":false,"title":"Two different unread counts","pinned":false,"visible":true,"closed":false,"archived":false},{"id":2724,"fancy_title":"What about the spam problem?","slug":"what-about-the-spam-problem","posts_count":8,"reply_count":3,"highest_post_number":8,"image_url":null,"created_at":"2013-02-11T00:58:15-05:00","last_posted_at":"2013-05-29T19:04:48-04:00","bumped":true,"bumped_at":"2013-05-29T19:04:48-04:00","unseen":false,"title":"What about the spam problem?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":4546,"fancy_title":"What is a onebox?","slug":"what-is-a-onebox","posts_count":11,"reply_count":7,"highest_post_number":11,"image_url":"http://meta.discourse.org/users/stienman/avatar/40?__ws=meta.discourse.org","created_at":"2013-03-07T07:56:00-05:00","last_posted_at":"2013-05-22T16:34:11-04:00","bumped":true,"bumped_at":"2013-05-22T16:34:11-04:00","unseen":false,"title":"What is a onebox?","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":11,"name":"login","color":"edb400","text_color":"FFFFFF","slug":"login","topic_count":15,"topics_week":0,"topics_month":1,"topics_year":15,"description":"Topics about logging in to Discourse, using any standard third party provider (Twitter, Facebook, Google), traditional username and password, or with a custom plugin.","description_excerpt":"Topics about logging in to Discourse, using any standard third party provider (Twitter, Facebook, Google), traditional username and password, or with a custom plugin.","featured_user_ids":[32,2,1,4939,3507],"topics":[{"id":6869,"fancy_title":"Force use of an authentication provider","slug":"force-use-of-an-authentication-provider","posts_count":21,"reply_count":16,"highest_post_number":21,"image_url":null,"created_at":"2013-05-24T15:26:41-04:00","last_posted_at":"2013-06-15T16:58:09-04:00","bumped":true,"bumped_at":"2013-06-15T16:58:09-04:00","unseen":false,"title":"Force use of an authentication provider","pinned":false,"visible":true,"closed":false,"archived":false},{"id":5800,"fancy_title":"UTF-8 to webalized char set transliteration for Facebook login","slug":"utf-8-to-webalized-char-set-transliteration-for-facebook-login","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-04-11T13:58:56-04:00","last_posted_at":"2013-04-11T13:58:56-04:00","bumped":false,"bumped_at":"2013-04-11T13:58:56-04:00","unseen":false,"title":"UTF-8 to webalized char set transliteration for Facebook login","pinned":false,"visible":true,"closed":false,"archived":false},{"id":4011,"fancy_title":"I can’t login using my password","slug":"i-can-t-login-using-my-password","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":null,"created_at":"2013-02-25T06:47:42-05:00","last_posted_at":"2013-03-13T19:36:48-04:00","bumped":true,"bumped_at":"2013-03-13T19:36:44-04:00","unseen":false,"title":"I can't login using my password","pinned":false,"visible":true,"closed":false,"archived":true},{"id":4738,"fancy_title":"Login support for browser password managers","slug":"login-support-for-browser-password-managers","posts_count":5,"reply_count":2,"highest_post_number":5,"image_url":null,"created_at":"2013-03-13T17:55:29-04:00","last_posted_at":"2013-03-13T19:11:56-04:00","bumped":true,"bumped_at":"2013-03-13T19:11:56-04:00","unseen":false,"title":"Login support for browser password managers","pinned":false,"visible":true,"closed":false,"archived":false},{"id":2257,"fancy_title":"Alternative (non-ajax) way to login, so that browser password manager can save the login credentials","slug":"alternative-non-ajax-way-to-login-so-that-browser-password-manager-can-save-the-login-credentials","posts_count":9,"reply_count":4,"highest_post_number":9,"image_url":null,"created_at":"2013-02-07T17:05:37-05:00","last_posted_at":"2013-03-13T19:06:28-04:00","bumped":true,"bumped_at":"2013-03-13T19:06:23-04:00","unseen":false,"title":"Alternative (non-ajax) way to login, so that browser password manager can save the login credentials","pinned":false,"visible":true,"closed":false,"archived":true},{"id":4473,"fancy_title":"Log in doesn’t work correctly when behind a proxy","slug":"log-in-doesn-t-work-correctly-when-behind-a-proxy","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2013-03-05T10:38:08-05:00","last_posted_at":"2013-03-05T10:38:08-05:00","bumped":false,"bumped_at":"2013-03-05T10:38:08-05:00","unseen":false,"title":"Log in doesn't work correctly when behind a proxy","pinned":false,"visible":true,"closed":false,"archived":false}]},{"id":12,"name":"discourse hub","color":"b2c79f","text_color":"FFFFFF","slug":"discourse-hub","topic_count":4,"topics_week":0,"topics_month":0,"topics_year":4,"description":"Topics about current or future Discourse Hub functionality at discourse.org including nickname registration, global user pages, and the site directory.","description_excerpt":"Topics about current or future Discourse Hub functionality at discourse.org including nickname registration, global user pages, and the site directory.","featured_user_ids":[32,2,704,461,1566],"topics":[{"id":6547,"fancy_title":"Where to get discourse_org_access_key?","slug":"where-to-get-discourse-org-access-key","posts_count":6,"reply_count":1,"highest_post_number":6,"image_url":null,"created_at":"2013-05-10T22:06:08-04:00","last_posted_at":"2013-06-18T11:49:18-04:00","bumped":true,"bumped_at":"2013-06-18T11:49:18-04:00","unseen":false,"title":"Where to get discourse_org_access_key?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":424,"fancy_title":"What are the ‘consequences’ of changing your name?","slug":"what-are-the-consequences-of-changing-your-name","posts_count":33,"reply_count":32,"highest_post_number":33,"image_url":null,"created_at":"2013-02-05T17:37:52-05:00","last_posted_at":"2013-05-17T11:28:00-04:00","bumped":true,"bumped_at":"2013-06-12T13:22:10-04:00","unseen":false,"title":"What are the 'consequences' of changing your name?","pinned":false,"visible":true,"closed":false,"archived":false},{"id":2544,"fancy_title":"Discourse central hub questions","slug":"discourse-central-hub-questions","posts_count":49,"reply_count":41,"highest_post_number":49,"image_url":null,"created_at":"2013-02-09T04:28:21-05:00","last_posted_at":"2013-05-28T12:15:25-04:00","bumped":true,"bumped_at":"2013-05-28T12:15:25-04:00","unseen":false,"title":"Discourse central hub questions","pinned":false,"visible":true,"closed":false,"archived":false},{"id":5664,"fancy_title":"Discourse Hub nickname uniqueness not working?","slug":"discourse-hub-nickname-uniqueness-not-working","posts_count":22,"reply_count":16,"highest_post_number":23,"image_url":null,"created_at":"2013-04-06T03:40:11-04:00","last_posted_at":"2013-04-09T10:56:46-04:00","bumped":true,"bumped_at":"2013-04-09T10:56:46-04:00","unseen":false,"title":"Discourse Hub nickname uniqueness not working?","pinned":false,"visible":true,"closed":false,"archived":false}]}]}} \ No newline at end of file diff --git a/test/javascripts/fixtures/topic_fixtures.js b/test/javascripts/fixtures/topic_fixtures.js new file mode 100644 index 00000000000..5b65b74d34f --- /dev/null +++ b/test/javascripts/fixtures/topic_fixtures.js @@ -0,0 +1,2 @@ +/*jshint maxlen:10000000 */ +Discourse.URL_FIXTURES["/t/280/1.json"] = {"id":280,"title":"Internationalization / localization","fancy_title":"Internationalization / localization","posts_count":93,"created_at":"2013-02-05T16:29:00-05:00","views":2225,"reply_count":64,"last_posted_at":"2013-06-18T14:22:35-04:00","visible":true,"closed":false,"archived":false,"moderator_posts_count":0,"has_best_of":true,"archetype":"regular","slug":"internationalization-localization","auto_close_at":null,"draft":null,"draft_key":"topic_280","draft_sequence":null,"post_action_visibility":[2,5],"voted_in_topic":false,"categoryName":"feature","posts":[{"id":398,"post_number":1,"post_type":1,"created_at":"2013-02-05T16:29:00-05:00","updated_at":"2013-02-05T16:29:00-05:00","reply_count":0,"reply_to_post_number":null,"quote_count":0,"avg_time":21,"incoming_link_count":0,"reads":321,"score":97.25,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Uwe Keim","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"link_counts":[{"url":"http://meta.discourse.org/t/language-mirrors/2378/2","internal":true,"reflection":true,"title":"Language mirrors","clicks":29},{"url":"http://meta.discourse.org/t/roadplan-for-discourse/2939/5","internal":true,"reflection":true,"title":"Roadplan for Discourse","clicks":18},{"url":"http://meta.discourse.org/t/internationalization-i18n-provided-for-discourse-/2073/2","internal":true,"reflection":true,"title":"Internationalization I18n provided for discourse ?","clicks":17},{"url":"http://meta.discourse.org/t/solving-xda-developer-style-forums/4368/4","internal":true,"reflection":true,"title":"Solving XDA-Developer style forums","clicks":4},{"url":"http://meta.discourse.org/t/bookmark-last-read-sometimes-doesn-t-go-to-the-end-of-a-topic/4825/9","internal":true,"reflection":true,"title":"Bookmark/last read sometimes doesn't go to the end of a topic","clicks":3},{"url":"http://meta.discourse.org/t/translation-workflow/6102","internal":true,"reflection":true,"title":"Translation workflow","clicks":3},{"url":"http://meta.discourse.org/t/comrades-let-s-join-our-efforts-on-ukrainian-and-russian-translations/4403/5","internal":true,"reflection":true,"title":"Comrades let's join our efforts on ukrainian and russian translations","clicks":3},{"url":"http://meta.discourse.org/t/how-to-change-language/6900/2","internal":true,"reflection":true,"title":"How to change language?","clicks":3},{"url":"http://meta.discourse.org/t/suggestion-translation-on-admin-panel/6923/5","internal":true,"reflection":true,"title":"Suggestion: Translation on admin panel","clicks":1},{"url":"http://meta.discourse.org/t/when-will-discourse-provide-an-local-language-configuration/7068/2","internal":true,"reflection":true,"title":"When will discourse provide an local language configuration","clicks":1},{"url":"http://meta.discourse.org/t/jump-to-last-post-does-not-work-in-best-of-mode/7626","internal":true,"reflection":true,"title":"Jump to last post does not work in \"Best of\" mode","clicks":0},{"url":"http://meta.discourse.org/t/missing-user-value-in-chinese-localized-page/7406/6","internal":true,"reflection":true,"title":"[missing {{user}} value] in Chinese localized page","clicks":0},{"url":"http://meta.discourse.org/t/i-like-discourse-want-join-discourse-translation-team/6679/3","internal":true,"reflection":true,"title":"I like discourse,want join discourse translation team","clicks":0},{"url":"http://meta.discourse.org/t/suggestion-translation-on-admin-panel/6923/6","internal":true,"reflection":true,"title":"Suggestion: Translation on admin panel","clicks":0}],"cooked":"
Any plans to support localization of UI elements, so that I (for example) could set up a completely German speaking forum?
","read":false,"username":"uwe_keim","name":"Uwe Keim","actions_summary":[{"id":2,"count":0,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/53a82f701ae492808834e621de2586eb.png?s={size}&r=pg&d=identicon","user_id":255,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":1,"index":1},{"id":419,"post_number":2,"post_type":1,"created_at":"2013-02-05T16:32:47-05:00","updated_at":"2013-02-06T05:15:27-05:00","reply_count":0,"reply_to_post_number":null,"quote_count":0,"avg_time":25,"incoming_link_count":10,"reads":318,"score":234.85,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Tim Stone","version":2,"can_edit":null,"can_delete":null,"can_recover":false,"link_counts":[{"url":"https://github.com/discourse/discourse/blob/master/config/locales/en.yml","internal":false,"reflection":false,"clicks":70}],"cooked":"The application strings are externalized, so localization should be entirely possible with enough translation effort.
","read":false,"username":"tms","name":"Tim Stone","actions_summary":[{"id":2,"count":3,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/3981cd271c302f5cba628c6b6d2b32ee.png?s={size}&r=pg&d=identicon","user_id":9,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":2},{"id":1060,"post_number":3,"post_type":1,"created_at":"2013-02-05T21:26:24-05:00","updated_at":"2013-06-18T22:58:28-04:00","reply_count":3,"reply_to_post_number":null,"quote_count":0,"avg_time":35,"incoming_link_count":4,"reads":312,"score":144.15,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Jeff Atwood","version":3,"can_edit":null,"can_delete":null,"can_recover":false,"link_counts":[{"url":"https://github.com/discourse/discourse/blob/master/config/locales","internal":false,"reflection":false,"clicks":1}],"cooked":"Yep, all strings are going through a lookup table.*
\n\nhttps://github.com/discourse/discourse/blob/master/config/locales
\n\nSo you could replace that lookup table with the \"de\" one to get German.
\n\n* we didn't get all the strings into the lookup table for launch, but the vast, vast majority of them are and the ones that are not, we will fix as we go!
","read":false,"username":"codinghorror","name":"Jeff Atwood","actions_summary":[{"id":2,"count":3,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":true,"avatar_template":"https://www.gravatar.com/avatar/51d623f33f8b83095db84ff35e15dbe8.png?s={size}&r=pg&d=identicon","user_id":32,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":3},{"id":3623,"post_number":4,"post_type":1,"created_at":"2013-02-07T07:55:33-05:00","updated_at":"2013-02-07T07:55:33-05:00","reply_count":0,"reply_to_post_number":null,"quote_count":0,"avg_time":21,"incoming_link_count":10,"reads":269,"score":239.85,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Shade","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"link_counts":[{"url":"http://meta.discourse.org/t/hi-support-chinese/4393/6","internal":true,"reflection":true,"title":"Hi, support Chinese?","clicks":9}],"cooked":"Is it a coincidence that the strings file is 1337 lines long? :D
","read":false,"username":"shade","name":"Shade","actions_summary":[{"id":2,"count":7,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/02c3f1806f6962f56168c7bd9f8924b8.png?s={size}&r=pg&d=identicon","user_id":1808,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":1,"index":4},{"id":3651,"post_number":5,"post_type":1,"created_at":"2013-02-07T09:02:07-05:00","updated_at":"2013-02-07T09:05:42-05:00","reply_count":2,"reply_to_post_number":3,"quote_count":1,"avg_time":24,"incoming_link_count":6,"reads":263,"score":153.8,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Pekka Gaiser","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"link_counts":[{"url":"http://stackoverflow.com/questions/4232922/why-do-people-use-plain-english-as-translation-placeholders","internal":false,"reflection":false,"clicks":45},{"url":"/users/codinghorror","internal":true,"reflection":false,"clicks":5}],"cooked":"\n\nThe problem I see here is that this file is likely two grow and change massively over the next couple months, and tracking these changes in order to keep a localized file up to date is going to be a bitch.
\n\nI wonder where there is a tool that can compare two yml structures and point out which nodes are missing? That would help keep track of new strings.
\n\nRe keeping track of changed strings, @codinghorror I found this very interesting: http://stackoverflow.com/questions/4232922/why-do-people-use-plain-english-as-translation-placeholders if plain English placeholders were used, any change in strings would lead to a new node in the yml file, making keeping the translation up to date easier. Maybe worth thinking about in the future.
","read":false,"username":"pekka","name":"Pekka Gaiser","actions_summary":[{"id":2,"count":1,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/100a6c42a31a56e882475725d65537f8.png?s={size}&r=pg&d=identicon","user_id":7,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":5},{"id":3654,"post_number":6,"post_type":1,"created_at":"2013-02-07T09:05:39-05:00","updated_at":"2013-02-07T09:05:39-05:00","reply_count":1,"reply_to_post_number":5,"quote_count":0,"avg_time":19,"incoming_link_count":1,"reads":237,"score":73.35,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Sam Saffron","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"link_counts":[{"url":"https://github.com/SlexAxton/messageformat.js","internal":false,"reflection":false,"clicks":34},{"url":"https://github.com/SlexAxton","internal":false,"reflection":false,"clicks":7}],"cooked":"Yes, I really like the concept of fuzzy matching for localization, perhaps you can chase up alex sexton he was meaning to upload a localization tool for this kind of stuff.
\n\nAlso, I am a big fan of ICU message format, but it is not the \"Rails way (tm)\".
","read":false,"username":"sam","name":"Sam Saffron","reply_to_user":{"username":"pekka","name":"Pekka Gaiser"},"actions_summary":[{"id":2,"count":1,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":true,"avatar_template":"https://www.gravatar.com/avatar/3dcae8378d46c244172a115c28ca49ce.png?s={size}&r=pg&d=identicon","user_id":1,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":6},{"id":3655,"post_number":7,"post_type":1,"created_at":"2013-02-07T09:08:17-05:00","updated_at":"2013-02-07T09:12:02-05:00","reply_count":1,"reply_to_post_number":6,"quote_count":1,"avg_time":17,"incoming_link_count":0,"reads":239,"score":68.65,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Pekka Gaiser","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"link_counts":[{"url":"http://translate.wordpress.org/projects/bbpress/dev","internal":false,"reflection":false,"clicks":13}],"cooked":"Looks interesting, I'll take a peek.
\n\nAs said on dev, the best tool I can see in terms of giving translators a proper interface and quality control would be something like GlotPress. It's based on the PO messages format (is that somehow related to ICU?) but looks pretty great.
\n\n\n\nI'm not familiar with the term in this context, you mean keeping the English version in the code base (instead of a generic code like message_error_nametooshort
?)
ICU Message format is basically Gettext on steroids, Gettext has been around for so many years and actually works pretty well, being super prevalent in Linux.
\n\nTrouble is you need a fuzzy matcher for translators if you are going to store stuff like mf.compile( 'This is a message.' )
in source, one letter change and all your translators need to validate it.
Yeah, that's why I've always been a friend of message_error_nametooshort
placeholders, until I asked the SO question linked above. The accepted answer makes a good argument against those placeholders: you want translations to break even on small changes in the English original because the translations will probably need to reflect the change, too. Maybe that's not the case right now as new stuff is being checked in pretty much every couple of hours, but in the long run, it'll be overwhelmingly true.
Hmm...You could theoretically also build something into the development process that would monitor changes to the English locale file and make a translator-friendly list of changes between versions.
","read":false,"username":"tms","name":"Tim Stone","reply_to_user":{"username":"pekka","name":"Pekka Gaiser"},"actions_summary":[{"id":2,"count":1,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/3981cd271c302f5cba628c6b6d2b32ee.png?s={size}&r=pg&d=identicon","user_id":9,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":10},{"id":3673,"post_number":11,"post_type":1,"created_at":"2013-02-07T09:30:21-05:00","updated_at":"2013-02-07T09:30:21-05:00","reply_count":1,"reply_to_post_number":10,"quote_count":0,"avg_time":8,"incoming_link_count":0,"reads":202,"score":60.8,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Sam Saffron","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"cooked":"Yeah, totally, also we could build tools for dev that make introducing string less annoying and make it possible to garbage collect old unused strings, I hate trudging through that file.
","read":false,"username":"sam","name":"Sam Saffron","reply_to_user":{"username":"tms","name":"Tim Stone"},"actions_summary":[{"id":2,"count":1,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":true,"avatar_template":"https://www.gravatar.com/avatar/3dcae8378d46c244172a115c28ca49ce.png?s={size}&r=pg&d=identicon","user_id":1,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":11},{"id":3675,"post_number":12,"post_type":1,"created_at":"2013-02-07T09:33:38-05:00","updated_at":"2013-02-07T09:34:39-05:00","reply_count":1,"reply_to_post_number":11,"quote_count":1,"avg_time":9,"incoming_link_count":1,"reads":203,"score":66.05,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Pekka Gaiser","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"cooked":"\n\nAs said, I'd look into whether WP's tools can't be reused for this with some tweaking. They seem to be able to scan a code base for new strings, and make them available automatically to translators.
\n\nThey're PHP based which isn't ideal, but it looks like they've done a crapload of work to take the hassle out of translations.
","read":false,"username":"pekka","name":"Pekka Gaiser","actions_summary":[{"id":2,"count":1,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/100a6c42a31a56e882475725d65537f8.png?s={size}&r=pg&d=identicon","user_id":7,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":12},{"id":3690,"post_number":13,"post_type":1,"created_at":"2013-02-07T10:05:35-05:00","updated_at":"2013-02-07T10:05:35-05:00","reply_count":0,"reply_to_post_number":null,"quote_count":0,"avg_time":8,"incoming_link_count":9,"reads":206,"score":116.6,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Valts","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"cooked":"This site looks so nice with all the little tweaks like \"10 minutes ago\" instead of simply time, etc - I wonder if there will also be support for proper pluralization in other languages? That's a pretty hard task though, I don't think I've ever seen a website that has done that. But it would be awesome.
","read":false,"username":"Vilx","name":"Valts","actions_summary":[{"id":2,"count":2,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/7bd2e50770e937761cfc3811a332bccc.png?s={size}&r=pg&d=identicon","user_id":1216,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":13},{"id":3925,"post_number":14,"post_type":1,"created_at":"2013-02-07T14:37:06-05:00","updated_at":"2013-02-07T14:37:06-05:00","reply_count":1,"reply_to_post_number":12,"quote_count":1,"avg_time":9,"incoming_link_count":0,"reads":194,"score":74.25,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Eric Kidd","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"link_counts":[{"url":"http://www.localeapp.com/","internal":false,"reflection":false,"clicks":44}],"cooked":"\n\nI've had pretty decent luck using Localeapp to localize Rails applications:
\n\n\n\nThe developer workflow took me about an hour to really get used to, and there were a few minor glitches. But the non-technical translators had very few problems. One limitation: It insists on rewriting all those yaml files full of strings.
\n\nAnyway, it's worth a look, and it's free for open source, if I recall correctly. Certainly easier than doing a whole bunch of toolsmithing from scratch.
","read":false,"username":"emk","name":"Eric Kidd","actions_summary":[{"id":2,"count":2,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/528ca205857ff8f648359dcd3e74c84a.png?s={size}&r=pg&d=identicon","user_id":1860,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":1,"index":14},{"id":3938,"post_number":15,"post_type":1,"created_at":"2013-02-07T14:52:13-05:00","updated_at":"2013-02-07T14:52:13-05:00","reply_count":1,"reply_to_post_number":14,"quote_count":1,"avg_time":8,"incoming_link_count":0,"reads":184,"score":57.2,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Pekka Gaiser","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"cooked":"\n\nOhhh. Looking sexy. droool
","read":false,"username":"pekka","name":"Pekka Gaiser","actions_summary":[{"id":2,"count":1,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/100a6c42a31a56e882475725d65537f8.png?s={size}&r=pg&d=identicon","user_id":7,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":15},{"id":3982,"post_number":16,"post_type":1,"created_at":"2013-02-07T15:52:22-05:00","updated_at":"2013-02-07T15:52:22-05:00","reply_count":1,"reply_to_post_number":15,"quote_count":1,"avg_time":8,"incoming_link_count":0,"reads":180,"score":56.4,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Eric Kidd","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"cooked":"\n\nYeah, it's pretty. :-) But there were still some rough edges as of a few months ago.
\n\nWhether or not those rough edges are a deal-breaker will probably depends on whether or not localization is already a source of acute pain. If you're already hurting, Localeapp is a pretty useful tool, especially when it comes to enlisting non-technical translators.
\n\nBut it does require changing how you work with text, and adding one new tool to the mix. So for projects that just don't want to know about non-English languages, it's not yet seamless the way Unicode is these days.
\n\n(Sweet forum software, by the way. I was just testing out Egyptian hieroglyphics on the test server, because they're well off the Basic Multilingual Plane, and tend to flush Unicode bugs. Everything worked flawlessly.)
","read":false,"username":"emk","name":"Eric Kidd","actions_summary":[{"id":2,"count":1,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/528ca205857ff8f648359dcd3e74c84a.png?s={size}&r=pg&d=identicon","user_id":1860,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":1,"index":16},{"id":3989,"post_number":17,"post_type":1,"created_at":"2013-02-07T16:04:15-05:00","updated_at":"2013-02-07T16:04:15-05:00","reply_count":2,"reply_to_post_number":16,"quote_count":1,"avg_time":8,"incoming_link_count":0,"reads":181,"score":61.6,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Pekka Gaiser","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"cooked":"\n\nInteresting, thanks for the insight. I don't think localization is seriously on their table right now, there's likely to be many other things on the table before it... but it will become an issue sooner or later.
","read":false,"username":"pekka","name":"Pekka Gaiser","actions_summary":[{"id":2,"count":1,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/100a6c42a31a56e882475725d65537f8.png?s={size}&r=pg&d=identicon","user_id":7,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":17},{"id":3996,"post_number":18,"post_type":1,"created_at":"2013-02-07T16:12:06-05:00","updated_at":"2013-02-07T16:12:06-05:00","reply_count":2,"reply_to_post_number":17,"quote_count":0,"avg_time":9,"incoming_link_count":0,"reads":186,"score":107.65,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Sam Saffron","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"cooked":"I had an idea ... what if in dev mode, you could right-click on a page and get access to all the translations on the page, make your edits and have it refreshed live.
\n\nI think it would be awesome, very doable technically.
","read":false,"username":"sam","name":"Sam Saffron","reply_to_user":{"username":"pekka","name":"Pekka Gaiser"},"actions_summary":[{"id":2,"count":4,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":true,"avatar_template":"https://www.gravatar.com/avatar/3dcae8378d46c244172a115c28ca49ce.png?s={size}&r=pg&d=identicon","user_id":1,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":18},{"id":4009,"post_number":19,"post_type":1,"created_at":"2013-02-07T16:18:47-05:00","updated_at":"2013-02-07T16:22:10-05:00","reply_count":0,"reply_to_post_number":18,"quote_count":0,"avg_time":9,"incoming_link_count":0,"reads":176,"score":50.65,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Pekka Gaiser","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"cooked":"That would be fricking cool. There'd still be some leftovers (like error messages that normally never show up, etc.) but you could corral those up on a specific page.
\n\nIt could have a dropdown giving you all the languages that you have a .yml for in the locale directory, and write the changes into the one selected. I'm sure people would love it.
","read":false,"username":"pekka","name":"Pekka Gaiser","reply_to_user":{"username":"sam","name":"Sam Saffron"},"actions_summary":[{"id":2,"count":1,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/100a6c42a31a56e882475725d65537f8.png?s={size}&r=pg&d=identicon","user_id":7,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":19},{"id":4012,"post_number":20,"post_type":1,"created_at":"2013-02-07T16:22:46-05:00","updated_at":"2013-02-07T16:22:46-05:00","reply_count":0,"reply_to_post_number":null,"quote_count":0,"avg_time":11,"incoming_link_count":1,"reads":176,"score":55.75,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Marco Ceppi","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"link_counts":[{"url":"https://translations.launchpad.net/","internal":false,"reflection":false,"clicks":7}],"cooked":"If you use gettext format you could leverage Launchpad translations and the community behind it.
","read":false,"username":"marcoceppi","name":"Marco Ceppi","actions_summary":[{"id":2,"count":1,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/4ddc8924e79bcec03256821af65fca91.png?s={size}&r=pg&d=identicon","user_id":761,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":2,"index":20},{"id":4025,"post_number":21,"post_type":1,"created_at":"2013-02-07T16:36:14-05:00","updated_at":"2013-02-07T16:36:14-05:00","reply_count":0,"reply_to_post_number":18,"quote_count":2,"avg_time":19,"incoming_link_count":1,"reads":184,"score":102.75,"yours":false,"topic_slug":"internationalization-localization","topic_id":280,"display_username":"Eric Kidd","version":1,"can_edit":null,"can_delete":null,"can_recover":false,"link_counts":[{"url":"http://www.localeapp.com/projects/1537/translations?utf8=%E2%9C%93&search=source_code","internal":false,"reflection":false,"clicks":16}],"cooked":"\n\nOne of the modes in LocaleApp is actually pretty great for this sort of work. When I'm coding, I just type something like like the following:
\n\n link_to t('.source_code'), langforums_github_url\n
\n\nThen I reload the page, and I see a bunch of empty boxes on this page here (this link is real):
\n\nThen I fill in the two languages that I allegedly speak, and everything shows up automatically on the next reload. I can sync the translations back down into my local yaml file with one command, or ask for it to happen automagically.
\n\nSo it's definitely a little more work than just typing \"Source code langforums.org\" directly into the view source. But if you need to localize, it's really pretty reasonable. And the interface for translators is quite easy to use.
\n\nAs of a few months ago, LocaleApp was far-and-away the best option for Rails localization. But as you can see, it takes a couple of extra steps.
\n\n\n\nI'm generally in favor of localization, especially for big open source projects. I think most of the groundwork has already been laid, actually. And if you give translators halfway-decent tools, it's easy to find volunteers.
","read":false,"username":"emk","name":"Eric Kidd","actions_summary":[{"id":2,"count":2,"hidden":false,"can_act":null},{"id":3,"count":0,"hidden":false,"can_act":null},{"id":4,"count":0,"hidden":false,"can_act":null},{"id":5,"count":0,"hidden":true,"can_act":null},{"id":6,"count":0,"hidden":false,"can_act":null},{"id":7,"count":0,"hidden":false,"can_act":null},{"id":8,"count":0,"hidden":false,"can_act":null}],"moderator":false,"staff":false,"avatar_template":"https://www.gravatar.com/avatar/528ca205857ff8f648359dcd3e74c84a.png?s={size}&r=pg&d=identicon","user_id":1860,"hidden":false,"hidden_reason_id":null,"deleted_at":null,"trust_level":1,"index":21}],"at_bottom":false,"highest_post_number":94,"pinned":false,"filtered_posts_count":93,"created_by":{"id":255,"username":"uwe_keim","avatar_template":"https://www.gravatar.com/avatar/53a82f701ae492808834e621de2586eb.png?s={size}&r=pg&d=identicon"},"last_poster":{"id":5564,"username":"Sjors","avatar_template":"https://www.gravatar.com/avatar/2fb09bd6501779802459a171d3f8fbd9.png?s={size}&r=pg&d=identicon"},"allowed_groups":[],"links":[{"url":"https://github.com/discourse/discourse/blob/master/config/locales/en.yml","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"70","user_id":9},{"url":"http://stackoverflow.com/questions/4232922/why-do-people-use-plain-english-as-translation-placeholders","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"45","user_id":7},{"url":"http://www.localeapp.com/","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"44","user_id":1860},{"url":"https://github.com/SlexAxton/messageformat.js","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"34","user_id":1},{"url":"http://meta.discourse.org/t/language-mirrors/2378/2","title":"Language mirrors","fancy_title":null,"internal":true,"reflection":true,"clicks":"29","user_id":32},{"url":"https://github.com/berk/tr8n","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"18","user_id":1},{"url":"http://meta.discourse.org/t/roadplan-for-discourse/2939/5","title":"Roadplan for Discourse","fancy_title":null,"internal":true,"reflection":true,"clicks":"18","user_id":32},{"url":"http://meta.discourse.org/t/internationalization-i18n-provided-for-discourse-/2073/2","title":"Internationalization I18n provided for discourse ?","fancy_title":null,"internal":true,"reflection":true,"clicks":"17","user_id":114},{"url":"http://www.localeapp.com/projects/1537/translations?utf8=%E2%9C%93&search=source_code","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"16","user_id":1860},{"url":"https://www.transifex.com/","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"14","user_id":1979},{"url":"https://translations.launchpad.net/","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"14","user_id":761},{"url":"http://translate.wordpress.org/projects/bbpress/dev","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"13","user_id":7},{"url":"http://weblate.org","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"11","user_id":2316},{"url":"http://meta.discourse.org/t/hi-support-chinese/4393/6","title":"Hi, support Chinese?","fancy_title":null,"internal":true,"reflection":true,"clicks":"9","user_id":2014},{"url":"https://github.com/discourse/discourse/pull/493","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"7","user_id":2753},{"url":"http://meta.discourse.org/t/what-i-love-about-wordpress-plugins/5697","title":"What I love about WordPress plugins","fancy_title":null,"internal":true,"reflection":true,"clicks":"7","user_id":1},{"url":"https://github.com/SlexAxton","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"7","user_id":1},{"url":"https://github.com/gururea/discourse/tree/master/config/locales","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"6","user_id":3190},{"url":"http://www.getlocalization.com/","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"5","user_id":22},{"url":"/users/codinghorror","title":null,"fancy_title":null,"internal":true,"reflection":false,"clicks":"5","user_id":7},{"url":"http://tr8n.github.com/","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"5","user_id":212},{"url":"https://github.com/dacap/discourse/tree/spanish","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"4","user_id":1275},{"url":"https://github.com/discourse/discourse/blob/master/config/locales/client.nl.yml","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"4","user_id":461},{"url":"http://meta.discourse.org/t/solving-xda-developer-style-forums/4368/4","title":"Solving XDA-Developer style forums","fancy_title":null,"internal":true,"reflection":true,"clicks":"4","user_id":639},{"url":"https://github.com/discourse/discourse/blob/master/config/locales/client.en.yml#L691","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"4","user_id":461},{"url":"http://translate.sourceforge.net/wiki/virtaal/index","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"3","user_id":1979},{"url":"https://github.com/discourse/discourse/commit/c5761eae8afe37e20cec0d0f9d14b85b6e585bda","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"3","user_id":212},{"url":"http://meta.discourse.org/t/comrades-let-s-join-our-efforts-on-ukrainian-and-russian-translations/4403/5","title":"Comrades let's join our efforts on ukrainian and russian translations","fancy_title":null,"internal":true,"reflection":true,"clicks":"3","user_id":3417},{"url":"http://meta.discourse.org/t/bookmark-last-read-sometimes-doesn-t-go-to-the-end-of-a-topic/4825/9","title":"Bookmark/last read sometimes doesn't go to the end of a topic","fancy_title":null,"internal":true,"reflection":true,"clicks":"3","user_id":3681},{"url":"http://meta.discourse.org/t/translation-workflow/6102","title":"Translation workflow","fancy_title":null,"internal":true,"reflection":true,"clicks":"3","user_id":4702},{"url":"http://meta.discourse.org/t/failed-to-create-new-category-when-set-the-default-locale-to-zh-cn/4703","title":"Failed to create new category when set the default_locale to zh_CN","fancy_title":null,"internal":true,"reflection":false,"clicks":"3","user_id":2995},{"url":"http://meta.discourse.org/t/how-to-change-language/6900/2","title":"How to change language?","fancy_title":null,"internal":true,"reflection":true,"clicks":"3","user_id":1995},{"url":"http://en.lichess.org/@/Hellball","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"2","user_id":1979},{"url":"http://www.youtube.com/watch?v=MqqdzJ98q7s","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"2","user_id":212},{"url":"https://github.com/alxndr/discourse/blob/i18n-chinese/config/locales/server.zh.yml","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"2","user_id":212},{"url":"http://pootle.locamotion.org/","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"2","user_id":3190},{"url":"http://www.madanalogy.com/2012/06/rails-i18n-translations-in-yaml.html","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"2","user_id":3190},{"url":"https://poeditor.com/","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"2","user_id":1979},{"url":"http://www.slideshare.net/HeatherRivers/linguistic-potluck-crowdsourcing-localization-with-rails","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"2","user_id":212},{"url":"http://blog.discourse.org/2013/04/discourse-as-your-first-rails-app/","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"2","user_id":1995},{"url":"http://meta.discourse.org/t/suggestion-translation-on-admin-panel/6923/5","title":"Suggestion: Translation on admin panel","fancy_title":null,"internal":true,"reflection":true,"clicks":"1","user_id":1},{"url":"http://meta.discourse.org/t/translation-workflow/6102/6","title":"Translation workflow","fancy_title":null,"internal":true,"reflection":false,"clicks":"1","user_id":1995},{"url":"http://meta.discourse.org/t/when-will-discourse-provide-an-local-language-configuration/7068/2","title":"When will discourse provide an local language configuration","fancy_title":null,"internal":true,"reflection":true,"clicks":"1","user_id":3987},{"url":"https://github.com/discourse/discourse/blob/master/config/locales","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"1","user_id":32},{"url":"http://guides.rubyonrails.org/i18n.html#the-public-i18n-api","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"0","user_id":1895},{"url":"https://github.com/discourse/discourse/blob/master/app/assets/javascripts/locales/date_locales.js","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"0","user_id":461},{"url":"http://en.wikipedia.org/wiki/T%E2%80%93V_distinction","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"0","user_id":3620},{"url":"http://sugarjs.com/dates#date_locales","title":null,"fancy_title":null,"internal":false,"reflection":false,"clicks":"0","user_id":461},{"url":"http://meta.discourse.org/t/suggestion-translation-on-admin-panel/6923/6","title":"Suggestion: Translation on admin panel","fancy_title":null,"internal":true,"reflection":true,"clicks":"0","user_id":1},{"url":"http://meta.discourse.org/t/i-like-discourse-want-join-discourse-translation-team/6679/3","title":"I like discourse,want join discourse translation team","fancy_title":null,"internal":true,"reflection":true,"clicks":"0","user_id":1995},{"url":"http://meta.discourse.org/t/missing-user-value-in-chinese-localized-page/7406/6","title":"[missing {{user}} value] in Chinese localized page","fancy_title":null,"internal":true,"reflection":true,"clicks":"0","user_id":1},{"url":"http://meta.discourse.org/t/jump-to-last-post-does-not-work-in-best-of-mode/7626","title":"Jump to last post does not work in \"Best of\" mode","fancy_title":null,"internal":true,"reflection":true,"clicks":"0","user_id":5174}],"participants":[{"id":1,"username":"sam","avatar_template":"https://www.gravatar.com/avatar/3dcae8378d46c244172a115c28ca49ce.png?s={size}&r=pg&d=identicon","post_count":11},{"id":212,"username":"alxndr","avatar_template":"https://www.gravatar.com/avatar/51c9cfe3d5ebd64a79983aa3117f4aed.png?s={size}&r=pg&d=identicon","post_count":11},{"id":7,"username":"pekka","avatar_template":"https://www.gravatar.com/avatar/100a6c42a31a56e882475725d65537f8.png?s={size}&r=pg&d=identicon","post_count":7},{"id":461,"username":"kuba","avatar_template":"https://www.gravatar.com/avatar/1835cb6a5f35bd4089e416a99af90f5f.png?s={size}&r=pg&d=identicon","post_count":7},{"id":2995,"username":"tattoo","avatar_template":"https://www.gravatar.com/avatar/645454e097898e3f0d9a54c699995678.png?s={size}&r=pg&d=identicon","post_count":6},{"id":2540,"username":"jgourdon","avatar_template":"https://www.gravatar.com/avatar/3f0ee7e17ec820c458958ed7b0e8538b.png?s={size}&r=pg&d=identicon","post_count":5},{"id":1860,"username":"emk","avatar_template":"https://www.gravatar.com/avatar/528ca205857ff8f648359dcd3e74c84a.png?s={size}&r=pg&d=identicon","post_count":4},{"id":1275,"username":"dacap","avatar_template":"https://www.gravatar.com/avatar/ec0ebc7c17f649d03ee78d4eba56ef73.png?s={size}&r=pg&d=identicon","post_count":4},{"id":3704,"username":"mojzis","avatar_template":"https://www.gravatar.com/avatar/90847dfc44c19a250e9000bcfc7d1507.png?s={size}&r=pg&d=identicon","post_count":3},{"id":3190,"username":"gururea","avatar_template":"https://www.gravatar.com/avatar/5ffb222c9c1bd2d99d9267c1557ca984.png?s={size}&r=pg&d=identicon","post_count":3},{"id":19,"username":"eviltrout","avatar_template":"https://www.gravatar.com/avatar/c6e17f2ae2a215e87ff9e878a4e63cd9.png?s={size}&r=pg&d=identicon","post_count":3},{"id":1895,"username":"maciek","avatar_template":"https://www.gravatar.com/avatar/e3fe0c49f509994d67045602f49808ee.png?s={size}&r=pg&d=identicon","post_count":3},{"id":32,"username":"codinghorror","avatar_template":"https://www.gravatar.com/avatar/51d623f33f8b83095db84ff35e15dbe8.png?s={size}&r=pg&d=identicon","post_count":2},{"id":3818,"username":"Tudor","avatar_template":"https://www.gravatar.com/avatar/8f367608e1d013beed72a8941bb768ca.png?s={size}&r=pg&d=identicon","post_count":2},{"id":3620,"username":"potthast","avatar_template":"https://www.gravatar.com/avatar/1753724263a5dee3e38790e6ac3d685c.png?s={size}&r=pg&d=identicon","post_count":2},{"id":1979,"username":"Superuser","avatar_template":"https://www.gravatar.com/avatar/a7f1529299c8fb9a263b8e8afcab23da.png?s={size}&r=pg&d=identicon","post_count":2},{"id":22,"username":"splattne","avatar_template":"https://www.gravatar.com/avatar/7847006dbf49f1722b07c8da396f1275.png?s={size}&r=pg&d=identicon","post_count":2},{"id":9,"username":"tms","avatar_template":"https://www.gravatar.com/avatar/3981cd271c302f5cba628c6b6d2b32ee.png?s={size}&r=pg&d=identicon","post_count":2},{"id":761,"username":"marcoceppi","avatar_template":"https://www.gravatar.com/avatar/4ddc8924e79bcec03256821af65fca91.png?s={size}&r=pg&d=identicon","post_count":1},{"id":255,"username":"uwe_keim","avatar_template":"https://www.gravatar.com/avatar/53a82f701ae492808834e621de2586eb.png?s={size}&r=pg&d=identicon","post_count":1},{"id":3403,"username":"Andersos","avatar_template":"https://www.gravatar.com/avatar/097f9f15bb97c2d6b8392f1858a7d8a8.png?s={size}&r=pg&d=identicon","post_count":1},{"id":2753,"username":"mikl","avatar_template":"https://www.gravatar.com/avatar/2c3b9882e6898958b892a218b5493af9.png?s={size}&r=pg&d=identicon","post_count":1},{"id":5052,"username":"vulkanino","avatar_template":"https://www.gravatar.com/avatar/811bf232b634245aebba5323462d885c.png?s={size}&r=pg&d=identicon","post_count":1},{"id":1216,"username":"Vilx","avatar_template":"https://www.gravatar.com/avatar/7bd2e50770e937761cfc3811a332bccc.png?s={size}&r=pg&d=identicon","post_count":1}]} \ No newline at end of file diff --git a/test/javascripts/integration/list_topics_test.js b/test/javascripts/integration/list_topics_test.js index 4dda40d996b..04037b7e697 100644 --- a/test/javascripts/integration/list_topics_test.js +++ b/test/javascripts/integration/list_topics_test.js @@ -1,14 +1,25 @@ integration("List Topics"); -test("/", function() { +test("Default List", function() { visit("/").then(function() { expect(2); ok(exists("#topic-list"), "The list of topics was rendered"); - ok(count('#topic-list .topic-list-item') > 0, "has topics"); + ok(exists('#topic-list .topic-list-item'), "has topics"); + }); + +}); + +test("Categories List", function() { + + visit("/categories").then(function() { + expect(1); + + ok(exists('.category-list-item'), "has a list of categories"); }); }); + diff --git a/test/javascripts/integration/view_topic_test.js b/test/javascripts/integration/view_topic_test.js new file mode 100644 index 00000000000..1745e60ef45 --- /dev/null +++ b/test/javascripts/integration/view_topic_test.js @@ -0,0 +1,12 @@ +integration("View Topic"); + +test("View a Topic", function() { + + visit("/t/internationalization-localization/280").then(function() { + expect(2); + + ok(exists("#topic"), "The was rendered"); + ok(exists("#topic .topic-post"), "The topic has posts"); + }); + +}); diff --git a/test/javascripts/test_helper.js b/test/javascripts/test_helper.js index 71cd8905900..e3ad16ba25d 100644 --- a/test/javascripts/test_helper.js +++ b/test/javascripts/test_helper.js @@ -51,6 +51,14 @@ sinon.config = { useFakeServer: false }; +window.assetPath = function() { return null }; + +var oldAjax = $.ajax; +$.ajax = function() { + console.error("Discourse.Ajax called in test environment (" + arguments[0] + ")"); + return oldAjax.apply(this, arguments); +}; + // Trick JSHint into allow document.write var d = document; d.write('');