Skip to content

Commit

Permalink
FLUID-4907: Implemented the new aux schema that has no array for pane…
Browse files Browse the repository at this point in the history
…ls and enactors. Demo is working but need to fix unit tests.
  • Loading branch information
cindyli committed Jul 23, 2013
1 parent ff90cbe commit 8f61093
Show file tree
Hide file tree
Showing 6 changed files with 437 additions and 297 deletions.
163 changes: 82 additions & 81 deletions src/webapp/components/uiOptions/js/AuxBuilder.js
Expand Up @@ -51,99 +51,90 @@ var fluid_1_5 = fluid_1_5 || {};
return fluid.get(root, pathRef.substring(1));
};

fluid.uiOptions.expandSchemaComponents = function (auxSchema, type, index, commonOptions, schema) {
fluid.uiOptions.expandSchemaComponents = function (auxSchema, type, prefKey, componentConfig, index, commonOptions, primarySchema) {
var components = {};
var selectors = {};
var templates = {};
var rootModel = {};

var sharedModel = {};
type = type + "s";

fluid.each(auxSchema, function (config, prefName) {
var prefKey = config.type;
if (prefKey) {
sharedModel[prefKey] = prefName;
}
});
var componentName = componentConfig.type;
var memberName = componentName.replace(new RegExp("\\.", 'g'), "_");
var flattenedPrefKey = prefKey.replace(new RegExp("\\.", 'g'), "_");

fluid.each(auxSchema[type], function (componentConfig) {
var componentName = componentConfig.type;
var memberName = componentName.replace(new RegExp("\\.", 'g'), "_");

if (componentName) {
var instance = {
type: componentName
};
if (componentName) {
var instance = {
type: componentName
};

var container = componentConfig.container;
if (container) {
// instance.container = container;
fluid.set(selectors, memberName, container);
}
var container = componentConfig.container;
if (container) {
fluid.set(selectors, memberName, container);
}

var template = componentConfig.template;
if (template) {
templates[memberName] = template;
}
var template = componentConfig.template;
if (template) {
templates[memberName] = template;
}

var componentOptions = fluid.copy(componentConfig);
delete componentOptions.type;
delete componentOptions.container;
delete componentOptions.template;
var componentOptions = fluid.copy(componentConfig);
delete componentOptions.type;
delete componentOptions.container;
delete componentOptions.template;

if (fluid.keys(componentOptions).length > 0) {
instance.options = componentOptions;
}
if (fluid.keys(componentOptions).length > 0) {
instance.options = componentOptions;
}

var preferenceMap = fluid.defaults(componentName).preferenceMap;

fluid.each(preferenceMap, function (map, pref) {
fluid.each(map, function (PrimaryPath, internalPath) {
var prefSchema = schema[pref];
if (prefSchema) {
if (internalPath.slice(0, 6) === "model.") {
var internalModelName = internalPath.slice(6);
fluid.set(instance, "options.rules." + sharedModel[pref], internalModelName);
fluid.set(instance, "options.model." + internalModelName, prefSchema[PrimaryPath]);
fluid.set(rootModel, "members.rootModel." + sharedModel[pref], prefSchema[PrimaryPath]);
} else {
fluid.set(instance, "options." + internalPath, prefSchema[PrimaryPath]);
}
var preferenceMap = fluid.defaults(componentName).preferenceMap;

fluid.each(preferenceMap, function (map, pref) {
fluid.each(map, function (PrimaryPath, internalPath) {
var prefSchema = primarySchema[pref];
if (prefSchema) {
if (internalPath.slice(0, 6) === "model.") {
var internalModelName = internalPath.slice(6);
fluid.set(instance, "options.rules." + flattenedPrefKey, internalModelName);
fluid.set(instance, "options.model." + internalModelName, prefSchema[PrimaryPath]);
fluid.set(rootModel, "members.rootModel." + flattenedPrefKey, prefSchema[PrimaryPath]);
} else {
fluid.set(instance, "options." + internalPath, prefSchema[PrimaryPath]);
}
});
}
});
});

// Merge common options
if (commonOptions) {
fluid.each(commonOptions, function (value, key) {
value = fluid.stringTemplate(value, {
prefKey: memberName
});
fluid.set(instance, key, value);
// Merge common options
if (commonOptions) {
fluid.each(commonOptions, function (value, key) {
value = fluid.stringTemplate(value, {
prefKey: memberName
});
}

components[memberName] = instance;
fluid.set(instance, key, value);
});
}
});

components[memberName] = instance;
}

if (fluid.keys(components).length > 0) {
auxSchema[type] = {
components: components
};
var existingComponents = fluid.get(auxSchema, type + ".components");
fluid.set(auxSchema, type + ".components", $.extend(true, {}, existingComponents, components));

if (fluid.keys(selectors).length > 0) {
auxSchema[type] = $.extend(true, auxSchema[type], {
selectors: selectors
});
var existingSelectors = fluid.get(auxSchema, type + ".selectors");
fluid.set(auxSchema, type + ".selectors", $.extend(true, {}, existingSelectors, selectors));
}
}
if (fluid.keys(templates).length > 0) {
auxSchema.templateLoader = $.extend(true, auxSchema.templates || {}, {
templates: templates
});
var existingTemplates = fluid.get(auxSchema, "templateLoader.templates");
fluid.set(auxSchema, "templateLoader.templates", $.extend(true, {}, existingTemplates, templates));
}
if (fluid.keys(rootModel).length > 0) {
auxSchema.rootModel = $.extend(true, auxSchema.rootModel || {}, rootModel);
var existingModel = fluid.get(auxSchema, "rootModel");
fluid.set(auxSchema, "rootModel", $.extend(true, {}, existingModel, rootModel));
// auxSchema.rootModel = $.extend(true, auxSchema.rootModel || {}, rootModel);
}
return auxSchema;
};
Expand All @@ -153,6 +144,7 @@ var fluid_1_5 = fluid_1_5 || {};
if (value) {
delete auxSchema[type];
fluid.set(auxSchema, targetPath, value);
var a = 1;
}
};

Expand Down Expand Up @@ -187,17 +179,26 @@ var fluid_1_5 = fluid_1_5 || {};
var auxSchema = fluid.uiOptions.expandSchemaImpl(schemaToExpand);
auxSchema.namespace = auxSchema.namespace || defaultNamespace;

var type = "panels";
fluid.uiOptions.expandSchemaComponents(auxSchema, type, fluid.get(indexes, type), fluid.get(elementCommonOptions, type), primarySchema);

type = "enactors";
fluid.uiOptions.expandSchemaComponents(auxSchema, type, fluid.get(indexes, type), fluid.get(elementCommonOptions, type), primarySchema);
fluid.each(auxSchema, function (category, prefName) {
var type = "panel";
if (category[type]) {
fluid.uiOptions.expandSchemaComponents(auxSchema, type, category.type, category[type], fluid.get(indexes, type), fluid.get(elementCommonOptions, type), primarySchema);
}
type = "enactor";
if (category[type]) {
fluid.uiOptions.expandSchemaComponents(auxSchema, type, category.type, category[type], fluid.get(indexes, type), fluid.get(elementCommonOptions, type), primarySchema);
}

type = "messages";
fluid.uiOptions.expandSchemaDirectOption(auxSchema, type, "messages.members.messages");
type = "messages";
if (prefName === type) {
fluid.uiOptions.expandSchemaDirectOption(auxSchema, type, "messages.members.messages");
}

type = "templatePrefix";
fluid.uiOptions.expandSchemaDirectOption(auxSchema, type, "templatePrefix.prefix");
type = "templatePrefix";
if (prefName === type) {
fluid.uiOptions.expandSchemaDirectOption(auxSchema, type, "templatePrefix.templatePrefix");
}
});

// Add top common options
fluid.each(topCommonOptions, function (topOptions, type) {
Expand Down Expand Up @@ -238,19 +239,19 @@ var fluid_1_5 = fluid_1_5 || {};
}
},
elementCommonOptions: {
panels: {
panel: {
"createOnEvent": "onUIOptionsMarkupReady",
"container": "{uiOptions}.dom.%prefKey",
"options.gradeNames": "fluid.uiOptions.defaultPanel",
"options.resources.template": "{templateLoader}.resources.%prefKey"
},
enactors: {
enactor: {
"container": "{uiEnhancer}.container",
"options.sourceApplier": "{uiEnhancer}.applier"
}
},
indexes: {
panels: {
panel: {
expander: {
func: "fluid.indexDefaults",
args: ["panelsIndex", {
Expand All @@ -259,7 +260,7 @@ var fluid_1_5 = fluid_1_5 || {};
}]
}
},
enactors: {
enactor: {
expander: {
func: "fluid.indexDefaults",
args: ["enactorsIndex", {
Expand Down

0 comments on commit 8f61093

Please sign in to comment.