From 5ae77070009a61e0a6bd2c1218a599e955d429ea Mon Sep 17 00:00:00 2001
From: Robin Ward <robin.ward@gmail.com>
Date: Wed, 29 May 2013 15:14:31 -0400
Subject: [PATCH] Refactor: Convert repeated {{view Discourse.xyz}} to
 registered view helpers

---
 .../admin/views/ace_editor_view.js            |  2 +-
 .../discourse/components/utilities.js         | 13 -------
 .../topic_summary/info.js.handlebars          |  4 +-
 .../templates/user/activity.js.handlebars     |  6 +--
 .../templates/user/preferences.js.handlebars  |  6 +--
 .../user/private_messages.js.handlebars       |  5 ++-
 .../discourse/views/auto_close_form_view.js   |  2 +-
 .../discourse/views/category_chooser_view.js  |  2 +-
 .../discourse/views/combobox_view.js          |  2 +-
 .../discourse/views/discourse_text_field.js   |  2 +-
 .../discourse/views/input_tip_view.js         |  2 +-
 .../views/modal/color_picker_view.js          |  2 +-
 .../discourse/views/pagedown_editor.js        |  2 +-
 .../discourse/views/participant_view.js       |  1 +
 .../discourse/views/popup_input_tip_view.js   |  2 +-
 .../discourse/views/topic_status_view.js      |  2 +-
 .../views/user/activity_filter_view.js        |  2 +-
 .../discourse/views/user/user_stream_view.js  |  1 +
 .../discourse/views/user_selector_view.js     |  2 +-
 .../javascripts/discourse/views/view.js       | 38 +++++++++++++++----
 20 files changed, 55 insertions(+), 43 deletions(-)

diff --git a/app/assets/javascripts/admin/views/ace_editor_view.js b/app/assets/javascripts/admin/views/ace_editor_view.js
index b5642d46e..023f0e3a8 100644
--- a/app/assets/javascripts/admin/views/ace_editor_view.js
+++ b/app/assets/javascripts/admin/views/ace_editor_view.js
@@ -58,4 +58,4 @@ Discourse.AceEditorView = Discourse.View.extend({
 });
 
 
-Discourse.Utilities.registerViewHelper('aceEditor', Discourse.AceEditorView);
\ No newline at end of file
+Discourse.View.registerHelper('aceEditor', Discourse.AceEditorView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/components/utilities.js b/app/assets/javascripts/discourse/components/utilities.js
index 5fd0e9733..60719fe0e 100644
--- a/app/assets/javascripts/discourse/components/utilities.js
+++ b/app/assets/javascripts/discourse/components/utilities.js
@@ -29,19 +29,6 @@ Discourse.Utilities = {
     }
   },
 
-  /*
-    Register a view class as a helper
-  */
-  registerViewHelper: function(helperName, helperClass) {
-    Ember.Handlebars.registerHelper(helperName, function(options) {
-      var hash = options.hash,
-          types = options.hashTypes;
-
-      Discourse.Utilities.normalizeHash(hash, types);
-      return Ember.Handlebars.helpers.view.call(this, helperClass, options);
-    });
-  },
-
   // Create a badge like category link
   categoryLink: function(category) {
     if (!category) return "";
diff --git a/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars b/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars
index 51b833a8f..8832153e4 100644
--- a/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars
@@ -42,7 +42,7 @@
       </li>
       {{#if view.topic.fewParticipants}}
       <li class='avatars'>
-        {{#each view.topic.fewParticipants}}{{view Discourse.ParticipantView participantBinding="this"}}{{/each}}
+        {{#each view.topic.fewParticipants}}{{participant participant=this}}{{/each}}
       </li>
       {{/if}}
     </ul>
@@ -74,7 +74,7 @@
 
   {{#if view.topic.participants}}
     <section class='avatars clearfix'>
-      {{#each view.topic.participants}}{{view Discourse.ParticipantView participantBinding="this"}}{{/each}}
+      {{#each view.topic.participants}}{{participant participant=this}}{{/each}}
     </section>
   {{/if}}
 
diff --git a/app/assets/javascripts/discourse/templates/user/activity.js.handlebars b/app/assets/javascripts/discourse/templates/user/activity.js.handlebars
index 345879a0f..310790838 100644
--- a/app/assets/javascripts/discourse/templates/user/activity.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/user/activity.js.handlebars
@@ -15,9 +15,9 @@
     <div class='clearfix'></div>
 
     <ul class='action-list nav-stacked side-nav'>
-      {{view Discourse.ActivityFilterView countBinding="statsCountNonPM"}}
+      {{activityFilter count=statsCountNonPM}}
       {{#each statsExcludingPms}}
-        {{view Discourse.ActivityFilterView contentBinding="this"}}
+        {{activityFilter content=this}}
       {{/each}}
     </ul>
     <div class='show'>
@@ -51,4 +51,4 @@
   </div>
 {{/with}}
 
-{{view Discourse.UserStreamView streamBinding="model"}}
+{{userStream stream=model}}
diff --git a/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars b/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars
index fc8b8cd96..90a2f087d 100644
--- a/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars
@@ -71,7 +71,7 @@
 
       {{#if email_digests}}
         <div class='control-indent'>
-          {{view Discourse.ComboboxView valueAttribute="value" contentBinding="digestFrequencies" valueBinding="digest_after_days"}}
+          {{combobox valueAttribute="value" content=digestFrequencies value="digest_after_days"}}
         </div>
       {{/if}}
       <label>{{view Ember.Checkbox checkedBinding="email_private_messages"}}
@@ -88,12 +88,12 @@
     <label class="control-label">{{i18n user.other_settings}}</label>
     <div class="controls">
       <label>{{i18n user.auto_track_topics}}</label>
-      {{view Discourse.ComboboxView valueAttribute="value" contentBinding="autoTrackDurations" valueBinding="auto_track_topics_after_msecs"}}
+      {{combobox valueAttribute="value" content=autoTrackDurations value="auto_track_topics_after_msecs"}}
     </div>
 
     <div class="controls">
       <label>{{i18n user.new_topic_duration.label}}</label>
-      {{view Discourse.ComboboxView valueAttribute="value" contentBinding="considerNewTopicOptions" valueBinding="new_topic_duration_minutes"}}
+      {{combobox valueAttribute="value" content=considerNewTopicOptions value="new_topic_duration_minutes"}}
     </div>
 
     <div class="controls">
diff --git a/app/assets/javascripts/discourse/templates/user/private_messages.js.handlebars b/app/assets/javascripts/discourse/templates/user/private_messages.js.handlebars
index 27c99cf9c..cace498d1 100644
--- a/app/assets/javascripts/discourse/templates/user/private_messages.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/user/private_messages.js.handlebars
@@ -16,9 +16,10 @@
 
     <ul class='action-list nav-stacked side-nav'>
       {{#each statsPmsOnly}}
-        {{view Discourse.ActivityFilterView contentBinding="this"}}
+        {{activityFilter content=this}}
       {{/each}}
     </ul>
   {{/with}}
 </div>
-{{view Discourse.UserStreamView streamBinding="model"}}
+{{userStream stream=model}}
+
diff --git a/app/assets/javascripts/discourse/views/auto_close_form_view.js b/app/assets/javascripts/discourse/views/auto_close_form_view.js
index 417b2c55f..465186c76 100644
--- a/app/assets/javascripts/discourse/views/auto_close_form_view.js
+++ b/app/assets/javascripts/discourse/views/auto_close_form_view.js
@@ -20,4 +20,4 @@ Discourse.AutoCloseFormView = Ember.View.extend({
   }.observes('autoCloseDays')
 });
 
-Discourse.Utilities.registerViewHelper('autoCloseForm', Discourse.AutoCloseFormView);
\ No newline at end of file
+Discourse.View.registerHelper('autoCloseForm', Discourse.AutoCloseFormView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/category_chooser_view.js b/app/assets/javascripts/discourse/views/category_chooser_view.js
index 7214fd39c..ce3abd2e9 100644
--- a/app/assets/javascripts/discourse/views/category_chooser_view.js
+++ b/app/assets/javascripts/discourse/views/category_chooser_view.js
@@ -34,4 +34,4 @@ Discourse.CategoryChooserView = Discourse.ComboboxView.extend({
 
 });
 
-Discourse.Utilities.registerViewHelper('categoryChooser', Discourse.CategoryChooserView);
\ No newline at end of file
+Discourse.View.registerHelper('categoryChooser', Discourse.CategoryChooserView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/combobox_view.js b/app/assets/javascripts/discourse/views/combobox_view.js
index fc98864bd..f1f5fc695 100644
--- a/app/assets/javascripts/discourse/views/combobox_view.js
+++ b/app/assets/javascripts/discourse/views/combobox_view.js
@@ -75,4 +75,4 @@ Discourse.ComboboxView = Discourse.View.extend({
 
 });
 
-
+Discourse.View.registerHelper('combobox', Discourse.ComboboxView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/discourse_text_field.js b/app/assets/javascripts/discourse/views/discourse_text_field.js
index f12c069ad..1225c3188 100644
--- a/app/assets/javascripts/discourse/views/discourse_text_field.js
+++ b/app/assets/javascripts/discourse/views/discourse_text_field.js
@@ -19,4 +19,4 @@ Discourse.TextField = Ember.TextField.extend({
 
 });
 
-Discourse.Utilities.registerViewHelper('textField', Discourse.TextField);
\ No newline at end of file
+Discourse.View.registerHelper('textField', Discourse.TextField);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/input_tip_view.js b/app/assets/javascripts/discourse/views/input_tip_view.js
index 76a02210e..5c5fdf501 100644
--- a/app/assets/javascripts/discourse/views/input_tip_view.js
+++ b/app/assets/javascripts/discourse/views/input_tip_view.js
@@ -30,4 +30,4 @@ Discourse.InputTipView = Discourse.View.extend({
   }
 });
 
-Discourse.Utilities.registerViewHelper('inputTip', Discourse.InputTipView);
\ No newline at end of file
+Discourse.View.registerHelper('inputTip', Discourse.InputTipView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/modal/color_picker_view.js b/app/assets/javascripts/discourse/views/modal/color_picker_view.js
index 3685a27aa..f204d92bc 100644
--- a/app/assets/javascripts/discourse/views/modal/color_picker_view.js
+++ b/app/assets/javascripts/discourse/views/modal/color_picker_view.js
@@ -36,4 +36,4 @@ Discourse.ColorPickerView = Ember.ContainerView.extend({
   }
 });
 
-Discourse.Utilities.registerViewHelper('colorPicker', Discourse.ColorPickerView);
\ No newline at end of file
+Discourse.View.registerHelper('colorPicker', Discourse.ColorPickerView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/pagedown_editor.js b/app/assets/javascripts/discourse/views/pagedown_editor.js
index 7627a6acb..4c7b62f4c 100644
--- a/app/assets/javascripts/discourse/views/pagedown_editor.js
+++ b/app/assets/javascripts/discourse/views/pagedown_editor.js
@@ -44,4 +44,4 @@ Discourse.PagedownEditor = Ember.ContainerView.extend({
 
 });
 
-Discourse.Utilities.registerViewHelper('pagedown', Discourse.PagedownEditor);
\ No newline at end of file
+Discourse.View.registerHelper('pagedown', Discourse.PagedownEditor);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/participant_view.js b/app/assets/javascripts/discourse/views/participant_view.js
index cf906684c..93d9979ce 100644
--- a/app/assets/javascripts/discourse/views/participant_view.js
+++ b/app/assets/javascripts/discourse/views/participant_view.js
@@ -16,3 +16,4 @@ Discourse.ParticipantView = Discourse.View.extend({
 });
 
 
+Discourse.View.registerHelper('participant', Discourse.ParticipantView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/popup_input_tip_view.js b/app/assets/javascripts/discourse/views/popup_input_tip_view.js
index 96e98da75..29b969c8b 100644
--- a/app/assets/javascripts/discourse/views/popup_input_tip_view.js
+++ b/app/assets/javascripts/discourse/views/popup_input_tip_view.js
@@ -56,4 +56,4 @@ Discourse.PopupInputTipView = Discourse.View.extend({
   }
 });
 
-Discourse.Utilities.registerViewHelper('popupInputTip', Discourse.PopupInputTipView);
\ No newline at end of file
+Discourse.View.registerHelper('popupInputTip', Discourse.PopupInputTipView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/topic_status_view.js b/app/assets/javascripts/discourse/views/topic_status_view.js
index 71ec385c0..77dfc9182 100644
--- a/app/assets/javascripts/discourse/views/topic_status_view.js
+++ b/app/assets/javascripts/discourse/views/topic_status_view.js
@@ -48,4 +48,4 @@ Discourse.TopicStatusView = Discourse.View.extend({
 });
 
 
-Discourse.Utilities.registerViewHelper('topicStatus', Discourse.TopicStatusView);
\ No newline at end of file
+Discourse.View.registerHelper('topicStatus', Discourse.TopicStatusView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/user/activity_filter_view.js b/app/assets/javascripts/discourse/views/user/activity_filter_view.js
index fc5dd0dd2..8656ab5a2 100644
--- a/app/assets/javascripts/discourse/views/user/activity_filter_view.js
+++ b/app/assets/javascripts/discourse/views/user/activity_filter_view.js
@@ -47,4 +47,4 @@ Discourse.ActivityFilterView = Discourse.View.extend({
   }
 });
 
-
+Discourse.View.registerHelper('activityFilter', Discourse.ActivityFilterView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/user/user_stream_view.js b/app/assets/javascripts/discourse/views/user/user_stream_view.js
index c2f4c5130..09faac697 100644
--- a/app/assets/javascripts/discourse/views/user/user_stream_view.js
+++ b/app/assets/javascripts/discourse/views/user/user_stream_view.js
@@ -50,3 +50,4 @@ Discourse.UserStreamView = Discourse.View.extend(Discourse.Scrolling, {
 });
 
 
+Discourse.View.registerHelper('userStream', Discourse.UserStreamView);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/user_selector_view.js b/app/assets/javascripts/discourse/views/user_selector_view.js
index 47c78e0a8..bc1609181 100644
--- a/app/assets/javascripts/discourse/views/user_selector_view.js
+++ b/app/assets/javascripts/discourse/views/user_selector_view.js
@@ -64,4 +64,4 @@ Discourse.UserSelector.reopenClass({
     }
 });
 
-Discourse.Utilities.registerViewHelper('userSelector', Discourse.UserSelector);
\ No newline at end of file
+Discourse.View.registerHelper('userSelector', Discourse.UserSelector);
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/views/view.js b/app/assets/javascripts/discourse/views/view.js
index 682e875f8..de0aefc39 100644
--- a/app/assets/javascripts/discourse/views/view.js
+++ b/app/assets/javascripts/discourse/views/view.js
@@ -1,10 +1,32 @@
-  /**
-    A base view that gives us common functionality, for example `present` and `blank`
+/**
+  A base view that gives us common functionality, for example `present` and `blank`
 
-    @class View
-    @extends Ember.View
-    @uses Discourse.Presence
-    @namespace Discourse
-    @module Discourse
+  @class View
+  @extends Ember.View
+  @uses Discourse.Presence
+  @namespace Discourse
+  @module Discourse
+**/
+Discourse.View = Ember.View.extend(Discourse.Presence, {});
+
+
+Discourse.View.reopenClass({
+
+  /**
+    Register a view helper for ease of use
+
+    @method registerHElper
+    @param {String} helperName the name of the helper
+    @param {Ember.View} helperClass the view that will be inserted by the helper
   **/
-  Discourse.View = Ember.View.extend(Discourse.Presence, {});
+  registerHelper: function(helperName, helperClass) {
+    Ember.Handlebars.registerHelper(helperName, function(options) {
+      var hash = options.hash,
+          types = options.hashTypes;
+
+      Discourse.Utilities.normalizeHash(hash, types);
+      return Ember.Handlebars.helpers.view.call(this, helperClass, options);
+    });
+  }
+
+})