?? main.js
字號:
/* * $Id: main.js,v 1.1 2006/08/07 10:41:25 source Exp $ * * This file is part of the OpenLink Software Ajax Toolkit (OAT) project. * * Copyright (C) 2006 Ondrej Zara and OpenLink Software * * See LICENSE file for details. */var dialogs = {}var grid_in;var tab = false;var table_array = [];var gd = false;var gd2 = false;var pivot = false;var global_data = {pending:false,x:10,y:10,conds_1_count:1,conds_2_count:1,conds_1_last:false,conds_2_last:false}var pivot_gd = false;var pivot_data = {headerRow:[],dataRows:[],headerRowIndexes:[],headerColIndexes:[],dataColumnIndex:-1,filterIndexes:[],query:""};var lastQuery = false;var total_catalog_count = 0;var datasource = new OAT.DataSource(50);var ORDER = ["NO","ASC","DESC"];var Query = { obj:false, orderIndex:-1, orderType:0, query:"", create:function(type) { Query.obj = new OAT.SqlQuery(); Query.createColumns(); Query.createConditions(); Query.createTables(); Query.createLimit(); Query.createOrders(); Query.createGroups(); Query.query = Query.glue(type); if (!Query.query) { return; } $("q").value = Query.query; }, glue:function(type) { /* glue together all pieces */ if (!Query.obj.columns.count) { return false; } var q = Query.obj.toString(type); return q; }, createColumns:function() { var values = Columns.getValues(0); /* array of divs */ var aliases = Columns.getValues(1); /* array of divs */ var shows = Columns.getValues(2); /* array of divs */ for (var i=0;i<values.length;i++) { var col = []; col[0] = values[i].getElementsByTagName("input")[0].value; col[1] = aliases[i].getElementsByTagName("input")[0].value; var show = shows[i].getElementsByTagName("input")[0].checked && col[0] != ""; if (show) { var c = Query.obj.columns.add(); c.column = col[0]; c.alias = col[1]; } } }, /* Query.createColumns() */ createLimit:function() { if ($("options_dolimit").checked && !OAT.Preferences.useCursors) { Query.obj.limit = $v("options_limit"); } else { Query.obj.limit = -1; } }, createTables:function() { Query.obj.tablesString = generate_join_list(); }, createConditions:function() { var c_array = []; var h_array = []; var tables = Columns.getValues(0); for (var i=0;i<global_data.conds_1_count;i++) { var conds = Columns.getValues(4+i); for (var j=0;j<conds.length;j++) { /* read through grid and get set conditions */ var v = conds[j].getElementsByTagName("input")[0].value; if (v) { c_array.push([tables[j],conds[j]]); } } } for (var i=0;i<global_data.conds_2_count;i++) { var conds = Columns.getValues(5+i+global_data.conds_1_count); for (var j=0;j<conds.length;j++) { /* read through grid and get set conditions */ var v = conds[j].getElementsByTagName("input")[0].value; if (v) { h_array.push([tables[j],conds[j]]); } } } /* available conditions now in c_array and h_array */ for (var i=0;i<c_array.length;i++) { var c = Query.obj.conditions.add(); if (i) { c.logic = c_array[i][1].getElementsByTagName("select")[0].value; } c.column = c_array[i][0].getElementsByTagName("input")[0].value; c.operator = c_array[i][1].getElementsByTagName("select")[1].value; c.value = c_array[i][1].getElementsByTagName("input")[0].value; } for (var i=0;i<h_array.length;i++) { var c = Query.obj.havings.add(); if (i) { c.logic = h_array[i][1].getElementsByTagName("select")[0].value; } c.column = h_array[i][0].getElementsByTagName("input")[0].value; c.operator = h_array[i][1].getElementsByTagName("select")[1].value; c.value = h_array[i][1].getElementsByTagName("input")[0].value; } }, /* Query.createConditions() */ createOrders:function() { Query.orderIndex = -1; var tmp = []; var tables = Columns.getValues(0); var orders = Columns.getValues(3); var shows = Columns.getValues(2); for (var i=0;i<tables.length;i++) { var type = orders[i].getElementsByTagName("select")[0].selectedIndex; if (type) { var c = Query.obj.orders.add(); if (Query.orderIndex == -1) { Query.orderIndex = i; Query.orderType = type; } c.column = tables[i].getElementsByTagName("input")[0].value; c.type = ORDER[type]; } } /* note: the primary sorting column may not be selected to show in result. in this case, we don't want the grid to show ordering symbol */ if (Query.orderIndex != -1 && !shows[Query.orderIndex].getElementsByTagName("input")[0].checked) { Query.orderIndex = -1; } }, /* Query.createOrders() */ createGroups:function() { var tables = Columns.getValues(0); var groups = Columns.getValues(4+global_data.conds_1_count); for (var i=0;i<tables.length;i++) { var group = groups[i].getElementsByTagName("input")[0].checked; if (group) { var c = Query.obj.groups.add(); c.column = tables[i].getElementsByTagName("input")[0].value; } } } /* Query.createGroups() */}var Connection = { get_settings:function() { /* read relevant settings from inputboxes */ OAT.Xmla.endpoint = $v("endpoint"); OAT.Xmla.dsn = $v("dsn"); OAT.Xmla.user = $v("user"); OAT.Xmla.password = $v("password"); var h = $('options_type_http'); var d = $('options_type_dav'); h.checked = ($v('login_put_type') == "http"); d.checked = ($v('login_put_type') == "dav"); h.__checked = (h.checked ? "1" : "0"); d.__checked = (d.checked ? "1" : "0"); }, discover_dsn:function() { /* discover datasources */ Connection.get_settings(); OAT.Ajax.user = OAT.Xmla.user; OAT.Ajax.password = OAT.Xmla.password; var ref=function(pole) { if (pole.length) { dialogs.connection.okBtn.removeAttribute("disabled"); } var select = $("dsn"); OAT.Dom.clear(select); OAT.Dom.clear("ds_catalogs"); OAT.Dom.clear("ds_tables"); for (var i=0;i<pole.length;i++) { OAT.Dom.option(pole[i],pole[i],select); } /* for all rows */ } /* callback */ OAT.Xmla.discover(ref); }, use_dsn:function(read_settings,whatToDo) { if (read_settings) { Connection.get_settings(); } OAT.Ajax.user = OAT.Xmla.user; OAT.Ajax.password = OAT.Xmla.password; /* if not virtuoso, hide its save formats */ var typeRef = function() { var data = '<Discover env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"'+ ' xmlns="urn:schemas-microsoft-com:xml-analysis" >'+ '<RequestType>DISCOVER_DATASOURCES</RequestType>'+ '<Restrictions xsi:nil="1" ></Restrictions>'+ '<Properties></Properties></Discover>'; return data; } var cBack = function(data) { var result = OAT.Xmla.parseResponse(data); var index = result[0].find("ProviderName"); var _index = result[0].find("DataSourceInfo"); for (var i=0;i<result[1].length;i++) { if (result[1][i][_index] == OAT.Xmla.dsn && !result[1][i][index].match(/virtuoso/i)) { /* delete! */ var opts = $("options_savetype").getElementsByTagName("option"); var indexes = []; for (var i=0;i<opts.length;i++) if (opts[i].value != "xml") { indexes.push(i); } if (!indexes.length) { return; } for (var i=indexes.length-1;i>=0;i--) { OAT.Dom.unlink(opts[indexes[i]]); } } } } OAT.Soap.command(OAT.Xmla.endpoint, typeRef, cBack, OAT.Ajax.TYPE_TEXT, OAT.Xmla.discoverHeader); /* discover catalogs */ var ref=function(pole) { Tables.clear(); Columns.init(1,1); /* list of catalogs */ OAT.Dom.clear(dialogs.tablelist.list); Filter.init(); ask_for_catalogs(pole,1); dialogs.connection.hide(); tab.go(0); if (whatToDo) { whatToDo(); } } /* callback */ OAT.Xmla.dbschema(ref); var qRef = function(q) { OAT.SqlQueryData.columnQualifierPre = q[0]; OAT.SqlQueryData.columnQualifierPost = q[1]; } OAT.Xmla.qualifiers(qRef); }} /* Connection */function ask_for_catalogs(pole,firstTime) { /* this is tricky - virtuoso sometimes requires name/pwd for table detection. this is why we first send only one request and if it succeeds, we ask for remaining catalogs */ if (firstTime && pole.length) { /* first, testing catalog */ var name = pole[0]; var callback = function() { ask_for_catalogs(pole,0); } OAT.Xmla.tables(name,callback); } else { /* ok, first request was successfully returned - go for it for real */ total_catalog_count = pole.length; for (var i=0;i<pole.length;i++) { var name = pole[i]; var callback = function(catalog_name,a) { read_tables(catalog_name,a); } OAT.Xmla.tables(name,callback); } /* for each catalog */ /* no catalogs present? */ if (!pole.length) { total_catalog_count = 1; var callback = function(catalog,arr) { read_tables("",arr); } OAT.Xmla.tables("",callback); } }}function try_relation(pk,card1,fk,card2) { /* there is a relation between {pk} and {fk} can we mark that in our design? */ var t1=false; var t2=false; for (var i=0;i<table_array.length;i++) { var table = table_array[i]; if (pk.catalog == table.catalog && pk.schema == table.schema && pk.table == table.name) { t1 = table; } /* if table == q1 */ if (fk.catalog == table.catalog && fk.schema == table.schema && fk.table == table.name) { t2 = table; } /* if table == q2 */ } /* for all tables */ if (t1 && t2) { for (var i=0;i<t1.rows.length;i++) { if (t1.rows[i].name == pk.column) { var r1 = t1.rows[i]; } } for (var i=0;i<t2.rows.length;i++) { if (t2.rows[i].name == fk.column) { var r2 = t2.rows[i]; } } var hope = 1; /* is this relation already present? */ for (var i=0;i<r1.relations.length;i++) { var r = r1.relations[i]; if ( (r.row_1 == r1 && r.row_2 ==r2) || (r.row_1 == r2 && r.row_2 ==r1) ) { hope = 0; } } if (hope) { add_relation(r1,r2,card1,card2); } }}function ask_for_keys(table) { /* get pk and fk info about a table */ var callback_fk = function(pole) { for (var i=0;i<pole.length;i++) { try_relation(pole[i][0],"1",pole[i][1],"∞"); } } /* recieved fk response */ var callback_pk = function(pole) { if (pole.length) { for (var i=0;i<table.rows.length;i++) { if (table.rows[i].name == pole[0]) { table.rows[i].mark(); } /* correct row! */ } /* for all rows */ } /* if has pk */ } /* callback */ OAT.Xmla.primaryKeys(table.catalog,table.schema,table.name,callback_pk); OAT.Xmla.foreignKeys(table.catalog,table.schema,table.name,callback_fk);}function read_tables(catalog_name,pole) { /* add all these tables to catalog tree */ var label = OAT.Dom.create("span"); var group = OAT.Dom.create("ul"); var item = OAT.Dom.create("li"); label.innerHTML = (catalog_name != "" ? catalog_name : "[no catalog]"); item.appendChild(label);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -