diff --git a/ui (gen4)/lib/features.js b/ui (gen4)/lib/features.js index 711e24fa..856bb834 100755 --- a/ui (gen4)/lib/features.js +++ b/ui (gen4)/lib/features.js @@ -9,6 +9,9 @@ console.log('>>> features') //var DEBUG = DEBUG != null ? DEBUG : true +actions = require('lib/actions') + + /*********************************************************************/ // @@ -145,19 +148,75 @@ module.FeatureProto = { // XXX is hard-coded default feature-set a good way to go??? +// +// Feature(obj) +// -> feature +// +// Feature(feature-set, obj) +// -> feature +// +// Feature(tag, obj) +// -> feature +// +// +// Feature(tag, actions) +// -> feature +// +// Feature(feature-set, tag, actions) +// -> feature +// var Feature = module.Feature = -function Feature(feature_set, obj){ - if(obj == null){ - obj = feature_set - // XXX is this a good default??? - feature_set = Features +function Feature(feature_set, tag, obj){ + if(arguments.length == 2){ + // Feature(, ) + if(typeof(feature_set) == typeof('str')){ + obj = tag + tag = feature_set + feature_set = Features - } else if(feature_set == null){ + // Feature(, ) + } else { + obj = tag + tag = null + } + + // Feature() + } else if(arguments.length == 1){ + obj = feature_set feature_set = Features } - obj.__proto__ = FeatureProto + if(tag != null && obj.tag != null && obj.tag != tag){ + throw 'Error: tag and obj.tag mismatch, either use one or both must match.' + } + + // action... + if(obj instanceof actions.Action){ + if(tag == null){ + throw 'Error: need a tag to make a feature out of an action' + } + var f = { + tag: tag, + actions: obj, + } + obj = f + + // meta-feature... + } else if(obj.constructor === Array){ + if(tag == null){ + throw 'Error: need a tag to make a meta-feature' + } + var f = { + tag: tag, + suggested: obj, + } + obj = f + + // feature... + } else { + obj.__proto__ = FeatureProto + } if(feature_set){ feature_set[obj.tag] = obj @@ -169,20 +228,6 @@ Feature.prototype = FeatureProto Feature.prototype.constructor = Feature -var MetaFeature -module.MetaFeature = function(feature_set, tag, list){ - if(list == null){ - list = tag - tag = feature_set - feature_set = null - } - return Feature(feature_set, { - tag: tag, - suggested: list, - }) -} - - var FeatureSet = module.FeatureSet = { // Build feature list... diff --git a/ui (gen4)/viewer.js b/ui (gen4)/viewer.js index 9a4b816b..d22366fd 100755 --- a/ui (gen4)/viewer.js +++ b/ui (gen4)/viewer.js @@ -2389,7 +2389,7 @@ module.FileSystemLoader = features.Feature(ImageGridFeatures, { // - editor - editing capability // -features.MetaFeature(ImageGridFeatures, 'viewer-testing', [ +features.Feature(ImageGridFeatures, 'viewer-testing', [ // features... 'ui-ribbon-align-to-order', 'ui-single-image-view', @@ -2415,12 +2415,12 @@ features.MetaFeature(ImageGridFeatures, 'viewer-testing', [ //'auto-single-image', ]) -features.MetaFeature(ImageGridFeatures, 'commandline', [ +features.Feature(ImageGridFeatures, 'commandline', [ 'image-marks', 'image-bookmarks', ]) -features.MetaFeature(ImageGridFeatures, 'viewer-minimal', [ +features.Feature(ImageGridFeatures, 'viewer-minimal', [ 'ui-ribbon-align-to-order', 'ui-animation', 'ui-bounds-indicators', @@ -2429,11 +2429,11 @@ features.MetaFeature(ImageGridFeatures, 'viewer-minimal', [ //'ui-current-image-indicator-hide-on-screen-nav', ]) -features.MetaFeature(ImageGridFeatures, 'viewer', [ +features.Feature(ImageGridFeatures, 'viewer', [ 'viewer-minimal', ]) -features.MetaFeature(ImageGridFeatures, 'viewer-partial', [ +features.Feature(ImageGridFeatures, 'viewer-partial', [ 'viewer', 'ui-partial-ribbons', ])