blob: 26cb4822e233f594f907c66ec45541e3207c7597 [file] [log] [blame]
Akronb7aab872021-11-04 17:11:04 +01001/**
2 * Create a state manager object, that can deserialize and
3 * serialize states of associated states.
4 * At the moment this requires an element for serialization,
5 * but it may very well serialize in a cookie.
6 *
7 * @author Nils Diewald
8 */
9
10"use strict";
11
12define(['state'], function(stateClass) {
13
14 return {
15 // Create new state amanger.
16 // Expects an object with a value
17 // to contain the serialization of all states.
18 create : function (element) {
19 return Object.create(this)._init(element);
20 },
21
22
23 // Initialize state manager
24 _init : function (element) {
25 this._e = element;
26 this._states = {};
27 this._parse(element.value);
28
29 return this;
30 },
31
32
33 // Parse a value and populate states
34 _parse : function (value) {
35 if (value === undefined || value === '')
36 return;
37
38
39
40 this._states = JSON.parse(value);
41 },
42
43
44 // Return the string representation of all states
45 toString : function () {
46 return JSON.stringify(this._states);
47 },
48
49
50 // Update the query component for states
51 _update : function () {
52 this._e.value = this.toString();
53 },
54
55
56 // Create new state that is automatically associated
57 // with the state manager
58 newState : function (name, values) {
59
60 const t = this;
61 let s = stateClass.create(values);
62
63 // Load state
64 if (t._states[name] !== undefined) {
65 s.set(t._states[name]);
66 };
67
68 // Associate with dummy object
69 s.associate({
70 setState : function (value) {
71 t._states[name] = value;
72 t._update();
73 }
74 });
75
76 return s;
77 }
78 };
79});