PageSourceSearch

https://skredregistrering.no/Scripts/app/skredFilter/SkredFilter.all.js

js skredregistrering.no collected 2026-10-07 18:37:29 UTC 16,036 bytes, 361 lines download raw bytes

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.