1window.SkredFilter = window.SkredFilter || function (filterID, applyCallback, showFilters, autoUpdate, defaults) { 2 var self = this; 3 self.ID = ko.unwrap(filterID); 4 5 // type filter som skal vises 6 self.numResults = ko.observable("(leser...)"); 7 self.showFilters = ko.observable(ko.unwrap(showFilters) || [window.AppConfig.SKREDFILTER.TIDSROM, window.AppConfig.SKREDFILTER.SKREDTYPE]).ignore(); 8 9 self.showSkredType = ko.computed({ read: function () { return window.AppConfig.SKREDFILTER.hasSkredType(self.showFilters()); }, deferEvalation: true }).ignore(); 10 self.showSnoStorrelse = ko.computed({ read: function () { return window.AppConfig.SKREDFILTER.hasStorrelse(self.showFilters()); }, deferEvalation: true }).ignore(); 11 self.showTidsrom = ko.computed({ read: function () { return window.AppConfig.SKREDFILTER.hasTidsrom(self.showFilters()); }, deferEvalation: true }).ignore(); 12 self.showNoyaktighet = ko.computed({ read: function () { return window.AppConfig.SKREDFILTER.hasNoyaktighet(self.showFilters()); }, deferEvalation: true }).ignore(); 13 self.showSkredNavn = ko.computed({ read: function () { return window.AppConfig.SKREDFILTER.hasSkredNavn(self.showFilters()); }, deferEvalation: true }).ignore(); 14 self.showRegStatus = ko.computed({ read: function () { return window.AppConfig.SKREDFILTER.hasRegStatus(self.showFilters()); }, deferEvalation: true }).ignore(); 15 self.showAnsvarlig = ko.computed({ read: function () { return window.AppConfig.SKREDFILTER.hasAnsvarlig(self.showFilters()); }, deferEvalation: true }).ignore(); 16 self.showEndretAv = ko.computed({ read: function () { return window.AppConfig.SKREDFILTER.hasEndretAv(self.showFilters()); }, deferEvalation: true }).ignore(); 17 self.showAntall = ko.computed({ read: function () { return window.AppConfig.SKREDFILTER.hasAntall(self.showFilters()); }, deferEvalation: true }).ignore(); 18 self.showMapExtent = ko.computed({ read: function () { return window.AppConfig.SKREDFILTER.hasMapExtent(self.showFilters()); }, deferEvalation: true }).ignore(); 19 20 // callback for knappen "Bruk" 21 self.autoUpdate = autoUpdate; 22 self.callback = applyCallback; 23 self.isFronPage = window.AppConfig.SKREDFILTER.NAMES.FRONTPAGE === self.ID; 24 25 // data 26 self.skredType = ko.observable("").setOptions("dSkred_SkredType").ignoreEmpty(); 27 self.snoRelativStr = ko.observable("").setOptions("dSkred_RelativStorrelse").ignoreEmpty(); 28 self.fraDato = ko.observable(new Date().addDays(window.AppConfig.SKREDFILTER.AntallDagerIStandardTidsFilter)).ignoreEmpty(); 29 self.tilDato = ko.observable(new Date()).ignoreEmpty(); 30 self.useTidFilter = ko.observable(true).ignoreEmpty(); 31 self.filterType = ko.observable(window.AppConfig.TidFilterTyper.Hendelse).ignoreEmpty(); 32 self.useNoyaktighet = ko.observable(false).ignoreEmpty(); 33 34 self.skredNavn = ko.observable().ignoreEmpty().tooltip("Filtrer listen etter skrednavn. Alle skred som inneholder teksten tas med\n: \"Dale\" gir feks \"Dalene\", \"Djupedalen\", \"Hølledale\", osv"); 35 self.regStatus = ko.observable("").setOptions("dSkred_RegStatus").ignoreEmpty().extend({ rateLimit: 500 }); 36 self.advanced = ko.observable("").setOptions(self.isFronPage ? "Advanced_Filters_fp" : "Advanced_Filters", self.isFronPage ? true : false, "Egenskaper").ignoreEmpty().extend({ rateLimit: 500 }).tooltip("Filtrer listen etter egenskaper ved hendelsen"); 37 self.ansvarlig = ko.observable("").setOptions("Ansvarlig").ignoreEmpty(); 38 self.endretAv = ko.observable("").ignoreEmpty(); 39 self.rows = ko.observable(15).ignoreEmpty(); 40 self.polygon = ko.observable(null); 41 self.hasFilterPolygon = ko.computed(function () { return !!self.polygon(); }).ignore(); 42 self.offset = ko.observable(0); 43 44 self.startDrawFilterPolygon = function () { 45 if (!self.showMapExtent()) { return; } 46 ko.postbox.publish(window.AppConfig.Events.Map_StartFilterPolygon, self.ID); 47 }; 48 self.clearFilterPolygon = function () { 49 self.polygon(null); 50 ko.postbox.publish(window.AppConfig.Events.Map_ClearFilterPolygon, self.ID); 51 self.checkApplyFilter(); 52 }; 53 54 self.formattedRegStatus = ko.computed({ 55 read: function () { 56 if (!self.regStatus() || !self.regStatus()[0] || self.showRegStatus().length === 1 && self.showRegStatus()[0] === window.WebConfig.FilterAllText) { 57 return window.WebConfig.FilterAllText; 58 } 59 return "" + self.regStatus()[0] + "" + (self.regStatus().length > 1 ? " og " + (self.regStatus().length - 1) + " til" : ""); 60 }, deferEvaluation: false 61 }).extend({ "notify": "always" }); 62 self.formattedAdvanced = ko.computed({ 63 read: function () { 64 if (!self.advanced() || !self.advanced()[0] || self.showRegStatus().length === 1 && self.showRegStatus()[0] === window.WebConfig.FilterAdvancedText) { 65 return window.WebConfig.FilterAdvancedText; 66 } 67 return "" + self.advanced()[0] + "" + (self.advanced().length > 1 ? " + " + (self.advanced().length - 1) : ""); 68 }, deferEvaluation: false 69 }).extend({ "notify": "always" }); 70 // temp bindings - tracker gammel og ny verdi 71 self._useTidFilter = ko.observable(true).ignore(); 72 self._filterType = ko.observable(window.AppConfig.TidFilterTyper.Hendelse).ignore(); 73 self._useNoyaktighet = ko.observable(false).ignore(); 74 self._fraDato = ko.observable(self.fraDato()).ignore(); 75 self._tilDato = ko.observable(self.tilDato()).ignore(); 76 77 // "Bruk" 78 self.checkApplyFilter = function (data, event) { 79 // check fix for regStatus 80 if (self.regStatus().length > 1) { 81 var filtered = ko.utils.arrayFilter(self.regStatus(), function (element) { 82 try { 83 var list = DomeneLister.ViewModel.dListe("DSKRED_regStatus"); 84 if (!list || list.length < 1) return; 85 return ko.utils.arrayFirst(list.Options(), function (item) { return item.Text === element; }, self); 86 } catch (error) { 87 _log.error(error); 88 } 89 return; 90 }); 91 if (filtered.length !== self.regStatus().length) { 92 self.regStatus(filtered); 93 return; 94 } 95 } 96 if (self.advanced().length > 1) { 97 var filtered2 = ko.utils.arrayFilter(self.advanced(), function (element) { 98 try { 99 var list = DomeneLister.ViewModel.dListe("ADVANCED_FILTERS"); 100 if (!list || list.length < 1) return; 101 return ko.utils.arrayFirst(list.Options(), function (item) { return item.Text === element; }, self); 102 } catch (error) { 103 _log.error(error); 104 } 105 return; 106 }); 107 if (filtered2.length !== self.advanced().length) { 108 self.advanced(filtered2); 109 return; 110 } 111 } 112 if (self.autoUpdate) { 113 return self.applyFilter(data, event); 114 } 115 116 }; 117 118 self.applyFilter = function (data, event) { 119 120 if (self.hasChange()) { 121 self.useTidFilter(self._useTidFilter()); 122 self.useNoyaktighet(self._useNoyaktighet()); 123 if (self.useTidFilter()) { 124 if (ko.unwrap(self._fraDato)) { 125 self._fraDato().setHours(0); self._fraDato().setMinutes(0); self._fraDato().setSeconds(0); 126 self.fraDato(self._fraDato()); 127 } 128 if (ko.unwrap(self._tilDato)) { 129 self._tilDato().setHours(23); self._tilDato().setMinutes(59); self._tilDato().setSeconds(59); 130 self.tilDato(self._tilDato()); 131 } 132 if (ko.unwrap(self._filterType)) { 133 self.filterType(self._filterType()); 134 } 135 } 136 137 if (event) { 138 $(event.currentTarget).dropdown("toggle"); 139 } 140 141 self.offset(0); 142 143 if (self.callback) { self.callback(); } 144 145 self.publish(); 146 } 147 148 }; 149 // "Avbryt" 150 self.cancelFilter = function (data, event) { 151 self._useTidFilter(self.useTidFilter()); 152 self._useNoyaktighet(self.useNoyaktighet()); 153 self._fraDato(self.fraDato()); 154 self._tilDato(self.tilDato()); 155 self._filterType(self.filterType()); 156 157 158 if (event) { 159 $(event.currentTarget).dropdown("toggle"); 160 } 161 }; 162 163 self.publish = function () { 164 var payload = { 165 ID: self.ID, 166 167 skredType: ko.unwrap(self.skredType), 168 snoRelativStr: ko.unwrap(self.snoRelativStr), 169 170 fraDato: ko.unwrap(self._fraDato), 171 tilDato: ko.unwrap(self._tilDato), 172 useTidFilter: ko.unwrap(self._useTidFilter), 173 filterType: ko.unwrap(self._filterType), 174 useNoyaktighet: ko.unwrap(self._useNoyaktighet), 175 176 skredNavn: ko.unwrap(self.skredNavn), 177 regStatus: ko.unwrap(self.regStatus), 178 advanced: ko.unwrap(self.advanced), 179 ansvarlig: ko.unwrap(self.ansvarlig), 180 endretAv: ko.unwrap(self.endretAv), 181 rows: ko.unwrap(self.rows) 182 }; 183 ko.postbox.publish(window.AppConfig.Events.ApplyFilter, payload); 184 }; 185 186 self.filterUpdate = function (other) { 187 if (other.ID === self.ID || other.ID !== self.syncTo) return; 188 189 if (self.showSkredType) { 190 if (self.skredType() !== other.skredType) 191 self.skredType(other.skredType); 192 } 193 if (self.snoRelativStr() !== other.snoRelativStr) { 194 self.snoRelativStr(other.snoRelativStr) 195 } 196 if (self.showTidsrom) { 197 if (self._useTidFilter() !== other.useTidFilter) 198 self._useTidFilter(other.useTidFilter); 199 if (self._fraDato() !== other.fraDato) 200 self._fraDato(other.fraDato); 201 if (self._tilDato() !== other.tilDato) 202 self._tilDato(other.tilDato); 203 if (self._filterType !== other.filterType) 204 self._filterType(other.filterType); 205 } 206 if (self.showSkredNavn) { 207 if (self.skredNavn() !== other.skredNavn) 208 self.skredNavn(other.skredNavn); 209 } 210 if (self.showAnsvarlig) { 211 if (self.ansvarlig() !== other.ansvarlig) 212 self.ansvarlig(other.ansvarlig); 213 } 214 if (self.showEndretAv) { 215 if (self.endretAv() !== other.endretAv) 216 self.endretAv(other.endretAv); 217 } 218 if (self.showAntall) { 219 if (self.rows() !== other.rows) 220 self.rows(other.rows); 221 } 222 }; 223
224 ko.postbox.subscribe(window.AppConfig.Events.ApplyFilter, self.filterUpdate); 225 226 self.showTempSkred = function () { 227 228 if (!self.regStatus() || 229 self.regStatus().length === 1 && !self.regStatus()[0]) { 230 return true; 231 } 232 if (self.regStatus() && ko.utils.arrayIndexOf(self.regStatus(), "Kladd") >= 0) { 233 return true; 234 } 235 return false; 236 }; 237 238 // returner "Alle" for NULL/tomt i skredtype 239 self.valgtSkredType = ko.computed({ 240 read: function () { 241 var t = self.skredType.options().getTextForValue(self.skredType()); 242 return t ? t : window.AppConfig.SKREDFILTER.ALL; 243 }, deferEvaluation: true 244 }).ignore(); 245 self.valgtSkredTypeObservable = ko.computed({ 246 read: function () { 247 return self.skredType; 248 } 249 }).ignore(); 250 251 self.valgtSnoStorrelse = ko.computed({ 252 read: function () { 253 var t = self.snoRelativStr.options().getTextForValue(self.snoRelativStr()); 254 return t ? t : window.AppConfig.SKREDFILTER.ALL; 255 }, deferEvaluation: true 256 }).ignore(); 257 self.valgtSnoStorrelseObservable = ko.computed({ 258 read: function () { 259 return self.snoRelativStr; 260 } 261 }).ignore(); 262 // kjør typeendreinger direkte 263 264 self.skredType.subscribe(self.checkApplyFilter); 265 self.snoRelativStr.subscribe(self.checkApplyFilter); 266 self.skredNavn.subscribe(self.checkApplyFilter); 267 self.endretAv.subscribe(self.checkApplyFilter); 268 self.ansvarlig.subscribe(self.checkApplyFilter); 269 self.regStatus.subscribe(self.checkApplyFilter); 270 self.advanced.subscribe(self.checkApplyFilter); 271 self.rows.subscribe(self.checkApplyFilter); 272 273 ko.postbox.subscribe(window.AppConfig.Events.Map_FilterPolygonCapture, function (data) { 274 if (data && data.filterID === self.ID) { 275 self.polygon(data.points); 276 self.checkApplyFilter(); 277 } 278 }); 279 280 self.nextPage = function () { 281 self.offset(self.offset() + (ko.unwrap(self.rows) || 15)
281); 282 if (self.callback) { self.callback(); } 283 }; 284 self.prevPage = function () { 285 var newOffset = self.offset() - (ko.unwrap(self.rows) || 15); 286 self.offset(newOffset < 0 ? 0 : newOffset); 287 if (self.callback) { self.callback(); } 288 }; 289 self.hasNextPage = ko.computed({ 290 read: function () { 291 var total = parseInt(self.numResults(), 10); 292 if (isNaN(total)) { return false; } 293 return self.offset() + (ko.unwrap(self.rows) || 15) < total; 294 } 295 }).ignore(); 296 self.hasPrevPage = ko.computed({ 297 read: function () { return self.offset() > 0; } 298 }).ignore(); 299 self.currentPage = ko.computed({ 300 read: function () { return Math.floor(self.offset() / (ko.unwrap(self.rows) || 15)); } 301 }).ignore(); 302 303 // fjern .ignore() elementer fra serialisering 304 self.toJSON = function () { 305 return window.Model.fn.JSONReplacer(this, self); 306 }; 307 308 // lytt på endringer i filtre 309 self.hasChange = ko.observable(false).ignore(); 310 self.isAvalancheSelected = ko.computed({ 311 read: function () { 312 var t = ko.unwrap(self.skredType); 313 if (t) { 314 var hasVal = ko.unwrap(t.Val); 315 if (hasVal) { 316 return t.Val >= 130 && t.Val < 140 || t.Val == 151; 317 } 318 } 319 }, deferEvaluation: true 320 }).ignore(); 321 self.changeDetected = function (parents, child, item) { 322 if (item) { 323 self.hasChange(true); 324 } else { 325 if (child && child.oldValues && child.oldValues[0] !== child()) { 326 self.hasChange(true); 327 } 328 } 329 }; 330 331 // bruk ko.reactor for å tracke endringer i attributter (som ikke er ignorerte) 332 ko.observable().ignore().watch(self, { 333 depth: -1, 334 keepOldValues: 1, 335 mutable: true 336 }, self.changeDetected); 337 338 if (defaults) { 339 if (defaults.skredType) { self.skredType(defaults.skredType); } 340 if (defaults.snoRelativStr) { self.snoRelativStr(defaults.snoRelativStr); } 341 if (defaults.regStatus) { 342 self.regStatus(defaults.regStatus); 343 if (!self.autoUpdate) { 344 self.regStatus.valueHasMutated(); 345 } 346 } 347 if (defaults.advanced) { 348 self.advanced(defaults.advanced); 349 if (!self.autoUpdate) { 350 self.advanced.valueHasMutated(); 351 } 352 } 353 if (defaults.ansvarlig) { self.ansvarlig(defaults.ansvarlig); } 354 if (defaults.endretAv) { self.endretAv(defaults.endretAv); } 355 if (defaults.rows) { self.rows(defaults.rows); } 356 if (defaults.syncTo) { self.syncTo = ko.unwrap(defaults.syncTo); } 357 } 358 359 return self; 360 361};
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.