diff --git a/app/assets/javascripts/admin/controllers/admin-site-text-edit.js.es6 b/app/assets/javascripts/admin/controllers/admin-site-text-edit.js.es6 index c95db1e8b..943317b1b 100644 --- a/app/assets/javascripts/admin/controllers/admin-site-text-edit.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-site-text-edit.js.es6 @@ -1,20 +1,16 @@ -export default Ember.ObjectController.extend({ - saving: false, +export default Ember.Controller.extend({ saved: false, saveDisabled: function() { - if (this.get('saving')) { return true; } - if ((!this.get('allow_blank')) && Ember.isEmpty(this.get('value'))) { return true; } + if (this.get('model.isSaving')) { return true; } + if ((!this.get('allow_blank')) && Ember.isEmpty(this.get('model.value'))) { return true; } return false; - }.property('saving', 'value'), + }.property('model.iSaving', 'model.value'), actions: { - saveChanges: function() { - var self = this; - self.setProperties({saving: true, saved: false}); - self.get('model').save().then(function () { - self.setProperties({saving: false, saved: true}); - }); + saveChanges() { + const model = this.get('model'); + model.save(model.getProperties('value')).then(() => this.set('saved', true)); } } }); diff --git a/app/assets/javascripts/admin/models/site-text-type.js.es6 b/app/assets/javascripts/admin/models/site-text-type.js.es6 new file mode 100644 index 000000000..7cb1171e9 --- /dev/null +++ b/app/assets/javascripts/admin/models/site-text-type.js.es6 @@ -0,0 +1,2 @@ +import RestModel from 'discourse/models/rest'; +export default RestModel.extend(); diff --git a/app/assets/javascripts/admin/models/site-text.js.es6 b/app/assets/javascripts/admin/models/site-text.js.es6 new file mode 100644 index 000000000..edbaf2a44 --- /dev/null +++ b/app/assets/javascripts/admin/models/site-text.js.es6 @@ -0,0 +1,8 @@ +import RestModel from 'discourse/models/rest'; + +export default RestModel.extend({ + markdown: Em.computed.equal('format', 'markdown'), + plainText: Em.computed.equal('format', 'plain'), + html: Em.computed.equal('format', 'html'), + css: Em.computed.equal('format', 'css'), +}); diff --git a/app/assets/javascripts/admin/models/site_text.js b/app/assets/javascripts/admin/models/site_text.js deleted file mode 100644 index 0d671c433..000000000 --- a/app/assets/javascripts/admin/models/site_text.js +++ /dev/null @@ -1,21 +0,0 @@ -Discourse.SiteText = Discourse.Model.extend({ - markdown: Em.computed.equal('format', 'markdown'), - plainText: Em.computed.equal('format', 'plain'), - html: Em.computed.equal('format', 'html'), - css: Em.computed.equal('format', 'css'), - - save: function() { - return Discourse.ajax("/admin/customize/site_text/" + this.get('text_type'), { - type: 'PUT', - data: {value: this.get('value')} - }); - } -}); - -Discourse.SiteText.reopenClass({ - find: function(type) { - return Discourse.ajax("/admin/customize/site_text/" + type).then(function (data) { - return Discourse.SiteText.create(data.site_text); - }); - } -}); diff --git a/app/assets/javascripts/admin/models/site_text_type.js b/app/assets/javascripts/admin/models/site_text_type.js deleted file mode 100644 index 1a181bd8e..000000000 --- a/app/assets/javascripts/admin/models/site_text_type.js +++ /dev/null @@ -1,11 +0,0 @@ -Discourse.SiteTextType = Discourse.Model.extend(); - -Discourse.SiteTextType.reopenClass({ - findAll: function() { - return Discourse.ajax("/admin/customize/site_text_types").then(function(data) { - return data.map(function(ct) { - return Discourse.SiteTextType.create(ct); - }); - }); - } -}); diff --git a/app/assets/javascripts/admin/routes/admin-route-map.js.es6 b/app/assets/javascripts/admin/routes/admin-route-map.js.es6 index 66d9ea4c7..047e5d51a 100644 --- a/app/assets/javascripts/admin/routes/admin-route-map.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-route-map.js.es6 @@ -21,7 +21,7 @@ export default { this.route('show', {path: '/:site_customization_id/:section'}); }); - this.resource('adminSiteText', { path: '/site_text' }, function() { + this.resource('adminSiteText', { path: '/site_texts' }, function() { this.route('edit', {path: '/:text_type'}); }); this.resource('adminUserFields', { path: '/user_fields' }); diff --git a/app/assets/javascripts/admin/routes/admin-site-text-edit.js.es6 b/app/assets/javascripts/admin/routes/admin-site-text-edit.js.es6 index 6eba6e76e..847746d03 100644 --- a/app/assets/javascripts/admin/routes/admin-site-text-edit.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-site-text-edit.js.es6 @@ -1,5 +1,5 @@ export default Discourse.Route.extend({ - model: function(params) { - return Discourse.SiteText.find(params.text_type); + model(params) { + return this.store.find('site-text', params.text_type); } }); diff --git a/app/assets/javascripts/admin/routes/admin-site-text.js.es6 b/app/assets/javascripts/admin/routes/admin-site-text.js.es6 index e850fd6c6..f69c3c395 100644 --- a/app/assets/javascripts/admin/routes/admin-site-text.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-site-text.js.es6 @@ -1,5 +1,5 @@ export default Discourse.Route.extend({ - model: function() { - return Discourse.SiteTextType.findAll(); + model() { + return this.store.findAll('site-text-type'); } }); diff --git a/app/assets/javascripts/admin/templates/site-text-edit.hbs b/app/assets/javascripts/admin/templates/site-text-edit.hbs new file mode 100644 index 000000000..438887f85 --- /dev/null +++ b/app/assets/javascripts/admin/templates/site-text-edit.hbs @@ -0,0 +1,26 @@ +

{{model.title}}

+

{{model.description}}

+ +{{#if model.markdown}} + {{pagedown-editor value=model.value}} +{{/if}} +{{#if model.plainText}} + {{textarea value=model.value class="plain"}} +{{/if}} +{{#if model.html}} + {{ace-editor content=model.value mode="html"}} +{{/if}} +{{#if model.css}} + {{ace-editor content=model.value mode="css"}} +{{/if}} + +
+ + {{#if saved}}{{i18n 'saved'}}{{/if}} +
diff --git a/app/assets/javascripts/admin/templates/site_text_index.hbs b/app/assets/javascripts/admin/templates/site-text-index.hbs similarity index 100% rename from app/assets/javascripts/admin/templates/site_text_index.hbs rename to app/assets/javascripts/admin/templates/site-text-index.hbs diff --git a/app/assets/javascripts/admin/templates/site_text.hbs b/app/assets/javascripts/admin/templates/site-text.hbs similarity index 100% rename from app/assets/javascripts/admin/templates/site_text.hbs rename to app/assets/javascripts/admin/templates/site-text.hbs diff --git a/app/assets/javascripts/admin/templates/site_text_edit.hbs b/app/assets/javascripts/admin/templates/site_text_edit.hbs deleted file mode 100644 index ac3d0e540..000000000 --- a/app/assets/javascripts/admin/templates/site_text_edit.hbs +++ /dev/null @@ -1,26 +0,0 @@ -

{{title}}

-

{{description}}

- -{{#if markdown}} - {{pagedown-editor value=value}} -{{/if}} -{{#if plainText}} - {{textarea value=value class="plain"}} -{{/if}} -{{#if html}} - {{ace-editor content=value mode="html"}} -{{/if}} -{{#if css}} - {{ace-editor content=value mode="css"}} -{{/if}} - -
- - {{#if saved}}{{i18n 'saved'}}{{/if}} -
diff --git a/app/assets/javascripts/discourse/adapters/customization-base.js.es6 b/app/assets/javascripts/discourse/adapters/customization-base.js.es6 new file mode 100644 index 000000000..f57240a11 --- /dev/null +++ b/app/assets/javascripts/discourse/adapters/customization-base.js.es6 @@ -0,0 +1,7 @@ +import RestAdapter from 'discourse/adapters/rest'; + +export default RestAdapter.extend({ + basePath() { + return "/admin/customize/"; + } +}); diff --git a/app/assets/javascripts/discourse/adapters/site-text-type.js.es6 b/app/assets/javascripts/discourse/adapters/site-text-type.js.es6 new file mode 100644 index 000000000..24cabb74f --- /dev/null +++ b/app/assets/javascripts/discourse/adapters/site-text-type.js.es6 @@ -0,0 +1,2 @@ +import CustomizationBase from 'discourse/adapters/customization-base'; +export default CustomizationBase; diff --git a/app/assets/javascripts/discourse/adapters/site-text.js.es6 b/app/assets/javascripts/discourse/adapters/site-text.js.es6 new file mode 100644 index 000000000..24cabb74f --- /dev/null +++ b/app/assets/javascripts/discourse/adapters/site-text.js.es6 @@ -0,0 +1,2 @@ +import CustomizationBase from 'discourse/adapters/customization-base'; +export default CustomizationBase; diff --git a/app/assets/javascripts/discourse/adapters/user-field.js.es6 b/app/assets/javascripts/discourse/adapters/user-field.js.es6 index f57240a11..24cabb74f 100644 --- a/app/assets/javascripts/discourse/adapters/user-field.js.es6 +++ b/app/assets/javascripts/discourse/adapters/user-field.js.es6 @@ -1,7 +1,2 @@ -import RestAdapter from 'discourse/adapters/rest'; - -export default RestAdapter.extend({ - basePath() { - return "/admin/customize/"; - } -}); +import CustomizationBase from 'discourse/adapters/customization-base'; +export default CustomizationBase; diff --git a/app/assets/javascripts/discourse/routes/application.js.es6 b/app/assets/javascripts/discourse/routes/application.js.es6 index f0af569b0..6cff9ca74 100644 --- a/app/assets/javascripts/discourse/routes/application.js.es6 +++ b/app/assets/javascripts/discourse/routes/application.js.es6 @@ -74,7 +74,7 @@ const ApplicationRoute = Discourse.Route.extend(OpenComposer, { } exceptionController.setProperties({ lastTransition: transition, thrown: err }); - this.transitionTo('exception'); + this.intermediateTransitionTo('exception'); }, showLogin: unlessReadOnly('handleShowLogin'), diff --git a/app/controllers/admin/site_text_controller.rb b/app/controllers/admin/site_text_controller.rb deleted file mode 100644 index c92a0bd40..000000000 --- a/app/controllers/admin/site_text_controller.rb +++ /dev/null @@ -1,21 +0,0 @@ -class Admin::SiteTextController < Admin::AdminController - - def show - site_text = SiteText.find_or_new(params[:id].to_s) - render_serialized(site_text, SiteTextSerializer) - end - - def update - site_text = SiteText.find_or_new(params[:id].to_s) - - # Updating to nothing is the same as removing it - if params[:value].present? - site_text.value = params[:value] - site_text.save! - else - site_text.destroy - end - - render nothing: true - end -end diff --git a/app/controllers/admin/site_text_types_controller.rb b/app/controllers/admin/site_text_types_controller.rb index 9f2efef6b..f13e1ce70 100644 --- a/app/controllers/admin/site_text_types_controller.rb +++ b/app/controllers/admin/site_text_types_controller.rb @@ -1,7 +1,7 @@ class Admin::SiteTextTypesController < Admin::AdminController def index - render_serialized(SiteText.text_types, SiteTextTypeSerializer) + render_serialized(SiteText.text_types, SiteTextTypeSerializer, root: 'site_text_types') end end diff --git a/app/controllers/admin/site_texts_controller.rb b/app/controllers/admin/site_texts_controller.rb new file mode 100644 index 000000000..416d99018 --- /dev/null +++ b/app/controllers/admin/site_texts_controller.rb @@ -0,0 +1,21 @@ +class Admin::SiteTextsController < Admin::AdminController + + def show + site_text = SiteText.find_or_new(params[:id].to_s) + render_serialized(site_text, SiteTextSerializer, root: 'site_text') + end + + def update + site_text = SiteText.find_or_new(params[:id].to_s) + + # Updating to nothing is the same as removing it + if params[:site_text][:value].present? + site_text.value = params[:site_text][:value] + site_text.save! + else + site_text.destroy + end + + render_serialized(site_text, SiteTextSerializer, root: 'site_text') + end +end diff --git a/app/serializers/site_text_serializer.rb b/app/serializers/site_text_serializer.rb index 31caab4b9..fb8e79203 100644 --- a/app/serializers/site_text_serializer.rb +++ b/app/serializers/site_text_serializer.rb @@ -1,12 +1,17 @@ class SiteTextSerializer < ApplicationSerializer - attributes :text_type, + attributes :id, + :text_type, :title, :description, :value, :format, :allow_blank? + def id + text_type + end + def title object.site_text_type.title end diff --git a/app/serializers/site_text_type_serializer.rb b/app/serializers/site_text_type_serializer.rb index 02ee847e4..9c6f5f416 100644 --- a/app/serializers/site_text_type_serializer.rb +++ b/app/serializers/site_text_type_serializer.rb @@ -1,6 +1,10 @@ class SiteTextTypeSerializer < ApplicationSerializer - attributes :text_type, :title + attributes :id, :text_type, :title + + def id + text_type + end def text_type object.text_type diff --git a/config/routes.rb b/config/routes.rb index 30f7aa34c..1998644ff 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -142,7 +142,7 @@ Discourse::Application.routes.draw do post "flags/defer/:id" => "flags#defer" resources :site_customizations, constraints: AdminConstraint.new scope "/customize" do - resources :site_text, constraints: AdminConstraint.new + resources :site_texts, constraints: AdminConstraint.new resources :site_text_types, constraints: AdminConstraint.new resources :user_fields, constraints: AdminConstraint.new resources :emojis, constraints: AdminConstraint.new