mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-23 10:53:34 +03:00
352c4af1d7
no issue - ran [es5-getter-ember-codemod](https://github.com/rondale-sc/es5-getter-ember-codemod) - [es5 getters RFC](https://github.com/emberjs/rfcs/blob/master/text/0281-es5-getters.md) - updates the majority of `object.get('property')` with `object.property` with exceptions: - `.get('nested.property')` - it's not possible to determine if this is relying on "safe" path chaining for when `nested` doesn't exist - `.get('config.x')` and `.get('settings.x')` - both our `config` and `settings` services are proxy objects which do not support es5 getters - this PR is not exhaustive, there are still a number of places where `.get('service.foo')` and similar could be replaced but it gets us a long way there in a quick and automated fashion
66 lines
2.0 KiB
JavaScript
66 lines
2.0 KiB
JavaScript
import Component from '@ember/component';
|
|
import {computed} from '@ember/object';
|
|
import {get} from '@ember/object';
|
|
|
|
export default Component.extend({
|
|
|
|
themes: null,
|
|
|
|
sortedThemes: computed('themes.@each.active', function () {
|
|
let themes = this.themes.map((t) => {
|
|
let theme = {};
|
|
let themePackage = get(t, 'package');
|
|
|
|
theme.model = t;
|
|
theme.name = get(t, 'name');
|
|
theme.label = themePackage ? `${themePackage.name}` : theme.name;
|
|
theme.version = themePackage ? `${themePackage.version}` : '1.0';
|
|
theme.package = themePackage;
|
|
theme.active = get(t, 'active');
|
|
theme.isDeletable = !theme.active;
|
|
|
|
return theme;
|
|
});
|
|
let duplicateThemes = [];
|
|
|
|
themes.forEach((theme) => {
|
|
let duplicateLabels = themes.filterBy('label', theme.label);
|
|
|
|
if (duplicateLabels.length > 1) {
|
|
duplicateThemes.pushObject(theme);
|
|
}
|
|
});
|
|
|
|
duplicateThemes.forEach((theme) => {
|
|
if (theme.name !== 'casper') {
|
|
theme.label = `${theme.label} (${theme.name})`;
|
|
}
|
|
});
|
|
|
|
// "(default)" needs to be added to casper manually as it's always
|
|
// displayed and would mess up the duplicate checking if added earlier
|
|
let casper = themes.findBy('name', 'casper');
|
|
if (casper) {
|
|
casper.label = `${casper.label} (default)`;
|
|
casper.isDefault = true;
|
|
casper.isDeletable = false;
|
|
}
|
|
|
|
// sorting manually because .sortBy('label') has a different sorting
|
|
// algorithm to [...strings].sort()
|
|
return themes.sort((themeA, themeB) => {
|
|
let a = themeA.label.toLowerCase();
|
|
let b = themeB.label.toLowerCase();
|
|
|
|
if (a < b) {
|
|
return -1;
|
|
}
|
|
if (a > b) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
});
|
|
}).readOnly()
|
|
|
|
});
|