📄 main.js
字号:
item.appendChild(group); var getRef = function(span) { /* to be called when drag succeeds */ return function(target,x,y) { /* fuck off when dragged onto tablelist */ var coords = OAT.Dom.position(dialogs.tablelist.div); var w = dialogs.tablelist.div.offsetWidth; var h = dialogs.tablelist.div.offsetHeight; if (x > coords[0] && x < coords[0]+w && y > coords[1] && y < coords[1] + h) return; var coords = OAT.Dom.position("design_area"); var table_x = x - coords[0]; var table_y = y - coords[1]; Tables.add(span.innerHTML,span.schema,span.catalog,table_x,table_y,0); } } var process = function(elm) { elm.style.padding = "2px"; elm.style.backgroundColor = "#888"; elm.style.border = "1px dotted #000"; /* remove div tags */ var divs=[]; do { divs = elm.getElementsByTagName("div"); if (divs.length > 0) { divs[0].parentNode.removeChild(divs[0]); } } while (divs.length > 0); } for (var i=0;i<pole[0].length;i++) { var opt = OAT.Dom.create("li"); var lbl = OAT.Dom.create("span"); opt.style.cursor = "pointer"; gd.addSource(opt,process,getRef(lbl)); lbl.catalog = catalog_name; lbl.schema = pole[1][i]; lbl.innerHTML = pole[0][i]; Filter.addValue(lbl.schema); opt.appendChild(lbl); group.appendChild(opt); var ref=function(event) { var elm = OAT.Dom.source(event).parentNode.getElementsByTagName("span")[0]; /* no position -> autoplace */ Tables.add(elm.innerHTML,elm.schema,elm.catalog,0,0,1); } OAT.Dom.attach(opt,"dblclick",ref); } dialogs.tablelist.list.appendChild(item); total_catalog_count--; if (!total_catalog_count) { /* create tree after last catalog arrived */ OAT.Tree.assign(dialogs.tablelist.list,"../images","gif",1); /* also fix grid in ie here */ grid_in.ieFix(); }}function query(q) { /* send query */ tab.go(2); lastQuery = q; datasource.init(); datasource.setQuery(q); var s = ($("options_dolimit").checked ? parseInt($v("options_limit")) : 0); datasource.pageSize = s; datasource.advanceRecord(0);}function qualifier(table) { /* create a qualified name */ var t = table; if (typeof(table) == "string") { t = table.toUpperCase(); for (var i=0;i<table_array.length;i++) { if (table_array[i].name.toUpperCase() == table.toUpperCase() ) { t = table_array[i]; } } } /* if string given */ var nq = (t.catalog == "" ? t.name : t.catalog + "." + t.schema + "." + t.name); return OAT.SqlQueryData.qualifyMulti(nq);}var Filter = { addValue:function(value) { var hope = 1; var opts = $("tablefilter_select").getElementsByTagName("option"); for (var i=0;i<opts.length;i++) { if (opts[i].value == value) { hope = 0; } } if (!hope) { return; } OAT.Dom.option(value,value,"tablefilter_select"); }, apply:function() { var value = $v("tablefilter_select"); var catalogLis = $("tablelist").childNodes; var catalogs = $("tablelist").getElementsByTagName("ul"); for (var i=0;i<catalogs.length;i++) { var tables = catalogs[i].getElementsByTagName("li"); var visibleCount = 0; for (var j=0;j<tables.length;j++) { var li = tables[j]; var span = li.getElementsByTagName("span")[0]; if (value == "" || value == span.schema) { /* show */ OAT.Dom.show(li); visibleCount++; } else { /* hide */ OAT.Dom.hide(li); } } /* for all tables */ if (visibleCount) { OAT.Dom.show(catalogLis[i]); } else { OAT.Dom.hide(catalogLis[i]); } } /* for all catalogs */ }, init:function() { OAT.Dom.clear("tablefilter_select"); OAT.Dom.option("[no filter]","","tablefilter_select"); }}var Tables = { add:function(name,schema,catalog,x,y,autoplace) { var ref=function(pole) { /* column info has arrived... */ $("status_content").innerHTML = "Mark Primary keys using 'P' button. Drag 'R' buttons to create relations."; var new_x = x; var new_y = y; if (autoplace) { new_x = global_data.x; new_y = global_data.y; global_data.x += 190; if (global_data.x > 700) { global_data.x = 10; global_data.y += 200; } } var tmp = new SqlTable(name,pole,new_x,new_y); /* object */ tmp.catalog = catalog; /* inherit catalog name */ tmp.schema = schema; /* inherit schema name */ table_array.push(tmp); /* put into global array */ tmp.closeFunc = function() { Tables.remove(tmp); }// OAT.Dom.attach(tmp.obj.close,"click",tmp.closeFunc); tmp.obj.onclose = tmp.closeFunc; $("design_area").appendChild(tmp.obj.div); ask_for_keys(tmp); /* get pk and fk info */ Columns.updateCombos(); /* actualize combos */ } /* callback */ OAT.Xmla.columns(catalog,schema,name,ref); }, /* Tables.add() */ remove:function(object) { /* remove columns */ var name = object.name; var colsToRemove = []; var values = Columns.getValues(0); for (var i=0;i<values.length;i++) { var colName = values[i].getElementsByTagName("input")[0].value; if (colName.indexOf(name) != -1) { colsToRemove.push(i+1); } } for (var i=colsToRemove.length-1;i>=0;i--) { grid_in.removeColumn(colsToRemove[i]); } /* remove relations */ for (var i=0;i<object.rows.length;i++) { for (var j=0;j<object.rows[i].relations.length;j++) { if (object.rows[i].relations[j]) { object.rows[i].relations[j].remove(); } } } /* remove from dom tree */ OAT.Dom.unlink(object.obj.div); /* from global array */ for (var i=0;i<table_array.length;i++) { if (table_array[i] == object) { table_array.splice(i,1); } } }, clear:function() { while (table_array.length) { var obj = table_array[0]; obj.closeFunc(); } global_data.x = 10; global_data.y = 10; } /* Tables.clear() */}var Columns = { getValues:function(rowIndex) { /* one row */ var result = []; var row = grid_in.rows[rowIndex]; for (var i=1;i<row.cells.length;i++) { result.push(row.cells[i].value); } return result; }, getKeyUpRef:function(type,elm,input) { return function(event) { if ($v(input) == "") { return; } if (type == 1 && elm.last) { var oldLast = Columns.getValues(global_data.conds_1_count + 3); for (var i=0;i<oldLast.length;i++) { oldLast[i].last = false; } /* insert new line to where conditions */ grid_in.createRow([".."],4+global_data.conds_1_count); for (var i=1;i<grid_in.header.cells.length;i++) { var div = grid_in.rows[4+global_data.conds_1_count].addCell({align:OAT.GridData.ALIGN_CENTER}); Columns.createConds([div],[],1); } global_data.conds_1_count++; } if (type == 2 && elm.last) { var oldLast = Columns.getValues(global_data.conds_1_count + global_data.conds_2_count + 4); for (var i=0;i<oldLast.length;i++) { oldLast[i].last = false; } grid_in.createRow([".."],5+global_data.conds_1_count+global_data.conds_2_count); for (var i=1;i<grid_in.header.cells.length;i++) { var div = grid_in.rows[5+global_data.conds_1_count+global_data.conds_2_count].addCell({align:OAT.GridData.ALIGN_CENTER}); Columns.createConds([div],[],2); } global_data.conds_2_count++; } } }, createConds:function(div_array,conds_array,type) { var logic, operator, value; /* conds_array[i] == {logic:"",operator:"",value:""} */ /* div_array is (should be :) larger than conds_array (by 1)! */ for (var i=0;i<div_array.length;i++) { if (conds_array.length > i) { logic = conds_array[i].logic; operator = conds_array[i].operator; value = conds_array[i].value; } else { logic = "AND"; operator = "="; value = ""; } var select_logic = OAT.Dom.create("select",{font:"menu"}); OAT.Dom.option("AND","AND",select_logic); OAT.Dom.option("OR","OR",select_logic); select_logic.selectedIndex = (logic == "AND" ? 0 : 1); div_array[i].appendChild(select_logic); var select_operator = OAT.Dom.create("select",{font:"menu"}); OAT.Dom.option("=","=",select_operator); OAT.Dom.option("<>","<>",select_operator); OAT.Dom.option(">",">",select_operator); OAT.Dom.option(">=",">=",select_operator); OAT.Dom.option("<","<",select_operator); OAT.Dom.option("<=","<=",select_operator); OAT.Dom.option("LIKE","LIKE",select_operator); OAT.Dom.option("NOT LIKE","NOT LIKE",select_operator); var opts = select_operator.getElementsByTagName("option"); for (var j=0;j<opts.length;j++) if (opts[j].value == operator) { select_operator.selectedIndex = j; } div_array[i].appendChild(select_operator); div_array[i].last = (i == div_array.length-1 ? true : false); var input_value = OAT.Dom.create("input",{font:"menu",border:"none",textAlign:"center",display:"block"}); var keyUpRef = Columns.getKeyUpRef(type,div_array[i],input_value); OAT.Dom.attach(input_value,"keyup",keyUpRef); input_value.setAttribute("type","text"); input_value.setAttribute("size","20"); input_value.value = value; div_array[i].appendChild(input_value); } }, allColsList:function() { var result = []; for (var i=0;i<table_array.length;i++) { var table = table_array[i]; for (var j=0;j<table.rows.length;j++) if (table.rows[j].name != "*") { result.push(OAT.SqlQueryData.qualifyMulti(table.name+"."+table.rows[j].name)); } } return result; }, blank:function() { Columns.add("","",1,0,[],0,[],grid_in.header.cells.length); Columns.updateCombos(); }, updateCombos:function() { var allCols = Columns.allColsList(); var combos = Columns.getValues(0); for (var i=0;i<combos.length;i++) { var c = combos[i].c; c.clearOpts(); for (var j=0;j<allCols.length;j++) { c.addOption(allCols[j]); } } }, add:function(name,alias,show,order,conds_1,group,conds_2, newIndex) { var ni = (newIndex ? newIndex : grid_in.header.cells.length-1); /* add a new column to columns grid */ var num_cols = grid_in.header.cells.length; var numSpan = OAT.Dom.create("span"); var cell = grid_in.appendHeader({sortable:0,value:"Column #",align:OAT.GridData.ALIGN_CENTER},ni); cell.value.appendChild(numSpan); cell.numSpan = numSpan; /* actualize numbering */ for (var i=1;i<grid_in.header.cells.length;i++) { grid_in.header.cells[i].numSpan.innerHTML = i+" "; } /* dynamic adding of blank column */ var div_name = grid_in.rows[0].addCell({align:OAT.GridData.ALIGN_CENTER},ni); var n = name; var combo_name = new OAT.Combolist([],n); div_name.c = combo_name; div_name.appendChild(combo_name.div); var addRef = function() { var colNames = Columns.getValues(0); if (colNames[colNames.length-1] != div_name) { return; } Columns.blank(); } combo_name.onchange = addRef; /* remove link */ var a_remove = OAT.Dom.create("a"); a_remove.setAttribute("href","#"); a_remove.innerHTML = "remove"; var removeRef = function(event) { var elm = OAT.Dom.source(event); var str = elm.parentNode.innerHTML; var index = -1; for (var i=0;i<grid_in.header.cells.length;i++) { if (grid_in.header.cells[i].value.innerHTML == str) { index = i; } } grid_in.removeColumn(index); } OAT.Dom.attach(a_remove,"click",removeRef); cell.value.appendChild(a_remove);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -