1 | // function to open the popup window |
---|
2 | function getOrderIndex(currnode) { |
---|
3 | if (typeof(dataGridFieldFunctions) == "object") { |
---|
4 | var rows = dataGridFieldFunctions.getWidgetRows(currnode); |
---|
5 | var row = dataGridFieldFunctions.getParentElementById(currnode, "datagridwidget-row"); |
---|
6 | if(row == null) { |
---|
7 | alert("Couldn't find DataGridWidget row"); |
---|
8 | return; |
---|
9 | } |
---|
10 | |
---|
11 | var idx = null |
---|
12 | |
---|
13 | // We can't use nextSibling because of blank text nodes in some browsers |
---|
14 | // Need to find the index of the row |
---|
15 | for(var t = 0; t < rows.length; t++) { |
---|
16 | if(rows[t] == row) { |
---|
17 | idx = t; |
---|
18 | break; |
---|
19 | } |
---|
20 | } |
---|
21 | |
---|
22 | // Abort if the current row wasn't found |
---|
23 | if(idx == null) |
---|
24 | return; |
---|
25 | return idx; |
---|
26 | } |
---|
27 | return; |
---|
28 | } |
---|
29 | |
---|
30 | function getOrderedElement(widget_id, order_idx) { |
---|
31 | // First get first element for the current field |
---|
32 | var element=document.getElementById(widget_id); |
---|
33 | |
---|
34 | // If it is about DataGridField use it to chose correct element |
---|
35 | if (typeof(dataGridFieldFunctions) == "object" && order_idx >= 0) { |
---|
36 | var rows = dataGridFieldFunctions.getWidgetRows(element); |
---|
37 | if (rows.length >= order_idx) { |
---|
38 | var row = rows[order_idx] |
---|
39 | var inputs = row.getElementsByTagName("input") |
---|
40 | for (var i=0;i<=inputs.length;i++) { |
---|
41 | if (inputs[i].id == widget_id) { |
---|
42 | element = inputs[i]; |
---|
43 | break; |
---|
44 | } |
---|
45 | } |
---|
46 | } |
---|
47 | } |
---|
48 | return element; |
---|
49 | } |
---|
50 | |
---|
51 | |
---|
52 | function referencebrowser_openBrowser(path, fieldName, at_url, fieldRealName, fieldTitleName, fieldLinkName, currnode) { |
---|
53 | var url = path + '/referencebrowser_popup?fieldName=' + fieldName + '&fieldRealName=' + fieldRealName +'&at_url=' + at_url; |
---|
54 | |
---|
55 | var order_idx = getOrderIndex(currnode); |
---|
56 | url += (order_idx)? '&order_idx=' + order_idx: ""; |
---|
57 | url += (typeof(fieldTitleName) != 'undefined')? '&fieldTitleName=' + fieldTitleName: ""; |
---|
58 | url += (typeof(fieldLinkName) != 'undefined')? '&fieldLinkName=' + fieldLinkName: ""; |
---|
59 | |
---|
60 | atrefpopup = window.open(url, 'referencebrowser_popup','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=550'); |
---|
61 | } |
---|
62 | |
---|
63 | // function for Array detecting |
---|
64 | function typeOf(value) { |
---|
65 | var s = typeof value; |
---|
66 | if (s === 'object') { |
---|
67 | if (value) { |
---|
68 | if (value instanceof Array) { |
---|
69 | s = 'array'; |
---|
70 | } |
---|
71 | } else { |
---|
72 | s = 'null'; |
---|
73 | } |
---|
74 | } |
---|
75 | return s; |
---|
76 | } |
---|
77 | |
---|
78 | // function to return a reference from the popup window back into the widget |
---|
79 | function referencebrowser_setReference(widget_id, uid, label, multi, order_idx, widget_title_id, link_title, widget_link_id, link_path) |
---|
80 | { |
---|
81 | if (order_idx >= 0) { |
---|
82 | // process ReferenceDataGridField |
---|
83 | element=getOrderedElement(widget_id, order_idx); |
---|
84 | element.value=uid; |
---|
85 | element=getOrderedElement(widget_title_id, order_idx); |
---|
86 | element.value=link_title; |
---|
87 | element=getOrderedElement(widget_link_id, order_idx); |
---|
88 | element.value=link_path; |
---|
89 | } else if (multi==0) { |
---|
90 | // differentiate between the single and mulitselect widget |
---|
91 | // since the single widget has an extra label field. |
---|
92 | element=document.getElementById(widget_id); |
---|
93 | label_element=document.getElementById(widget_id + '_label'); |
---|
94 | element.value=uid; |
---|
95 | label_element.value=label; |
---|
96 | } else { |
---|
97 | // check if the item isn't already in the list |
---|
98 | var current_values = cssQuery('#' + widget_id + ' input'); |
---|
99 | for (var i=0; i < current_values.length; i++) { |
---|
100 | if (current_values[i].value == uid) { |
---|
101 | return false; |
---|
102 | } |
---|
103 | } |
---|
104 | // now add the new item |
---|
105 | list=document.getElementById(widget_id); |
---|
106 | li = document.createElement('li'); |
---|
107 | label_element = document.createElement('label'); |
---|
108 | input = document.createElement('input'); |
---|
109 | input.type = 'checkbox'; |
---|
110 | input.value = uid; |
---|
111 | input.checked = true; |
---|
112 | input.name = widget_id + ':list'; |
---|
113 | label_element.appendChild(input); |
---|
114 | label_element.appendChild(document.createTextNode(label)); |
---|
115 | li.appendChild(label_element); |
---|
116 | list.appendChild(li); |
---|
117 | // fix on IE7 - check *after* adding to DOM |
---|
118 | input.checked = true; |
---|
119 | } |
---|
120 | } |
---|
121 | |
---|
122 | // function to clear the reference field or remove items |
---|
123 | // from the multivalued reference list. |
---|
124 | function referencebrowser_removeReference(widget_id, multi) |
---|
125 | { |
---|
126 | if (multi) { |
---|
127 | list=document.getElementById(widget_id) |
---|
128 | for (var x=list.length-1; x >= 0; x--) { |
---|
129 | if (list[x].selected) { |
---|
130 | list[x]=null; |
---|
131 | } |
---|
132 | } |
---|
133 | for (var x=0; x < list.length; x++) { |
---|
134 | list[x].selected='selected'; |
---|
135 | } |
---|
136 | } else { |
---|
137 | element=document.getElementById(widget_id); |
---|
138 | label_element=document.getElementById(widget_id + '_label'); |
---|
139 | label_element.value = ""; |
---|
140 | element.value=""; |
---|
141 | } |
---|
142 | } |
---|
143 | |
---|
144 | |
---|