author | Sylvain Thénault <sylvain.thenault@logilab.fr> |
Thu, 26 Aug 2010 11:35:02 +0200 | |
branch | stable |
changeset 6160 | 12038ca95f0f |
parent 5909 | 9af8ac182f53 |
child 6372 | 4c3e2a92e340 |
permissions | -rw-r--r-- |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
1 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
2 |
* Functions dedicated to widgets. |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
3 |
* |
0 | 4 |
* :organization: Logilab |
5767
1d811df051c2
[packaging] MANIFEST.in cleanups, update js/css copyright, remove no more used files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4901
diff
changeset
|
5 |
* :copyright: 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
0 | 6 |
* :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
7 |
* |
|
8 |
* |
|
9 |
*/ |
|
10 |
||
11 |
// widget namespace |
|
12 |
Widgets = {}; |
|
13 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
14 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
15 |
* .. function:: buildWidget(wdgnode) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
16 |
* |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
17 |
* this function takes a DOM node defining a widget and |
0 | 18 |
* instantiates / builds the appropriate widget class |
19 |
*/ |
|
20 |
function buildWidget(wdgnode) { |
|
21 |
var wdgclass = Widgets[wdgnode.getAttribute('cubicweb:wdgtype')]; |
|
22 |
if (wdgclass) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
23 |
var wdg = new wdgclass(wdgnode); |
0 | 24 |
} |
25 |
} |
|
26 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
27 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
28 |
* .. function:: buildWidgets(root) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
29 |
* |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
30 |
* This function is called on load and is in charge to build |
0 | 31 |
* JS widgets according to DOM nodes found in the page |
32 |
*/ |
|
33 |
function buildWidgets(root) { |
|
34 |
root = root || document; |
|
35 |
jQuery(root).find('.widget').each(function() { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
36 |
if (this.getAttribute('cubicweb:loadtype') == 'auto') { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
37 |
buildWidget(this); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
38 |
} |
0 | 39 |
}); |
40 |
} |
|
41 |
||
42 |
// we need to differenciate cases where initFacetBoxEvents is called |
|
43 |
// with one argument or without any argument. If we use `initFacetBoxEvents` |
|
44 |
// as the direct callback on the jQuery.ready event, jQuery will pass some argument |
|
45 |
// of his, so we use this small anonymous function instead. |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
46 |
jQuery(document).ready(function() { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
47 |
buildWidgets(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
48 |
}); |
0 | 49 |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
50 |
function postJSON(url, data, callback) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
51 |
return jQuery.post(url, data, callback, 'json'); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
52 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
53 |
|
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
54 |
function getJSON(url, data, callback) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
55 |
return jQuery.get(url, data, callback, 'json'); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
56 |
} |
0 | 57 |
|
58 |
Widgets.SuggestField = defclass('SuggestField', null, { |
|
59 |
__init__: function(node, options) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
60 |
var multi = node.getAttribute('cubicweb:multi') || "no"; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
61 |
options = options || {}; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
62 |
options.multiple = (multi == "yes") ? true: false; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
63 |
var dataurl = node.getAttribute('cubicweb:dataurl'); |
0 | 64 |
var method = postJSON; |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
65 |
if (options.method == 'get') { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
66 |
method = function(url, data, callback) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
67 |
// We can't rely on jQuery.getJSON because the server |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
68 |
// might set the Content-Type's response header to 'text/plain' |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
69 |
jQuery.get(url, data, function(response) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
70 |
callback(cw.evalJSON(response)); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
71 |
}); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
72 |
}; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
73 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
74 |
var self = this; // closure |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
75 |
method(dataurl, null, function(data) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
76 |
// in case we received a list of couple, we assume that the first |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
77 |
// element is the real value to be sent, and the second one is the |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
78 |
// value to be displayed |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
79 |
if (data.length && data[0].length == 2) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
80 |
options.formatItem = function(row) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
81 |
return row[1]; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
82 |
}; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
83 |
self.hideRealValue(node); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
84 |
self.setCurrentValue(node, data); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
85 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
86 |
jQuery(node).autocomplete(data, options); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
87 |
}); |
0 | 88 |
}, |
89 |
||
90 |
hideRealValue: function(node) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
91 |
var hidden = INPUT({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
92 |
'type': "hidden", |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
93 |
'name': node.name, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
94 |
'value': node.value |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
95 |
}); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
96 |
node.parentNode.appendChild(hidden); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
97 |
// remove 'name' attribute from visible input so that it is not submitted |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
98 |
// and set correct value in the corresponding hidden field |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
99 |
jQuery(node).removeAttr('name').bind('result', function(_, row, _) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
100 |
hidden.value = row[0]; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
101 |
}); |
0 | 102 |
}, |
103 |
||
104 |
setCurrentValue: function(node, data) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
105 |
// called when the data is loaded to reset the correct displayed |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
106 |
// value in the visible input field (typically replacing an eid |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
107 |
// by a displayable value) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
108 |
var curvalue = node.value; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
109 |
if (!node.value) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
110 |
return; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
111 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
112 |
for (var i = 0, length = data.length; i < length; i++) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
113 |
var row = data[i]; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
114 |
if (row[0] == curvalue) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
115 |
node.value = row[1]; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
116 |
return; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
117 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
118 |
} |
0 | 119 |
} |
120 |
}); |
|
121 |
||
122 |
Widgets.StaticFileSuggestField = defclass('StaticSuggestField', [Widgets.SuggestField], { |
|
123 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
124 |
__init__: function(node) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
125 |
Widgets.SuggestField.__init__(this, node, { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
126 |
method: 'get' |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
127 |
}); |
0 | 128 |
} |
129 |
||
130 |
}); |
|
131 |
||
132 |
Widgets.RestrictedSuggestField = defclass('RestrictedSuggestField', [Widgets.SuggestField], { |
|
133 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
134 |
__init__: function(node) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
135 |
Widgets.SuggestField.__init__(this, node, { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
136 |
mustMatch: true |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
137 |
}); |
0 | 138 |
} |
139 |
||
140 |
}); |
|
4901
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
141 |
//remote version of RestrictedSuggestField |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
142 |
Widgets.LazySuggestField = defclass('LazySuggestField', [Widgets.SuggestField], { |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
143 |
__init__: function(node, options) { |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
144 |
var self = this; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
145 |
var multi = "no"; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
146 |
options = options || {}; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
147 |
options.max = 50; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
148 |
options.delay = 50; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
149 |
options.cacheLength = 0; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
150 |
options.mustMatch = true; |
4901
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
151 |
// multiple selection not supported yet (still need to formalize correctly |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
152 |
// initial values / display values) |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
153 |
var initialvalue = cw.evalJSON(node.getAttribute('cubicweb:initialvalue') || 'null'); |
4901
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
154 |
if (!initialvalue) { |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
155 |
initialvalue = node.value; |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
156 |
} |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
157 |
options = jQuery.extend({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
158 |
dataType: 'json', |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
159 |
multiple: (multi == "yes") ? true: false, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
160 |
parse: this.parseResult |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
161 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
162 |
options); |
4901
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
163 |
var dataurl = node.getAttribute('cubicweb:dataurl'); |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
164 |
// remove 'name' from original input and add the hidden one that will |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
165 |
// store the actual value |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
166 |
var hidden = INPUT({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
167 |
'type': "hidden", |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
168 |
'name': node.name, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
169 |
'value': initialvalue |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
170 |
}); |
4901
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
171 |
node.parentNode.appendChild(hidden); |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
172 |
jQuery(node).bind('result', { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
173 |
hinput: hidden, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
174 |
input: node |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
175 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
176 |
self.hideRealValue).removeAttr('name').autocomplete(dataurl, options); |
4901
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
177 |
}, |
0 | 178 |
|
4901
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
179 |
hideRealValue: function(evt, data, value) { |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
180 |
if (!value) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
181 |
value = ""; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
182 |
} |
4901
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
183 |
evt.data.hinput.value = value; |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
184 |
}, |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
185 |
|
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
186 |
/* |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
187 |
* @param data: a list of couple (value, label) to fill the suggestion list, |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
188 |
* (returned by CW through AJAX) |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
189 |
*/ |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
190 |
parseResult: function(data) { |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
191 |
var parsed = []; |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
192 |
for (var i = 0; i < data.length; i++) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
193 |
var value = '' + data[i][0]; // a string is required later by jquery.autocomplete.js |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
194 |
var label = data[i][1]; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
195 |
parsed[parsed.length] = { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
196 |
data: [label], |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
197 |
value: value, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
198 |
result: label |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
199 |
}; |
4901
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
200 |
}; |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
201 |
return parsed; |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
202 |
} |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
203 |
|
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
204 |
}); |
19ecbbc4f633
LazySuggestField : remote version of RestrictedSuggestField
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4738
diff
changeset
|
205 |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
206 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
207 |
* .. class:: Widgets.SuggestForm |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
208 |
* |
0 | 209 |
* suggestform displays a suggest field and associated validate / cancel buttons |
210 |
* constructor's argumemts are the same that BaseSuggestField widget |
|
211 |
*/ |
|
212 |
Widgets.SuggestForm = defclass("SuggestForm", null, { |
|
213 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
214 |
__init__: function(inputid, initfunc, varargs, validatefunc, options) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
215 |
this.validatefunc = validatefunc || noop; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
216 |
this.sgfield = new Widgets.BaseSuggestField(inputid, initfunc, varargs, options); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
217 |
this.oklabel = options.oklabel || 'ok'; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
218 |
this.cancellabel = options.cancellabel || 'cancel'; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
219 |
bindMethods(this); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
220 |
connect(this.sgfield, 'validate', this, this.entryValidated); |
0 | 221 |
}, |
222 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
223 |
show: function(parentnode) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
224 |
var sgnode = this.sgfield.builddom(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
225 |
var buttons = DIV({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
226 |
'class': "sgformbuttons" |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
227 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
228 |
[A({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
229 |
'href': "javascript: noop();", |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
230 |
'onclick': this.onValidateClicked |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
231 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
232 |
this.oklabel), ' / ', A({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
233 |
'href': "javascript: noop();", |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
234 |
'onclick': this.destroy |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
235 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
236 |
escapeHTML(this.cancellabel))]); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
237 |
var formnode = DIV({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
238 |
'class': "sgform" |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
239 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
240 |
[sgnode, buttons]); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
241 |
appendChildNodes(parentnode, formnode); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
242 |
this.sgfield.textinput.focus(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
243 |
this.formnode = formnode; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
244 |
return formnode; |
0 | 245 |
}, |
246 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
247 |
destroy: function() { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
248 |
signal(this, 'destroy'); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
249 |
this.sgfield.destroy(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
250 |
removeElement(this.formnode); |
0 | 251 |
}, |
252 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
253 |
onValidateClicked: function() { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
254 |
this.validatefunc(this, this.sgfield.taglist()); |
0 | 255 |
}, |
256 |
/* just an indirection to pass the form instead of the sgfield as first parameter */ |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
257 |
entryValidated: function(sgfield, taglist) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
258 |
this.validatefunc(this, taglist); |
0 | 259 |
} |
260 |
}); |
|
261 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
262 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
263 |
* .. function:: toggleTree(event) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
264 |
* |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
265 |
* called when the use clicks on a tree node |
0 | 266 |
* - if the node has a `cubicweb:loadurl` attribute, replace the content of the node |
267 |
* by the url's content. |
|
268 |
* - else, there's nothing to do, let the jquery plugin handle it. |
|
269 |
*/ |
|
270 |
function toggleTree(event) { |
|
271 |
var linode = jQuery(this); |
|
272 |
var url = linode.attr('cubicweb:loadurl'); |
|
273 |
if (url) { |
|
4738
6cca4f602486
fix open/close/open subnode bug #730709
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3079
diff
changeset
|
274 |
linode.find('ul.placeholder').remove(); |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
275 |
linode.loadxhtml(url, { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
276 |
callback: function(domnode) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
277 |
linode.removeAttr('cubicweb:loadurl'); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
278 |
jQuery(domnode).treeview({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
279 |
toggle: toggleTree, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
280 |
prerendered: true |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
281 |
}); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
282 |
return null; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
283 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
284 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
285 |
'post', 'append'); |
0 | 286 |
} |
287 |
} |
|
288 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
289 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
290 |
* .. class:: Widgets.TimelineWidget |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
291 |
* |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
292 |
* widget based on SIMILE's timeline widget |
0 | 293 |
* http://code.google.com/p/simile-widgets/ |
294 |
* |
|
295 |
* Beware not to mess with SIMILE's Timeline JS namepsace ! |
|
296 |
*/ |
|
297 |
||
298 |
Widgets.TimelineWidget = defclass("TimelineWidget", null, { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
299 |
__init__: function(wdgnode) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
300 |
var tldiv = DIV({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
301 |
id: "tl", |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
302 |
style: 'height: 200px; border: 1px solid #ccc;' |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
303 |
}); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
304 |
wdgnode.appendChild(tldiv); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
305 |
var tlunit = wdgnode.getAttribute('cubicweb:tlunit') || 'YEAR'; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
306 |
var eventSource = new Timeline.DefaultEventSource(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
307 |
var bandData = { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
308 |
eventPainter: Timeline.CubicWebEventPainter, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
309 |
eventSource: eventSource, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
310 |
width: "100%", |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
311 |
intervalUnit: Timeline.DateTime[tlunit.toUpperCase()], |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
312 |
intervalPixels: 100 |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
313 |
}; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
314 |
var bandInfos = [Timeline.createBandInfo(bandData)]; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
315 |
var tl = Timeline.create(tldiv, bandInfos); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
316 |
var loadurl = wdgnode.getAttribute('cubicweb:loadurl'); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
317 |
Timeline.loadJSON(loadurl, function(json, url) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
318 |
eventSource.loadJSON(json, url); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
319 |
}); |
0 | 320 |
|
321 |
} |
|
322 |
}); |
|
323 |
||
324 |
Widgets.TemplateTextField = defclass("TemplateTextField", null, { |
|
325 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
326 |
__init__: function(wdgnode) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
327 |
this.variables = jQuery(wdgnode).attr('cubicweb:variables').split(','); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
328 |
this.options = { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
329 |
name: wdgnode.getAttribute('cubicweb:inputid'), |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
330 |
rows: wdgnode.getAttribute('cubicweb:rows') || 40, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
331 |
cols: wdgnode.getAttribute('cubicweb:cols') || 80 |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
332 |
}; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
333 |
// this.variableRegexp = /%\((\w+)\)s/; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
334 |
this.errorField = DIV({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
335 |
'class': "errorMessage" |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
336 |
}); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
337 |
this.textField = TEXTAREA(this.options); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
338 |
jQuery(this.textField).bind('keyup', { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
339 |
'self': this |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
340 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
341 |
this.highlightInvalidVariables); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
342 |
jQuery('#substitutions').prepend(this.errorField); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
343 |
jQuery('#substitutions .errorMessage').hide(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
344 |
wdgnode.appendChild(this.textField); |
0 | 345 |
}, |
346 |
||
347 |
/* signal callbacks */ |
|
348 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
349 |
highlightInvalidVariables: function(event) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
350 |
var self = event.data.self; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
351 |
var text = self.textField.value; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
352 |
var unknownVariables = []; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
353 |
var it = 0; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
354 |
var group = null; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
355 |
var variableRegexp = /%\((\w+)\)s/g; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
356 |
// emulates rgx.findAll() |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
357 |
while (group = variableRegexp.exec(text)) { |
5909
9af8ac182f53
[javascript] fix some javascript errors and remove some deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5774
diff
changeset
|
358 |
if (!$.inArray(group[1], self.variables)) { |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
359 |
unknownVariables.push(group[1]); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
360 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
361 |
it++; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
362 |
if (it > 5) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
363 |
break; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
364 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
365 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
366 |
var errText = ''; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
367 |
if (unknownVariables.length) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
368 |
errText = "Detected invalid variables : " + unknownVariables.join(', '); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
369 |
jQuery('#substitutions .errorMessage').show(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
370 |
} else { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
371 |
jQuery('#substitutions .errorMessage').hide(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
372 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
373 |
self.errorField.innerHTML = errText; |
0 | 374 |
} |
375 |
||
376 |
}); |
|
377 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
378 |
cw.widgets = { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
379 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
380 |
* .. function:: insertText(text, areaId) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
381 |
* |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
382 |
* inspects textarea with id `areaId` and replaces the current selected text |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
383 |
* with `text`. Cursor is then set at the end of the inserted text. |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
384 |
*/ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
385 |
insertText: function (text, areaId) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
386 |
var textarea = jQuery('#' + areaId); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
387 |
if (document.selection) { // IE |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
388 |
var selLength; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
389 |
textarea.focus(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
390 |
var sel = document.selection.createRange(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
391 |
selLength = sel.text.length; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
392 |
sel.text = text; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
393 |
sel.moveStart('character', selLength - text.length); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
394 |
sel.select(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
395 |
} else if (textarea.selectionStart || textarea.selectionStart == '0') { // mozilla |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
396 |
var startPos = textarea.selectionStart; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
397 |
var endPos = textarea.selectionEnd; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
398 |
// insert text so that it replaces the [startPos, endPos] part |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
399 |
textarea.value = textarea.value.substring(0, startPos) + text + textarea.value.substring(endPos, textarea.value.length); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
400 |
// set cursor pos at the end of the inserted text |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
401 |
textarea.selectionStart = textarea.selectionEnd = startPos + text.length; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
402 |
textarea.focus(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
403 |
} else { // safety belt for other browsers |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
404 |
textarea.value += text; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
405 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5453
diff
changeset
|
406 |
} |
5699
f4f6ee3af50b
[javascript] move CubicWeb object declaration to cubicweb.js, remove CubicWeb.provide/require, use cw instead of CubicWeb
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
5658
diff
changeset
|
407 |
}; |