2.11.11.3 release
[phpmyadmin/arisferyanto.git] / js / querywindow.js
blobe089d75c86e3d18587469f6c43877900642ebed3
1 /* vim: set expandtab sw=4 ts=4 sts=4: */
2 /**
3  * functions used by and for querywindow
4  *
5  * @version $Id$
6  */
8 /**
9  * holds the browser query window
10  */
11 var querywindow = '';
13 /**
14  * holds the query to be load from a new query window
15  */
16 var query_to_load = '';
18 /**
19  * sets current selected db
20  *
21  * @param    string    db name
22  */
23 function setDb(new_db) {
24     //alert('setDb(' + new_db + ')');
25     if (new_db != db) {
26         // db has changed
27         //alert( new_db + '(' + new_db.length + ') : ' + db );
29         var old_db = db;
30         db = new_db;
32         if (window.frame_navigation.document.getElementById(db) == null) {
33             // db is unknown, reload complete left frame
34             refreshNavigation();
35         } else {
36             unmarkDbTable(old_db);
37             markDbTable(db);
38         }
40         // TODO: add code to expand db in lightview mode
42         // refresh querywindow
43         refreshQuerywindow();
44     }
47 /**
48  * sets current selected table (called from navigation.php)
49  *
50  * @param    string    table name
51  */
52 function setTable(new_table) {
53     //alert('setTable(' + new_table + ')');
54     if (new_table != table) {
55         // table has changed
56         //alert( new_table + '(' + new_table.length + ') : ' + table );
58         table = new_table;
60         if (window.frame_navigation.document.getElementById(db + '.' + table) == null
61          && table != '') {
62             // table is unknown, reload complete left frame
63             refreshNavigation();
65         }
66         // TODO: add code to expand table in lightview mode
68         // refresh querywindow
69         refreshQuerywindow();
70     }
73 /**
74  * reloads mian frame
75  *
76  * @uses        goTo()
77  * @uses        opendb_url
78  * @uses        token
79  * @uses        db
80  * @uses        server
81  * @uses        table
82  * @uses        lang
83  * @uses    collation_connection
84  * @uses    encodeURIComponent()
85  * @param       string  url     name of page to be loaded
86  */
87 function refreshMain(url) {
88     if (! url) {
89         if (db) {
90             url = opendb_url;
91         } else {
92             url = 'main.php';
93         }
94     }
95     goTo(url + '?server=' + encodeURIComponent(server) +
96         '&token=' + encodeURIComponent(token) +
97         '&db=' + encodeURIComponent(db) +
98         '&table=' + encodeURIComponent(table) +
99         '&lang=' + encodeURIComponent(lang) +
100         '&collation_connection=' + encodeURIComponent(collation_connection),
101         'main');
105  * reloads navigation frame
107  * @uses        goTo()
108  * @uses        token
109  * @uses        db
110  * @uses        server
111  * @uses        table
112  * @uses        lang
113  * @uses    collation_connection
114  * @uses    encodeURIComponent()
115  */
116 function refreshNavigation() {
117     goTo('navigation.php?server=' + encodeURIComponent(server) +
118         '&token=' + encodeURIComponent(token)  +
119         '&db=' + encodeURIComponent(db)  +
120         '&table=' + encodeURIComponent(table) +
121         '&lang=' + encodeURIComponent(lang) +
122         '&collation_connection=' + encodeURIComponent(collation_connection)
123         );
127  * adds class to element
128  */
129 function addClass(element, classname)
131     if (element != null) {
132         element.className += ' ' + classname;
133         //alert('set class: ' + classname + ', now: ' + element.className);
134     }
138  * removes class from element
139  */
140 function removeClass(element, classname)
142     if (element != null) {
143         element.className = element.className.replace(' ' + classname, '');
144         // if there is no other class anem there is no leading space
145         element.className = element.className.replace(classname, '');
146         //alert('removed class: ' + classname + ', now: ' + element.className);
147     }
150 function unmarkDbTable(db, table)
152     var element_reference = window.frame_navigation.document.getElementById(db);
153     if (element_reference != null) {
154         //alert('remove from: ' + db);
155         removeClass(element_reference.parentNode, 'marked');
156     }
158     element_reference = window.frame_navigation.document.getElementById(db + '.' + table);
159     if (element_reference != null) {
160         //alert('remove from: ' + db + '.' + table);
161         removeClass(element_reference.parentNode, 'marked');
162     }
165 function markDbTable(db, table)
167     var element_reference = window.frame_navigation.document.getElementById(db);
168     if (element_reference != null) {
169         addClass(element_reference.parentNode, 'marked');
170         // scrolldown
171         element_reference.focus();
172         // opera marks the text, we dont want this ...
173         element_reference.blur();
174     }
176     element_reference = window.frame_navigation.document.getElementById(db + '.' + table);
177     if (element_reference != null) {
178         addClass(element_reference.parentNode, 'marked');
179         // scrolldown
180         element_reference.focus();
181         // opera marks the text, we dont want this ...
182         element_reference.blur();
183     }
185     // return to main frame ...
186     window.frame_content.focus();
190  * sets current selected server, table and db (called from libraries/footer.inc.php)
191  */
192 function setAll( new_lang, new_collation_connection, new_server, new_db, new_table, new_token ) {
193     //alert('setAll( ' + new_lang + ', ' + new_collation_connection + ', ' + new_server + ', ' + new_db + ', ' + new_table + ', ' + new_token + ' )');
194     if (new_server != server || new_lang != lang
195       || new_collation_connection != collation_connection) {
196         // something important has changed
197         server = new_server;
198         db     = new_db;
199         table  = new_table;
200         collation_connection  = new_collation_connection;
201         lang  = new_lang;
202         token  = new_token;
203         refreshNavigation();
204     } else if (new_db != db || new_table != table) {
205         // save new db and table
206         var old_db    = db;
207         var old_table = table;
208         db        = new_db;
209         table     = new_table;
211         if (window.frame_navigation.document.getElementById(db) == null
212           && window.frame_navigation.document.getElementById(db + '.' + table) == null ) {
213             // table or db is unknown, reload complete left frame
214             refreshNavigation();
215         } else {
216             unmarkDbTable(old_db, old_table);
217             markDbTable(db, table);
218         }
220         // TODO: add code to expand db in lightview mode
222         // refresh querywindow
223         refreshQuerywindow();
224     }
227 function reload_querywindow(db, table, sql_query)
229     if ( ! querywindow.closed && querywindow.location ) {
230         if ( ! querywindow.document.sqlform.LockFromUpdate
231           || ! querywindow.document.sqlform.LockFromUpdate.checked ) {
232             querywindow.document.getElementById('hiddenqueryform').db.value = db;
233             querywindow.document.getElementById('hiddenqueryform').table.value = table;
235             if (sql_query) {
236                 querywindow.document.getElementById('hiddenqueryform').sql_query.value = sql_query;
237             }
239             querywindow.document.getElementById('hiddenqueryform').submit();
240         }
241     }
245  * brings query window to front and inserts query to be edited
246  */
247 function focus_querywindow(sql_query)
249     /* if ( querywindow && !querywindow.closed && querywindow.location) { */
250     if ( !querywindow || querywindow.closed || !querywindow.location) {
251         // we need first to open the window and cannot pass the query with it
252         // as we dont know if the query exceeds max url length
253         /* url = 'querywindow.php?' + common_query + '&db=' + db + '&table=' + table + '&sql_query=SELECT * FROM'; */
254         query_to_load = sql_query;
255         open_querywindow();
256         insertQuery(0);
257     } else {
258         //var querywindow = querywindow;
259         if ( querywindow.document.getElementById('hiddenqueryform').querydisplay_tab != 'sql' ) {
260             querywindow.document.getElementById('hiddenqueryform').querydisplay_tab.value = "sql";
261             querywindow.document.getElementById('hiddenqueryform').sql_query.value = sql_query;
262             querywindow.document.getElementById('hiddenqueryform').submit();
263             querywindow.focus();
264         } else {
265             querywindow.focus();
266         }
267     }
268     return true;
272  * inserts query string into query window textarea
273  * called from script tag in querywindow
274  */
275 function insertQuery() {
276     if (query_to_load != '' && querywindow.document && querywindow.document.getElementById && querywindow.document.getElementById('sqlquery')) {
277         querywindow.document.getElementById('sqlquery').value = query_to_load;
278         query_to_load = '';
279         return true;
280     }
281     return false;
284 function open_querywindow( url ) {
285     if ( ! url ) {
286         url = 'querywindow.php?' + common_query + '&db=' + encodeURIComponent(db) + '&table=' + encodeURIComponent(table);
287     }
289     if (!querywindow.closed && querywindow.location) {
290         goTo( url, 'query' );
291         querywindow.focus();
292     } else {
293         querywindow = window.open( url + '&init=1', '',
294             'toolbar=0,location=0,directories=0,status=1,menubar=0,' +
295             'scrollbars=yes,resizable=yes,' +
296             'width=' + querywindow_width + ',' +
297             'height=' + querywindow_height );
298     }
300     if ( ! querywindow.opener ) {
301        querywindow.opener = window.window;
302     }
304     if ( window.focus ) {
305         querywindow.focus();
306     }
308     return true;
311 function refreshQuerywindow( url ) {
313     if ( ! querywindow.closed && querywindow.location ) {
314         if ( ! querywindow.document.sqlform.LockFromUpdate
315           || ! querywindow.document.sqlform.LockFromUpdate.checked ) {
316             open_querywindow( url )
317         }
318     }
322  * opens new url in target frame, with default beeing left frame
323  * valid is 'main' and 'querywindow' all others leads to 'left'
325  * @param    string    targeturl    new url to load
326  * @param    string    target       frame where to load the new url
327  */
328 function goTo(targeturl, target) {
329     if ( target == 'main' ) {
330         target = window.frame_content;
331     } else if ( target == 'query' ) {
332         target = querywindow;
333         //return open_querywindow( targeturl );
334     } else if ( ! target ) {
335         target = window.frame_navigation;
336     }
338     if ( target ) {
339         if ( target.location.href == targeturl ) {
340             return true;
341         } else if ( target.location.href == pma_absolute_uri + targeturl ) {
342             return true;
343         }
345         if ( safari_browser ) {
346             target.location.href = targeturl;
347         } else {
348             target.location.replace(targeturl);
349         }
350     }
352     return true;
355 // opens selected db in main frame
356 function openDb(new_db) {
357     //alert('opendb(' +  new_db + ')');
358     setDb(new_db);
359     setTable('');
360     refreshMain(opendb_url);
361     return true;
364 function updateTableTitle( table_link_id, new_title ) {
365     //alert('updateTableTitle');
366     if ( window.parent.frame_navigation.document.getElementById(table_link_id) ) {
367         var left = window.parent.frame_navigation.document;
368         left.getElementById(table_link_id).title = new_title;
369         new_title = left.getElementById('icon_' + table_link_id).alt + ': ' + new_title;
370         left.getElementById('browse_' + table_link_id).title = new_title;
371         return true;
372     }
374     return false;