mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 18:30:09 +00:00
added missing checks and started docs...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
7a2dec7f63
commit
9fd4d389df
@ -570,13 +570,80 @@ var FeatureSetProto = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
// Build list of features...
|
||||||
|
//
|
||||||
|
// Build list of all features for an empty object...
|
||||||
|
// .buildFeatureList()
|
||||||
|
// .buildFeatureList({})
|
||||||
|
// .buildFeatureList({}, '*')
|
||||||
|
// -> data
|
||||||
|
//
|
||||||
|
// Build a list of features for a specific root feature and object...
|
||||||
|
// .buildFeatureList(object, feature)
|
||||||
|
// -> data
|
||||||
|
//
|
||||||
|
// Build a list of features for a specific set of root features and object...
|
||||||
|
// .buildFeatureList(object, [feature, ..])
|
||||||
|
// -> data
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// This will:
|
||||||
|
// - include all dependencies for all given features (recursively)
|
||||||
|
// - include all suggested features by all the given features (recursively)
|
||||||
|
// - sort features by priority
|
||||||
|
// - sort features by dependency
|
||||||
|
// - check for feature applicability and remove non-applicable features
|
||||||
|
// - remove features depending on non applicable features (recursively)
|
||||||
|
// - remove disabled features
|
||||||
|
// - remove features depending on disabled features (recursively)
|
||||||
|
// - check for missing features and dependencies
|
||||||
|
// XXX exclusivity check...
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Return format:
|
||||||
|
// {
|
||||||
|
// // features in correct load order...
|
||||||
|
// features: [ .. ],
|
||||||
|
//
|
||||||
|
// // features disabled explicitly and their dependants...
|
||||||
|
// disabled: [ .. ],
|
||||||
|
// // unapplicable features and their dependants...
|
||||||
|
// unapplicable: [ .. ],
|
||||||
|
//
|
||||||
|
// excluded: [ .. ],
|
||||||
|
//
|
||||||
|
// missing: {
|
||||||
|
// // features explicitly given by user but missing...
|
||||||
|
// USER: [ .. ],
|
||||||
|
// // missing <feature> dependencies...
|
||||||
|
// <feature>: [ .. ],
|
||||||
|
// ...
|
||||||
|
// },
|
||||||
|
// conflicts: {
|
||||||
|
// XXX
|
||||||
|
// },
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// NOTE: all feature sorting is done maintaining relative feature order
|
||||||
|
// when possible...
|
||||||
|
// NOTE: meta-features are not included in the list as they do not
|
||||||
|
// need to be setup.
|
||||||
|
// ...this is because they are not Feature objects.
|
||||||
|
// NOTE: obj here is used only for applicability testing...
|
||||||
|
//
|
||||||
|
// XXX should meta-features be MetaFeature objects???
|
||||||
|
// XXX might be a good idea to check if any of the explicitly listed
|
||||||
|
// features exists and add them to missing if not...
|
||||||
|
// ...this does not include features added via .suggested or
|
||||||
|
// .depends...
|
||||||
buildFeatureList2: function(obj, lst){
|
buildFeatureList2: function(obj, lst){
|
||||||
var that = this
|
var that = this
|
||||||
obj = obj || {}
|
obj = obj || {}
|
||||||
|
|
||||||
lst = lst == null ? this.features : lst
|
lst = (lst == null || lst == '*') ? this.features : lst
|
||||||
lst = lst.constructor !== Array ? [lst] : lst
|
lst = lst.constructor !== Array ? [lst] : lst
|
||||||
|
|
||||||
|
var input = lst.slice()
|
||||||
var disabled = []
|
var disabled = []
|
||||||
var excluded = []
|
var excluded = []
|
||||||
var unapplicable = []
|
var unapplicable = []
|
||||||
@ -600,12 +667,22 @@ var FeatureSetProto = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// missing stage 1: check if all user included features exist...
|
||||||
|
// NOTE: we'll ignore missing disabled features too...
|
||||||
|
lst.forEach(function(n){
|
||||||
|
if(!that[n] && n[0] != '-'){
|
||||||
|
var m = missing['USER'] = missing['USER'] || []
|
||||||
|
m.push(n)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// include all dependencies...
|
// include all dependencies...
|
||||||
//
|
//
|
||||||
// NOTE: this should never fall into an infinite loop as we do
|
// NOTE: this should never fall into an infinite loop as we do
|
||||||
// not include feature already seen...
|
// not include feature already seen...
|
||||||
// ...unless there is an infinite number of features, but
|
// ...unless there is an infinite number of features, but
|
||||||
// I'll try to avoid that big a feature creep.
|
// I'll try to avoid that big a feature creep.
|
||||||
|
// XXX should we check for dependency loops here???
|
||||||
for(var i=0; i < lst.length; i++){
|
for(var i=0; i < lst.length; i++){
|
||||||
var k = lst[i]
|
var k = lst[i]
|
||||||
|
|
||||||
@ -682,8 +759,20 @@ var FeatureSetProto = {
|
|||||||
unapplicable.push(n) && false
|
unapplicable.push(n) && false
|
||||||
: true })
|
: true })
|
||||||
|
|
||||||
|
// missing stage 2: dependencies...
|
||||||
|
lst.forEach(function(k){
|
||||||
|
(that[k].depends || []).forEach(function(d){
|
||||||
|
// NOTE: we do not need to check disabled or unapplicable
|
||||||
|
// here as if the feature depended on dropped feature
|
||||||
|
// it would have been already dropped too...
|
||||||
|
if(!that[k]){
|
||||||
|
var m = missing[k] = missing[k] || []
|
||||||
|
m.push(d)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
// XXX check exclusive -> excluded...
|
// XXX check exclusive -> excluded...
|
||||||
// XXX check missing...
|
|
||||||
|
|
||||||
|
|
||||||
// sort by dependency...
|
// sort by dependency...
|
||||||
@ -756,12 +845,17 @@ var FeatureSetProto = {
|
|||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
input: input,
|
||||||
|
|
||||||
features: lst,
|
features: lst,
|
||||||
|
|
||||||
disabled: disabled,
|
disabled: disabled,
|
||||||
|
unapplicable: unapplicable,
|
||||||
|
|
||||||
excluded: excluded,
|
excluded: excluded,
|
||||||
|
|
||||||
missing: missing,
|
missing: missing,
|
||||||
conflicts: conflicts,
|
conflicts: conflicts,
|
||||||
unapplicable: unapplicable,
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user