source: products/quintagroup.referencedatagridfield/trunk/quintagroup/referencedatagridfield/skins/referencedatagridfield/referencebrowser.js @ 2290

Last change on this file since 2290 was 2288, checked in by mylan, 14 years ago

Implemented blocking link column data on adding reference in the form

File size: 4.9 KB
Line 
1// function to open the popup window
2function 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
30function 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
52function 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
64function 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
79function 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        uid_element=getOrderedElement(widget_id, order_idx);
84        uid_element.value=uid;
85        title_element=getOrderedElement(widget_title_id, order_idx);
86        title_element.value=link_title;
87        link_element=getOrderedElement(widget_link_id, order_idx);
88        link_element.readOnly=false;
89        link_element.value=link_path;
90        link_element.readOnly=true;
91        link_element.className="hidden-field"
92    } else if (multi==0) {
93        // differentiate between the single and mulitselect widget
94        // since the single widget has an extra label field.
95        element=document.getElementById(widget_id);
96        label_element=document.getElementById(widget_id + '_label');
97        element.value=uid;
98        label_element.value=label;
99    } else {
100         // check if the item isn't already in the list
101         var current_values = cssQuery('#' + widget_id + ' input');
102         for (var i=0; i < current_values.length; i++) {
103            if (current_values[i].value == uid) {
104              return false;
105            }
106          }         
107          // now add the new item
108          list=document.getElementById(widget_id);
109          li = document.createElement('li');
110          label_element = document.createElement('label');
111          input = document.createElement('input');
112          input.type = 'checkbox';
113          input.value = uid;
114          input.checked = true;
115          input.name = widget_id + ':list';
116          label_element.appendChild(input);
117          label_element.appendChild(document.createTextNode(label));
118          li.appendChild(label_element);
119          list.appendChild(li);
120          // fix on IE7 - check *after* adding to DOM
121          input.checked = true;
122    }
123}
124
125// function to clear the reference field or remove items
126// from the multivalued reference list.
127function referencebrowser_removeReference(widget_id, multi)
128{
129    if (multi) {
130        list=document.getElementById(widget_id)
131        for (var x=list.length-1; x >= 0; x--) {
132          if (list[x].selected) {
133            list[x]=null;
134          }
135        }
136        for (var x=0; x < list.length; x++) {
137            list[x].selected='selected';
138          }       
139    } else {
140        element=document.getElementById(widget_id);
141        label_element=document.getElementById(widget_id + '_label');
142        label_element.value = "";
143        element.value="";
144    }
145}
146
147
Note: See TracBrowser for help on using the repository browser.