1function WFProducts() {} 2 3// changes from api 4// 1. made feature.exceptions and array 5// 2. added guest member_levels to features 6// 3. added guest member_level_kit 7 8////////////////////////////////////////////////////////////////////// 9// Public Interface 10///////////////////////////////////////////////////////////////////// 11WFProducts.getFeatureTitleById = function (featureId) { 12 for (i = 0; i < WFProducts.products.features.length; i++) { 13 var feature = WFProducts.products.features[i]; 14 if (feature.feature_id == featureId) { 15 return feature.title; 16 } 17 } 18} 19 20WFProducts.getFeatureMembershipStringById = function (featureId) { 21 for (i = 0; i < WFProducts.products.features.length; i++) { 22 var feature = WFProducts.products.features[i]; 23 if (feature.feature_id == featureId) { 24 return feature.memberships_str; 25 } 26 } 27} 28 29WFProducts.getMembershipLevelNameById = function (memberLevel) { 30 for (i = 0; i < WFProducts.products.member_level_kits.length; i++) { 31 var memberLevelKit = WFProducts.products.member_level_kits[i]; 32 if (memberLevelKit.member_level == memberLevel) { 33 return memberLevelKit.name; 34 } 35 } 36 return "Guest"; 37} 38 39WFProducts.getAnalyticsKeyById = function (featureId) { 40 var analyticsKey = null; 41 42 for (i = 0; i < WFProducts.products.features.length; i++) { 43 var feature = WFProducts.products.features[i]; 44 if (feature.feature_id == featureId) { 45 analyticsKey = feature.analytics_key; 46 } 47 } 48 49 return analyticsKey; 50} 51 52 53/* 54 doesUserHaveAccessToFeature 55 56 featureId int Required 57 memberLevelId int Required 58 exceptionFailMemberIdsStr str Optional "2,49" 59 60 returns true if a featureId is available for the given memberLevel 61 62 if exceptionFailMemberIdsStr is given it will also check the feature exceptions 63 if an exception is found the matches the exceptionFailMemberLevelIds and memberLevel false is returned 64*/ 65WFProducts.doesUserHaveAccessToFeature = function (featureId, memberLevel, exceptionFailMemberLevelIdsStr) { 66 for (i = 0; i < WFProducts.products.features.length; i++) { 67 var feature = WFProducts.products.features[i]; 68 if (feature.feature_id == featureId) { 69 for (j = 0; j < feature.member_levels.length; j++) { 70 if (feature.member_levels[j] == memberLevel) { 71 // match found - the feature contains the user's memberLevel 72 73 // now look to see if there is an exception for a memberLevel in exceptionFailMemberIdsStr 74 if (typeof exceptionFailMemberLevelIdsStr != "undefined" && exceptionFailMemberLevelIdsStr.length > 0) { 75 // there is a list of memberIds to check for exceptions 76 if (typeof feature.exceptions != "undefined") { 77 // the feature does have exceptions 78 // return false if we find a match 79 var exceptionMemberLevelIds = exceptionFailMemberLevelIdsStr.split(","); 80 for (k = 0; k < exceptionMemberLevelIds.length; k++) { 81 exceptionMemberLevelId = exceptionMemberLevelIds[k]; 82 for (l = 0; l < feature.exceptions.length; l++) { 83 var exception = feature.exceptions[l]; 84 if (exception.member_level == exceptionMemberLevelId && exceptionMemberLevelId == memberLevel) { 85 // the feature does have an exception for a failMemberLevelId and user's memberLevel 86 return false; 87 } 88 } 89 } 90 } 91 } 92 93 // no exceptions found - return true 94 return true; 95 } 96 } 97 } 98 } 99 return false;
100} 101 102WFProducts.getExcludedMapOverlays = function (memberLevel) { 103 var excludedOverlays = []; 104 105 for (var x = 0; x < WFProducts.MapOverlays.length; x++) { 106 if (!WFProducts.doesUserHaveAccessToFeature(WFProducts.MapOverlays[x].featureId, memberLevel)) { 107 excludedOverlays.push(WFProducts.MapOverlays[x].overlayName); 108 } 109 } 110 111 return excludedOverlays; 112} 113 114WFProducts.getExcludedMarkerData = function (memberLevel) { 115 var excludedMarkerData = []; 116 117 if (!WFProducts.doesUserHaveAccessToFeature(7, memberLevel)) { 118 excludedMarkerData.push(100); 119 excludedMarkerData.push(101); 120 } 121 122 return excludedMarkerData; 123} 124 125WFProducts.test = function () { 126 for (i = 0; i < WFProducts.products.features.length; i++) { 127 var feature = WFProducts.products.features[i]; 128 console.debug(i + " - " + feature.title); 129 } 130} 131 132WFProducts.MapOverlays = [{ featureId: 6, overlayName: "nautical" }, { featureId: 18, overlayName: "sst" }, { featureId: 25, overlayName: "currents" }, {featureId: 7, overlayName: "nowcast"}]; 133WFProducts.ProfileFeature = 3; 134WFProducts.AlertFeature = 4; 135WFProducts.NauticalChartFeature = 6; 136WFProducts.NoAdsFeature = 16; 137 138/* View Descriptions returned from api */ 139WFProducts.regionalProducts = [ 140 { 141 "analytics_key": "Wind_Observations", 142 "regional_product_id": 1, 143 "title": "Wind Observations" 144 }, 145 { 146 "analytics_key": "Wind_Forecast", 147 "regional_product_id": 2, 148 "title": "Wind Forecast" 149 }, 150 { 151 "analytics_key": "Wind_Nowcast", 152 "regional_product_id": 3, 153 "title": "Wind Nowcast" 154 }, 155 { 156 "analytics_key": "General_Weather", 157 "regional_product_id": 4, 158 "title": "General Weather" 159 }, 160 { 161 "analytics_key": "Radar_Precipitation", 162 "regional_product_id": 5, 163 "title": "Radar / Precipitation" 164 }, 165 { 166 "analytics_key": "Satellite_Clouds", 167 "regional_product_id": 6, 168 "title": "Satellite / Clouds" 169 }, 170 { 171 "analytics_key": "Sea_Surface_Temperatures", 172 "regional_product_id": 7, 173 "title": "Sea Surface Temperatures" 174 }, 175 { 176 "analytics_key": "Radar_Wind", 177 "regional_product_id": 8, 178 "title": "Radar + Wind" 179 }, 180 { 181 "analytics_key": "Satellite_Wind", 182 "regional_product_id": 9, 183 "title": "Satellite + Wind" 184 }, 185 { 186 "analytics_key": "NWS_Marine_Forecast_Zones", 187 "regional_product_id": 10, 188 "title": "NWS Marine Forecast Zones" 189 }, 190 { 191 "analytics_key": "Daily_Briefings", 192 "regional_product_id": 11, 193 "title": "Daily Briefings" 194 }, 195 { 196 "analytics_key": "OnSite_Reports", 197 "regional_product_id": 12, 198 "title": "OnSite Reports" 199 }, 200 { 201 "analytics_key": "Sea_Surface_Current", 202 "regional_product_id": 13, 203 "title": "Sea Surface Current" 204 }, 205 { 206 "analytics_key": "Flow", 207 "regional_product_id": 18, 208 "title": "Flow" 209 }, 210 { 211 "analytics_key": "Wind_Gust", 212 "regional_product_id": 19, 213 "title": "Wind + Gust" 214 }, 215 { 216 "analytics_key": "Live_Wind_Flow", 217 "regional_product_id": 19, 218 "title": "Live Wind - Flow" 219 }, 220 { 221 "analytics_key": "Radar_Satellite", 222 "regional_product_id": 23, 223 "title": "Radar + Satellite" 224 } 225];
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.