|
|
|
@ -12,17 +12,16 @@ |
|
|
|
* Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance |
|
|
|
* |
|
|
|
* ```js
|
|
|
|
* const cssComposer = editor.CssComposer; |
|
|
|
* const css = editor.Css; |
|
|
|
* ``` |
|
|
|
* |
|
|
|
* * [load](#load) |
|
|
|
* * [store](#store) |
|
|
|
* * [add](#add) |
|
|
|
* * [get](#get) |
|
|
|
* * [getAll](#getall) |
|
|
|
* * [clear](#clear) |
|
|
|
* * [setRule](#setrule) |
|
|
|
* * [getRule](#getrule) |
|
|
|
* * [getRules](#getrules) |
|
|
|
* * [remove](#remove) |
|
|
|
* * [clear](#clear) |
|
|
|
* |
|
|
|
* [CssRule]: css_rule.html |
|
|
|
* |
|
|
|
* @module CssComposer |
|
|
|
*/ |
|
|
|
@ -114,6 +113,7 @@ export default () => { |
|
|
|
* The fetched data will be added to the collection |
|
|
|
* @param {Object} data Object of data to load |
|
|
|
* @return {Object} Loaded rules |
|
|
|
* @private |
|
|
|
*/ |
|
|
|
load(data) { |
|
|
|
var d = data || ''; |
|
|
|
@ -145,6 +145,7 @@ export default () => { |
|
|
|
* Store data to the selected storage |
|
|
|
* @param {Boolean} noStore If true, won't store |
|
|
|
* @return {Object} Data to store |
|
|
|
* @private |
|
|
|
*/ |
|
|
|
store(noStore) { |
|
|
|
if (!c.stm) return; |
|
|
|
@ -165,6 +166,7 @@ export default () => { |
|
|
|
* @param {Object} props Other props for the rule |
|
|
|
* @param {Object} opts Options for the add of new rule |
|
|
|
* @return {Model} |
|
|
|
* @private |
|
|
|
* @example |
|
|
|
* var sm = editor.SelectorManager; |
|
|
|
* var sel1 = sm.add('myClass1'); |
|
|
|
@ -205,6 +207,7 @@ export default () => { |
|
|
|
* @param {String} width Media rule value, eg. '(max-width: 992px)' |
|
|
|
* @param {Object} ruleProps Other rule props |
|
|
|
* @return {Model|null} |
|
|
|
* @private |
|
|
|
* @example |
|
|
|
* const sm = editor.SelectorManager; |
|
|
|
* const sel1 = sm.add('myClass1'); |
|
|
|
@ -231,23 +234,10 @@ export default () => { |
|
|
|
); |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* Get the collection of rules |
|
|
|
* @return {Collection} |
|
|
|
* */ |
|
|
|
getAll() { |
|
|
|
return rules; |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* Remove all rules |
|
|
|
* @return {this} |
|
|
|
*/ |
|
|
|
clear(opts = {}) { |
|
|
|
this.getAll().reset(null, opts); |
|
|
|
return this; |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* Add a raw collection of rule objects |
|
|
|
* This method overrides styles, in case, of already defined rule |
|
|
|
@ -301,22 +291,22 @@ export default () => { |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* Add/update the CSS rule with a generic selector |
|
|
|
* @param {string} selectors Selector, eg. '.myclass' |
|
|
|
* Add/update the CssRule. |
|
|
|
* @param {String} selectors Selector string, eg. `.myclass` |
|
|
|
* @param {Object} style Style properties and values |
|
|
|
* @param {Object} [opts={}] Additional properties |
|
|
|
* @param {String} [opts.atRuleType=''] At-rule type, eg. 'media' |
|
|
|
* @param {String} [opts.atRuleParams=''] At-rule parameters, eg. '(min-width: 500px)' |
|
|
|
* @return {CssRule} The new/updated rule |
|
|
|
* @param {String} [opts.atRuleType=''] At-rule type, eg. `media` |
|
|
|
* @param {String} [opts.atRuleParams=''] At-rule parameters, eg. `(min-width: 500px)` |
|
|
|
* @returns {[CssRule]} The new/updated CssRule |
|
|
|
* @example |
|
|
|
* // Simple class-based rule
|
|
|
|
* const rule = cc.setRule('.class1.class2', { color: 'red' }); |
|
|
|
* const rule = css.setRule('.class1.class2', { color: 'red' }); |
|
|
|
* console.log(rule.toCSS()) // output: .class1.class2 { color: red }
|
|
|
|
* // With state and other mixed selector
|
|
|
|
* const rule = cc.setRule('.class1.class2:hover, div#myid', { color: 'red' }); |
|
|
|
* const rule = css.setRule('.class1.class2:hover, div#myid', { color: 'red' }); |
|
|
|
* // output: .class1.class2:hover, div#myid { color: red }
|
|
|
|
* // With media
|
|
|
|
* const rule = cc.setRule('.class1:hover', { color: 'red' }, { |
|
|
|
* const rule = css.setRule('.class1:hover', { color: 'red' }, { |
|
|
|
* atRuleType: 'media', |
|
|
|
* atRuleParams: '(min-width: 500px)', |
|
|
|
* }); |
|
|
|
@ -340,15 +330,16 @@ export default () => { |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* Get the CSS rule by a generic selector |
|
|
|
* @param {string} selectors Selector, eg. '.myclass:hover' |
|
|
|
* @param {String} [opts.atRuleType=''] At-rule type, eg. 'media' |
|
|
|
* Get the CssRule. |
|
|
|
* @param {String} selectors Selector string, eg. `.myclass:hover` |
|
|
|
* @param {Object} [opts={}] Additional properties |
|
|
|
* @param {String} [opts.atRuleType=''] At-rule type, eg. `media` |
|
|
|
* @param {String} [opts.atRuleParams=''] At-rule parameters, eg. '(min-width: 500px)' |
|
|
|
* @return {CssRule} |
|
|
|
* @returns {[CssRule]} |
|
|
|
* @example |
|
|
|
* const rule = cc.getRule('.myclass1:hover'); |
|
|
|
* const rule2 = cc.getRule('.myclass1:hover, div#myid'); |
|
|
|
* const rule3 = cc.getRule('.myclass1', { |
|
|
|
* const rule = css.getRule('.myclass1:hover'); |
|
|
|
* const rule2 = css.getRule('.myclass1:hover, div#myid'); |
|
|
|
* const rule3 = css.getRule('.myclass1', { |
|
|
|
* atRuleType: 'media', |
|
|
|
* atRuleParams: '(min-width: 500px)', |
|
|
|
* }); |
|
|
|
@ -369,17 +360,20 @@ export default () => { |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* Find rules, in different states (eg. like `:hover`) and media queries, matching the selector. |
|
|
|
* @param {string} selector Selector, eg. '.myclass' |
|
|
|
* @returns {Array<CssRule>} |
|
|
|
* Get all rules or filtered by a matching selector. |
|
|
|
* @param {String} [selector=''] Selector, eg. `.myclass` |
|
|
|
* @returns {Array<[CssRule]>} |
|
|
|
* @example |
|
|
|
* // Common scenario, take all the component specific rules
|
|
|
|
* // Take all the component specific rules
|
|
|
|
* const id = someComponent.getId(); |
|
|
|
* const rules = cc.getRules(`#${id}`); |
|
|
|
* const rules = css.getRules(`#${id}`); |
|
|
|
* console.log(rules.map(rule => rule.toCSS())) |
|
|
|
* // All rules in the project
|
|
|
|
* console.log(css.getRules()) |
|
|
|
*/ |
|
|
|
getRules(selector) { |
|
|
|
const rules = this.getAll(); |
|
|
|
if (!selector) return [...rules.models]; |
|
|
|
const result = rules.filter( |
|
|
|
r => r.getSelectors().getFullString() === selector |
|
|
|
); |
|
|
|
@ -394,8 +388,8 @@ export default () => { |
|
|
|
* @return {CssRule} The new/updated rule |
|
|
|
* @private |
|
|
|
* @example |
|
|
|
* const rule = cc.setIdRule('myid', { color: 'red' }); |
|
|
|
* const ruleHover = cc.setIdRule('myid', { color: 'blue' }, { state: 'hover' }); |
|
|
|
* const rule = css.setIdRule('myid', { color: 'red' }); |
|
|
|
* const ruleHover = css.setIdRule('myid', { color: 'blue' }, { state: 'hover' }); |
|
|
|
* // This will add current CSS:
|
|
|
|
* // #myid { color: red }
|
|
|
|
* // #myid:hover { color: blue }
|
|
|
|
@ -418,8 +412,8 @@ export default () => { |
|
|
|
* @return {CssRule} |
|
|
|
* @private |
|
|
|
* @example |
|
|
|
* const rule = cc.getIdRule('myid'); |
|
|
|
* const ruleHover = cc.setIdRule('myid', { state: 'hover' }); |
|
|
|
* const rule = css.getIdRule('myid'); |
|
|
|
* const ruleHover = css.setIdRule('myid', { state: 'hover' }); |
|
|
|
*/ |
|
|
|
getIdRule(name, opts = {}) { |
|
|
|
const { mediaText } = opts; |
|
|
|
@ -437,8 +431,8 @@ export default () => { |
|
|
|
* @return {CssRule} The new/updated rule |
|
|
|
* @private |
|
|
|
* @example |
|
|
|
* const rule = cc.setClassRule('myclass', { color: 'red' }); |
|
|
|
* const ruleHover = cc.setClassRule('myclass', { color: 'blue' }, { state: 'hover' }); |
|
|
|
* const rule = css.setClassRule('myclass', { color: 'red' }); |
|
|
|
* const ruleHover = css.setClassRule('myclass', { color: 'blue' }, { state: 'hover' }); |
|
|
|
* // This will add current CSS:
|
|
|
|
* // .myclass { color: red }
|
|
|
|
* // .myclass:hover { color: blue }
|
|
|
|
@ -460,8 +454,8 @@ export default () => { |
|
|
|
* @return {CssRule} |
|
|
|
* @private |
|
|
|
* @example |
|
|
|
* const rule = cc.getClassRule('myclass'); |
|
|
|
* const ruleHover = cc.getClassRule('myclass', { state: 'hover' }); |
|
|
|
* const rule = css.getClassRule('myclass'); |
|
|
|
* const ruleHover = css.getClassRule('myclass', { state: 'hover' }); |
|
|
|
*/ |
|
|
|
getClassRule(name, opts = {}) { |
|
|
|
const state = opts.state || ''; |
|
|
|
@ -470,6 +464,32 @@ export default () => { |
|
|
|
return selector && this.get(selector, state, media); |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* Remove rule, by CssRule or matching selector (eg. the selector will match also at-rules like `@media`) |
|
|
|
* @param {String|[CssRule]|Array<[CssRule]>} rule CssRule or matching selector. |
|
|
|
* @return {Array<[CssRule]>} Removed rules |
|
|
|
* @example |
|
|
|
* // Remove by CssRule
|
|
|
|
* const toRemove = css.getRules('.my-cls'); |
|
|
|
* css.remove(toRemove); |
|
|
|
* // Remove by selector
|
|
|
|
* css.remove('.my-cls-2'); |
|
|
|
*/ |
|
|
|
remove(rule) { |
|
|
|
const toRemove = isString(rule) ? this.getRules(rule) : rule; |
|
|
|
const result = this.getAll().remove(toRemove); |
|
|
|
return isArray(result) ? result : [result]; |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* Remove all rules |
|
|
|
* @return {this} |
|
|
|
*/ |
|
|
|
clear(opts = {}) { |
|
|
|
this.getAll().reset(null, opts); |
|
|
|
return this; |
|
|
|
}, |
|
|
|
|
|
|
|
getComponentRules(cmp, opts = {}) { |
|
|
|
let { state, mediaText, current } = opts; |
|
|
|
if (current) { |
|
|
|
|