| function mergeArrays() { |
| var arr = arguments[0] || []; |
| for (var i = 1; i < arguments.length; i++) { |
| arr = arr.concat(arguments[i]); |
| } |
| return arr; |
| } |
| |
| var ALL_RESOURCES = mergeArrays( |
| ABOUT_RESOURCES, |
| DESIGN_RESOURCES, |
| DISTRIBUTE_RESOURCES, |
| GOOGLE_RESOURCES, |
| GUIDE_RESOURCES, |
| SAMPLES_RESOURCES, |
| PREVIEW_RESOURCES, |
| TOOLS_RESOURCES, |
| TRAINING_RESOURCES, |
| YOUTUBE_RESOURCES, |
| BLOGGER_RESOURCES |
| ); |
| |
| for (var i = 0; i < ALL_RESOURCES.length; i++) { |
| ALL_RESOURCES[i].index = i; |
| } |
| |
| function mergeMaps() { |
| var allRes = {}; |
| var offset = 0; |
| |
| for (var i = 0; i < arguments.length; i++) { |
| var r = arguments[i]; |
| for (var tag in r.map) { |
| allRes[tag] = allRes[tag] || []; |
| allRes[tag] = allRes[tag].concat(r.map[tag].map(function(i){ return ALL_RESOURCES[i + offset]; })); |
| } |
| offset += r.arr.length; |
| } |
| |
| return allRes; |
| } |
| |
| function setFromArray(arr) { |
| arr = arr || []; |
| var set = {}; |
| for (var i = 0; i < arr.length; i++) { |
| set[arr[i]] = true; |
| } |
| return set; |
| } |
| |
| function buildResourceLookupMap(resourceDict) { |
| var map = {}; |
| for (var key in resourceDict) { |
| var dictForKey = {}; |
| var srcArr = resourceDict[key]; |
| for (var i = 0; i < srcArr.length; i++) { |
| dictForKey[srcArr[i].index] = true; |
| } |
| map[key] = dictForKey; |
| } |
| return map; |
| } |
| |
| // Type lookups |
| |
| var ALL_RESOURCES_BY_TYPE = { |
| 'about': ABOUT_RESOURCES, |
| 'design': DESIGN_RESOURCES, |
| 'distribute': DISTRIBUTE_RESOURCES, |
| 'google': GOOGLE_RESOURCES, |
| 'guide': GUIDE_RESOURCES, |
| 'samples': SAMPLES_RESOURCES, |
| 'preview': PREVIEW_RESOURCES, |
| 'tools': TOOLS_RESOURCES, |
| 'training': TRAINING_RESOURCES, |
| 'youtube': YOUTUBE_RESOURCES, |
| 'blog': BLOGGER_RESOURCES |
| }; |
| var IS_RESOURCE_OF_TYPE = buildResourceLookupMap(ALL_RESOURCES_BY_TYPE); |
| |
| // Tag lookups |
| |
| var ALL_RESOURCES_BY_TAG = mergeMaps( |
| {map:ABOUT_BY_TAG,arr:ABOUT_RESOURCES}, |
| {map:DESIGN_BY_TAG,arr:DESIGN_RESOURCES}, |
| {map:DISTRIBUTE_BY_TAG,arr:DISTRIBUTE_RESOURCES}, |
| {map:GOOGLE_BY_TAG,arr:GOOGLE_RESOURCES}, |
| {map:GUIDE_BY_TAG,arr:GUIDE_RESOURCES}, |
| {map:SAMPLES_BY_TAG,arr:SAMPLES_RESOURCES}, |
| {map:PREVIEW_BY_TAG,arr:PREVIEW_RESOURCES}, |
| {map:TOOLS_BY_TAG,arr:TOOLS_RESOURCES}, |
| {map:TRAINING_BY_TAG,arr:TRAINING_RESOURCES}, |
| {map:YOUTUBE_BY_TAG,arr:YOUTUBE_RESOURCES}, |
| {map:BLOGGER_BY_TAG,arr:BLOGGER_RESOURCES} |
| ); |
| var IS_RESOURCE_TAGGED = buildResourceLookupMap(ALL_RESOURCES_BY_TAG); |
| |
| // URL and language lookups |
| |
| var ALL_RESOURCES_BY_URL = {}; |
| var ALL_RESOURCES_BY_LANG = {}; |
| |
| for (var i = 0; i < ALL_RESOURCES.length; i++) { |
| var res = ALL_RESOURCES[i]; |
| var lang = res.lang; |
| if (lang) { |
| ALL_RESOURCES_BY_LANG[lang] = ALL_RESOURCES_BY_LANG[lang] || []; |
| ALL_RESOURCES_BY_LANG[lang].push(res); |
| } |
| var url = res.url; |
| if (url) { |
| ALL_RESOURCES_BY_URL[url] = res; |
| } |
| } |
| var IS_RESOURCE_IN_LANG = buildResourceLookupMap(ALL_RESOURCES_BY_LANG); |