⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objects.js

📁 its a varypowrerfull javascript tool
💻 JS
📖 第 1 页 / 共 2 页
字号:
/* *  $Id: objects.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. *//*	objekt abstractParent:		setTitle() - zmena textu v _title		select(), deselect() - vyber		select => je-li vybrano		_title => html element		_div => html element*/function abstractParent_setTitle(text) {	this._title.innerHTML = text;}function abstractParent_destroy() {	OAT.Dom.unlink(this._div);	if (this._mini) { OAT.Dom.unlink(this._mini); }}function abstractParent_select() {	this._div.className = this._div.className + " " + this._div.className + "_selected";	this.selected = true;}function abstractParent_deselect() {	this._div.className = this._div.getAttribute("defaultClassName");	this.selected = false;}function abstractParent(className) {	this._div = OAT.Dom.create("div");	this._title = OAT.Dom.create("div");	this._title.className = "title";	this._div.className = className;	this._div.setAttribute("defaultClassName",className);		this._div.appendChild(this._title);		this.selected = false;	this.select = abstractParent_select;	this.deselect = abstractParent_deselect;	this.destroy = abstractParent_destroy;	this.setTitle = abstractParent_setTitle;}/*	objekt Row		setPK(), losePK() - primary key		setFK(), loseFK() - foreign key		setIndex(), loseIndex() - index		setNN(), loseNN() - not null		setDef() - default		updateTitle() - updatne title="xxx" atribut		setTitle() - updatne title="xxx" atribut		setType() - updatne typ a defaultni hodnotu		updateSpecial() - updatne special		updateColor() - updatne pozadi dle datoveho typu		_special - drzadlo na specialni PK a FK, vpravo				pk - je-li primary key		fk - je-li foreign key		index - je-li index		nn - je-li notnull		def - defaultni hodnota		type - datovy typ (resp. jeho index)		spec - delka ci vycet*/function Row_setPK() {	var self = this;	this.pk = 1;	this.setIndex();	this.updateTitle();	this.updateSpecial();	this._title.style.fontWeight = "bold";	var process = function(elm) {		var dims = OAT.Dom.getWH(self._div);		elm.style.width = dims[0]+"px";		elm.style.zIndex = 100;	}	var callback = function(target,x,y) {		var t = false;		for (var i=0;i<table_array.length;i++) if (table_array[i]._div == target) { t = table_array[i]; }		if (!t) alert("??");		self.deselect(); 		self.table.deselect();		table_admin.loseTable();				var t1 = self.table._title.innerHTML;		var t2 = self._title.innerHTML;		var newtitle = t2 + "_" + t1;		var row = t.addRow(newtitle,0);				/* new row in this table */		t.select();		t.selectRow(row);		table_admin.manageTable(t);		row_admin.manageTable(t);		row_admin.manageRow(row);		row.setFK();		var relation = add_relation(self, "1", row, "&infin;");			}	gd.addSource(this._div,process,callback);}function Row_losePK() {	this.pk = 0;	this.updateTitle();	this.updateSpecial();	this._title.style.fontWeight = "normal";	gd.delSource(this._div);}function Row_setFK() {	this.fk = 1;	this.updateTitle();	this.updateSpecial();}function Row_loseFK() {	this.fk = 0;	this.updateTitle();	this.updateSpecial();}function Row_setNN() {	this.nn = 1;	this.updateTitle();}function Row_loseNN() {	this.nn = 0;	this.updateTitle();}function Row_setIndex() {	this.index = 1;	this.updateTitle();	this._title.style.fontStyle = "italic";}function Row_loseIndex() {	this.index = 0;	this.updateTitle();	this._title.style.fontStyle = "normal";}function Row_updateTitle() {	var str = this._title.innerHTML + ": ";	var type = get_data_type(this.type);	str += type.name	if (type.params != "") {		str += "(" + this.spec + ")";	}	str += ", default: '" + this.def + "'";	if (this.pk) {		str += ", Primary key";	}	if (this.fk) {		str += ", Foreign key";	}	if (this.nn) {		str += ", NOT NULL";	}	if (this.index) {		str += ", Index";	}	this._div.setAttribute("title",str);	this._title.setAttribute("title",str);}function Row_setDef(value) {	this.def = value;	this.updateTitle();}function Row_setSpec(value) {	this.spec = value;	this.updateTitle();}function Row_setType(type) {	this.type = parseInt(type);	this.def = "";	this.updateTitle();	this.updateColor();}function Row_updateSpecial() {	var str = "";	if (this.pk) str += "PK";	if (this.pk && this.fk) str += ",";	if (this.fk) str += "FK";	this._special.innerHTML = str;}function Row_updateColor() {	for (var i=0;i<SQL_DATA_TYPES.length;i++) {		for (var j=0;j<SQL_DATA_TYPES[i].types.length;j++) {			if (this.type == SQL_DATA_TYPES[i].types[j].type) {				this._div.style.backgroundColor = SQL_DATA_TYPES[i].color;			}		}	}}function Row_updateRelations() {	var self = this;	for (var i=0;i<relation_array.length;i++) {		var rel = relation_array[i];		if (rel.row_1 == self || rel.row_2 == self) { rel.update(); }	}}function Row_hideRelations() {	var self = this;	for (var i=0;i<relation_array.length;i++) {		var rel = relation_array[i];		if (rel.row_1 == self || rel.row_2 == self) { rel.hide(); }	}}function Row_showRelations() {	var self = this;	for (var i=0;i<relation_array.length;i++) {		var rel = relation_array[i];		if (rel.row_1 == self || rel.row_2 == self) { rel.show(); }	}}function Row(title,type) {	var self = this;	this.base = abstractParent;	this.base("row");	this.setPK = Row_setPK;	this.losePK = Row_losePK;	this.setFK = Row_setFK;	this.loseFK = Row_loseFK;	this.setIndex = Row_setIndex;	this.loseIndex = Row_loseIndex;	this.setNN = Row_setNN;	this.loseNN = Row_loseNN;	this.setType = Row_setType;	this.setSpec = Row_setSpec;	this.updateTitle = Row_updateTitle;	this.updateSpecial = Row_updateSpecial;	this.updateColor = Row_updateColor;	this.setDef = Row_setDef;	this.updateRelations = Row_updateRelations;	this.showRelations = Row_showRelations;	this.hideRelations = Row_hideRelations;	this.setTitle(title);	this._title.className = "row_title";	this._special = OAT.Dom.create("div");	this._special.className="special";	this._sipka = OAT.Dom.create("div");	this._sipka.className="sipka";	this._sipka.innerHTML = "&raquo;&nbsp;";	this._div.insertBefore(this._special,this._title);	this._div.insertBefore(this._sipka,this._title);	this.pk = 0;	this.fk = 0;	this.index = 0;	this.def = "";	this.nn = 0;	this.spec = "";	this.setType(type);	this.updateTitle();	this.updateColor();	this._div.style.height = ROW_HEIGHT+"px";		var downRef = function(event) {		self.table.selectRow(self);		var callback = function() { row_admin.manageRow(self); }		setTimeout(callback,50);	}	OAT.Dom.attach(self._div,"mousedown",downRef);	}/*	objekt Relation:		update() - upravi pozice na zaklade pozic otcu		select(), deselect() - ma svuj vlastni select, neb sestava ze 3 casti		hover(), dehover() - ma svuj vlastni hover, neb sestava ze 3 casti		parent_1, parent_2 - divy otcovskych tabulek		row_1, row_2 - divy relevantnich radek		id - id do globalni tabulky*/function Relation_show() {	this._div.style.visibility = "visible";}function Relation_hide() {	this._div.style.visibility = "hidden";}function Relation_update() {	/* 		prekresleni car:		rozlisujeme dva pripady, 		 a) kdyz maji mezi sebou tabulky horizontalni mezeru,		 b) kdyz ji nemaji	*/		/* 		k napozicovani elementu je potreba techto udaju:			- start_x, start_y, center_x, start_y			- center_x, start_y, center_x, end_y			- center_x, end_y, end_x, end_y	*/	var left_table, right_table, left_row, right_row, left_1, left_2, right_1, right_2, width_1, width_2;	var top_table_1, top_table_2, top_row_1, top_row_2;	if (parseInt(this.parent_1._div.style.left) < parseInt(this.parent_2._div.style.left)) {		left_table = this.parent_1._div;		right_table = this.parent_2._div;		left_row = this.row_1._div;		right_row = this.row_2._div;		this.elem_card_left.innerHTML = this.card_1;		this.elem_card_right.innerHTML = this.card_2;	} else {		right_table = this.parent_1._div;		left_table = this.parent_2._div;		right_row = this.row_1._div;		left_row = this.row_2._div;		this.elem_card_left.innerHTML = this.card_2;		this.elem_card_right.innerHTML = this.card_1;	}	/* ted uz vime, ktera tabulka ma levou hranu vic vlevo. spocteme dulezita cisla */	left_1 = parseInt(left_table.style.left); /* leva hrana leve tabulky */	left_2 = parseInt(right_table.style.left); /* leva hrana prave tabulky */	width_1 = parseInt(left_table.offsetWidth); /* sirka leve tabulky */	width_2 = parseInt(right_table.offsetWidth); /* sirka prave tabulky */	right_1 = left_1 + width_1; /* prava hrana leve tabulky */	right_2 = left_2 + width_2; /* prava hrana prave tabulky */	top_table_1 = parseInt(left_table.style.top); /* horni hrana leve tabulky */	top_table_2 = parseInt(right_table.style.top); /* horni hrana prave tabulky */	top_row_1 = Math.round(parseInt(left_row.offsetHeight)/2)+parseInt(left_row.offsetTop); /* posun radku v leve tabulce */	top_row_2 = Math.round(parseInt(right_row.offsetHeight)/2)+parseInt(right_row.offsetTop); /* posun radku v prave tabulce */	/* nyni detekce mezery... */	if (right_1 < left_2) {		/* tabulky mezi sebou maji mezeru, standardni postup */		var width = left_2 - left_1 - width_1 + RELATION_THICKNESS;		var start_x = left_1 + width_1 - RELATION_THICKNESS;		var start_y = top_table_1 + top_row_1;		var end_x = left_2;		var end_y = top_table_2 + top_row_2;		var center_x = start_x + Math.round(width / 2);		/* korekce kvuli borderu... */		start_x--;		this.elem_card_left.style.left = (start_x + 4) + "px";		this.elem_card_right.style.left = (end_x - 10) + "px";	} else {		var diff_1 = Math.abs(left_2 - left_1); /* rozdil vlevo */		var diff_2 = Math.abs(right_2 - right_1); /* rozdil vlevo */		if (diff_1 < diff_2 + RELATION_THICKNESS) {			/* "ucho" povede vlevo od obou tabulek */			start_x = left_1;			start_y = top_table_1 + top_row_1;			end_x = left_2;			end_y = top_table_2 + top_row_2;			center_x = start_x - RELATION_OFFSET;			this.elem_card_left.style.left = (start_x - 10) + "px";			this.elem_card_right.style.left = (end_x - 10) + "px";		} else {			/* "ucho" povede vpravo od obou tabulek */			start_x = Math.max(right_1, right_2) - RELATION_THICKNESS;			start_y = (right_1 > right_2 ? top_table_1 + top_row_1 : top_table_2 + top_row_2);			end_x = Math.min(right_1, right_2) - RELATION_THICKNESS;			end_y = (right_1 < right_2 ? top_table_1 + top_row_1 : top_table_2 + top_row_2);			center_x = start_x + RELATION_OFFSET;			/* zde se muze prohodit kardinalita, takze check...*/			if (right_2 >= right_1) {				this.elem_card_left.innerHTML = this.card_2;				this.elem_card_right.innerHTML = this.card_1;			}			/* korekce kvuli borderu... */			start_x--;			end_x--;			this.elem_card_left.style.left = (start_x + 4) + "px";			this.elem_card_right.style.left = (end_x + 4) + "px";		}	}		/* korekce aby se vesla vesela znamenka kardinality... */	start_y = start_y + 4;	end_y = end_y + 4;		/* a jedem */	this.elem_1.style.left = Math.min(start_x, center_x) + "px";	this.elem_1.style.top = start_y + "px"	this.elem_1.style.width = Math.abs(center_x - start_x) + "px";	this.elem_2.style.left = center_x + "px";	this.elem_2.style.top = Math.min(start_y, end_y) + "px";	this.elem_2.style.height = Math.abs(end_y - start_y) + RELATION_THICKNESS + "px";	this.elem_3.style.left = Math.min(center_x, end_x) + "px";	this.elem_3.style.top = end_y + "px"	this.elem_3.style.width = Math.abs(center_x - end_x) + "px";		this.elem_card_left.style.top = (start_y - 12) + "px";	this.elem_card_right.style.top = (end_y - 12) + "px";}function Relation(row_1, card_1, row_2, card_2) {	this.base = abstractParent;	this.base("relation");	OAT.Dom.unlink(this._title);	this.update = Relation_update; /* funkce na aktualizaci car */	this.show = Relation_show; /* ukazani */	this.hide = Relation_hide; /* schovani */	this.parent_1 = row_1.table; /* prvni rodicovska tabulka */	this.parent_2 = row_2.table; /* druha rodicovska tabulka */	this.row_1 = row_1; /* prvni rodicovska radka */	this.row_2 = row_2; /* druha rodicovska radka */	this.elem_1 = OAT.Dom.create("div");	this.elem_2 = OAT.Dom.create("div");	this.elem_3 = OAT.Dom.create("div");	this.elem_1.className = "line";	this.elem_2.className = "line";	this.elem_3.className = "line";	this.elem_1.style.height = RELATION_THICKNESS+"px";	this.elem_2.style.width = RELATION_THICKNESS+"px";	this.elem_3.style.height = RELATION_THICKNESS+"px";		this.elem_card_left = OAT.Dom.create("div");	this.elem_card_right = OAT.Dom.create("div");	this.elem_card_left.className = "card";	this.elem_card_right.className = "card";	this.card_1 = card_1;	this.card_2 = card_2;		this._div.appendChild(this.elem_1);	this._div.appendChild(this.elem_2);	this._div.appendChild(this.elem_3);	this._div.appendChild(this.elem_card_left);	this._div.appendChild(this.elem_card_right);	this.cardinality = 1;		var tmp = this;	var ref=function(event) {		/* show relation's properties */		var coords = OAT.Dom.eventPos(event);		var x = coords[0];		var y = coords[1];		var props = dialogs.rel_props;		props.object = tmp;		$("rel_1").innerHTML = tmp.parent_1._title.innerHTML;		$("rel_2").innerHTML = tmp.parent_2._title.innerHTML;		$("rel_type").selectedIndex = props.object.cardinality;		props.show();	}	OAT.Dom.attach(this._div,"click",ref);	this._div.style.cursor = "crosshair";}/*	objekt Table:		moveTo() - posun na zadane souradnice		addRow() - prida radku		removeRow() - odebere radku		selectRow() - vybere radku		updateWidth() - aktualizuje sirku		updateMini() - aktualizuje minimapku		updateShadow() - aktualizuje rozbite stiny		showRelations() - ukaze relevantni relace		hideRelations() - schova relevantni relace		rows => pole radku		_rows => html drzak radku*/function Table_updateMini() {	var w = parseInt(this._div.offsetWidth);	var h = parseInt(this._div.offsetHeight);	var l = parseInt(this._div.style.left);	var t = parseInt(this._div.style.top);	this._mini.style.width = Math.round(w * MAP_SIZE / DESK_SIZE) + "px";	this._mini.style.height = Math.round(h * MAP_SIZE / DESK_SIZE) + "px";	this._mini.style.left = Math.round(l * MAP_SIZE / DESK_SIZE) + "px";	this._mini.style.top = Math.round(t * MAP_SIZE / DESK_SIZE) + "px";}function Table_moveTo(x,y) {	this._div.style.left = x + "px";	this._div.style.top = y + "px";	this.updateMini();}function Table_addRow(title,type) {	var self = this;	var row = new Row(title,type); /* to je ona */	row.table = this;	this.rows.push(row); /* dame si objekt do pole */	this._rows.appendChild(row._div); /* a pridame i do HTML stromu */	this.updateWidth();	self.updateMini();	self.updateShadow();	for (var i=0;i<self.rows.length;i++) {		self.rows[i].updateRelations();		self.rows[i].showRelations();	}	return row;}function Table_removeRow(row) {	/* neprijdeme tim o nejake pekne relace? */	var list = [];	for (var i=0;i<relation_array.length;i++) {		var rel = relation_array[i];		if (rel.row_1 == row || rel.row_2 == row) {	list.push(rel); }	}	for (var i=0;i<list.length;i++) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -