discourse/app/assets/javascripts/wizard/models/wizard.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

99 lines
2.2 KiB
JavaScript
Raw Normal View History

import EmberObject from "@ember/object";
2016-08-26 01:14:56 +08:00
import Step from "wizard/models/step";
import WizardField from "wizard/models/wizard-field";
import { ajax } from "wizard/lib/ajax";
import discourseComputed from "discourse-common/utils/decorators";
2016-08-26 01:14:56 +08:00
const Wizard = EmberObject.extend({
@discourseComputed("steps.length")
2018-07-30 23:56:48 +08:00
totalSteps: (length) => length,
2016-09-17 04:12:56 +08:00
2016-09-17 05:02:45 +08:00
getTitle() {
const titleStep = this.steps.findBy("id", "forum-title");
2016-09-17 05:02:45 +08:00
if (!titleStep) {
return;
}
return titleStep.get("fieldsById.title.value");
},
getLogoUrl() {
const logoStep = this.steps.findBy("id", "logos");
if (!logoStep) {
return;
}
return logoStep.get("fieldsById.logo.value");
},
2016-09-17 04:12:56 +08:00
// A bit clunky, but get the current colors from the appropriate step
getCurrentColors(schemeId) {
const colorStep = this.steps.findBy("id", "colors");
2016-09-17 04:12:56 +08:00
if (!colorStep) {
return this.current_color_scheme;
2016-09-17 04:12:56 +08:00
}
const themeChoice = colorStep.get("fieldsById.theme_previews");
2016-09-17 04:12:56 +08:00
if (!themeChoice) {
return;
}
const themeId = schemeId ? schemeId : themeChoice.get("value");
2016-09-17 04:12:56 +08:00
if (!themeId) {
return;
}
const choices = themeChoice.get("choices");
if (!choices) {
return;
}
const option = choices.findBy("id", themeId);
2016-09-17 04:12:56 +08:00
if (!option) {
return;
}
return option.data.colors;
},
getCurrentFont(fontId, type = "body_font") {
const fontsStep = this.steps.findBy("id", "fonts");
if (!fontsStep) {
return;
}
const fontChoice = fontsStep.get(`fieldsById.${type}`);
if (!fontChoice) {
return;
}
const choiceId = fontId ? fontId : fontChoice.get("value");
if (!choiceId) {
return;
}
const choices = fontChoice.get("choices");
if (!choices) {
return;
}
const option = choices.findBy("id", choiceId);
if (!option) {
return;
}
return option.label;
2016-09-17 04:12:56 +08:00
},
2016-08-26 01:14:56 +08:00
});
export function findWizard() {
return ajax({ url: "/wizard.json" }).then((response) => {
const wizard = response.wizard;
wizard.steps = wizard.steps.map((step) => {
const stepObj = Step.create(step);
stepObj.fields = stepObj.fields.map((f) => WizardField.create(f));
return stepObj;
});
return Wizard.create(wizard);
});
}