diff --git a/src/style_manager/model/Properties.js b/src/style_manager/model/Properties.js index b237e361c..15455eed2 100644 --- a/src/style_manager/model/Properties.js +++ b/src/style_manager/model/Properties.js @@ -22,9 +22,11 @@ export default Backbone.Collection.extend(TypeableCollection).extend({ init() { const { opts, em } = this; - const sm = opts.module || em.get('StyleManager'); - sm.__listenAdd(this, sm.events.propertyAdd); - sm.__listenRemove(this, sm.events.propertyRemove); + const sm = opts.module || em?.get('StyleManager'); + if (sm) { + sm.__listenAdd(this, sm.events.propertyAdd); + sm.__listenRemove(this, sm.events.propertyRemove); + } }, types: [ diff --git a/src/style_manager/model/Property.js b/src/style_manager/model/Property.js index c4575c2c4..ac85790c7 100644 --- a/src/style_manager/model/Property.js +++ b/src/style_manager/model/Property.js @@ -1,6 +1,6 @@ import { Model } from 'common'; import { isUndefined, isString, isArray, result, keys, each, includes } from 'underscore'; -import { capitalize, camelCase } from 'utils/mixins'; +import { capitalize, camelCase, hasWin } from 'utils/mixins'; /** * @typedef Property @@ -425,7 +425,7 @@ export default class Property extends Model { const parent = component && component.parent(); const parentEl = parent && parent.getEl(); if (parentEl) { - const styles = window.getComputedStyle(parentEl); + const styles = hasWin() ? window.getComputedStyle(parentEl) : {}; each(requiresParent, (values, property) => { stylable = stylable && styles[property] && includes(values, styles[property]); }); diff --git a/src/style_manager/model/PropertyFactory.js b/src/style_manager/model/PropertyFactory.js index 2fd303b86..c56c11b9d 100644 --- a/src/style_manager/model/PropertyFactory.js +++ b/src/style_manager/model/PropertyFactory.js @@ -202,7 +202,7 @@ export default class PropertyFactory { ['background-color', { default: 'none' }, 'color'], // File type - ['background-image', { type: this.typeFile, functionName: 'url', default: 'none', full: 1 }], + ['background-image', { type: this.typeFile, functionName: 'url', default: 'none', full: true }], // Slider type ['opacity', { type: this.typeSlider, default: '1', min: 0, max: 1, step: 0.01 }], diff --git a/test/specs/style_manager/model/Models.js b/test/specs/style_manager/model/Models.js index 366e4ae61..093e07ddb 100644 --- a/test/specs/style_manager/model/Models.js +++ b/test/specs/style_manager/model/Models.js @@ -4,10 +4,13 @@ import PropertyNumber from 'style_manager/model/PropertyNumber'; import Properties from 'style_manager/model/Properties'; import Layer from 'style_manager/model/Layer'; import Layers from 'style_manager/model/Layers'; +import Editor from 'editor/model/Editor'; describe('Sector', () => { - var obj; - var confToExt; + let em; + let sm; + let obj; + let confToExt; beforeEach(() => { confToExt = { @@ -23,11 +26,19 @@ describe('Sector', () => { }, ], }; - obj = new Sector(); + em = new Editor({ + styleManager: { + sectors: [{ id: 'sector-1' }], + }, + }); + sm = em.get('StyleManager'); + sm.onLoad(); + obj = sm.getSector('sector-1'); }); afterEach(() => { obj = null; + em.destroy(); }); test('Has id property', () => { @@ -51,22 +62,22 @@ describe('Sector', () => { expect(res[0]).toEqual({ property: 'display', type: 'select', - defaults: 'block', - list: [{ value: 'block' }, { value: 'inline' }, { value: 'inline-block' }, { value: 'flex' }, { value: 'none' }], + default: 'block', + options: [{ id: 'block' }, { id: 'inline' }, { id: 'inline-block' }, { id: 'flex' }, { id: 'none' }], }); }); test('Extend properties', () => { - obj = new Sector(confToExt); + obj = sm.addSector('test', confToExt); expect(obj.get('properties').length).toEqual(3); var prop0 = obj.get('properties').at(0); expect(prop0.get('type')).toEqual('radio'); - expect(prop0.get('defaults')).toEqual('block'); + expect(prop0.get('default')).toEqual('block'); }); test('Do not extend properties', () => { confToExt.extendBuilded = 0; - obj = new Sector(confToExt); + obj = sm.addSector('test', confToExt); expect(obj.get('properties').length).toEqual(3); var prop0 = obj.get('properties').at(0); expect(prop0.get('type')).toEqual('radio'); @@ -74,7 +85,7 @@ describe('Sector', () => { }); test('Extend composed properties', () => { - obj = new Sector({ + obj = sm.addSector('test', { buildProps: ['margin', 'float'], properties: [ { @@ -99,7 +110,7 @@ describe('Sector', () => { expect(propProps.length).toEqual(2); var propTop = propProps.at(0); expect(propTop.get('name')).toEqual('Top'); - expect(propTop.get('type')).toEqual('integer'); + expect(propTop.get('type')).toEqual('number'); }); }); diff --git a/test/specs/style_manager/model/PropertyFactory.js b/test/specs/style_manager/model/PropertyFactory.js index 341992332..b16026941 100644 --- a/test/specs/style_manager/model/PropertyFactory.js +++ b/test/specs/style_manager/model/PropertyFactory.js @@ -622,6 +622,7 @@ describe('PropertyFactory', () => { default: 'none', type: 'file', functionName: 'url', + full: true, }, { property: 'background-repeat',