From ea3db56d1c94e086d2d590f6b77d9c8fa0036b9f Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Tue, 13 Dec 2016 10:53:08 -0500 Subject: [PATCH] FIX: Mobile raw templates were not being resolved --- .../javascripts/discourse-common/resolver.js.es6 | 4 ++++ app/assets/javascripts/discourse.js.es6 | 1 - .../discourse/components/badge-selector.js.es6 | 4 ++-- .../discourse/components/category-selector.js.es6 | 4 ++-- .../discourse/components/composer-editor.js.es6 | 4 ++-- .../javascripts/discourse/components/d-editor.js.es6 | 7 +++---- .../discourse/components/group-selector.js.es6 | 5 +++-- .../discourse/components/topic-list-item.js.es6 | 4 +++- .../discourse/components/user-selector.js.es6 | 4 +++- app/assets/javascripts/discourse/helpers/raw.js.es6 | 3 ++- .../javascripts/discourse/lib/emoji/toolbar.js.es6 | 3 ++- .../javascripts/discourse/lib/raw-templates.js.es6 | 10 ++++++++++ 12 files changed, 36 insertions(+), 17 deletions(-) create mode 100644 app/assets/javascripts/discourse/lib/raw-templates.js.es6 diff --git a/app/assets/javascripts/discourse-common/resolver.js.es6 b/app/assets/javascripts/discourse-common/resolver.js.es6 index 27b80c40c00..19247192086 100644 --- a/app/assets/javascripts/discourse-common/resolver.js.es6 +++ b/app/assets/javascripts/discourse-common/resolver.js.es6 @@ -10,6 +10,10 @@ export function setResolverOption(name, value) { _options[name] = value; } +export function getResolverOption(name) { + return _options[name]; +} + function parseName(fullName) { const nameParts = fullName.split(":"); const type = nameParts[0]; diff --git a/app/assets/javascripts/discourse.js.es6 b/app/assets/javascripts/discourse.js.es6 index 213ef89ceba..140cb5f7eac 100644 --- a/app/assets/javascripts/discourse.js.es6 +++ b/app/assets/javascripts/discourse.js.es6 @@ -6,7 +6,6 @@ const _pluginCallbacks = []; const Discourse = Ember.Application.extend({ rootElement: '#main', _docTitle: document.title, - __TAGS_INCLUDED__: true, RAW_TEMPLATES: {}, getURL(url) { diff --git a/app/assets/javascripts/discourse/components/badge-selector.js.es6 b/app/assets/javascripts/discourse/components/badge-selector.js.es6 index 047ad4ba568..8f0bd5ecfeb 100644 --- a/app/assets/javascripts/discourse/components/badge-selector.js.es6 +++ b/app/assets/javascripts/discourse/components/badge-selector.js.es6 @@ -1,4 +1,5 @@ import { on, observes, default as computed } from 'ember-addons/ember-computed-decorators'; +import { findRawTemplate } from 'discourse/lib/raw-templates'; export default Ember.Component.extend({ @computed('placeholderKey') @@ -17,7 +18,6 @@ export default Ember.Component.extend({ var self = this; var selectedBadges; - var template = Discourse.RAW_TEMPLATES['badge-selector-autocomplete']; self.$('input').autocomplete({ allowAny: false, items: _.isArray(this.get('badgeNames')) ? this.get('badgeNames') : [this.get('badgeNames')], @@ -42,7 +42,7 @@ export default Ember.Component.extend({ }); }); }, - template: template + template: findRawTemplate('badge-selector-autocomplete') }); } }); diff --git a/app/assets/javascripts/discourse/components/category-selector.js.es6 b/app/assets/javascripts/discourse/components/category-selector.js.es6 index 70cdafdd729..9cb3eec14ae 100644 --- a/app/assets/javascripts/discourse/components/category-selector.js.es6 +++ b/app/assets/javascripts/discourse/components/category-selector.js.es6 @@ -1,6 +1,7 @@ import { categoryBadgeHTML } from 'discourse/helpers/category-link'; import Category from 'discourse/models/category'; import { on, observes } from 'ember-addons/ember-computed-decorators'; +import { findRawTemplate } from 'discourse/lib/raw-templates'; export default Ember.Component.extend({ @observes('categories') @@ -12,7 +13,6 @@ export default Ember.Component.extend({ @on('didInsertElement') _initializeAutocomplete(opts) { const self = this, - template = Discourse.RAW_TEMPLATES['category-selector-autocomplete'], regexp = new RegExp(`href=['\"]${Discourse.getURL('/c/')}([^'\"]+)`); this.$('input').autocomplete({ @@ -40,7 +40,7 @@ export default Ember.Component.extend({ self.set('categories', categories); }); }, - template, + template: findRawTemplate('category-selector-autocomplete'), transformComplete(category) { return categoryBadgeHTML(category, {allowUncategorized: true}); } diff --git a/app/assets/javascripts/discourse/components/composer-editor.js.es6 b/app/assets/javascripts/discourse/components/composer-editor.js.es6 index 88ca121c3ab..7473ff08d8c 100644 --- a/app/assets/javascripts/discourse/components/composer-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/composer-editor.js.es6 @@ -6,6 +6,7 @@ import { linkSeenTagHashtags, fetchUnseenTagHashtags } from 'discourse/lib/link- import { load } from 'pretty-text/oneboxer'; import { ajax } from 'discourse/lib/ajax'; import InputValidation from 'discourse/models/input-validation'; +import { findRawTemplate } from 'discourse/lib/raw-templates'; import { tinyAvatar, displayErrorForUpload, getUploadMarkdown, @@ -61,10 +62,9 @@ export default Ember.Component.extend({ @on('didInsertElement') _composerEditorInit() { const topicId = this.get('topic.id'); - const template = Discourse.RAW_TEMPLATES['user-selector-autocomplete']; const $input = this.$('.d-editor-input'); $input.autocomplete({ - template, + template: findRawTemplate('user-selector-autocomplete'), dataSource: term => userSearch({ term, topicId, includeGroups: true }), key: "@", transformComplete: v => v.username || v.name diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index 0995fd6438d..b4b3c31fb39 100644 --- a/app/assets/javascripts/discourse/components/d-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/d-editor.js.es6 @@ -11,6 +11,7 @@ import { translations } from 'pretty-text/emoji/data'; import { emojiSearch } from 'pretty-text/emoji'; import { emojiUrlFor } from 'discourse/lib/text'; import { getRegister } from 'discourse-common/lib/get-owner'; +import { findRawTemplate } from 'discourse/lib/raw-templates'; import deprecated from 'discourse-common/lib/deprecated'; // Our head can be a static string or a function that returns a string @@ -297,11 +298,10 @@ export default Ember.Component.extend({ }, _applyCategoryHashtagAutocomplete() { - const template = Discourse.RAW_TEMPLATES['category-tag-autocomplete']; const siteSettings = this.siteSettings; this.$('.d-editor-input').autocomplete({ - template: template, + template: findRawTemplate('category-tag-autocomplete'), key: '#', transformComplete(obj) { if (obj.model) { @@ -323,11 +323,10 @@ export default Ember.Component.extend({ if (!this.siteSettings.enable_emoji) { return; } const register = this.register; - const template = Discourse.RAW_TEMPLATES['emoji-selector-autocomplete']; const self = this; $editorInput.autocomplete({ - template: template, + template: findRawTemplate('emoji-selector-autocomplete'), key: ":", afterComplete(text) { self.set('value', text); diff --git a/app/assets/javascripts/discourse/components/group-selector.js.es6 b/app/assets/javascripts/discourse/components/group-selector.js.es6 index e8cfbbc8938..4beb5a3a932 100644 --- a/app/assets/javascripts/discourse/components/group-selector.js.es6 +++ b/app/assets/javascripts/discourse/components/group-selector.js.es6 @@ -1,4 +1,6 @@ import { on, observes, default as computed } from 'ember-addons/ember-computed-decorators'; +import { findRawTemplate } from 'discourse/lib/raw-templates'; + export default Ember.Component.extend({ @computed('placeholderKey') placeholder(placeholderKey) { @@ -17,7 +19,6 @@ export default Ember.Component.extend({ var selectedGroups; var groupNames = this.get('groupNames'); - var template = Discourse.RAW_TEMPLATES['group-selector-autocomplete']; self.$('input').autocomplete({ allowAny: false, items: _.isArray(groupNames) ? groupNames : (Ember.isEmpty(groupNames)) ? [] : [groupNames], @@ -42,7 +43,7 @@ export default Ember.Component.extend({ }); }); }, - template: template + template: findRawTemplate('group-selector-autocomplete') }); } }); diff --git a/app/assets/javascripts/discourse/components/topic-list-item.js.es6 b/app/assets/javascripts/discourse/components/topic-list-item.js.es6 index c82c2f97f9d..583ba344a14 100644 --- a/app/assets/javascripts/discourse/components/topic-list-item.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-list-item.js.es6 @@ -1,5 +1,7 @@ import computed from 'ember-addons/ember-computed-decorators'; import { bufferedRender } from 'discourse-common/lib/buffered-render'; +import { findRawTemplate } from 'discourse/lib/raw-templates'; + export function showEntrance(e) { let target = $(e.target); @@ -30,7 +32,7 @@ export default Ember.Component.extend(bufferedRender({ }, buildBuffer(buffer) { - const template = Discourse.RAW_TEMPLATES['list/topic-list-item']; + const template = findRawTemplate('list/topic-list-item'); if (template) { buffer.push(template(this)); } diff --git a/app/assets/javascripts/discourse/components/user-selector.js.es6 b/app/assets/javascripts/discourse/components/user-selector.js.es6 index 1ca42af110d..5fda51dec6f 100644 --- a/app/assets/javascripts/discourse/components/user-selector.js.es6 +++ b/app/assets/javascripts/discourse/components/user-selector.js.es6 @@ -1,6 +1,8 @@ import { observes } from 'ember-addons/ember-computed-decorators'; import TextField from 'discourse/components/text-field'; import userSearch from 'discourse/lib/user-search'; +import { findRawTemplate } from 'discourse/lib/raw-templates'; + export default TextField.extend({ @observes('usernames') _update() { @@ -29,7 +31,7 @@ export default TextField.extend({ } this.$().val(this.get('usernames')).autocomplete({ - template: Discourse.RAW_TEMPLATES['user-selector-autocomplete'], + template: findRawTemplate('user-selector-autocomplete'), disabled: this.get('disabled'), single: this.get('single'), allowAny: this.get('allowAny'), diff --git a/app/assets/javascripts/discourse/helpers/raw.js.es6 b/app/assets/javascripts/discourse/helpers/raw.js.es6 index f40835035d4..7f3d8b247b0 100644 --- a/app/assets/javascripts/discourse/helpers/raw.js.es6 +++ b/app/assets/javascripts/discourse/helpers/raw.js.es6 @@ -1,4 +1,5 @@ import { registerUnbound } from 'discourse-common/lib/helpers'; +import { findRawTemplate } from 'discourse/lib/raw-templates'; let _injections; @@ -33,7 +34,7 @@ registerUnbound('raw', function(templateName, params) { templateName = templateName.replace('.', '/'); const container = Discourse.__container__; - const template = Discourse.RAW_TEMPLATES[templateName]; + const template = findRawTemplate(templateName); if (!template) { console.warn('Could not find raw template: ' + templateName); return; diff --git a/app/assets/javascripts/discourse/lib/emoji/toolbar.js.es6 b/app/assets/javascripts/discourse/lib/emoji/toolbar.js.es6 index 726ed174e2a..3666df1b580 100644 --- a/app/assets/javascripts/discourse/lib/emoji/toolbar.js.es6 +++ b/app/assets/javascripts/discourse/lib/emoji/toolbar.js.es6 @@ -2,6 +2,7 @@ import groups from 'discourse/lib/emoji/groups'; import KeyValueStore from "discourse/lib/key-value-store"; import { emojiList } from 'pretty-text/emoji'; import { emojiUrlFor } from 'discourse/lib/text'; +import { findRawTemplate } from 'discourse/lib/raw-templates'; const keyValueStore = new KeyValueStore("discourse_emojis_"); const EMOJI_USAGE = "emojiUsage"; @@ -151,7 +152,7 @@ function render(page, offset, options) { }; $('.emoji-modal', options.appendTo).remove(); - const template = Discourse.RAW_TEMPLATES['emoji-toolbar']; + const template = findRawTemplate('emoji-toolbar'); options.appendTo.append(template(model)); bindEvents(page, offset, options); diff --git a/app/assets/javascripts/discourse/lib/raw-templates.js.es6 b/app/assets/javascripts/discourse/lib/raw-templates.js.es6 new file mode 100644 index 00000000000..5df3190b5a3 --- /dev/null +++ b/app/assets/javascripts/discourse/lib/raw-templates.js.es6 @@ -0,0 +1,10 @@ +import { getResolverOption } from 'discourse-common/resolver'; + +export function findRawTemplate(name) { + if (getResolverOption('mobileView')) { + return Discourse.RAW_TEMPLATES[`mobile/${name}`] || + Discourse.RAW_TEMPLATES[name]; + } + + return Discourse.RAW_TEMPLATES[name]; +}