summaryrefslogtreecommitdiff
path: root/hugo/js/common.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--hugo/js/common.js296
1 files changed, 296 insertions, 0 deletions
diff --git a/hugo/js/common.js b/hugo/js/common.js
new file mode 100644
index 0000000..02dd342
--- /dev/null
+++ b/hugo/js/common.js
@@ -0,0 +1,296 @@
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * Functionality for communicating with the querywindow
+ */
+$(function () {
+ /**
+ * Event handler for click on the open query window link
+ * in the top menu of the navigation panel
+ */
+ $('#pma_open_querywindow').click(function (event) {
+ event.preventDefault();
+ PMA_querywindow.focus();
+ });
+});
+
+/**
+ * Holds common parameters such as server, db, table, etc
+ *
+ * The content for this is normally loaded from Header.class.php or
+ * Response.class.php and executed by ajax.js
+ */
+var PMA_commonParams = (function () {
+ /**
+ * @var hash params An associative array of key value pairs
+ * @access private
+ */
+ var params = {};
+ // The returned object is the public part of the module
+ return {
+ /**
+ * Saves all the key value pair that
+ * are provided in the input array
+ *
+ * @param hash obj The input array
+ *
+ * @return void
+ */
+ setAll: function (obj) {
+ var reload = false;
+ var updateNavigation = false;
+ for (var i in obj) {
+ if (params[i] !== undefined && params[i] !== obj[i]) {
+ reload = true;
+ }
+ if (i == 'db' || i == 'table') {
+ updateNavigation = true;
+ }
+ params[i] = obj[i];
+ }
+ if (updateNavigation) {
+ PMA_showCurrentNavigation();
+ }
+ if (reload) {
+ PMA_querywindow.refresh();
+ }
+ },
+ /**
+ * Retrieves a value given its key
+ * Returns empty string for undefined values
+ *
+ * @param string name The key
+ *
+ * @return string
+ */
+ get: function (name) {
+ return params[name] || '';
+ },
+ /**
+ * Saves a single key value pair
+ *
+ * @param string name The key
+ * @param string value The value
+ *
+ * @return self For chainability
+ */
+ set: function (name, value) {
+ if (params[name] !== undefined && params[name] !== value) {
+ PMA_querywindow.refresh();
+ }
+ params[name] = value;
+ if (name == 'db' || name == 'table') {
+ PMA_showCurrentNavigation();
+ }
+ return this;
+ },
+ /**
+ * Returns the url query string using the saved parameters
+ *
+ * @return string
+ */
+ getUrlQuery: function () {
+ return $.sprintf(
+ '?%s&server=%s&db=%s&table=%s',
+ this.get('common_query'),
+ encodeURIComponent(this.get('server')),
+ encodeURIComponent(this.get('db')),
+ encodeURIComponent(this.get('table'))
+ );
+ }
+ };
+})();
+
+/**
+ * Holds common parameters such as server, db, table, etc
+ *
+ * The content for this is normally loaded from Header.class.php or
+ * Response.class.php and executed by ajax.js
+ */
+var PMA_commonActions = {
+ /**
+ * Saves the database name when it's changed
+ * and reloads the query window, if necessary
+ *
+ * @param string new_db The name of the new database
+ *
+ * @return void
+ */
+ setDb: function (new_db) {
+ if (new_db != PMA_commonParams.get('db')) {
+ PMA_commonParams.setAll({'db': new_db, 'table': ''});
+ }
+ },
+ /**
+ * Opens a database in the main part of the page
+ *
+ * @param string new_db The name of the new database
+ *
+ * @return void
+ */
+ openDb: function (new_db) {
+ PMA_commonParams
+ .set('db', new_db)
+ .set('table', '');
+ PMA_querywindow.refresh();
+ this.refreshMain(
+ PMA_commonParams.get('opendb_url')
+ );
+ },
+ /**
+ * Refreshes the main frame
+ *
+ * @param mixed url Undefined to refresh to the same page
+ * String to go to a different page, e.g: 'index.php'
+ *
+ * @return void
+ */
+ refreshMain: function (url, callback) {
+ if (! url) {
+ url = $('#selflink a').attr('href');
+ url = url.substring(0, url.indexOf('?'));
+ }
+ url += PMA_commonParams.getUrlQuery();
+ $('<a />', {href: url})
+ .appendTo('body')
+ .click()
+ .remove();
+ AJAX._callback = callback;
+ }
+};
+
+/**
+ * Common functions used for communicating with the querywindow
+ */
+var PMA_querywindow = (function ($, window) {
+ /**
+ * @var Object querywindow Reference to the window
+ * object of the querywindow
+ * @access private
+ */
+ var querywindow = {};
+ /**
+ * @var string queryToLoad Stores the SQL query that is to be displayed
+ * in the querywindow when it is ready
+ * @access private
+ */
+ var queryToLoad = '';
+ // The returned object is the public part of the module
+ return {
+ /**
+ * Opens the query window
+ *
+ * @param mixed url Undefined to open the default page
+ * String to go to a different
+ *
+ * @return void
+ */
+ open: function (url, sql_query) {
+ if (! url) {
+ url = 'querywindow.php' + PMA_commonParams.getUrlQuery();
+ }
+ if (sql_query) {
+ url += '&sql_query=' + encodeURIComponent(sql_query);
+ }
+
+ if (! querywindow.closed && querywindow.location) {
+ var href = querywindow.location.href;
+ if (href != url
+ && href != PMA_commonParams.get('pma_absolute_uri') + url
+ ) {
+ if (PMA_commonParams.get('safari_browser')) {
+ querywindow.location.href = targeturl;
+ } else {
+ querywindow.location.replace(targeturl);
+ }
+ querywindow.focus();
+ }
+ } else {
+ querywindow = window.open(
+ url + '&init=1',
+ '',
+ 'toolbar=0,location=0,directories=0,status=1,'
+ + 'menubar=0,scrollbars=yes,resizable=yes,'
+ + 'width=' + PMA_commonParams.get('querywindow_width') + ','
+ + 'height=' + PMA_commonParams.get('querywindow_height')
+ );
+ }
+ if (! querywindow.opener) {
+ querywindow.opener = window.window;
+ }
+ if (window.focus) {
+ querywindow.focus();
+ }
+ },
+ /**
+ * Opens, if necessary, focuses the query window
+ * and displays an SQL query.
+ *
+ * @param string sql_query The SQL query to display in
+ * the query window
+ *
+ * @return void
+ */
+ focus: function (sql_query) {
+ if (! querywindow || querywindow.closed || ! querywindow.location) {
+ // we need first to open the window and cannot pass the query with it
+ // as we dont know if the query exceeds max url length
+ queryToLoad = sql_query;
+ this.open(false, sql_query);
+ } else {
+ //var querywindow = querywindow;
+ var hiddenqueryform = querywindow
+ .document
+ .getElementById('hiddenqueryform');
+ if (hiddenqueryform.querydisplay_tab != 'sql' ) {
+ hiddenqueryform.querydisplay_tab.value = "sql";
+ hiddenqueryform.sql_query.value = sql_query;
+ $(hiddenqueryform).addClass('disableAjax');
+ hiddenqueryform.submit();
+ querywindow.focus();
+ } else {
+ querywindow.focus();
+ }
+ }
+ },
+ /**
+ * Refreshes the query window given a url
+ *
+ * @param string url Where to go to
+ *
+ * @return void
+ */
+ refresh: function (url) {
+ if (! querywindow.closed && querywindow.location) {
+ var $form = $(querywindow.document).find('#sqlqueryform');
+ if ($form.find('#checkbox_lock:checked').length == 0) {
+ PMA_querywindow.open(url);
+ }
+ }
+ },
+ /**
+ * Reloads the query window given the details
+ * of a db, a table and an sql_query
+ *
+ * @param string db The name of the database
+ * @param string table The name of the table
+ * @param string sql_query The SQL query to be displayed
+ *
+ * @return void
+ */
+ reload: function (db, table, sql_query) {
+ if (! querywindow.closed && querywindow.location) {
+ var $form = $(querywindow.document).find('#sqlqueryform');
+ if ($form.find('#checkbox_lock:checked').length == 0) {
+ var $hiddenform = $(querywindow.document)
+ .find('#hiddenqueryform');
+ $hiddenform.find('input[name=db]').val(db);
+ $hiddenform.find('input[name=table]').val(table);
+ if (sql_query) {
+ $hiddenform.find('input[name=sql_query]').val(sql_query);
+ }
+ $hiddenform.addClass('disableAjax').submit();
+ }
+ }
+ }
+ };
+})(jQuery, window);