1XA.component.search.variantFilter = (function ($, document) { 2 3 var api = {}, 4 queryModel, 5 queryParameters, 6 variantMappings = [], 7 initialized = false, 8 variantMappings = {}; 9 10 var VariantSelectorModel = Backbone.Model.extend({ 11 defaults: { 12 dataProperties: {}, 13 sig: [] 14 } 15 }); 16 17 var VariantSelectorView = XA.component.search.baseView.extend({ 18 initialize : function () { 19 var hashObj = queryModel.parseHashParameters(window.location.hash), 20 dataProperties = this.$el.data(), 21 sig = this.translateSignatures(dataProperties.properties.searchResultsSignature, "v"), 22 inst = this, 23 i; 24 25 if (dataProperties.properties.searchResultsSignature === null) { 26 dataProperties.properties.searchResultsSignature = ""; 27 } 28 29 this.model.set({dataProperties: dataProperties}); 30 this.model.set("sig", sig); 31 32 for (i = 0; i < sig.length; i++) { 33 if (hashObj.hasOwnProperty(sig[i])) { 34 this.selectVariantIcon(hashObj[sig[i]]); 35 } 36 } 37 38 XA.component.search.vent.on("results-loaded", function (resultsData) { 39 var rawSignatures = dataProperties.properties.searchResultsSignature.split(','), 40 signature, 41 startingVariant, 42 signatureVariants;
43 44 hashObj = queryModel.parseHashParameters(window.location.hash); 45 46 for (i = 0; i < rawSignatures.length; i++) { 47 signature = rawSignatures[i]; 48 if (hashObj.hasOwnProperty(sig[i]) && variantMappings.hasOwnProperty(signature)) { 49 signatureVariants = variantMappings[signature]; 50 startingVariant = signatureVariants[hashObj[sig[i]]]; 51 inst.triggerAddVariant(startingVariant.cssClass, signature); 52 inst.selectVariantIcon(hashObj[sig[i]]); 53 } else { 54 //select first variant if there is no variant param in the hash 55 if (variantMappings.hasOwnProperty(signature) && variantMappings[signature].hasOwnProperty(0)) { 56 setTimeout(function () { 57 inst.triggerAddVariant(variantMappings[signature][0].cssClass, signature); 58 inst.selectVariantIcon(0); 59 }, 100); 60 } 61 } 62 } 63 }); 64 }, 65 events : { 66 "click div > div": "changeVariant" 67 }, 68 changeVariant: function (event) { 69 var $target = $(event.currentTarget), 70 sig = this.model.get("sig"), 71 props = $target.data(); 72 73 this.$el.find(".active-variant").removeClass("active-variant"); 74 $target.addClass("active-variant"); 75 76 queryParameters.updateHash(this.updateSignaturesHash(sig, props.variantindex, {})); 77 this.triggerAddVariant($(event.currentTarget).attr("class")); 78 }, 79 triggerAddVariant: function (classes, signature) { 80 XA.component.search.vent.trigger("add-variant-class", { 81 classes: classes, 82 sig: signature 83 }); 84 }, 85 selectVariantIcon: function (v) { 86 this.$el.find("div[data-variantIndex]").removeClass("active-variant"); 87 this.$el.find("div[data-variantIndex=" + v + "]").addClass("active-variant"); 88 } 89 }); 90 91 92 api.init = function() { 93 if ($("body").hasClass("on-page-editor") || initialized) { 94 return; 95 } 96 97 queryModel = XA.component.search.query; 98 queryParameters = XA.component.search.parameters; 99 100 var variantSelectors = $(".variant-selector"); 101 _.each(variantSelectors, function (elem) { 102 var view = new VariantSelectorView({el: $(elem), model: new VariantSelectorModel()}); 103 }); 104 105 initialized = true; 106 }; 107 108 api.getVariantMappings = function (signature) { 109 var variantSelectors = $(".variant-selector"), 110 componentVariants = {}, 111 allVariantItems, 112 signatures = [], 113 properties, 114 i; 115 116 if (!variantMappings.hasOwnProperty(signature)) { 117 for (i = 0; i < variantSelectors.length; i++) { 118 properties = $(variantSelectors[i]).data().properties; 119 signatures = properties.searchResultsSignature.split(','); 120 121 if (signatures.indexOf(signature) !== -1) { 122 allVariantItems = $(variantSelectors[i]).find(".variant-option"); 123 _.each(allVariantItems, function (variant) { 124 var data = $(variant).data(); 125 componentVariants[data.variantindex] = { id: data.variant, cssClass: $(variant).attr("class")}; 126 }); 127 variantMappings[signature] = componentVariants;
128 } 129 } 130 } 131 132 if (variantMappings.hasOwnProperty(signature)) { 133 return variantMappings[signature]; 134 } 135 136 return {}; 137 }; 138 139 return api; 140 141}(jQuery, document)); 142 143XA.register('variantFilter', XA.component.search.variantFilter); 144
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.