sf-static/sql/js/interface.js

374 lines
11 KiB
JavaScript
Raw Normal View History

2023-02-28 18:21:07 +00:00
/**
* This file is a part of MyWebSQL package
*
* @file: js/interface.js
* @author Samnan ur Rehman
* @copyright (c) 2008-2014 Samnan ur Rehman
* @web http://mywebsql.net
* @license http://mywebsql.net/license
*/
$.mywebsql = { "popup":false, "dialogs":[] };
var main_layout;
var data_layout;
var currentTreeItem = null;
var clipboard_helper = null;
var historyCurItem = null;
$(document).ready(function () {
if ($.browser.msie && $.browser.version <= 7) {
$('select').hide();
$('#screen-wait').find('div:first').remove();
$('#screen-wait').find('div.compat-notice').show();
return true;
}
$('body').bind('contextmenu', function(e) {
var otarget = e.originalTarget || e.target;
// allow input areas to show default context menu
if (otarget.type == "textarea" || otarget.type == "text")
return true;
return false;
});
$("ul#main-menu li ul li:has(ul)").find("a:first").append(" &raquo; ");
$("ul#main-menu").find("a").click(function(event) {
event.stopPropagation();
$(this).blur();
});
$('ul#main-menu li').click(function() { eval($(this).find('a').attr('href')); });
$('#toolbarHolder').mouseover(function() { if (_contextMenu) _contextMenu.hide(); });
// make tabs first to avoid resize problems
$(".ui-layout-data-center").tabs();
$(".ui-layout-data-south").tabs({
select: function(event, ui) { setTimeout(focusEditor, 200); }
});
main_layout_props = {
spacing_open: 3, spacing_closed: 6
,east__minSize: 200
,west__minSize: 150, west__size: $('body').innerWidth() * 0.2
,north__minSize: 76
,north__resizable: false, north__closable: true, north__spacing_open: 0, north__spacing_closed: 6
,north__onopen: function() { main_layout.allowOverflow('north'); }
,south__resizable: false, south__closable: true, south__spacing_open: 0, south__spacing_closed: 0
,center__onresize: function() { data_layout.resizeAll(); layoutState.save('main_layout'); }
,enableCursorHotkey: false
};
main_layout = $('body').layout( $.extend(main_layout_props, layoutState.load('main_layout')) );
data_layout_props = {
spacing_open: 3, spacing_closed: 6
,resizerClass: "ui-data-resizer"
,togglerClass: "ui-data-toggler"
,center__paneSelector: ".ui-layout-data-center"
,south__paneSelector: ".ui-layout-data-south"
,center__resizable: true
,south__resizable: true, south__closable: true, south__minSize: 66, south__size: 160
,center__onresize: function() { layoutState.save('data_layout'); }
,enableCursorHotkey: false
,onresizeall_end: function() {
var n = $(".ui-layout-data-center").tabs('option', 'selected');
if (n == 0) resizeTableHeader('data');
else if (n == 2) resizeTableHeader('info');
}
};
data_layout = $('div.ui-layout-center').layout( $.extend(data_layout_props, layoutState.load('data_layout')) );
main_layout.close('south');
main_layout.allowOverflow('north');
$(".ui-layout-data-center").tabs('select', 2);
$("#tablelist").treeview();
contextHandler();
// chrome selection issue fix when a resizer is used for resizing
$('.ui-layout-resizer').bind('selectstart', function() { return false; });
$('#nav_query').button({
text: true, icons: {primary: 'ui-icon-play'}
}).click(function() { queryGo(0); });
$('#nav_queryall').button({
text: true, icons: {primary: 'ui-icon-seek-end'}
}).click(function() { queryGo(1); });
$('#nav_delete').button({
text: true, icons: {primary: 'ui-icon-close'}
}).click(function() { queryDelete(); });
$('#nav_update').button({
text: true, icons: {primary: 'ui-icon-disk'}
}).click(function() { querySave(); });
$('#nav_gensql').button({
text: true, icons: {primary: 'ui-icon-script'}
}).click(function() { queryGenerate(); });
$('#nav_addrec').button({
text: true, icons: {primary: 'ui-icon-plusthick'}
}).click(function() { queryAddRecord(); });
$('#nav_copyrec').button({
text: true, icons: {primary: 'ui-icon-copy'}
}).click(function() { queryCopyRecord(); });
$('#nav_refresh').button({
text: true, icons: {}
}).click(function() { queryRefresh(); });
$('#sp-results-maximize').button({
text: false, icons: {primary: 'ui-icon-newwin'}
}).click(function() { resultsPaneToggle(); });
initClipboard();
$(window).unload(function(){
layoutState.save('data_layout');
layoutState.save('main_layout');
});
taskbar.init();
$("#object-filter-text").quickText().bind('keyup', function() {
// filter database list or table list when quick search filter is applied
var li = $("#tablelist").hasClass("dblist") ? "span.odb a" : "span.file a";
$("#object_list").setObjectFilter( $(this).val(), li, 'ul' );
});
$('#screen-wait').remove();
$('#wrkfrm').attr('src', 'index.php?q=wrkfrm&type=info');
loadUserPreferences();
showNavBtns('query', 'queryall');
});
function contextHandler() {
// setup context menus for everything first time
if(arguments.length == 0) {
// remove options that do not apply to this type of database (server)
$('ul#main-menu .option').not("."+DB_DRIVER).remove();
$('#object-context-menus .option').not("."+DB_DRIVER).remove();
$(".ui-layout-north").contextMenu('#panel-header');
$("#object_list").contextMenu('#panel-menu-objects');
$("#sql-editor-pane").contextMenu('#panel-menu-editor');
$("#sql-history").contextMenu('#history-menu');
}
// only update context menus for object list
$('#tablelist .odb').contextMenu('#db-menu');
$('#tablelist .otable').contextMenu('#table-menu');
$('#tablelist .oview').contextMenu('#view-menu');
$('#tablelist .oproc').contextMenu('#proc-menu');
$('#tablelist .ofunc').contextMenu('#func-menu');
$('#tablelist .otrig').contextMenu('#trig-menu');
$('#tablelist .oevt').contextMenu('#evt-menu');
$('#tablelist .schmf').contextMenu('#schm-menu');
$('#tablelist span').filter('.tablef,.viewf,.procf,.funcf,.trigf,.evtf').contextMenu('#object-menu');
}
function initClipboard() {
$('#sql-history tr').live('hover', function() { historyCurItem = $(this); } );
// copying using zeroclipboard and context menu is a pain... but we have to do it ...
ZeroClipboard.setMoviePath('js/jquery.clipboard.swf');
clipboard_helper = new ZeroClipboard.Client();
$('#history-menu li.clipboard').mouseover(function() {
single = $(this).hasClass('single'); // copy single or all queries
clipboard_helper.setText(getHistoryText(single));
if (clipboard_helper.div) {
clipboard_helper.receiveEvent('mouseout', null);
clipboard_helper.reposition(this);
}
else {
clipboard_helper.glue(this);
$(clipboard_helper.div).click(function() {
clipboard_helper.hide();
});
}
clipboard_helper.receiveEvent('mouseover', null);
});
}
function showNavBtns() {
bn = new Array("addrec", "copyrec", "query", "queryall", "delete", "update", "gensql");
for(i=0; i<bn.length; i++)
$('#nav_' + bn[i]).css("display", "none");
for(i=0; i<arguments.length; i++)
$('#nav_' + arguments[i]).css("display", "block");
}
function showNavBtn() {
for(i=0; i<arguments.length; i++)
$('#nav_' + arguments[i]).css("display", "block");
}
function hideNavBtn(btn) {
for(i=0; i<arguments.length; i++)
$('#nav_' + arguments[i]).css("display", "none");
}
function switchEditor(n) {
$(".ui-layout-data-south").tabs('select', n);
}
function editorTextSize(s) {
ts = parseFloat($(currentEditor().editor.container).css('font-size'));
if (ts) {
if (s > 0 && ts <= 100)
ts += s;
else if (s < 0 && ts >= 11)
ts += s;
$(currentEditor().editor.container).css('font-size', ts + 'px');
}
}
function editorClear() {
$(currentEditor().editor.container).html('');
}
function currentEditor() {
n = $(".ui-layout-data-south").tabs('option', 'selected');
obj = commandEditor;
switch(n) {
case 1: obj = commandEditor2; break;
case 2: obj = commandEditor3; break;
}
return obj;
}
function focusEditor() {
ed = currentEditor();
ed.focus();
}
function getDataMenu(m, t, e) {
target = $(e.originalTarget || e.target);
if (target.hasClass('tch'))
return false;
if (target.is('th'))
return $('#data-menu-th').clone();
else if (target.is('td'))
return $('#data-menu-td').clone();
return false; // no menu here
}
function objListHandler(data, state) {
tree = $(data).find('#objlist').html();
if (tree != '') {
$('#object_list').html(tree);
$("#tablelist").treeview();
contextHandler(false);
$("#object-filter-text").val("");
}
else
jAlert(__('An error occured while refreshing the object list.'));
// restore previous tree state
for(i=0;i<state.length;i++)
$('#'+state[i]+' span:first').trigger('click');
setPageStatus(false);
}
function resultsPaneToggle() {
var btn = $("#sp-results-maximize");
var max = btn.data("max");
if (max == 1) {
main_layout.open('north');
data_layout.open('south');
main_layout.open('west');
btn.removeData("max");
} else {
btn.data("max", 1);
main_layout.close('north');
data_layout.close('south');
main_layout.close('west');
}
}
function uiCreateDialog(id) {
// dialog is already created for selected element
if ($.inArray(id, $.mywebsql.dialogs) != -1)
return true;
if (id == 'dbcreate') {
$("#dialog-dbcreate").dialog({
autoOpen: false,
width:320,
height: 160,
modal: true,
buttons: [ {
text: __('Cancel'),
click: function() { $(this).dialog('close'); }
}, {
text: __('Create Database'),
click: function() { dbCreate(1); }
}
]
});
}
$.mywebsql.dialogs.push(id);
return true;
}
function initEditor(n) {
var editor = commandEditor;
var ck = "sql_commandEditor";
switch(n) {
case 1: {
editor = commandEditor2;
ck = "sql_commandEditor2";
} break;
case 2: {
editor = commandEditor3;
ck = "sql_commandEditor3";
} break;
}
var x = $.cookies.get(ck);
if ( x )
editor.setCode( x );
}
// quick search filter functionality for dom elements other than tables
$.fn.setObjectFilter = function(text, elem, container) {
if (text == '') {
$(elem, this).parentsUntil(container).removeClass('ui-helper-hidden');
return this;
}
string = text.toUpperCase();
$(elem, this).each(function(){
var contents = $(this).text().toUpperCase();
// check the string against that element text
if ( contents.match(string) ) {
$(this).parentsUntil(container).removeClass('ui-helper-hidden')
} else {
$(this).parentsUntil(container).addClass('ui-helper-hidden');
}
});
};
$.fn.quickText = function() {
return this.each(function(s) {
input = $(this);
if (input.val() == '')
{
input.addClass('blur');
input.val(input.attr('data-placeholder'));
}
input.focus(function()
{
if ( $.trim($(this).val()) === $(this).attr('data-placeholder') ) {
$(this).val("").removeClass('blur');
}
}).blur(function(){
if ( $.trim($(this).val()) === "" ) {
$(this).addClass('blur').val($(this).attr('data-placeholder'));
}
});
return $(this);
});
}