diff --git a/app/assets/javascripts/discourse-common/lib/get-url.js.es6 b/app/assets/javascripts/discourse-common/lib/get-url.js.es6 new file mode 100644 index 0000000000..0bbc6f00fd --- /dev/null +++ b/app/assets/javascripts/discourse-common/lib/get-url.js.es6 @@ -0,0 +1,20 @@ +let baseUri; + +export default function getURL(url) { + if (!url) return url; + + if (!baseUri) { + baseUri = $('meta[name="discourse-base-uri"]').attr('content') || ''; + } + + // if it's a non relative URL, return it. + if (url !== '/' && !/^\/[^\/]/.test(url)) return url; + + const found = url.indexOf(baseUri); + + if (found >= 0 && found < 3) return url; + if (url[0] !== "/") url = "/" + url; + + return baseUri + url; +} + diff --git a/app/assets/javascripts/discourse/components/global-notice.js.es6 b/app/assets/javascripts/discourse/components/global-notice.js.es6 index 50132cf5ca..bd45e777a4 100644 --- a/app/assets/javascripts/discourse/components/global-notice.js.es6 +++ b/app/assets/javascripts/discourse/components/global-notice.js.es6 @@ -18,7 +18,8 @@ export default Ember.Component.extend(StringBuffer, { } if (this.site.get('wizard_required')) { - notices.push([I18n.t('wizard_required'), 'alert-wizard']); + const requiredText = I18n.t('wizard_required', {url: Discourse.getURL('/wizard')}); + notices.push([requiredText, 'alert-wizard']); } if (this.currentUser && this.currentUser.get('staff') && this.siteSettings.bootstrap_mode_enabled) { diff --git a/app/assets/javascripts/wizard/components/wizard-field-image.js.es6 b/app/assets/javascripts/wizard/components/wizard-field-image.js.es6 index 1407152cd1..bb5f796ced 100644 --- a/app/assets/javascripts/wizard/components/wizard-field-image.js.es6 +++ b/app/assets/javascripts/wizard/components/wizard-field-image.js.es6 @@ -1,3 +1,4 @@ +import getUrl from 'discourse-common/lib/get-url'; import computed from 'ember-addons/ember-computed-decorators'; import { getToken } from 'wizard/lib/ajax'; @@ -20,7 +21,7 @@ export default Ember.Component.extend({ const id = this.get('field.id'); $upload.fileupload({ - url: "/uploads.json", + url: getUrl("/uploads.json"), formData: { synchronous: true, type: `wizard_${id}`, authenticity_token: getToken() }, diff --git a/app/assets/javascripts/wizard/components/wizard-step.js.es6 b/app/assets/javascripts/wizard/components/wizard-step.js.es6 index c8b628f24c..425a5d7476 100644 --- a/app/assets/javascripts/wizard/components/wizard-step.js.es6 +++ b/app/assets/javascripts/wizard/components/wizard-step.js.es6 @@ -1,3 +1,4 @@ +import getUrl from 'discourse-common/lib/get-url'; import { default as computed, observes } from 'ember-addons/ember-computed-decorators'; jQuery.fn.wiggle = function (times, duration) { @@ -37,7 +38,7 @@ export default Ember.Component.extend({ @computed('step.banner') bannerImage(src) { if (!src) { return; } - return `/images/wizard/${src}`; + return getUrl(`/images/wizard/${src}`); }, @observes('step.id') @@ -91,7 +92,7 @@ export default Ember.Component.extend({ actions: { quit() { - document.location = "/"; + document.location = getUrl("/"); }, backStep() { diff --git a/app/assets/javascripts/wizard/controllers/step.js.es6 b/app/assets/javascripts/wizard/controllers/step.js.es6 index 3a66e82d9a..3ab6833ff9 100644 --- a/app/assets/javascripts/wizard/controllers/step.js.es6 +++ b/app/assets/javascripts/wizard/controllers/step.js.es6 @@ -1,3 +1,5 @@ +import getUrl from 'discourse-common/lib/get-url'; + export default Ember.Controller.extend({ wizard: null, step: null, @@ -6,7 +8,7 @@ export default Ember.Controller.extend({ goNext(response) { const next = this.get('step.next'); if (response.refresh_required) { - document.location = `/wizard/steps/${next}`; + document.location = getUrl(`/wizard/steps/${next}`); } else { this.transitionToRoute('step', next); } diff --git a/app/assets/javascripts/wizard/lib/ajax.js.es6 b/app/assets/javascripts/wizard/lib/ajax.js.es6 index 6e4c2beaef..951c5685b7 100644 --- a/app/assets/javascripts/wizard/lib/ajax.js.es6 +++ b/app/assets/javascripts/wizard/lib/ajax.js.es6 @@ -1,3 +1,4 @@ +import getUrl from 'discourse-common/lib/get-url'; let token; @@ -14,6 +15,7 @@ export function ajax(args) { args.headers = { 'X-CSRF-Token': getToken() }; args.success = data => Ember.run(null, resolve, data); args.error = xhr => Ember.run(null, reject, xhr); + args.url = getUrl(args.url); Ember.$.ajax(args); }); } diff --git a/app/assets/javascripts/wizard/lib/preview.js.es6 b/app/assets/javascripts/wizard/lib/preview.js.es6 index de1d0a132b..a5e8371eb2 100644 --- a/app/assets/javascripts/wizard/lib/preview.js.es6 +++ b/app/assets/javascripts/wizard/lib/preview.js.es6 @@ -1,4 +1,5 @@ /*eslint no-bitwise:0 */ +import getUrl from 'discourse-common/lib/get-url'; export const LOREM = ` Lorem ipsum dolor sit amet, consectetur adipiscing elit. @@ -190,8 +191,10 @@ export function createPreviewComponent(width, height, obj) { } function loadImage(src) { + if (!src) { return Ember.RSVP.Promise.resolve(); } + const img = new Image(); - img.src = src; + img.src = getUrl(src); return new Ember.RSVP.Promise(resolve => img.onload = () => resolve(img)); }; diff --git a/app/assets/javascripts/wizard/router.js.es6 b/app/assets/javascripts/wizard/router.js.es6 index 57cea9cf6f..ebc83ec380 100644 --- a/app/assets/javascripts/wizard/router.js.es6 +++ b/app/assets/javascripts/wizard/router.js.es6 @@ -1,5 +1,7 @@ +import getUrl from 'discourse-common/lib/get-url'; + const Router = Ember.Router.extend({ - rootURL: '/wizard', + rootURL: getUrl('/wizard'), location: Ember.testing ? 'none': 'history' }); diff --git a/app/assets/javascripts/wizard/templates/application.hbs b/app/assets/javascripts/wizard/templates/application.hbs index bef41d850c..0f99c338ba 100644 --- a/app/assets/javascripts/wizard/templates/application.hbs +++ b/app/assets/javascripts/wizard/templates/application.hbs @@ -7,6 +7,6 @@ {{outlet}}
diff --git a/app/assets/stylesheets/wizard.scss b/app/assets/stylesheets/wizard.scss index 8cffd2c879..419b8b8616 100644 --- a/app/assets/stylesheets/wizard.scss +++ b/app/assets/stylesheets/wizard.scss @@ -5,7 +5,7 @@ body.wizard { background-color: #fff; - background-image: url('/images/wizard/bubbles.png'); + background-image: asset-url('/images/wizard/bubbles.png'); background-repeat: repeat; background-position: left top; @@ -14,6 +14,14 @@ body.wizard { line-height: 1.4em; } +.discourse-logo { + background-image: asset-url('/images/wizard/discourse.png'); + height: 30px; + width: 110px; + background-size: 110px 30px; + background-repeat: no-repeat; +} + .wizard-warning { font-family: sans-serif, @@ -119,9 +127,6 @@ body.wizard { border-top: 1px solid #ccc; background-color: #eee; padding: 0.5em; - img.logo { - height: 30px; - } } .wizard-progress { diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index bfbb54ab51..0a0d354623 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -30,7 +30,7 @@ <%= script "application" %> <%- if staff? %> - + <%= script "admin" %> <%- end %> diff --git a/app/views/wizard/index.html.erb b/app/views/wizard/index.html.erb index fad9c7d92d..a0f193526f 100644 --- a/app/views/wizard/index.html.erb +++ b/app/views/wizard/index.html.erb @@ -6,9 +6,11 @@ <%= script 'wizard-application' %> <%= script "locales/#{I18n.locale}" %> <%= render partial: "common/special_font_face" %> - + <%= csrf_meta_tags %> + + <%= render partial: "layouts/head" %>