123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- 'use strict';
- var inherits = require('inherits');
- var getTemplate = require('./Helper').getTemplate;
- var PropertiesActivator = require('../../../PropertiesActivator');
- var HIGHER_PRIORITY = 1100;
- /**
- * Applies template visibility settings.
- *
- * Controlled using `entriesVisible` on template config object:
- *
- * ```json
- * "entriesVisible": {
- * "_all": true|false,
- * "entryName": true|false,
- * ...
- * }
- * ```
- *
- * @param {EventBus} eventBus
- * @param {ElementTemplates} elementTemplates
- */
- function CustomElementsPropertiesActivator(eventBus, elementTemplates) {
- PropertiesActivator.call(this, eventBus, HIGHER_PRIORITY);
- this.isEntryVisible = function(entry, element) {
- var template = getTemplate(element, elementTemplates);
- if (template && !isEntryVisible(entry, template)) {
- return false;
- }
- };
- this.isPropertyEditable = function(entry, propertyName, element) {
- var template = getTemplate(element, elementTemplates);
- if (template && !isEntryEditable(entry, template)) {
- return false;
- }
- };
- }
- CustomElementsPropertiesActivator.$inject = [ 'eventBus', 'elementTemplates' ];
- inherits(CustomElementsPropertiesActivator, PropertiesActivator);
- module.exports = CustomElementsPropertiesActivator;
- // helpers ////////////////////////////////////
- var CUSTOM_PROPERTIES_PATTERN = /^custom-/;
- var DEFAULT_ENTRIES_VISIBLE = {
- _all: false,
- id: true,
- name: true
- };
- function isCustomEntry(entry) {
- return CUSTOM_PROPERTIES_PATTERN.test(entry.id);
- }
- function isEntryVisible(entry, template) {
- var entryId = entry.id;
- if (entryId === 'elementTemplate-chooser' || isCustomEntry(entry)) {
- return true;
- }
- var entriesVisible = template.entriesVisible || DEFAULT_ENTRIES_VISIBLE;
- if (typeof entriesVisible === 'boolean') {
- return entriesVisible;
- }
- var defaultVisible = entriesVisible._all || false,
- entryVisible = entriesVisible[entryId];
- // d = true, e = false => false
- // d = false, e = true => true
- // d = false, e = false
- return (
- (defaultVisible === true && entryVisible !== false) ||
- (defaultVisible === false && entryVisible === true)
- );
- }
- function isEntryEditable(entry, template) {
- var property;
- if (isCustomEntry(entry)) {
- property = getProperty(template, entry);
- return property && property.editable !== false;
- }
- return true;
- }
- function getProperty(template, entry) {
- var index;
- var idx = entry.id.replace('custom-' + template.id + '-', '');
- if (idx.indexOf('-') !== -1) {
- var indexes = idx.split('-');
- if (indexes.length == 2) {
- var scopeName = indexes[0].replace(/_/g, ':');
- index = parseInt(indexes[1], 10);
- if (scopeName && !isNaN(index)) {
- return template.scopes[scopeName].properties[index];
- }
- }
- } else {
- index = parseInt(idx, 10);
- if (!isNaN(index)) {
- return template.properties[index];
- }
- }
- throw new Error('cannot extract property index for entry <' + entry.id + '>');
- }
|