├── .dockerignore ├── .gitmodules ├── Dockerfile ├── README.md ├── backend ├── asp-file │ ├── Default.aspx │ ├── Default.aspx.cs │ └── data │ │ └── default ├── cf-mysql │ ├── database.sql │ └── index.cfm ├── perl-file │ └── index.pl ├── php-blank │ └── index.php ├── php-cubrid │ ├── cubrid_mysql_compat.php │ ├── database.sql │ └── index.php ├── php-file │ ├── data │ │ └── default │ └── index.php ├── php-mysql+file │ ├── data │ │ └── default │ ├── index.php │ └── mysql_import.php ├── php-mysql │ ├── database.sql │ └── index.php ├── php-pdo │ ├── AbstractLayer.php │ ├── LayerMYSQL.php │ ├── LayerPGSQL.php │ └── index.php ├── php-postgresql │ ├── README │ ├── database.sql │ └── index.php ├── php-s3 │ └── index.php ├── php-sqlite │ ├── index.php │ └── wwwsqldesigner.sqlite └── web2py │ ├── datatypes.xml │ ├── output.xsl │ └── web2pydesigner.xml ├── db ├── cubrid │ ├── datatypes.xml │ └── output.xsl ├── mssql │ ├── datatypes.xml │ └── output.xsl ├── mysql │ ├── datatypes.xml │ └── output.xsl ├── oracle │ ├── datatypes.xml │ └── output.xsl ├── postgresql │ ├── datatypes.xml │ └── output.xsl ├── sqlalchemy │ ├── datatypes.xml │ └── output.xsl ├── sqlite │ ├── datatypes.xml │ └── output.xsl ├── vfp9 │ ├── datatypes.xml │ ├── output.xsl │ └── readme_vfp9.txt └── web2py │ ├── datatypes.xml │ └── output.xsl ├── dropbox-oauth-receiver.html ├── images ├── ScreenLayout.png ├── addingKeys.png ├── back.png ├── back_dim.png ├── columnDetail.png ├── constrained.png ├── down.gif ├── down_2_black.png ├── down_2_white.png ├── editTable.png ├── fast_forward_black.png ├── fast_rewind_black.png ├── finalExample.png ├── selectedColumn.png ├── throbber.gif ├── up.gif ├── up_2_black.png └── up_2_white.png ├── index.html ├── js ├── config.js ├── globals.js ├── io.js ├── key.js ├── keymanager.js ├── map.js ├── options.js ├── oz.js ├── relation.js ├── row.js ├── rowmanager.js ├── rubberband.js ├── table.js ├── tablemanager.js ├── toggle.js ├── visual.js ├── window.js └── wwwsqldesigner.js ├── license.txt ├── locale ├── ar.xml ├── cs.xml ├── de.xml ├── el.xml ├── en.xml ├── eo.xml ├── es.xml ├── fr.xml ├── hu.xml ├── it.xml ├── ja.xml ├── ko.xml ├── nl.xml ├── pl.xml ├── pt_BR.xml ├── ro.xml ├── ru.xml ├── sv.xml ├── tr.xml └── zh.xml └── styles ├── ie6.css ├── ie7.css ├── material-inspired.css ├── original.css └── print.css /.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile 2 | .dockerignore 3 | .gitignore 4 | .git 5 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "backend/php-s3/amazon-s3-php"] 2 | path = backend/php-s3/amazon-s3-php 3 | url = https://github.com/ericnorris/amazon-s3-php.git 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM busybox:1.37 2 | 3 | WORKDIR /var/www/html 4 | 5 | USER www-data 6 | 7 | COPY . . 8 | 9 | # Run BusyBox httpd on port 8080 10 | CMD ["busybox", "httpd", "-f", "-v", "-p", "8080"] 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | WWW SQL Designer allows users to create database designs, which can be saved/loaded and exported to SQL scripts. Various databases and languages are supported. Ability to import existing database design. 2 | 3 | [YouTube video](http://www.youtube.com/watch?v=hCQzJx9AKhU), [User manual](https://github.com/ondras/wwwsqldesigner/wiki/Manual) 4 | 5 | # About 6 | 7 | Hi and welcome to WWW SQL Designer! This tool allows you to draw and create database schemas (E-R diagrams) directly in browser, without the need for any external programs (flash). You only need JavaScript enabled. 8 | The Designer works perfectly in Chrome, Mozilla (Firefox, Seamonkey), Internet Explorer, MS Edge, Safari and Opera. 9 | 10 | Many database features are supported, such as keys, foreign key constraints, comments and indexes. You can either save your design (for further loading & modifications), print it or export as SQL script. It is possible to retrieve (import) schema from existing database. 11 | 12 | WWW SQL Designer was created by [Ondrej Zara](http://ondras.zarovi.cz/) and is built atop the [oz.js](http://code.google.com/p/oz-js/) JavaScript module. It is distributed under New BSD license. 13 | 14 | If you wish to support this project, Donate at PayPal at PayPal! 15 | 16 | # Quick Start 17 | 18 | ## Local Installation: 19 | 20 | 1. `npm install http-server -g` 21 | 2. Run `http-server` in the root of this repo to start a simple http server 22 | 3. Visit http://127.0.0.1:8080 23 | 24 | ## Docker Installation: 25 | 26 | 1. Build `docker build -t wwwsqldesigner .` 27 | 2. Run `docker run -d -p 8080:8080 wwwsqldesigner` 28 | 3. Visit http://127.0.0.1:8080 29 | 30 | ## Code Style 31 | Please use the following auto formatters to maintain the code style 32 | 33 | | File | Remarks | Formatter | 34 | |-----------------|-------------------|----------------------------------------------------------------------------------| 35 | | `/index.html` | | VSCode built-in formatter | 36 | | `/js/*.js` | 4 spaces for tabs | https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode | 37 | | `/styles/*.css` | | https://marketplace.visualstudio.com/items?itemName=aeschli.vscode-css-formatter | 38 | | `/locale/*.xml` | | https://marketplace.visualstudio.com/items?itemName=DotJoshJohnson.xml | 39 | 40 | # News 41 | 42 | ## Moved to GitHub 43 | 44 | Google Code is closing down, we are now completely migrated to GitHub. 45 | 46 | ## Experimental real-time collaboration version 47 | 48 | Thanks to Bharat Patil: http://bharat.whiteboard.jit.su/ 49 | 50 | ## New release 51 | 52 | Version 2.7 was released on 3.8.2012. This is mainly a bugfix release, although several new features (most notable localStorage support) are present. 53 | 54 | ## Release 55 | 56 | Version 2.6 was released on 22.9.2011. Several new translations (pt\_BR, sv, ar) added; VML removed; new visualization options available (show length and datatype); new DBs and backends; support for touch devices... 57 | 58 | ## Experimental clone with deletion of saved designs 59 | 60 | http://code.google.com/r/charlieyouakim-wwwsqldesigner-deleteadd/ 61 | 62 | ## New optional patch 63 | 64 | A new patch, which enable optional display of field details, was submitted by Wilson Oliveira. While this code is not ready yet to be commited into repository, everyone can download it from http://ondras.zarovi.cz/sql/wwwsqldesigner-inline_field_details_patch.zip. 65 | 66 | 67 | ## Support for CUBRID 68 | 69 | WWW SQL Designer now supports the [CUBRID database](http://www.cubrid.org/): both as a backend (using PHP) as well as datatype definition set. 70 | 71 | 72 | ## Release 73 | 74 | Version 2.5 was released on 18.6.2010. Many new features were added (hiding of sidebar, colored relation, multi-selection and multi-drag, ...), tons of bugs were fixed. 75 | 76 | ## Release 77 | 78 | Version 2.4 was released on 5.11.2009. Several outstanding issues were fixed and new locales added. 79 | 80 | ## Release 81 | 82 | Version 2.3.3 was released on 28.7.2009. This long-awaited release includes numerous fixes, compatibility improvements, new locales, backends and DB datatypes. 83 | 84 | ## Release 85 | 86 | Version 2.3.2 was released on 8.1.2009. Apart from some traditional bugfixes and locales, a new functionality is introduced - the ability to mark foregin keys between existing table fields! 87 | 88 | ## Google Code 89 | 90 | The project was recently moved to Google Code hosting, which (amongst many other things) introduces Subversion hosting. Enjoy! (The old website, http://ondras.zarovi.cz/sql/, will still exist for some time.) 91 | 92 | ## 2.0 is here 93 | 94 | Good news: A new version of WWW SQL Designer, rewritten from scratch, is now available. It has many new features, including bezier connectors, support for various customizations, localization, options and more. 95 | 96 | Bad news: This new version is not backwards compatible with 1.x, so all old localizations and XSLT templates won't work with 2.x. Sorry for inconvenience :/ 97 | -------------------------------------------------------------------------------- /backend/asp-file/Default.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="backend_asp_file_Default" validateRequest="false" %> 2 | -------------------------------------------------------------------------------- /backend/asp-file/Default.aspx.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Web; 4 | using System.Web.UI; 5 | using System.Web.UI.WebControls; 6 | using System.IO; 7 | 8 | public partial class backend_asp_file_Default : System.Web.UI.Page 9 | { 10 | protected void Page_Load(object sender, EventArgs e) 11 | { 12 | Response.Clear(); 13 | 14 | string action = Request.Params["action"].ToLower(); 15 | 16 | if (action.Equals("list")) 17 | { 18 | list(); 19 | } 20 | 21 | if (action.Equals("load")) 22 | { 23 | load(); 24 | } 25 | 26 | if (action.Equals("save")) 27 | { 28 | save(); 29 | } 30 | 31 | Response.End(); 32 | } 33 | 34 | private void list() 35 | { 36 | string[] filePaths = Directory.GetFiles(Server.MapPath("data")); 37 | foreach (string filePath in filePaths) 38 | { 39 | Response.Write(Path.GetFileName(filePath) + "\n"); 40 | } 41 | } 42 | 43 | private void load() 44 | { 45 | string fNaam = "data/" + Request.Params["keyword"].ToLower(); 46 | Response.ContentType = "text/xml"; 47 | if (File.Exists(Server.MapPath(fNaam))) 48 | { 49 | Response.WriteFile(Server.MapPath(fNaam)); 50 | } 51 | else 52 | { 53 | Response.StatusCode = 404; 54 | } 55 | } 56 | 57 | private void save() 58 | { 59 | string fNaam = "data/" + Request.Params["keyword"].ToLower(); 60 | FileStream fs = new FileStream(Server.MapPath(fNaam), FileMode.Create); 61 | 62 | byte[] buffer = new byte[1024]; 63 | int count; 64 | while ((count = Request.InputStream.Read(buffer, 0, buffer.Length)) != 0) 65 | fs.Write(buffer, 0, count); 66 | 67 | fs.Close(); 68 | 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /backend/asp-file/data/default: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | INTEGERVARCHAR(100)NULLid
INTEGERVARCHAR(100)NULLid
INTEGERINTEGERVARCHAR(100)id
INTEGERINTEGERINTEGERTIMESTAMPid
-------------------------------------------------------------------------------- /backend/cf-mysql/database.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS `wwwsqldesigner`; 2 | 3 | CREATE TABLE `wwwsqldesigner` ( 4 | `keyword` varchar(30) NOT NULL default '', 5 | `data` mediumtext, 6 | `dt` timestamp, 7 | PRIMARY KEY (`keyword`) 8 | ); 9 | -------------------------------------------------------------------------------- /backend/perl-file/index.pl: -------------------------------------------------------------------------------- 1 | #!d:\perl\bin\perl.exe -wT 2 | # C.SUDRE - cyril.sudre@edf.fr 3 | 4 | use strict; 5 | use File::Basename; 6 | use IO::File; 7 | use CGI; 8 | 9 | # Directory for datafile. Take care to untaint current execution dir for CGI while -T if you 10 | # choose to keep datafile in the same dir than cgi script. 11 | my $base_dir = (dirname($0) =~ /(.*)/)[0] . "/data/"; 12 | 13 | my $query = new CGI; 14 | my $action = $query->url_param('action') || ''; 15 | 16 | # List available files to load 17 | if($action eq "list") { 18 | print $query->header('text/plain'); 19 | my @files = glob($base_dir . "*"); 20 | for (@files) { 21 | print(basename($_) . "\n"); 22 | } 23 | } 24 | 25 | # Save generated XML to file 26 | elsif($action eq "save") { 27 | # Accept names with spaces and/or extention 28 | my $fname_parameter = ($query->url_param('keyword') =~ /([\w\s]+(\.\w+)*)/)[0]; # Untaint 29 | if (! defined $fname_parameter) { die "Invalid filename!"; } 30 | my $filename = $base_dir . $fname_parameter; 31 | 32 | my $fh = new IO::File ">" . $filename; 33 | if (defined $fh) { 34 | # Win32... 35 | binmode $fh; 36 | 37 | #my $xml = $query->query_string(); 38 | my $xml = $query->param('POSTDATA'); 39 | 40 | # Decode 41 | $xml =~ tr/+/ /; 42 | $xml =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; 43 | 44 | print $fh $xml; 45 | 46 | $fh->close; 47 | } 48 | 49 | print $query->header(-status => "201 File created"); 50 | } 51 | 52 | # Load XML from file 53 | elsif($action eq "load") { 54 | # Accept names with spaces and/or extention 55 | my $fname_parameter = ($query->url_param('keyword') =~ /([\w\s]+(\.\w+)*)/)[0]; # Untaint 56 | my $filename = $base_dir . $fname_parameter; 57 | 58 | undef $/; # Slurp 59 | my $fh = new IO::File "< " . $filename; 60 | 61 | if (defined $fh) { 62 | # Need this for UTF-8 AND Win32... 63 | binmode($fh,":utf8"); 64 | 65 | my $content = <$fh>; 66 | $fh->close; 67 | 68 | print $query->header("text/xml"), $content; 69 | } else { print $query->header(-status => "404 Not Found"); } 70 | } 71 | 72 | else { 73 | print $query->header(-status => "501 Not Implemented"); 74 | } 75 | -------------------------------------------------------------------------------- /backend/php-blank/index.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /backend/php-cubrid/database.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE `wwwsqldesigner`; 2 | 3 | CREATE TABLE `wwwsqldesigner` ( 4 | `keyword` varchar(30) NOT NULL, 5 | `data` string, 6 | `dt` timestamp, 7 | PRIMARY KEY (`keyword`) 8 | ); 9 | -------------------------------------------------------------------------------- /backend/php-file/data/default: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | INTEGERVARCHAR(100)NULLid
INTEGERVARCHAR(100)NULLid
INTEGERINTEGERVARCHAR(100)id
INTEGERINTEGERINTEGERTIMESTAMPid
-------------------------------------------------------------------------------- /backend/php-file/index.php: -------------------------------------------------------------------------------- 1 | 36 | -------------------------------------------------------------------------------- /backend/php-mysql+file/data/default: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | INTEGERVARCHAR(100)NULLid
INTEGERVARCHAR(100)NULLid
INTEGERINTEGERVARCHAR(100)id
INTEGERINTEGERINTEGERTIMESTAMPid
-------------------------------------------------------------------------------- /backend/php-mysql+file/index.php: -------------------------------------------------------------------------------- 1 | 20 | * @since 10-July-2009 21 | */ 22 | 23 | // Define these constants for importing from your MySQL database. MySQL 24 | // usually stores your metadata inside the `information_schema` database 25 | // on the `TABLES` table 26 | define('HOST', 'localhost'); 27 | define('USER', 'root'); 28 | define('PASS', 'password'); 29 | define('DB', 'information_schema'); 30 | 31 | // This constant is the regular expression used to validate the filename 32 | define('FILENAME_REGEX', '^[A-Za-z0-9_]{1,100}$'); 33 | 34 | // Pull the action variable from the GET and validate it 35 | $action = isset($_GET['action']) ? $_GET['action'] : ''; 36 | 37 | if(!in_array($action, array('list','save','load','import'))) { 38 | header('HTTP/1.0 501 Not Implemented'); 39 | exit; 40 | } 41 | 42 | // Save and Load actions must have the 'keyword' GET variable to work, 43 | // I've used a regular expression to keep filenames simple and valid 44 | // so that they don't do anything unintended. 45 | if($action == 'save' || $action == 'load') { 46 | if(!isset($_GET['keyword']) || !ereg(FILENAME_REGEX, $_GET['keyword'])) { 47 | header('HTTP/1.0 400 Bad Request'); 48 | exit; 49 | } 50 | } 51 | 52 | // The import action requires the database variable to be set 53 | if($action == 'import' && !isset($_GET['database'])) { 54 | header('HTTP/1.0 400 Bad Request'); 55 | exit; 56 | } 57 | 58 | // Based on the action variable return appropriate data 59 | switch($action) { 60 | case 'list': 61 | // List all files in the data directory 62 | foreach (glob('data/*') as $file) 63 | echo basename($file)."\n"; 64 | break; 65 | 66 | case 'save': 67 | // Open the file for writing 68 | $f = fopen('data/'.$_GET['keyword'], 'w'); 69 | 70 | // Read in the contents of the XML file from input 71 | $data = file_get_contents('php://input'); 72 | if (get_magic_quotes_gpc() || get_magic_quotes_runtime()) { 73 | $data = stripslashes($data); 74 | } 75 | 76 | // Write the data to the file and close the file 77 | fwrite($f, $data); 78 | fclose($f); 79 | 80 | // Write the response HTTP code 81 | header('HTTP/1.0 201 Created'); 82 | break; 83 | 84 | case 'load': 85 | $keyword = 'data/' . $_GET['keyword']; 86 | if (!file_exists($keyword)) { 87 | header('HTTP/1.0 404 Not Found'); 88 | } else { 89 | header('Content-type: text/xml'); 90 | echo file_get_contents($keyword); 91 | } 92 | break; 93 | 94 | case 'import': 95 | // The import command may take some time, so make sure that PHP won't timeout 96 | set_time_limit(0); 97 | 98 | // I've included the mysql_import function from the php_mysql plugin as its 99 | // own file for future compatibility and to take so much code out of this one 100 | // file. 101 | require_once 'mysql_import.php'; 102 | 103 | // Connect to the MySQL Database, short circuiting ensures that this code will 104 | // execute without error 105 | if (!mysql_connect(HOST,USER,PASS) || !mysql_select_db(DB)) { 106 | header("HTTP/1.0 503 Service Unavailable"); 107 | exit; 108 | } 109 | 110 | header("Content-type: text/xml"); 111 | echo import(); 112 | 113 | break; 114 | } 115 | ?> 116 | -------------------------------------------------------------------------------- /backend/php-mysql+file/mysql_import.php: -------------------------------------------------------------------------------- 1 | '; 12 | for ($i=1;$i'; 20 | $comment = (isset($row["TABLE_COMMENT"]) ? $row["TABLE_COMMENT"] : ""); 21 | if ($comment) { $xml .= ''.$comment.''; } 22 | 23 | $q = "SELECT * FROM COLUMNS WHERE TABLE_NAME = '".$table."' AND TABLE_SCHEMA = '".$db."'"; 24 | $result2 = mysqli_query($mysqli,$q); 25 | while ($row = mysqli_fetch_array($result2)) { 26 | $name = $row["COLUMN_NAME"]; 27 | $type = $row["COLUMN_TYPE"]; 28 | $comment = (isset($row["COLUMN_COMMENT"]) ? $row["COLUMN_COMMENT"] : ""); 29 | $null = ($row["IS_NULLABLE"] == "YES" ? "0" : "1"); 30 | $def = $row["COLUMN_DEFAULT"]; 31 | $ai = (preg_match("/auto_increment/i",$row["EXTRA"]) ? "1" : "0"); 32 | if ($def == "NULL") { $def = ""; } 33 | $xml .= ''; 34 | $xml .= ''.strtoupper($type).''; 35 | $xml .= ''.$def.''; 36 | if ($comment) { $xml .= ''.$comment.''; } 37 | 38 | /* fk constraints */ 39 | $q = "SELECT 40 | REFERENCED_TABLE_NAME AS 'table', REFERENCED_COLUMN_NAME AS 'column' 41 | FROM KEY_COLUMN_USAGE k 42 | LEFT JOIN TABLE_CONSTRAINTS c 43 | ON k.CONSTRAINT_NAME = c.CONSTRAINT_NAME 44 | WHERE CONSTRAINT_TYPE = 'FOREIGN KEY' 45 | AND c.TABLE_SCHEMA = '".$db."' AND c.TABLE_NAME = '".$table."' 46 | AND k.COLUMN_NAME = '".$name."'"; 47 | $result3 = mysqli_query($mysqli,$q); 48 | 49 | while ($row = mysqli_fetch_array($result3)) { 50 | $xml .= ''; 51 | } 52 | 53 | $xml .= ''; 54 | } 55 | 56 | /* keys */ 57 | $q = "SELECT * FROM STATISTICS WHERE TABLE_NAME = '".$table."' AND TABLE_SCHEMA = '".$db."' ORDER BY SEQ_IN_INDEX ASC"; 58 | $result2 = mysqli_query($mysqli,$q); 59 | $idx = array(); 60 | 61 | while ($row = mysqli_fetch_array($result2)) { 62 | $name = $row["INDEX_NAME"]; 63 | if (array_key_exists($name, $idx)) { 64 | $obj = $idx[$name]; 65 | } else { 66 | $type = $row["INDEX_TYPE"]; 67 | $t = "INDEX"; 68 | if ($type == "FULLTEXT") { $t = $type; } 69 | if ($row["NON_UNIQUE"] == "0") { $t = "UNIQUE"; } 70 | if ($name == "PRIMARY") { $t = "PRIMARY"; } 71 | 72 | $obj = array( 73 | "columns" => array(), 74 | "type" => $t 75 | ); 76 | } 77 | 78 | $obj["columns"][] = $row["COLUMN_NAME"]; 79 | $idx[$name] = $obj; 80 | } 81 | 82 | foreach ($idx as $name=>$obj) { 83 | $xml .= ''; 84 | for ($i=0;$i'; 87 | } 88 | $xml .= ''; 89 | } 90 | $xml .= ""; 91 | } 92 | $arr[] = $xml; 93 | $arr[] = ''; 94 | return implode("\n",$arr); 95 | } 96 | ?> 97 | -------------------------------------------------------------------------------- /backend/php-mysql/database.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS `wwwsqldesigner`; 2 | 3 | CREATE TABLE `wwwsqldesigner` ( 4 | `keyword` varchar(30) NOT NULL default '', 5 | `data` mediumtext, 6 | `dt` timestamp, 7 | PRIMARY KEY (`keyword`) 8 | ); 9 | -------------------------------------------------------------------------------- /backend/php-pdo/AbstractLayer.php: -------------------------------------------------------------------------------- 1 | 28 | -------------------------------------------------------------------------------- /backend/php-postgresql/README: -------------------------------------------------------------------------------- 1 | Postgresql server backend for wwwsqldesigner 2 | version 0.1 beta 3 | 4 | 5 | Instructions: 6 | 7 | If you want to save/load your diagrams in a database... 8 | 9 | 1) Create a login role called 'wwwsqldesigner' using 'xxx' as password. 10 | 2) Create a databse called 'wwwsqldesigner' with... 11 | owner as 'wwwsqldesigner', 12 | UTF-8 encoding, 13 | and template0 14 | 3) Connect to this newly created database and run the database.sql script 15 | located in this folder. 16 | 4) Edit config.js located in the js directory... 17 | change default database to postgresql, 18 | add postgresql to available backends 19 | 5) If you want to import the schema of an an already created database, 20 | edit the index.php script located in this directory 21 | -------------------------------------------------------------------------------- /backend/php-postgresql/database.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS wwwsqldesigner; 2 | 3 | CREATE TABLE wwwsqldesigner ( 4 | keyword varchar(30) NOT NULL, 5 | xmldata text, 6 | dt timestamp, 7 | PRIMARY KEY (keyword) 8 | ); 9 | -------------------------------------------------------------------------------- /backend/php-s3/index.php: -------------------------------------------------------------------------------- 1 | getBucket($bucket); 19 | foreach ($response->body->Contents as $content) { 20 | $key = $content->Key; 21 | if (0 === strpos($key, $path.'/') && $key != $path.'/') 22 | echo substr($key, strlen($path)+1)."\n"; 23 | } 24 | break; 25 | case "save": 26 | $keyword = (isset($_GET["keyword"]) ? $_GET["keyword"] : ""); 27 | $data = file_get_contents("php://input"); 28 | $client->putObject($bucket, $path.'/'.$keyword, $data, array('Content-Type' => 'text/xml')); 29 | header("HTTP/1.0 201 Created"); 30 | break; 31 | case "load": 32 | $keyword = (isset($_GET["keyword"]) ? $_GET["keyword"] : ""); 33 | $file = $client->getObject($bucket, $path.'/'.$keyword); 34 | if ($file->body) { 35 | header("Content-type: text/xml"); 36 | echo $file->body; 37 | } else { 38 | header("HTTP/1.0 404 Not Found"); 39 | } 40 | break; 41 | default: header("HTTP/1.0 501 Not Implemented"); 42 | } 43 | ?> 44 | -------------------------------------------------------------------------------- /backend/php-sqlite/index.php: -------------------------------------------------------------------------------- 1 | exec( $initSQL ); 26 | return ($res !== false); 27 | } 28 | return true; 29 | } 30 | function import() { 31 | header( 'HTTP/1.0 501 Not Implemented' ); 32 | } 33 | 34 | $a = (isset($_GET["action"]) ? $_GET["action"] : false); 35 | switch( $a ) { 36 | case 'list' : 37 | setup_saveloadlist(); 38 | if( !connect() ) { 39 | header( 'HTTP/1.0 503 Service Unavailable' ); 40 | break; 41 | } 42 | $result = $pdo->query( "SELECT keyword FROM ".TABLE); 43 | $data = $result->fetchAll(); 44 | if( count($data) > 0 ) { 45 | foreach ($data as $row) { 46 | echo $row['keyword']."\n"; 47 | } 48 | } else { 49 | echo "--No Designs Saved"; 50 | } 51 | break; 52 | case 'save' : 53 | setup_saveloadlist(); 54 | if( !connect() ) { 55 | header( 'HTTP/1.0 503 Service Unavailable' ); 56 | break; 57 | } 58 | 59 | $keyword = ( isset( $_GET['keyword'] ) ? $_GET['keyword'] : '' ); 60 | $data = file_get_contents( "php://input" ); 61 | if( get_magic_quotes_gpc() 62 | || get_magic_quotes_runtime() ) { 63 | $data = stripslashes( $data ); 64 | } 65 | 66 | $statement = $pdo->prepare("SELECT COUNT(*) AS c FROM ".TABLE." WHERE keyword = ?"); 67 | $statement->execute(array($keyword)); 68 | $result = $statement->fetchAll(); 69 | if ($result[0]["c"] > 0) { 70 | $result = $pdo->prepare( "UPDATE ".TABLE." SET data = ? WHERE keyword = ?")->execute(array($data, $keyword)); 71 | } else { 72 | $result = $pdo->prepare( "INSERT INTO ".TABLE." (keyword, data) VALUES (?, ?)")->execute(array($keyword, $data)); 73 | } 74 | 75 | if( !$result ) { 76 | header( 'HTTP/1.0 500 Internal Server Error' ); 77 | } else { 78 | header( 'HTTP/1.0 201 Created' ); 79 | } 80 | break; 81 | case 'load' : 82 | setup_saveloadlist(); 83 | if ( !connect() ) { 84 | header( 'HTTP/1.0 503 Service Unavailable' ); 85 | break; 86 | } 87 | $keyword = ( isset( $_GET['keyword'] ) ? $_GET['keyword'] : '' ); 88 | 89 | $statement = $pdo->prepare( "SELECT data FROM ".TABLE." WHERE keyword = ?"); 90 | $statement->execute(array($keyword)); 91 | $data = $statement->fetchAll(); 92 | 93 | if( !count($data) ) { 94 | header( 'HTTP/1.0 404 Not Found' ); 95 | } else { 96 | header( 'Content-type: text/xml' ); 97 | echo $data[0]['data']; 98 | } 99 | break; 100 | case 'import' : 101 | setup_import(); 102 | default: 103 | header( 'HTTP/1.0 501 Not Implemented' ); 104 | } 105 | 106 | 107 | /* 108 | list: 501/200 109 | load: 501/200/404 110 | save: 501/201 111 | import: 501/200 112 | */ 113 | ?> 114 | -------------------------------------------------------------------------------- /backend/php-sqlite/wwwsqldesigner.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/backend/php-sqlite/wwwsqldesigner.sqlite -------------------------------------------------------------------------------- /backend/web2py/datatypes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /backend/web2py/web2pydesigner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | integer 27 | NULL 28 | 29 | 30 | string(50) 31 | 'newproject' 32 | 33 | 34 | datetime 35 | 'request.now' 36 | 37 | 38 | integer 39 | NULL 40 | 41 | 42 | 43 | integer 44 | NULL 45 | 46 | 47 | 48 | boolean 49 | False 50 | 51 | 52 | id 53 | 54 |
55 | 56 | 57 | integer 58 | NULL 59 | 60 | 61 | integer 62 | NULL 63 | 64 | 65 | 66 | datetime 67 | 'request.now' 68 | 69 | 70 | blob 71 | 72 | 73 | id 74 | 75 |
76 | 77 | 78 | integer 79 | NULL 80 | 81 | 82 | string 83 | 84 | 85 | id 86 | 87 |
88 | 89 | 90 | integer 91 | NULL 92 | 93 | 94 | integer 95 | NULL 96 | 97 | 98 | 99 | integer 100 | NULL 101 | 102 | 103 | 104 | id 105 | 106 |
107 | 108 | 109 | integer 110 | NULL 111 | 112 | 113 | string 114 | 115 | 116 | id 117 | 118 |
119 | 120 | 121 | integer 122 | NULL 123 | 124 | 125 | string(50) 126 | 127 | 128 | string(50) 129 | 130 | 131 | string 132 | string(80) 133 | 'email@domain.com' 134 | 135 | 136 | string(50) 137 | 138 | 139 | password 140 | 141 | 142 | id 143 | 144 |
145 |
146 | -------------------------------------------------------------------------------- /db/cubrid/datatypes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /db/cubrid/output.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -- 6 | -- CUBRID SQL Script 7 | -- 8 | 9 | 10 | 11 | 12 | -- Table ` 13 | 14 | ` 15 | 16 | 17 | 18 | 19 | 20 | -- DROP TABLE ` 21 | 22 | `; 23 | 24 | 25 | 26 | 27 | 28 | CREATE TABLE ` 29 | 30 | ` ( 31 | 32 | 33 | 34 | ` 35 | 36 | ` 37 | 38 | 39 | 40 | 41 | 42 | NOT NULL 43 | 44 | 45 | 46 | AUTO_INCREMENT 47 | 48 | 49 | 50 | DEFAULT 51 | 52 | 53 | 54 | 55 | 56 | , 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | , 65 | 66 | 67 | 68 | PRIMARY KEY ( 69 | UNIQUE KEY ( 70 | KEY ( 71 | 72 | 73 | 74 | `` 75 | 76 | , 77 | 78 | 79 | ) 80 | 81 | 82 | 83 | ); 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -- Foreign Keys 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | ALTER TABLE ` 102 | 103 | ` ADD FOREIGN KEY (` 104 | 105 | `) REFERENCES ` 106 | 107 | ` (` 108 | 109 | `); 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | -- Test Data 122 | 123 | 124 | 125 | 126 | 127 | -- INSERT INTO ` 128 | ` ( 129 | 130 | ` 131 | 132 | ` 133 | 134 | , 135 | 136 | 137 | ) VALUES 138 | -- ( 139 | 140 | '' 141 | 142 | , 143 | 144 | 145 | ); 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | -------------------------------------------------------------------------------- /db/mssql/datatypes.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /db/mssql/output.xsl: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | CREATE TABLE [ 15 | 16 | ] ( 17 | 18 | 19 | [ 20 | 21 | ] 22 | 23 | 24 | 25 | 26 | 27 | NOT NULL 28 | 29 | 30 | 31 | IDENTITY (1, 1) 32 | 33 | 34 | 35 | , 36 | 37 | 38 | 39 | -- 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | , 52 | 53 | 54 | 55 | CONSTRAINT 56 | 57 | 58 | 59 | PRIMARY KEY ( 60 | FULLTEXT KEY ( 61 | UNIQUE KEY ( 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | [] 70 | 71 | , 72 | 73 | 74 | ) 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | ) ON [PRIMARY] 85 | GO 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | ALTER TABLE [ 95 | 96 | ] ADD FOREIGN KEY ( 97 | 98 | ) REFERENCES [ 99 | 100 | ] ([ 101 | 102 | ]); 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | CREATE INDEX 114 | 115 | ON [ 116 | 117 | ] ([ 118 | 119 | 120 | ] 121 | 122 | , 123 | 124 | 125 | ); 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | -------------------------------------------------------------------------------- /db/mysql/datatypes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /db/oracle/datatypes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /db/postgresql/datatypes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /db/postgresql/output.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | CREATE TABLE 30 | 31 | ( 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 46 | BIGSERIAL 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | NOT NULL 56 | 57 | 58 | 59 | 60 | DEFAULT 61 | 62 | 63 | 64 | 65 | 66 | 67 | /* 68 | 69 | */ 70 | 71 | 72 | 73 | , 74 | 75 | 76 | 77 | 78 | 79 | ); 80 | 81 | 82 | 83 | 84 | 85 | 86 | ALTER TABLE 87 | 88 | 89 | 90 | ADD CONSTRAINT 91 | 92 | _pkey 93 | 94 | PRIMARY KEY ( 95 | UNIQUE ( 96 | KEY ( 97 | 98 | 99 | 100 | 101 | 102 | , 103 | 104 | 105 | ); 106 | 107 | 108 | 109 | 110 | 111 | COMMENT ON TABLE " 112 | 113 | " IS ' 114 | 115 | 116 | 117 | 118 | 119 | '; 120 | 121 | 122 | 123 | 124 | 125 | 126 | COMMENT ON COLUMN " 127 | 128 | "." 129 | 130 | " IS ' 131 | 132 | 133 | 134 | 135 | 136 | '; 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | ALTER TABLE 151 | 152 | ADD CONSTRAINT 153 | 154 | _ 155 | 156 | _fkey 157 | FOREIGN KEY ( 158 | 159 | ) REFERENCES 160 | 161 | ( 162 | 163 | ); 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | -------------------------------------------------------------------------------- /db/sqlalchemy/datatypes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /db/sqlite/datatypes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /db/sqlite/output.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | CREATE TABLE ' 9 | 10 | ' ( 11 | 12 | 13 | 14 | 15 | '' 16 | 17 | 18 | 19 | 20 | NOT NULL 21 | 22 | 23 | 24 | 25 | DEFAULT 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | PRIMARY KEY 35 | 36 | 37 | 38 | 39 | 40 | 41 | AUTOINCREMENT 42 | 43 | 44 | 45 | 46 | REFERENCES ' 47 | 48 | ' (' 49 | 50 | ') 51 | 52 | 53 | 54 | , 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | , 63 | 64 | UNIQUE ( 65 | 66 | 67 | 68 | 69 | , 70 | 71 | 72 | ) 73 | 74 | 75 | 76 | 77 | 78 | ); 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | CREATE INDEX ' 88 | 89 | ' ON ' 90 | 91 | ' (' 92 | 93 | 94 | 95 | ', ' 96 | 97 | 98 | '); 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /db/vfp9/datatypes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /db/vfp9/readme_vfp9.txt: -------------------------------------------------------------------------------- 1 | 07.12.2009 2 | vfp9 support for WwwSQLDesigner 3 | by zvolsky@seznam.cz 4 | 5 | 6 | Installation: 7 | ------------- 8 | vfp9 support is standard part of WwwSQLDesigner - simple choose database vfp9 in Settings. 9 | 10 | You can change the generated script by patch/replace of db\vfp9\output.xsl. 11 | 12 | 13 | WwwSQLDesigner basics: 14 | ---------------------- 15 | To start click Index.html. 16 | Never use Page Refresh (F5) - data will be lost! 17 | Use Save button to generate FoxPro script with CREATE TABLEs. 18 | Use Save/Read and Save XML buttons to generate XML and copy-paste it into text file to save your work. 19 | Use Save/Read and Read XML buttons to continue work. 20 | 21 | 22 | Use of VFP9 support: 23 | -------------------- 24 | Textbox "Default" in Field adding has different meaning. Here you can enter all foxpro keywords, which follow field definition. 25 | No word "DEFAULT" is added. To use some DEFAULT, write "DEFAULT value". If you let just "NULL" in Textbox "Default", 26 | you will receive FoxPro error. Write "DEFAULT .NULL." instead. 27 | 28 | Data types Binary aren't in list. Use standard Varchar, Character, Memo instead and write "NOCPTRANS" into the "Default" textbox. 29 | 30 | Data type "Integer (not key)" differents (from the primary/foreign key) just in its color (but generates standard Integer). 31 | 32 | 33 | 34 | Generated VFP script contains (optional) parameters, which change behavior of CREATE TABLE commands: 35 | teLongName gives a possibility to generate FREE or NAME keywords. 36 | tcCommand can fire immediately after each CREATE TABLE (new table is selected). 37 | F.e. "= MyProc( ALIAS(), m.lcTableComment, @lacComments )" gives access to alias and all comments from model inside MyProc() procedure. 38 | tcPath can control path, where tables will be created. 39 | 40 | Comments aren't copied directly into target database. 41 | Instead of this, they are prepared in lcTableComment variable (table comment) and in lacComments array (field comments) before &tcCommand call. 42 | So you can work with comments in your user defined code as you want. 43 | -------------------------------------------------------------------------------- /db/web2py/datatypes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /dropbox-oauth-receiver.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 |

Dropbox sign-in successful

11 | 12 |

Please close this window.

13 | 14 | -------------------------------------------------------------------------------- /images/ScreenLayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/ScreenLayout.png -------------------------------------------------------------------------------- /images/addingKeys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/addingKeys.png -------------------------------------------------------------------------------- /images/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/back.png -------------------------------------------------------------------------------- /images/back_dim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/back_dim.png -------------------------------------------------------------------------------- /images/columnDetail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/columnDetail.png -------------------------------------------------------------------------------- /images/constrained.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/constrained.png -------------------------------------------------------------------------------- /images/down.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/down.gif -------------------------------------------------------------------------------- /images/down_2_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/down_2_black.png -------------------------------------------------------------------------------- /images/down_2_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/down_2_white.png -------------------------------------------------------------------------------- /images/editTable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/editTable.png -------------------------------------------------------------------------------- /images/fast_forward_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/fast_forward_black.png -------------------------------------------------------------------------------- /images/fast_rewind_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/fast_rewind_black.png -------------------------------------------------------------------------------- /images/finalExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/finalExample.png -------------------------------------------------------------------------------- /images/selectedColumn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/selectedColumn.png -------------------------------------------------------------------------------- /images/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/throbber.gif -------------------------------------------------------------------------------- /images/up.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/up.gif -------------------------------------------------------------------------------- /images/up_2_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/up_2_black.png -------------------------------------------------------------------------------- /images/up_2_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ondras/wwwsqldesigner/949e6fad9725fc8c4cf2b9b63eb779173b66e5ea/images/up_2_white.png -------------------------------------------------------------------------------- /js/config.js: -------------------------------------------------------------------------------- 1 | var CONFIG = { 2 | AVAILABLE_DBS: [ 3 | "mysql", 4 | "sqlite", 5 | "web2py", 6 | "mssql", 7 | "postgresql", 8 | "oracle", 9 | "sqlalchemy", 10 | "vfp9", 11 | "cubrid", 12 | "web2py", 13 | ], 14 | DEFAULT_DB: "mysql", 15 | 16 | AVAILABLE_LOCALES: [ 17 | "ar", 18 | "cs", 19 | "de", 20 | "el", 21 | "en", 22 | "eo", 23 | "es", 24 | "fr", 25 | "hu", 26 | "it", 27 | "ja", 28 | "ko", 29 | "nl", 30 | "pl", 31 | "pt_BR", 32 | "ro", 33 | "ru", 34 | "sv", 35 | "tr", 36 | "zh", 37 | ], 38 | DEFAULT_LOCALE: "en", 39 | 40 | AVAILABLE_BACKENDS: [ 41 | "php-mysql", 42 | "php-s3", 43 | "php-blank", 44 | "php-file", 45 | "php-sqlite", 46 | "php-mysql+file", 47 | "php-postgresql", 48 | "php-pdo", 49 | "perl-file", 50 | "php-cubrid", 51 | "asp-file", 52 | "web2py", 53 | ], 54 | DEFAULT_BACKEND: ["php-mysql"], 55 | 56 | RELATION_THICKNESS: 2, 57 | RELATION_SPACING: 15, 58 | RELATION_COLORS: ["#000", "#800", "#080", "#008", "#088", "#808", "#088"], 59 | 60 | RELATION_HIGHLIGHTED_COLOR: "#FF0000", 61 | RELATION_HIGHLIGHTED_THICKNESS: 5, 62 | 63 | STYLES: ["material-inspired", "original"], 64 | MATERIAL_RELATION_COLORS: [ 65 | "#323232", 66 | "#F44336", 67 | "#E91E63", 68 | "#9C27B0", 69 | "#3F51B5", 70 | "#673AB7", 71 | "#2196F3", 72 | "#03A9F4", 73 | "#00BCD4", 74 | "#009688", 75 | "#4CAF50", 76 | "#8BC34A", 77 | "#CDDC39", 78 | "#FFC107", 79 | "#FF5722", 80 | "#795548", 81 | "#607D8B", 82 | ], 83 | 84 | STATIC_PATH: "", 85 | XHR_PATH: "", 86 | 87 | /* 88 | * The key below needs to be set individually by you if you want to use the Dropbox load/save feature. 89 | * To do that, first sign up with Dropbox (may require a specific developer / SDK sign-up), go to 90 | * https://www.dropbox.com/developers/apps and use "Create app" to add a new "Dropbox API app". 91 | * Limit the app to its own folder. Call it, for instance, "wwwsqldesigner". 92 | * Under "OAuth 2", "Redirect URIs", add the URL to the "dropbox-oauth-receiver.html" file on your server. 93 | * E.g, if you install wwwsqldesigner on your local web server under "http://localhost/sqldesigner/", then add 94 | * http://localhost/sqldesigner/dropbox-oauth-receiver.html as a Redirection URI. 95 | * Copy the shown "App key" and paste it here below instead of the null value: 96 | */ 97 | DROPBOX_KEY: null, // such as: "d6stdscwewhl6sa" 98 | }; 99 | -------------------------------------------------------------------------------- /js/globals.js: -------------------------------------------------------------------------------- 1 | function _(str) { 2 | /* getText */ 3 | if (!(str in window.LOCALE)) { 4 | return str; 5 | } 6 | return window.LOCALE[str]; 7 | } 8 | 9 | if (typeof String.prototype.endsWith !== "function") { 10 | String.prototype.endsWith = function (suffix) { 11 | return this.indexOf(suffix, this.length - suffix.length) !== -1; 12 | }; 13 | } 14 | 15 | if (!String.prototype.trim) { 16 | String.prototype.trim = function () { 17 | return this.match(/^\s*([\s\S]*?)\s*$/)[1]; 18 | }; 19 | } 20 | 21 | if (!String.trim) { 22 | String.trim = function (obj) { 23 | return String.prototype.trim.call(obj); 24 | }; 25 | } 26 | 27 | if (!Object.create) { 28 | Object.create = function (o) { 29 | if (arguments.length > 1) { 30 | throw new Error( 31 | "Object.create polyfill only accepts the first parameter" 32 | ); 33 | } 34 | var tmp = function () {}; 35 | tmp.prototype = o; 36 | return new tmp(); 37 | }; 38 | } 39 | 40 | var DATATYPES = false; 41 | var LOCALE = {}; 42 | var SQL = { 43 | _subscribers: {}, 44 | 45 | publish: function (message, publisher, data) { 46 | var subscribers = this._subscribers[message] || []; 47 | var obj = { 48 | target: publisher, 49 | data: data, 50 | }; 51 | subscribers.forEach(function (subscriber) { 52 | subscriber(obj); 53 | }); 54 | }, 55 | 56 | subscribe: function (message, subscriber) { 57 | if (!(message in this._subscribers)) { 58 | this._subscribers[message] = []; 59 | } 60 | var index = this._subscribers[message].indexOf(subscriber); 61 | if (index == -1) { 62 | this._subscribers[message].push(subscriber); 63 | } 64 | }, 65 | 66 | unsubscribe: function (message, subscriber) { 67 | var index = this._subscribers[message].indexOf(subscriber); 68 | if (index > -1) { 69 | this._subscribers[message].splice(index, 1); 70 | } 71 | }, 72 | 73 | escape: function (str) { 74 | return str 75 | .replace(/&/g, "&") 76 | .replace(/>/g, ">") 77 | .replace(/\n'; 64 | for (var i = 0; i < this.rows.length; i++) { 65 | var r = this.rows[i]; 66 | xml += "" + r.getTitle() + "\n"; 67 | } 68 | xml += "\n"; 69 | return xml; 70 | }; 71 | 72 | SQL.Key.prototype.fromXML = function (node) { 73 | this.setType(node.getAttribute("type")); 74 | this.setName(node.getAttribute("name")); 75 | var parts = node.getElementsByTagName("part"); 76 | for (var i = 0; i < parts.length; i++) { 77 | var name = parts[i].firstChild.nodeValue; 78 | var row = this.owner.findNamedRow(name); 79 | this.addRow(row); 80 | } 81 | }; 82 | -------------------------------------------------------------------------------- /js/map.js: -------------------------------------------------------------------------------- 1 | /* --------------------- minimap ------------ */ 2 | 3 | SQL.Map = function (owner) { 4 | this.owner = owner; 5 | SQL.Visual.apply(this); 6 | this.dom.container = OZ.$("minimap"); 7 | this.width = this.dom.container.offsetWidth - 2; 8 | this.height = this.dom.container.offsetHeight - 2; 9 | 10 | this.dom.port = OZ.DOM.elm("div", { className: "port", zIndex: 1 }); 11 | this.dom.container.appendChild(this.dom.port); 12 | this.sync = this.sync.bind(this); 13 | 14 | this.flag = false; 15 | this.sync(); 16 | 17 | OZ.Event.add(window, "resize", this.sync); 18 | OZ.Event.add(window, "scroll", this.sync); 19 | OZ.Event.add(this.dom.container, "mousedown", this.down.bind(this)); 20 | OZ.Event.add(this.dom.container, "touchstart", this.down.bind(this)); 21 | OZ.Event.add(this.dom.container, "touchmove", OZ.Event.prevent); 22 | }; 23 | SQL.Map.prototype = Object.create(SQL.Visual.prototype); 24 | 25 | SQL.Map.prototype.down = function (e) { 26 | /* mousedown - move view and start drag */ 27 | this.flag = true; 28 | this.dom.container.style.cursor = "move"; 29 | var pos = OZ.DOM.pos(this.dom.container); 30 | 31 | this.x = Math.round(pos[0] + this.l + this.w / 2); 32 | this.y = Math.round(pos[1] + this.t + this.h / 2); 33 | this.move(e); 34 | 35 | if (e.type == "touchstart") { 36 | var eventMove = "touchmove"; 37 | var eventUp = "touchend"; 38 | } else { 39 | var eventMove = "mousemove"; 40 | var eventUp = "mouseup"; 41 | } 42 | 43 | this.documentMove = OZ.Event.add(document, eventMove, this.move.bind(this)); 44 | this.documentUp = OZ.Event.add(document, eventUp, this.up.bind(this)); 45 | }; 46 | 47 | SQL.Map.prototype.move = function (e) { 48 | /* mousemove */ 49 | if (!this.flag) { 50 | return; 51 | } 52 | OZ.Event.prevent(e); 53 | 54 | if (e.type.match(/touch/)) { 55 | if (e.touches.length > 1) { 56 | return; 57 | } 58 | var event = e.touches[0]; 59 | } else { 60 | var event = e; 61 | } 62 | 63 | var dx = event.clientX - this.x; 64 | var dy = event.clientY - this.y; 65 | if (this.l + dx < 0) { 66 | dx = -this.l; 67 | } 68 | if (this.t + dy < 0) { 69 | dy = -this.t; 70 | } 71 | if (this.l + this.w + 4 + dx > this.width) { 72 | dx = this.width - 4 - this.l - this.w; 73 | } 74 | if (this.t + this.h + 4 + dy > this.height) { 75 | dy = this.height - 4 - this.t - this.h; 76 | } 77 | 78 | this.x += dx; 79 | this.y += dy; 80 | 81 | this.l += dx; 82 | this.t += dy; 83 | 84 | var coefX = this.width / this.owner.width; 85 | var coefY = this.height / this.owner.height; 86 | var left = this.l / coefX; 87 | var top = this.t / coefY; 88 | 89 | document.documentElement.scrollLeft = Math.round(left); 90 | document.documentElement.scrollTop = Math.round(top); 91 | 92 | this.redraw(); 93 | }; 94 | 95 | SQL.Map.prototype.up = function (e) { 96 | /* mouseup */ 97 | this.flag = false; 98 | this.dom.container.style.cursor = ""; 99 | OZ.Event.remove(this.documentMove); 100 | OZ.Event.remove(this.documentUp); 101 | }; 102 | 103 | SQL.Map.prototype.sync = function () { 104 | /* when window changes, adjust map */ 105 | var dims = OZ.DOM.win(); 106 | var scroll = OZ.DOM.scroll(); 107 | var scaleX = this.width / this.owner.width; 108 | var scaleY = this.height / this.owner.height; 109 | 110 | var w = dims[0] * scaleX - 4 - 0; 111 | var h = dims[1] * scaleY - 4 - 0; 112 | var x = scroll[0] * scaleX; 113 | var y = scroll[1] * scaleY; 114 | 115 | this.w = Math.round(w); 116 | this.h = Math.round(h); 117 | this.l = Math.round(x); 118 | this.t = Math.round(y); 119 | 120 | this.redraw(); 121 | }; 122 | 123 | SQL.Map.prototype.redraw = function () { 124 | this.dom.port.style.width = this.w + "px"; 125 | this.dom.port.style.height = this.h + "px"; 126 | this.dom.port.style.left = this.l + "px"; 127 | this.dom.port.style.top = this.t + "px"; 128 | }; 129 | -------------------------------------------------------------------------------- /js/options.js: -------------------------------------------------------------------------------- 1 | /* --------------------- options ------------ */ 2 | 3 | SQL.Options = function (owner) { 4 | this.owner = owner; 5 | this.dom = { 6 | container: OZ.$("opts"), 7 | btn: OZ.$("options"), 8 | }; 9 | this.dom.btn.value = _("options"); 10 | this.save = this.save.bind(this); 11 | this.build(); 12 | }; 13 | 14 | SQL.Options.prototype.build = function () { 15 | this.dom.optionlocale = OZ.$("optionlocale"); 16 | this.dom.optiondb = OZ.$("optiondb"); 17 | this.dom.optionsnap = OZ.$("optionsnap"); 18 | this.dom.optionpattern = OZ.$("optionpattern"); 19 | this.dom.optionstyle = OZ.$("optionstyle"); 20 | this.dom.optionhide = OZ.$("optionhide"); 21 | this.dom.optionvector = OZ.$("optionvector"); 22 | this.dom.optionshowsize = OZ.$("optionshowsize"); 23 | this.dom.optionshowtype = OZ.$("optionshowtype"); 24 | 25 | var ids = [ 26 | "language", 27 | "db", 28 | "snap", 29 | "pattern", 30 | "style", 31 | "hide", 32 | "vector", 33 | "showsize", 34 | "showtype", 35 | "optionsnapnotice", 36 | "optionpatternnotice", 37 | "optionsnotice", 38 | ]; 39 | for (var i = 0; i < ids.length; i++) { 40 | var id = ids[i]; 41 | var elm = OZ.$(id); 42 | elm.innerHTML = _(id); 43 | } 44 | 45 | var ls = CONFIG.AVAILABLE_LOCALES; 46 | OZ.DOM.clear(this.dom.optionlocale); 47 | for (var i = 0; i < ls.length; i++) { 48 | var o = OZ.DOM.elm("option"); 49 | o.value = ls[i]; 50 | o.innerHTML = ls[i]; 51 | this.dom.optionlocale.appendChild(o); 52 | if (this.owner.getOption("locale") == ls[i]) { 53 | this.dom.optionlocale.selectedIndex = i; 54 | } 55 | } 56 | 57 | var dbs = CONFIG.AVAILABLE_DBS; 58 | OZ.DOM.clear(this.dom.optiondb); 59 | for (var i = 0; i < dbs.length; i++) { 60 | var o = OZ.DOM.elm("option"); 61 | o.value = dbs[i]; 62 | o.innerHTML = dbs[i]; 63 | this.dom.optiondb.appendChild(o); 64 | if (this.owner.getOption("db") == dbs[i]) { 65 | this.dom.optiondb.selectedIndex = i; 66 | } 67 | } 68 | 69 | var styles = CONFIG.STYLES; 70 | OZ.DOM.clear(this.dom.optionstyle); 71 | for (var i = 0; i < styles.length; i++) { 72 | var o = OZ.DOM.elm("option"); 73 | o.value = styles[i]; 74 | o.innerHTML = styles[i]; 75 | this.dom.optionstyle.appendChild(o); 76 | if (this.owner.getOption("style") == styles[i]) { 77 | this.dom.optionstyle.selectedIndex = i; 78 | } 79 | } 80 | 81 | OZ.Event.add(this.dom.btn, "click", this.click.bind(this)); 82 | 83 | this.dom.container.parentNode.removeChild(this.dom.container); 84 | }; 85 | 86 | SQL.Options.prototype.save = function () { 87 | this.owner.setOption("locale", this.dom.optionlocale.value); 88 | this.owner.setOption("db", this.dom.optiondb.value); 89 | this.owner.setOption("snap", this.dom.optionsnap.value); 90 | this.owner.setOption("pattern", this.dom.optionpattern.value); 91 | this.owner.setOption("style", this.dom.optionstyle.value); 92 | this.owner.setOption("hide", this.dom.optionhide.checked ? "1" : ""); 93 | this.owner.setOption("vector", this.dom.optionvector.checked ? "1" : ""); 94 | this.owner.setOption( 95 | "showsize", 96 | this.dom.optionshowsize.checked ? "1" : "" 97 | ); 98 | this.owner.setOption( 99 | "showtype", 100 | this.dom.optionshowtype.checked ? "1" : "" 101 | ); 102 | }; 103 | 104 | SQL.Options.prototype.click = function () { 105 | this.owner.window.open(_("options"), this.dom.container, this.save); 106 | this.dom.optionsnap.value = this.owner.getOption("snap"); 107 | this.dom.optionpattern.value = this.owner.getOption("pattern"); 108 | this.dom.optionhide.checked = this.owner.getOption("hide"); 109 | this.dom.optionvector.checked = this.owner.getOption("vector"); 110 | this.dom.optionshowsize.checked = this.owner.getOption("showsize"); 111 | this.dom.optionshowtype.checked = this.owner.getOption("showtype"); 112 | }; 113 | -------------------------------------------------------------------------------- /js/rubberband.js: -------------------------------------------------------------------------------- 1 | /* --------------------- rubberband -------------------- */ 2 | 3 | SQL.Rubberband = function (owner) { 4 | this.owner = owner; 5 | SQL.Visual.apply(this); 6 | this.dom.container = OZ.$("rubberband"); 7 | OZ.Event.add("area", "mousedown", this.down.bind(this)); 8 | }; 9 | SQL.Rubberband.prototype = Object.create(SQL.Visual.prototype); 10 | 11 | SQL.Rubberband.prototype.down = function (e) { 12 | OZ.Event.prevent(e); 13 | var scroll = OZ.DOM.scroll(); 14 | this.x = this.x0 = e.clientX + scroll[0]; 15 | this.y = this.y0 = e.clientY + scroll[1]; 16 | this.width = 0; 17 | this.height = 0; 18 | this.redraw(); 19 | this.documentMove = OZ.Event.add( 20 | document, 21 | "mousemove", 22 | this.move.bind(this) 23 | ); 24 | this.documentUp = OZ.Event.add(document, "mouseup", this.up.bind(this)); 25 | }; 26 | 27 | SQL.Rubberband.prototype.move = function (e) { 28 | var scroll = OZ.DOM.scroll(); 29 | var x = e.clientX + scroll[0]; 30 | var y = e.clientY + scroll[1]; 31 | this.width = Math.abs(x - this.x0); 32 | this.height = Math.abs(y - this.y0); 33 | if (x < this.x0) { 34 | this.x = x; 35 | } else { 36 | this.x = this.x0; 37 | } 38 | if (y < this.y0) { 39 | this.y = y; 40 | } else { 41 | this.y = this.y0; 42 | } 43 | this.redraw(); 44 | this.dom.container.style.visibility = "visible"; 45 | }; 46 | 47 | SQL.Rubberband.prototype.up = function (e) { 48 | OZ.Event.prevent(e); 49 | this.dom.container.style.visibility = "hidden"; 50 | OZ.Event.remove(this.documentMove); 51 | OZ.Event.remove(this.documentUp); 52 | this.owner.tableManager.selectRect(this.x, this.y, this.width, this.height); 53 | }; 54 | 55 | SQL.Rubberband.prototype.redraw = function () { 56 | this.dom.container.style.left = this.x + "px"; 57 | this.dom.container.style.top = this.y + "px"; 58 | this.dom.container.style.width = this.width + "px"; 59 | this.dom.container.style.height = this.height + "px"; 60 | }; 61 | -------------------------------------------------------------------------------- /js/toggle.js: -------------------------------------------------------------------------------- 1 | /* ------------------ minimize/restore bar ----------- */ 2 | 3 | SQL.Toggle = function (elm) { 4 | this._state = null; 5 | this._elm = elm; 6 | OZ.Event.add(elm, "click", this._click.bind(this)); 7 | 8 | var defaultState = true; 9 | if (document.location.href.match(/toolbar=hidden/)) { 10 | defaultState = false; 11 | } 12 | this._switch(defaultState); 13 | }; 14 | 15 | SQL.Toggle.prototype._click = function (e) { 16 | this._switch(!this._state); 17 | }; 18 | 19 | SQL.Toggle.prototype._switch = function (state) { 20 | this._state = state; 21 | if (this._state) { 22 | OZ.$("bar").style.maxHeight = ""; 23 | } else { 24 | OZ.$("bar").style.overflow = "hidden"; 25 | OZ.$("bar").style.maxHeight = this._elm.offsetHeight + "px"; 26 | } 27 | this._elm.className = this._state ? "on" : "off"; 28 | }; 29 | -------------------------------------------------------------------------------- /js/visual.js: -------------------------------------------------------------------------------- 1 | /* -------------------- base visual element -------------------- */ 2 | SQL.Visual = function () { 3 | this._init(); 4 | this._build(); 5 | }; 6 | 7 | SQL.Visual.prototype._init = function () { 8 | this.dom = { 9 | container: null, 10 | title: null, 11 | }; 12 | this.data = { 13 | title: "", 14 | }; 15 | }; 16 | 17 | SQL.Visual.prototype._build = function () {}; 18 | 19 | SQL.Visual.prototype.toXML = function () {}; 20 | 21 | SQL.Visual.prototype.fromXML = function (node) {}; 22 | 23 | SQL.Visual.prototype.destroy = function () { 24 | /* "destructor" */ 25 | var p = this.dom.container.parentNode; 26 | if (p && p.nodeType == 1) { 27 | p.removeChild(this.dom.container); 28 | } 29 | }; 30 | 31 | SQL.Visual.prototype.setTitle = function (text) { 32 | if (!text) { 33 | return; 34 | } 35 | this.data.title = text; 36 | this.dom.title.innerHTML = text; 37 | }; 38 | 39 | SQL.Visual.prototype.getTitle = function () { 40 | return this.data.title; 41 | }; 42 | 43 | SQL.Visual.prototype.redraw = function () {}; 44 | -------------------------------------------------------------------------------- /js/window.js: -------------------------------------------------------------------------------- 1 | /* --------------------- window ------------ */ 2 | 3 | SQL.Window = function (owner) { 4 | this.owner = owner; 5 | this.dom = { 6 | container: OZ.$("window"), 7 | background: OZ.$("background"), 8 | ok: OZ.$("windowok"), 9 | cancel: OZ.$("windowcancel"), 10 | title: OZ.$("windowtitle"), 11 | content: OZ.$("windowcontent"), 12 | throbber: OZ.$("throbber"), 13 | }; 14 | this.dom.ok.value = _("windowok"); 15 | this.dom.cancel.value = _("windowcancel"); 16 | this.dom.throbber.alt = this.dom.throbber.title = _("throbber"); 17 | OZ.Event.add(this.dom.ok, "click", this.ok.bind(this)); 18 | OZ.Event.add(this.dom.cancel, "click", this.close.bind(this)); 19 | OZ.Event.add(document, "keydown", this.key.bind(this)); 20 | 21 | this.sync = this.sync.bind(this); 22 | 23 | OZ.Event.add(window, "scroll", this.sync); 24 | OZ.Event.add(window, "resize", this.sync); 25 | this.state = 0; 26 | this.hideThrobber(); 27 | 28 | this.sync(); 29 | }; 30 | 31 | SQL.Window.prototype.showThrobber = function () { 32 | this.dom.throbber.style.visibility = ""; 33 | }; 34 | 35 | SQL.Window.prototype.hideThrobber = function () { 36 | this.dom.throbber.style.visibility = "hidden"; 37 | }; 38 | 39 | SQL.Window.prototype.open = function (title, content, callback) { 40 | this.state = 1; 41 | this.callback = callback; 42 | while (this.dom.title.childNodes.length > 1) { 43 | this.dom.title.removeChild(this.dom.title.childNodes[1]); 44 | } 45 | 46 | var txt = OZ.DOM.text(title); 47 | this.dom.title.appendChild(txt); 48 | this.dom.background.style.visibility = "visible"; 49 | OZ.DOM.clear(this.dom.content); 50 | this.dom.content.appendChild(content); 51 | 52 | var win = OZ.DOM.win(); 53 | var scroll = OZ.DOM.scroll(); 54 | this.dom.container.style.left = 55 | Math.round(scroll[0] + (win[0] - this.dom.container.offsetWidth) / 2) + 56 | "px"; 57 | this.dom.container.style.top = 58 | Math.round(scroll[1] + (win[1] - this.dom.container.offsetHeight) / 2) + 59 | "px"; 60 | 61 | this.dom.cancel.style.visibility = this.callback ? "" : "hidden"; 62 | this.dom.container.style.visibility = "visible"; 63 | 64 | var formElements = ["input", "select", "textarea"]; 65 | var all = this.dom.container.getElementsByTagName("*"); 66 | for (var i = 0; i < all.length; i++) { 67 | if (formElements.indexOf(all[i].tagName.toLowerCase()) != -1) { 68 | all[i].focus(); 69 | break; 70 | } 71 | } 72 | }; 73 | 74 | SQL.Window.prototype.key = function (e) { 75 | if (!this.state) { 76 | return; 77 | } 78 | if (e.keyCode == 13) { 79 | this.ok(e); 80 | } 81 | if (e.keyCode == 27) { 82 | this.close(); 83 | } 84 | }; 85 | 86 | SQL.Window.prototype.ok = function (e) { 87 | if (this.callback) { 88 | this.callback(); 89 | } 90 | this.close(); 91 | }; 92 | 93 | SQL.Window.prototype.close = function () { 94 | if (!this.state) { 95 | return; 96 | } 97 | this.state = 0; 98 | this.dom.background.style.visibility = "hidden"; 99 | this.dom.container.style.visibility = "hidden"; 100 | }; 101 | 102 | SQL.Window.prototype.sync = function () { 103 | /* adjust background position */ 104 | var dims = OZ.DOM.win(); 105 | var scroll = OZ.DOM.scroll(); 106 | this.dom.background.style.width = dims[0] + "px"; 107 | this.dom.background.style.height = dims[1] + "px"; 108 | this.dom.background.style.left = scroll[0] + "px"; 109 | this.dom.background.style.top = scroll[1] + "px"; 110 | }; 111 | -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2005-2012, Ondrej Zara 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, 5 | are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | * Redistributions in binary form must reproduce the above copyright notice, 10 | this list of conditions and the following disclaimer in the documentation 11 | and/or other materials provided with the distribution. 12 | * Neither the name of Ondrej Zara nor the names of its contributors may be used 13 | to endorse or promote products derived from this software without specific 14 | prior written permission. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 | IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 20 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 23 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 25 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /locale/ar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | إنشاء جدول 5 | تحرير جدول 6 | حذف جدول 7 | محاذاة الجداول 8 | حذف جميع البيانات 9 | هل أنت متأكد من أنك تريد حذف جميع البيانات 10 | new table 11 | اختر المنطقة المحددة 12 | اسم الجول 13 | وصف الجدول 14 | 15 | 16 | إنشاء حقل 17 | تحرير حقل 18 | حذف حقل 19 | أعلى 20 | أسفل 21 | new field 22 | إنشاء مفتاح خارجي 23 | اختر الجدول المطلوب 24 | ربط حقل بمفتاح خارجي 25 | اختر الحقل المطلوب 26 | حذف مفتاح خارجي 27 | هل أنت متأكد من أنك تريد حذف الجدول 28 | هل أنت متأكد من أنك تريد حذف الحقل 29 | 30 | 31 | الإسم 32 | النوع 33 | الحجم 34 | الإفتراضي 35 | NOT NULL 36 | NULL 37 | ترقيم تلقائي 38 | تحرير تعليق 39 | اكتب تعليقاً لهذا الحقل 40 | 41 | 42 | موافق 43 | إلغاء 44 | يرجى الإنتظار ... 45 | الخيارات 46 | لغة العرض 47 | قاعدة البيانات المستخدمة لحفظ التصاميم 48 | بعض الخيارات يتم تفعيلها بعد تحديث الصفحة مع ملاحظة أنه يجب تفعيل (الكوكيز) لتعمل هذه الخيارات 49 | Table snap distance 50 | In pixels, 0 = disable snapping 51 | طريقة تنسيق أسماء المفاتيح الخارجية 52 | %T = الجدول الرئيسي, %R = المفتاح الرئيسي, %t = الجدول الخارجي 53 | إخفاء الخطوط عند تحريك الجدول؟ 54 | رسم خطوط ناعمة (إذا كان المتصفح يدعم ذلك) ؟ 55 | قلم المدقة 56 | 57 | 58 | 59 | المفاتيح 60 | المفاتيح في الجدول "%s" 61 | الأنواع: 62 | الإسم: 63 | مفاتيح الجدول 64 | الحقول المتاحة 65 | تحرير مفتاح 66 | إنشاء مفتاح 67 | حذف مفتاح 68 | 69 | 70 | حفظ / تحميل 71 | قم بوضع بيانات نموذج XML في المربع أدناه، ثم حاول مرّة أخرى. 72 | العميل 73 | الخادم 74 | المدخلات / المخرجات 75 | حفظ كنموذح XML 76 | إستيراد نموذج XML 77 | حفظ كنموذج SQL 78 | Server backend: 79 | حفظ 80 | تحميل 81 | List items 82 | إستيراد من قاعدة بيانات 83 | Enter keyword under which your design was saved: 84 | Enter keyword under which your design will be saved: 85 | أدخل إسم قاعدة البيانات التي تريد إستيرادها: 86 | رد الخادم 87 | تم الحفظ بنجاح 88 | لم يتم العثور عليه 89 | خطأ داخلي في الخادم 90 | الخاصية غير موجودة 91 | الخدمة غير متوفرة 92 | 93 | 94 | خطأ في نموذح XML 95 | التوثيق 96 | 97 | 98 | -------------------------------------------------------------------------------- /locale/cs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Přidat tabulku 5 | Upravit tabulku 6 | Smazat tabulku 7 | Smazat tabulky 8 | Srovnat tabulky 9 | Zrušit tabulky 10 | Opravdu zrušit všechny tabulky 11 | nová tabulka 12 | umístit tabulku 13 | Jméno 14 | Komentář 15 | 16 | 17 | Přidat položku 18 | Upravit položku 19 | Smazat položku 20 | Nahoru 21 | Dolů 22 | nová položka 23 | Vyrobit cizí klíč 24 | klikni na cílovou tabulku 25 | Propojit cizí klíč 26 | klikni na cílové pole 27 | Smazat cizí klíč 28 | Opravdu smazat tabulku 29 | Opravdu smazat položku 30 | 31 | 32 | Jméno 33 | Typ 34 | Velikost 35 | Výchozí 36 | NOT NULL 37 | NULL 38 | Autoincrement 39 | Upravit komentář 40 | VLožte komentář pro tuto položku 41 | 42 | 43 | OK 44 | Storno 45 | Prosím čekejte... 46 | Nastavení 47 | Jazyk 48 | Databáze pro nová schémata 49 | Některá nastavení se projeví až po znovunačtení stránky. Aby nastavení fungovala, je nutné mít zapnuté cookies. 50 | Vzdálenost přichytávání tabulek 51 | V pixelech, 0 = bez přichytávání 52 | Vzor pro cizí jména 53 | %T = primární tabulka, %R = primární klíč, %t = cizí tabulka 54 | Schovat spojovníky při tažení tabulkou? 55 | Vykreslovat oblé spojovníky (pakliže to prohlížeč podporuje)? 56 | Zobrazovat velikost polí v tabulce? 57 | Zobrazovat datový typ polí v tabulce? 58 | Styl 59 | 60 | 61 | Klíče 62 | Klíče v tabulce "%s" 63 | Typ: 64 | Název: 65 | Položky v klíči 66 | Dostupné položky 67 | Upravit klíč 68 | Přidat klíč 69 | Smazat klíč 70 | 71 | 72 | Uložit / Načíst 73 | Prosím vložte XML data do textového pole níže. 74 | Klient 75 | Server 76 | Vstup / Výstup 77 | Uložit XML 78 | Načíst XML 79 | Uložit v prohlížeči 80 | Načíst z prohlížeče 81 | Generovat SQL 82 | Server backend: 83 | Uložit 84 | Rychle uložit 85 | Načíst 86 | Vypsat položky 87 | Importovat z databáze 88 | Zadejte označení, pod kterým bylo vaše schéma uloženo: 89 | Zadejte označení, pod kterým bude vaše schéma uloženo: 90 | Zadejte název databáze k importu: 91 | Odpověď od serveru 92 | Uloženo 93 | Neexistuje 94 | Vnitřní chyba serveru 95 | Není implementováno 96 | Služba není dostupná 97 | 98 | 99 | XML chyba 100 | Dokumentace 101 | 102 | 103 | -------------------------------------------------------------------------------- /locale/de.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Tabelle hinzufügen 5 | Tabelle bearbeiten 6 | Tabelle entfernen 7 | Tabellen entfernen 8 | Tabellen ausrichten 9 | Tabellen löschen 10 | Wirklich alle Tabellen löschen 11 | Neue Tabelle 12 | Tabelle platzieren 13 | Name 14 | Kommentar 15 | 16 | 17 | Feld hinzufügen 18 | Feld bearbeiten 19 | Feld entfernen 20 | Hoch 21 | Runter 22 | Neues Feld 23 | Fremdschlüssel erstellen 24 | Ziel-Tabelle wählen 25 | Fremdschlüssel Verknüpfung 26 | Ziel-Zeile auswählen 27 | Ziel-Zeile entfernen 28 | Tabelle wirklich löschen 29 | Feld wirklich löschen 30 | 31 | 32 | Name 33 | Typ 34 | Größe 35 | Default 36 | NOT NULL 37 | NULL 38 | Autoincrement 39 | Kommentar bearbeiten 40 | Kommentar zu diesem Feld eintragen: 41 | 42 | 43 | OK 44 | Abbrechen 45 | Bitte warten... 46 | Einstellungen 47 | Sprache 48 | Datenbank für neue Diagramme 49 | Einige Optionen werden erst nach einem erneutem Seitenaufruf wirksam. Cookies müssen erlaubt sein. 50 | Tabellen Ausrichtungsabstand 51 | in Pixel, 0 = einrasten deaktivieren 52 | Format für die Namen der Fremdschlüssel 53 | %T = Primärtabelle, %R = Primärschlüssel, %t = Fremdtabelle 54 | Verstecke Verbindungslinien beim Bewegen von Tabellen? 55 | Zeichne gekrümmte Verbindungslinien (Browser-abhängig)? 56 | Zeige Feldgröße im Tabellendesign? 57 | Zeige Felddatentyp im Tabellendesign? 58 | Stil 59 | 60 | 61 | Schlüssel 62 | Schlüssel in Tabelle "%s" 63 | Typ: 64 | Name: 65 | Felder im Schlüssel 66 | Verfügbare Felder 67 | Schlüssel bearbeiten 68 | Schlüssel hinzufügen 69 | Schlüssel entfernen 70 | 71 | 72 | Speichern / Laden 73 | Bitte fügen Sie die XML-Daten in das untere Textfeld ein und versuchen Sie es erneut. 74 | Client 75 | Server 76 | Eingabe / Ausgabe 77 | XML speichern 78 | XML laden 79 | In Browser speichern 80 | Von Browser laden 81 | Von Browser auflisten 82 | In Dropbox speichern 83 | Von Dropbox laden 84 | Von Dropbox auflisten 85 | SQL erzeugen 86 | Server Basis: 87 | Speichern 88 | Schnellspeichern 89 | Laden 90 | Einträge auflisten 91 | Import aus DB 92 | Geben Sie das Stichwort ihres Diagramms ein, unter dem es gespeichert wurde: 93 | Geben Sie das Stichwort ihres Diagramms ein, unter dem es gespeichert werden soll: 94 | Geben Sie den Namen der zu importierenden Datenbank ein: 95 | Server Antwort 96 | gespeichert 97 | Nicht gefunden 98 | Interner Server Fehler 99 | Nicht implementiert 100 | Dienst nicht erreichbar 101 | 102 | 103 | XML Fehler 104 | Dokumentation 105 | 106 | 107 | -------------------------------------------------------------------------------- /locale/el.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Προσθήκη πίνακα 5 | Επεξεργασία πίνακα 6 | Διαγραφή πίνακα 7 | Διαγραφή πινάκων 8 | Στοίχιση Πινάκων 9 | Καθαρισμός πινάκων 10 | Διαγραφή όλων των πινάκων 11 | Νέος πίνακας 12 | τοποθέτηση πίνακα 13 | Όνομα 14 | Σχόλιο 15 | 16 | 17 | Προσθήκη πεδίου 18 | Επεξεργασία πεδίου 19 | Διαγραφή πεδίου 20 | Πάνω 21 | Κάτω 22 | νέο πεδίο 23 | Δημιουργία ξένου κλειδιού 24 | Κάντε κλικ στο άλλο πίνακα 25 | Σένδεση ξένου κλειδιού 26 | Κάντε κλικ στη γραμμή 27 | Κάντε κλικ πεδίου 28 | Διαγραφή πίνακα. Είστε σίγουρος 29 | Διαγραφή πεδίου. Είστε σίγουρος 30 | 31 | 32 | Όνομα 33 | Τύπος 34 | Μέγεθος 35 | Προεπιλογή 36 | NOT NULL 37 | NULL 38 | Autoincrement 39 | Επεξεργασία σχολίου 40 | Σχολιάστε γι' αυτό το πεδίο 41 | 42 | 43 | OK 44 | Άκυρο 45 | Παρακαλώ περιμένετε... 46 | Επιλογές 47 | Γλώσσα 48 | Βάση δεδομένων για νέα σχέδιαγράμματα 49 | Μερικές επιλογές ενεργοποιούνται μόνο μετά από καθολική ανανέωση της σελίδας.Τα Cookies πρέπει να είναι ενεργοποιημένα για να λειτουργούν οι επιλογές. 50 | Απόσταση πινάκων 51 | Σε pixels, 0 = απενεργοποίηση απόστασης 52 | Πρότυπο για ξένα κλειδιά 53 | %T = πρωτεύων πίνακας, %R = προτεύον κλειδί, %t = ξένος πίνακας 54 | Απόκρυψη συνδέσμων όταν σύρονται οι πίνακες; 55 | Διάγραμμα με ομαλούς συνδέσμους(αν παρέχεται από τον περιηγητή); 56 | Στυλ 57 | 58 | 59 | 60 | Κλειδιά 61 | Κλειδιά στον πίνακα "%s" 62 | Τύπος: 63 | Όνομα: 64 | Πεδία σε κλειδιά 65 | Διαθέσιμα πεδία 66 | Επεξεργασία κλειδιού 67 | Προσθήκη κλειδιού 68 | Διαγραφή κλειδιού 69 | 70 | 71 | Αποθήκ./Άνοιγμα 72 | Κάντε επικόλληση των δεδομένων XML στο πεδίο κειμένου παρακάτω και δοκιμάστε ξανά. 73 | Πελάτης 74 | Διακομιστής 75 | Εισαγωγή/Εξαγωγή 76 | Αποθήκευση XML 77 | Άνοιγμα XML 78 | Δημιουργία SQL 79 | Διακομιστής: 80 | Αποθήκευση 81 | Άνοιγμα 82 | Εμφάνιση λίστας 83 | Εισαγωγή από βάση δεδομένων 84 | Πληκτρολογήστε το τίτλο του αποθηκευμένου σχεδιαγράμματος: 85 | Πληκτρολογήστε το τίτλο για την αποθήκευση του σχεδιαγράμματος: 86 | Δώστς όνομα βάσης δεδομένων για εισαγωγή: 87 | Απάντηση διακομιστή 88 | Αποθηκεύθηκε 89 | Δεν βρέθηκε 90 | Εσωτερικό σφάλμα διακομιστή 91 | Χωρίς σχεδίαση 92 | Μη-διαθέσιμη Παροχή 93 | 94 | 95 | Σφάλμα XML 96 | Οδηγίες 97 | 98 | 99 | -------------------------------------------------------------------------------- /locale/en.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Add table 5 | Edit table 6 | Remove table 7 | Remove tables 8 | Align tables 9 | Clear tables 10 | Really delete all tables 11 | new table 12 | place table 13 | Name 14 | Comment 15 | 16 | 17 | Add field 18 | Edit field 19 | Remove field 20 | Up 21 | Down 22 | new field 23 | Create foreign key 24 | click target table 25 | Connect foreign key 26 | click target row 27 | Remove foreign key 28 | Really delete table 29 | Really delete field 30 | 31 | 32 | Name 33 | Type 34 | Size 35 | Default 36 | NOT NULL 37 | NULL 38 | Autoincrement 39 | Edit comment 40 | Enter comment for this field 41 | 42 | 43 | OK 44 | Cancel 45 | Please wait... 46 | Options 47 | Language 48 | Database for new designs 49 | Some options are applied only after full page reload. Cookies must be enabled for options to work. 50 | Table snap distance 51 | In pixels, 0 = disable snapping 52 | Pattern for foreign names 53 | %T = primary table, %R = primary key, %t = foreign table 54 | Hide connectors on table drag? 55 | Draw smooth connectors (if supported by browser)? 56 | Show field size in table design? 57 | Show field datatype in table design? 58 | Style 59 | 60 | 61 | Keys 62 | Keys in table "%s" 63 | Type: 64 | Name: 65 | Fields in key 66 | Available fields 67 | Edit key 68 | Add key 69 | Remove key 70 | 71 | 72 | Save / Load 73 | Please paste XML data into the text area below and try again. 74 | Client 75 | Server 76 | Input / Output 77 | Save XML 78 | Load XML 79 | Save in Browser 80 | Load from Browser 81 | List from Browser 82 | Save to Dropbox 83 | Load from Dropbox 84 | List from Dropbox 85 | Generate SQL 86 | Server backend: 87 | Save 88 | Quicksave 89 | Load 90 | List items 91 | Import from DB 92 | Enter keyword under which your design was saved: 93 | Enter keyword under which your design will be saved: 94 | Enter name of database to be imported: 95 | Server response 96 | Saved 97 | Not Found 98 | Internal Server Error 99 | Not Implemented 100 | Service Unavailable 101 | 102 | 103 | XML error 104 | Documentation 105 | 106 | 107 | -------------------------------------------------------------------------------- /locale/eo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Aldoni tabelon 5 | Modifi la tabelon 6 | Forigi la tabelon 7 | Forigi la tabelojn 8 | Ĝisrandigi la tabelojn 9 | Vakigi la tabelon 10 | Ja forigi ĉiujn tabelojn 11 | nova tabelo 12 | pozicii la tabelon 13 | Nomo 14 | Komento 15 | 16 | 17 | Aldoni kampon 18 | Modifi la kampon 19 | Forigi la kampon 20 | Supre 21 | Sube 22 | nova kampo 23 | Krei fremdan ŝlosilon 24 | alklaki la celan tabelon 25 | Konekti fremdan ŝlosilon 26 | alklaki la celan atributon 27 | Forigi fremdan ŝlosilon 28 | Ja forigi la tabelon 29 | Ja forigi la kampon 30 | 31 | 32 | Nomo 33 | Tipo 34 | Grandeco 35 | Defaŭlte 36 | NE NUL 37 | Senvalora 38 | Memalkremento 39 | Modifi la komenton 40 | Entajpi komenton por tiu kampo 41 | 42 | 43 | Jes 44 | Rezigni 45 | Bonvolu atendi... 46 | Agordoj 47 | Lingvo 48 | Datumbazoj por novaj kreoj 49 | Kelkaj agordoj estas aplikotaj post plena ŝarĝo de paĝo. Kuketoj devas esti ebligataj por ke la agordoj funkcias. 50 | Kapto-distanco de tabelo 51 | En rastrumeroj, 0 = malebligi kapton 52 | Motivo por fremdaj nomoj 53 | %T = ĉefa tabelo, %R = ĉefa ŝlosilo, %t = fremda tabelo 54 | Ĉu kaŝi konektiloj dum treno de tabelo? 55 | Desegni glatajn konektilojn (se subtenata de retumilo)? 56 | Show field size in table design? 57 | Show field datatype in table design? 58 | Stilo 59 | 60 | 61 | Klavoj 62 | Ŝlosiloj en la tabelo "%s" 63 | Tipo: 64 | Nomo: 65 | Kampoj en klavo 66 | Disponeblaj kampoj 67 | Modifi ŝlosilon 68 | Aldoni ŝlosilon 69 | Forigi ŝlosilon 70 | 71 | 72 | Konservi / Ŝargi 73 | Bonvolu alglui XML datumon en la tekst-zono sube kaj provi de nove. 74 | Kliento 75 | Servilo 76 | Enigo / Eligo 77 | Konservi XML 78 | Ŝargi XML 79 | Krei SQL 80 | Servila administro: 81 | Konservi 82 | Quicksave 83 | Ŝargi 84 | Listigi erojn 85 | Importi el datumbazo 86 | Entajpi ŝlosilvorton per kiu via fasonado estis konservita: 87 | Entajpi ŝlosilvorton per kiu via fasonado estos konservita: 88 | Entajpi la nomon de datumbazo importenda: 89 | Respondo de servilo 90 | Konservita 91 | Netrovita 92 | Interna Servilo Eraro 93 | Ne funkciigata 94 | Servo Nedisponebla 95 | 96 | 97 | XML-eraro 98 | Dokumentaro 99 | 100 | 101 | -------------------------------------------------------------------------------- /locale/es.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Agregar tabla 5 | Editar tabla 6 | Eliminar tabla 7 | Eliminar tablas 8 | Alinear tablas 9 | Limpiar tablas 10 | ¿Realmente deseas eliminar todas las tablas 11 | Nueva tabla 12 | Colocar tabla 13 | Nombre 14 | Comentario 15 | 16 | 17 | Agregar campo 18 | Editar campo 19 | Eliminar campo 20 | Arriba 21 | Abajo 22 | Nuevo campo 23 | Crear llave foránea 24 | Haz clic en tabla objetivo 25 | Conectar llave foránea 26 | Haz clic en campo objetivo 27 | Eliminar clave foránea 28 | ¿Realmente deseas borrar la tabla 29 | ¿Realmente deseas borrar el campo 30 | 31 | 32 | Nombre 33 | Tipo 34 | Tamaño 35 | Predeterminado 36 | NOT NULL 37 | NULL 38 | Auto incremento 39 | Editar comentario 40 | Ingresa un comentario para este campo 41 | 42 | 43 | Aceptar 44 | Cancelar 45 | Por favor, espera... 46 | Opciones 47 | Idioma 48 | Base de datos para nuevos diseños 49 | Algunas opciones se aplican solo despúes de recargar totalmente la pagina. Las cookies deben estar habilitadas para que funcione la personalización. 50 | Distancia de ajuste de tablas 51 | En píxeles, 0 = deshabilitar ajuste 52 | Patrón para nombres de llave foránea 53 | %T = tabla primaria, %R = clave primaria, %t = tabla foránea 54 | ¿Ocultar conectores de tablas al arrastrar? 55 | ¿Dibujar conectores suaves (si son soportados por el navegador)? 56 | ¿Mostrar tamaño del campo en el diseño de tabla? 57 | ¿Mostrar tipo de dato del campo en el diseño de tabla? 58 | Estilo 59 | 60 | 61 | Claves 62 | Llaves en la tabla "%s" 63 | Tipo: 64 | Nombre: 65 | Campos de llave 66 | Campos disponibles 67 | Editar llave 68 | Agregar llave 69 | Eliminar llave 70 | 71 | 72 | Guardar / Cargar 73 | Por favor, pega los datos XML dentro del área de texto de abajo y vuelve a intentar. 74 | Cliente 75 | Servidor 76 | Entrada / Salida 77 | Guardar XML 78 | Cargar XML 79 | Guardar en el Navegador 80 | Cargar desde el Navegador 81 | Listar desde el Navegador 82 | Guardar en Dropbox 83 | Cargar desde Dropbox 84 | Listar desde Dropbox 85 | Generar SQL 86 | Servidor de fondo: 87 | Guardar 88 | Guardar rápido 89 | Cargar 90 | Listar elementos 91 | Importar desde Base de Datos 92 | Ingrese la palabra clave bajo la cual tu diseño fue guardado: 93 | Ingrese una palabra clave bajo la cual tu diseño será guardado: 94 | Ingresa el nombre de la base de datos a ser importada: 95 | Respuesta del servidor 96 | Guardado 97 | No Encontrado 98 | Error Interno del Servidor 99 | No Implementado 100 | Servicio No Disponible 101 | 102 | 103 | Error XML 104 | Documentación 105 | 106 | 107 | -------------------------------------------------------------------------------- /locale/fr.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ajouter une table 5 | Éditer la table 6 | Supprimer la table 7 | Supprimer les tables 8 | Aligner les tables 9 | Supprimer les tables 10 | Vraiment supprimer toutes les tables 11 | nouvelle table 12 | positionner la table 13 | Nom 14 | Commentaire 15 | 16 | 17 | Ajouter un champ 18 | Éditer un champ 19 | Supprimer le champ 20 | Remonter 21 | Descendre 22 | Éditer un champ 23 | Créer une clé étrangère 24 | Cliquez la destination 25 | Connecter une clé étrangère 26 | Cliquez la propriété cible 27 | Supprimer la clé étrangère 28 | Voulez-vous vraiment supprimer cette table ? 29 | Voulez-vous vraiment supprimer ce champ ? 30 | 31 | 32 | Nom 33 | Type 34 | Taille 35 | Défaut 36 | NON NUL 37 | valeur nulle 38 | Auto-incrémental 39 | Éditer le commentaire 40 | Saisir un commentaire à propos de ce champ 41 | 42 | 43 | OK 44 | Annuler 45 | Veuillez patienter... 46 | Options 47 | Langue 48 | Format des nouvelles base de données 49 | Ces options ne seront appliquées qu'après le rafraichissement complet de la page. Les cookies doivent être autorisés. 50 | Magnétisme des tables 51 | En pixels, 0 = magnétisme désactivé 52 | Motif pour les noms de clés étrangères 53 | %T = table primaire, %R = clé primaire, %t = table étrangère 54 | Cacher les connecteurs lors du déplacement des tables ? 55 | Dessiner des connecteurs « adoucis » (si le navigateur le supporte) ? 56 | Afficher la taille du champ dans le schéma de table ? 57 | Afficher le type du champ dans le schéma de table ? 58 | Style 59 | 60 | 61 | Clés 62 | Clés dans la table « %s » 63 | Type : 64 | Nom : 65 | Champs de clé 66 | Champs disponibles 67 | Éditer la clé 68 | Ajouter une clé 69 | Supprimer la clé 70 | 71 | 72 | Enregistrer / Charger 73 | Merci de coller les données XML dans le champs prévu avant de ré-essayer. 74 | Client 75 | Serveur 76 | Entrée / Sortie 77 | Enregistrer XML 78 | Charger XML 79 | Enregistrer dans le navigateur 80 | Charger depuis le navigateur 81 | Lister depuis le navigateur 82 | Génerer SQL 83 | Méthode du serveur : 84 | Enregistrer 85 | Enregistrer rapidement 86 | Charger 87 | Éléments disponibles 88 | Importer d'une base de données 89 | Saisir le mot-clé de votre schéma : 90 | Saisir un mot-clé pour sauvegarder votre schéma : 91 | Saisir le nom de la base de données à importer : 92 | Réponse du serveur 93 | Sauvegardé 94 | Introuvable 95 | Erreur interne du serveur 96 | Non Implementé 97 | Service indisponible 98 | 99 | 100 | Erreur XML 101 | Documentation 102 | 103 | 104 | -------------------------------------------------------------------------------- /locale/hu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Tábla létrehozása 5 | Tábla módosítása 6 | Tábla törlése 7 | Táblak törlése 8 | Táblák rendezése 9 | Táblák törlése 10 | Valóban töröljem az összes táblát 11 | tábla létrehozása 12 | tábla elhelyezése 13 | Név 14 | Megjegyzés 15 | 16 | 17 | Mező létrehozása 18 | Mező módosítása 19 | Mező törlése 20 | Fel 21 | Le 22 | új mező 23 | Idegen kulcs létrehozása 24 | kattintson a cél-táblára 25 | Idegen kulcs kapcsolása 26 | kattintson a cél-mezőre 27 | Mező kulcs létrehozása 28 | Valóban töröljem a táblát 29 | Valóban töröljem a mezőt 30 | 31 | 32 | Név 33 | Típus 34 | Méret 35 | Alapérték 36 | NOT NULL 37 | NULL 38 | Automatikus növelés 39 | Megjegyzés módosítása 40 | Írjon megjegyzést ehhez a mezőhöz 41 | 42 | 43 | OK 44 | Mégsem 45 | Kérem várjon... 46 | Beállítások 47 | Nyelv 48 | Adatbázis az új terveknek 49 | Egyes beállítások csak az oldal teljes újratöltése után érvényesülnek. A munkához szükséges engedélyezni a sütiket (cooky-kat). 50 | Táblák illesztési távolsága 51 | Pixel-ben megadva, 0 = illesztés tiltása 52 | Idegen nevek sablonja 53 | %T = elsődleges tábla, %R = elsődleges kulcs, %t = idegen tábla 54 | Elrejtsem a kapcsolókat a rajztáblán? 55 | Kapcsolók finom kirajzolása (ha a böngésző lehetővé teszi)? 56 | Stílus 57 | 58 | 59 | 60 | Kulcsok 61 | Kulcsok a "%s" táblában 62 | Típus: 63 | Név: 64 | A kulcs mezői 65 | Elérhető mezők 66 | Kulcs módosítása 67 | Kulcs létrehozása 68 | Kulcs törlése 69 | 70 | 71 | Mentés / Beolvasás 72 | Kérem illessze be az XML-tartalmat az alábbi szöveges mezőbe, és próbálja újra. 73 | Kliens 74 | Szerver 75 | Bemenet / Kimenet 76 | XML mentése 77 | XML beolvasása 78 | SQL generálása 79 | Szerver végpont: 80 | Mentés 81 | Betöltés 82 | Tételek listázása 83 | Importálás adatbázisból 84 | Írja be a kulcsszót, amely alapján a tervet elmentette: 85 | Írja be a kulcsszót, amely alapján a tervet el szeretné menteni: 86 | Írja be az importálandó adatbázis nevét: 87 | A szerver válasza 88 | Elmentve 89 | Nem találom 90 | Belső szerver hiba 91 | Nem lett végrehajtva 92 | Szolgáltatás nem elérhető 93 | 94 | 95 | XML hiba 96 | Dokumentáció 97 | 98 | 99 | -------------------------------------------------------------------------------- /locale/it.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Aggiungi tabella 5 | Modifica tabella 6 | Elimina tabella 7 | Elimina tabelle 8 | Allinea tabelle 9 | Cancella tabelle 10 | Eliminare veramente le tabelle 11 | nuova tabella 12 | posiziona la tabella 13 | Nome 14 | Oggetto 15 | 16 | 17 | Aggiungi campo 18 | Modifica campo 19 | Elimina campo 20 | Su 21 | Giù 22 | nuovo campo 23 | Crea chiave esterna 24 | fai clic sulla destinazione 25 | Connetti chiave esterna 26 | fai clic sulla riga di destinazione 27 | Rimuovi chiave esterna 28 | Cancellare veramente la tabella 29 | Cancellare veramente la riga 30 | 31 | 32 | Nome 33 | Tipo 34 | Dimensione 35 | Predefinito 36 | QUALCOSA 37 | NULL 38 | Autoincremento 39 | Modifica commento 40 | Inserisci commento per questo campo 41 | 42 | 43 | Conferma 44 | Annulla 45 | Attendere... 46 | Opzioni 47 | Lingua 48 | Database per nuovi progetti 49 | Alcune opzioni diventano attive solo dopo il ricaricamento della pagina. Affinché le opzioni vengano mantenute, devono essere abilitati i cookies. 50 | Griglia magnetica 51 | In pixel, 0 = magnetismo disabilitato 52 | Modello per le chiavi esterne 53 | %T = tabella principale, %R = chiave primaria, %t = tabella secondaria 54 | Nascondi i connettori durante il trascinamento? 55 | Disegna connettori arrotondati (se supportato dal browser)? 56 | Show field size in table design? 57 | Show field datatype in table design? 58 | Stile 59 | 60 | 61 | Chiavi 62 | Chiavi nella tabella "%s" 63 | Tipo: 64 | Nome: 65 | Campi nella chiave 66 | Campi disponibili 67 | Modifica chiave 68 | Aggiungi chiave 69 | Rimuovi chiave 70 | 71 | 72 | Salva / Carica 73 | Reincolla i dati XML nell'area sottostante e prova di nuovo. 74 | Intestatario 75 | Server 76 | Ingresso / Uscita 77 | Salva XML 78 | Carica XML 79 | Genera SQL 80 | Server di backend: 81 | Salva 82 | Quicksave 83 | Carica 84 | Elenca elementi 85 | Importa dal DB 86 | Inserisci la parola chiave con cui è stato salvato il progetto: 87 | Inserisci la parola chiave con cui salvare il progetto: 88 | Inserisci il nome del database da importare 89 | Risposta del server 90 | Salvato 91 | Non trovato 92 | Errore interno del server 93 | Non implementato 94 | Servizio non disponibile 95 | 96 | 97 | Errore XML 98 | Documentazione 99 | 100 | 101 | -------------------------------------------------------------------------------- /locale/ja.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | テーブルを追加 5 | テーブルを編集 6 | テーブルを削除 7 | テーブルを整列 8 | 全テーブルを削除 9 | 全テーブルを削除しますか 10 | 新規テーブル 11 | テーブルを配置 12 | テーブル名 13 | コメント 14 | 15 | 16 | 列を追加 17 | 列を編集 18 | 列を削除 19 | 上に 20 | 下に 21 | 新規列 22 | 外部キーとして移動 23 | 対象テーブルを選択 24 | 外部キーを接続 25 | 対象列を選択 26 | 外部キーを削除 27 | テーブルを削除しますか 28 | 列を削除しますか 29 | 30 | 31 | 列名 32 | 33 | サイズ 34 | デフォルト値 35 | NOT NULL 36 | NULL 37 | 自動採番 38 | コメントを編集 39 | 列のコメントを入力 40 | 41 | 42 | OK 43 | キャンセル 44 | しばらくお待ちください... 45 | オプション 46 | 言語 47 | 新しい設計で使用するデータベース 48 | 印は再読込後に反映されるオプションです。これらを動作させるにはクッキーを有効にしてください。 49 | テーブルのスナップ単位 50 | ピクセル(0 = スナップ無効) 51 | 外部キーの命名規則 52 | %T = 親テーブル, %R = プライマリーキー, %t = 子テーブル 53 | テーブルをドラッグ中は線を隠す 54 | 滑らかな線を使う(要ブラウザのサポート) 55 | フィールドサイズを表示 56 | フィールドタイプを表示 57 | スタイル 58 | 59 | 60 | キーの設定 61 | テーブル"%s"のキー 62 | 種類: 63 | キー名: 64 | キーの対象列 65 | 選択可能な列 66 | キーを編集 67 | キーを追加 68 | キーを削除 69 | 70 | 71 | 保存/読み込み 72 | 下の入出力欄にXMLデータを貼りつけてから実行してください。 73 | クライアント 74 | サーバ 75 | 入出力欄 76 | XMLを出力 77 | XMLを読込 78 | SQLを生成 79 | ブラウザに保存 80 | ブラウザから読込 81 | ブラウザの保存一覧 82 | サーバのバックエンド: 83 | 保存 84 | Quicksave 85 | 読込 86 | 一覧 87 | DBからインポート 88 | 読み込む設計名を入力してください: 89 | 保存する設計名を入力してください: 90 | インポートするDB名を入力してください: 91 | サーバレスポンス 92 | Saved 93 | Not Found 94 | Internal Server Error 95 | Not Implemented 96 | Service Unavailable 97 | 98 | 99 | XMLエラー 100 | ドキュメント 101 | 102 | 103 | -------------------------------------------------------------------------------- /locale/ko.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 테이블 추가 5 | 테이블 수정 6 | 테이블 삭제 7 | 선택한 테이블 삭제 8 | 테이블 정렬 9 | 전체 테이블 삭제 10 | 정말로 전체 테이블을 삭제하시겠습니까 11 | 신규 테이블 12 | 테이블 놓기 13 | 이름 14 | 설명 15 | 16 | 17 | 필드 추가 18 | 필드 수정 19 | 필드 삭제 20 | 위로 21 | 아래로 22 | 신규 필드 23 | 외래 키 생성 24 | 대상 테이블 선택 25 | 외래 키 연결 26 | 대상 필드 선택 27 | 외래 키 삭제 28 | 정말로 테이블을 삭제하시겠습니까 29 | 정말로 필드를 삭제하시겠습니까 30 | 31 | 32 | 이름 33 | 타입 34 | 사이즈 35 | 기본값 36 | NOT NULL 37 | NULL 38 | 자동 증가 39 | 설명 수정 40 | 이 필드의 설명을 입력해 주세요 41 | 42 | 43 | 확인 44 | 취소 45 | 잠시만 기다려주세요... 46 | 옵션 47 | 언어 48 | 새로운 디자인의 데이터베이스 49 | 몇몇 옵션들은 페이지를 다시 불러와야 적용이 됩니다. 이를 위해서는 쿠키 사용이 활성화 되어 있어야 합니다. 50 | 테이블 스냅 거리 51 | 픽셀, 0 = 스냅 비활성화 52 | 외래 키 명명 규식 53 | %T = 기본 테이블, %R = 기본 키, %t = 외래 테이블 54 | 테이블을 이동할 때, 연결선 숨기기 55 | 부드러운 연결선 사용 (브라우저 지원 필요)? 56 | 디자인에서 필드 사이즈를 표시 57 | 디자인에서 필드 타입을 표시 58 | 스타일 59 | 60 | 61 | 키 설정 62 | "%s" 테이블 키 정보 63 | 타입: 64 | 이름: 65 | 키 필드 66 | 추가 가능한 필드 67 | 키 수정 68 | 키 추가 69 | 키 삭제 70 | 71 | 72 | 저장 / 불러오기 73 | 불러오려고 하는 XML 데이터를 아래 텍스트 영역에 붙여 넣고 다시 시도해 주세요. 74 | 클라이언트 75 | 서버 76 | 입력 / 출력 77 | XML 저장 78 | XML 불러오기 79 | 브라우저에 저장 80 | 브라우저에서 불러오기 81 | 브라우저 저장 목록 82 | 드롭박스에 저장 83 | 드롭박스에서 불러오기 84 | 드롭박스 저장 목록 85 | SQL 생성 86 | 벡엔드 서버: 87 | 저장 88 | 빠른저장 89 | 불러오기 90 | 목록보기 91 | DB에서 가져오기 92 | 저장된 디자인의 키워드를 입력해 주세요: 93 | 저장할 디자인의 키워드를 입력해 주세요: 94 | 가져올 데이터베이스의 이름을 입력해 주세요: 95 | 서버 응답 96 | 저장되었습니다 97 | 찾을 수 없습니다(Not Found) 98 | 내부 서버 에러(Internal Server Error) 99 | 구현되지 않았습니다(Not Implemented) 100 | 서비스를 사용할 수 없습니다(Service Unavailable) 101 | 102 | 103 | XML 에러 104 | 문서 105 | 106 | 107 | -------------------------------------------------------------------------------- /locale/nl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Tabel toevoegen 5 | Bewerk tabel 6 | Verwijder tabel 7 | Verwijder tabellen 8 | Uitlijnen tabellen 9 | Tabellen schonen 10 | Wilt u echt alle tabellen verwijderen 11 | Nieuwe tabel 12 | Positioneer tabel 13 | Naam 14 | Opmerkingen 15 | 16 | 17 | Veld toevoegen 18 | Veld bewerken 19 | Veld verwijderen 20 | Op 21 | Neer 22 | nieuwe veld 23 | Maak relatie 24 | Click op doeltabel 25 | Verbind relatie 26 | Click op doelveld 27 | Verwijder relatie 28 | Tabel verwijderen? 29 | Veld verwijderen? 30 | 31 | 32 | Naam 33 | Type 34 | Omvang 35 | Standaard 36 | NOT NULL 37 | NULL 38 | Autoincrement 39 | Bewerk opmerkingen 40 | Geef opmerkingen voor dit veld 41 | 42 | 43 | OK 44 | Annuleer 45 | Even geduld... 46 | Opties 47 | Taal 48 | Database voor nieuwe ontwerpen 49 | Sommige opties worden pas geldig na het volledig opnieuw laden van de pagina. Cookies moeten zijn toegestaan voor een juiste werking. 50 | Tabel snap afstand 51 | In pixels, 0 = uitzetten snap 52 | Patroon voor relatie velden 53 | %T = primaire tabel, %R = primaire sleutel, %t = verwezen tabel. 54 | Verberg relaties tijdens verplaatsen van de tabel? 55 | Teken gekromde relaties (als de browser dit ondersteund)? 56 | Toon veld omvang in tabelontwerp? 57 | Toon veld type in tabelontwerp? 58 | Stijl 59 | 60 | 61 | Sleutels 62 | Sleutels in tabel "%s" 63 | Type: 64 | Naam: 65 | Velden in sleutel 66 | Beschikbare velden 67 | Bewerk sleutel 68 | Voeg sleutel toe 69 | Verwijder sleutel 70 | 71 | 72 | Opslaan / laden 73 | Please paste XML data into the text area below and try again. 74 | Lokaal 75 | Server 76 | Input / Output 77 | XML Opslaan 78 | XML Laden 79 | Opslaan in Browser 80 | Laden uit Browser 81 | Genereer SQL 82 | Server: 83 | Opslaan 84 | Snel opslaan 85 | Laden 86 | Toon lijst 87 | Import uit DB 88 | Enter keyword under which your design was saved: 89 | Enter keyword under which your design will be saved: 90 | Enter name of database to be imported: 91 | Reactie van server 92 | Opgeslagen 93 | Niet gevonden 94 | Interne Server Fout 95 | Niet geimplementeerd 96 | Niet beschikbaar 97 | 98 | 99 | XML fout 100 | Documentatie 101 | 102 | 103 | -------------------------------------------------------------------------------- /locale/pl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Dodaj tabelę 5 | Edytuj tabelę 6 | Usuń tabelę 7 | Usuń tabele 8 | Wyrównaj tabele 9 | Wyczyść tabele 10 | Czy na pewno usunąć wszystkie tabele 11 | nowa tabela 12 | miejsce tabeli 13 | Nazwa 14 | Opis 15 | 16 | 17 | Dodaj pole 18 | Edytuj pole 19 | Usuń pole 20 | W górę 21 | W dół 22 | nowe pole 23 | Utwórz klucz zewnętrzny 24 | kliknij w docelową tabelę 25 | Utwórz klucz zewnętrzny 26 | kliknij w docelową tabelę 27 | Smazat cizí klíč 28 | Czy na pewno usunąć tabelę 29 | Czy na pewno usunąć pole 30 | 31 | 32 | Nazwa 33 | Typ 34 | Rozmiar 35 | Domyślnie 36 | Niepuste 37 | Zerowy 38 | Automatyczne zwiększanie o 1 39 | Edytuj komentarz 40 | Wpisz komentarz dla tego pola 41 | 42 | 43 | OK 44 | Anuluj 45 | Proszę czekać... 46 | Opcje 47 | Język 48 | Bazy danych dla nowych projektów 49 | Niektóre opcje są zatwierdzane wyłącznie po kompletnym przeładowaniu strony. Ciasteczka muszą być akceptowane dla działania opcji. 50 | Ustalana odległość tabel 51 | W pikselach, 0 = wyłącznie ustalania 52 | Wzorzec dla zewnętrznych nazw 53 | %T = główna tabela, %R = klucz główny, %t = zewnętrzna tabela 54 | Ukryć złącza w tabeli podczas przeciągania? 55 | Rysuj pływające złącza (jesli wsperane jest przez przeglądarkę)? 56 | Show field size in table design? 57 | Show field datatype in table design? 58 | Styl 59 | 60 | 61 | Klucze 62 | Klucze w tabeli "%s" 63 | Typ: 64 | Nazwa: 65 | Pola w kluczu 66 | Dostępne pola 67 | Edytuj klucz 68 | Dodaj klucz 69 | Usuń klucz 70 | 71 | 72 | Zapisz / Otwórz 73 | Proszę wklej kod XML w poniższe pole tekstowe i spróbuj ponownie. 74 | Klient 75 | Serwer 76 | Wejście / Wyjście 77 | Zapisz XML 78 | Załaduj XML 79 | Generuj SQL 80 | Serwer wejściowy: 81 | Zapisz 82 | Quicksave 83 | Otwórz 84 | Lista pozycji 85 | Importuj z DB 86 | Wpisz słowo kluczowe pod którym twój projekt został zapisany: 87 | Wpisz słowo kluczowe pod którym twój projekt ma zostać zapisany: 88 | Wpisz nazwę bazy danych do zaimportowania: 89 | Odpowiedź serwera 90 | Zapisano 91 | Nie znaleziono 92 | Wewnętrzny błąd serwera 93 | Niezaimplementowane 94 | Serwer niedostępny 95 | 96 | 97 | Błąd XML 98 | Dokumentacja 99 | 100 | 101 | -------------------------------------------------------------------------------- /locale/pt_BR.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Adicionar tabela 5 | Editar tabela 6 | Remover tabela 7 | Remover tabelas 8 | Alinhar tabelas 9 | Limpar tabelas 10 | Realmente excluir todas as tabelas 11 | Nova tabela 12 | Clique p/ adicionar 13 | Nome 14 | Comentário 15 | 16 | 17 | Adicionar campo 18 | Editar campo 19 | Remover campo 20 | Para cima 21 | Para baixo 22 | Novo campo 23 | Criar chave estrangeira 24 | Selecione a tabela alvo(destino) 25 | Conectar chave estrangeira 26 | Clique na linha alvo 27 | Remover chave estrangeira 28 | Deseja realmente deletar a tabela 29 | Deseja realmente deletar o campo 30 | 31 | 32 | Nome 33 | Tipo 34 | Tamanho 35 | Default 36 | NOT NULL 37 | NULL 38 | Auto incrementar 39 | Editar comentário 40 | Digite o comentário para este campo 41 | 42 | 43 | OK 44 | Cancelar 45 | Por favor espere... 46 | Opções 47 | Linguagem 48 | Base de Dados para os novos designs 49 | Algumas opções serão aplicadas somente depois da página totalmente regarrecada. Cookies devem ser ativados para as opções funcionarem. 50 | Distância entre as tabelas 51 | Em pixels, 0 = desativar snapping 52 | Padrão p/ nomes estrangeiros 53 | %T = tabela primária, %R = chave primária, %t = tabela estrangeira 54 | Esconder connectores na tela? 55 | Desenhar conectores suaves (se suportado pelo navegador)? 56 | Estilo 57 | 58 | 59 | 60 | Chaves 61 | Chaves na tabela "%s" 62 | Tipo: 63 | Nome: 64 | Campos na chave 65 | Campos disponíveis 66 | Editar chave 67 | Adicionar chave 68 | Remover chave 69 | 70 | 71 | Salvar / Carregar 72 | Por favor cole os dados XML na área de texto abaixo e tente novamente. 73 | Cliente 74 | Servidor 75 | Entrada / Saída 76 | Salvar XML 77 | Carregar XML 78 | Gerar SQL 79 | Parâmetros do Servidor: 80 | Salvar 81 | Carregar 82 | Listar itens 83 | Importar do BD 84 | Digite o nome o qual seu design foi salvo: 85 | Digite o nome com qual seu design será salvo: 86 | Digite o nome da base de dados à ser importada: 87 | Resposta do servidor 88 | Salvo 89 | Não Encontrado 90 | Erro Interno do Servidor 91 | Não Implementado 92 | Serviço Indisponível 93 | 94 | 95 | Erro de XML 96 | Documentação 97 | 98 | 99 | -------------------------------------------------------------------------------- /locale/ro.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Adauga tabela 5 | Editeaza tabela 6 | Sterge tabela 7 | Sterge tabelele 8 | Aliniaza tabelele 9 | Sterge tabelele 10 | Sterge toate tabelele 11 | (nume tabela) 12 | plaseaza tabela 13 | Nume 14 | Comentariu 15 | 16 | 17 | Adauga coloana 18 | Editeaza coloana 19 | Sterge coloana 20 | Sus 21 | Jos 22 | coloana noua 23 | Creaza FK 24 | alege destinatie 25 | Conexiune FK 26 | alege destinatie 27 | Sterge FK 28 | Sterge tabela 29 | Sterge coloana 30 | 31 | 32 | Nume 33 | Tip 34 | Dimensiune 35 | Valoare default 36 | NOT NULL 37 | NULL 38 | Auto increment 39 | Editare comentariu 40 | Introduceti comentariul pentru aceasta coloana: 41 | 42 | 43 | OK 44 | Anuleaza 45 | Asteptati va rog... 46 | Optiuni 47 | Limbaj 48 | Baza de date pentru design 49 | Anumite optiuni devin active numai dupa o reincarcare completa a paginii. Cookies trebuie sa fie activate pentru browser. 50 | Distanta automata intre tabele 51 | In pixeli, 0 = dezactiveaza asezarea automata 52 | Modelul pentru nume de Foreign Keys 53 | %T = Tabela primara, %R = Primary key, %t = Tabela cu Foreign key 54 | Ascunde conexiunile la mutarea tabelei? 55 | Deseneaza folosind "smooth connectors" (daca browserul suporta)? 56 | Stil 57 | 58 | 59 | 60 | Keys / Indexes 61 | Keys / Indexes in tabela "%s" 62 | Tip: 63 | Nume: 64 | Campuri selectate 65 | Campuri disponibile 66 | Editeaza 67 | Adauga 68 | Sterge 69 | 70 | 71 | Salveaza / Incarca 72 | Introduceti codul XML si re-incercati. 73 | Client 74 | Server 75 | Input / Output 76 | Genereaza XML 77 | Incarca din XML 78 | Genereaza SQL 79 | Server backend: 80 | Salveaza 81 | Incarca 82 | Lista de salvari 83 | Import tabele din baza de date 84 | Introduceti numele sub care a fost salvat design-ul: 85 | Introduceti numele sub care va fi salvat design-ul: 86 | Introduceti numele bazei de date care va fi importata: 87 | Server response 88 | Salvare efectuata 89 | Not Found 90 | Internal Server Error 91 | Not Implemented 92 | Service Unavailable 93 | 94 | 95 | Eroare XML 96 | Documentatie 97 | 98 | 99 | -------------------------------------------------------------------------------- /locale/ru.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Добавить таблицу 5 | Редактировать таблицу 6 | Удалить таблицу 7 | Удалить таблицы 8 | Выровнять таблицы 9 | Очистить таблицы 10 | Действительно удалить все таблицы 11 | новая таблица 12 | расположите таблицу 13 | Имя 14 | Коментарий 15 | 16 | 17 | Добавить поле 18 | Редактировать поле 19 | Удалить поле 20 | Вверх 21 | Вниз 22 | новое поле 23 | Создать внешний ключ 24 | щелкните по целевой таблице 25 | Присоединить внешний ключ 26 | щёлкните по целевой таблице 27 | Удалить внешний ключ 28 | Действительно удалить таблицу 29 | Действительно удалить поле 30 | 31 | 32 | Имя 33 | Тип 34 | Размер 35 | По умолчанию 36 | NOT NULL 37 | NULL 38 | Автоинкремент 39 | Изменить коментарий 40 | Введите коментарий для этого поля 41 | 42 | 43 | OK 44 | Отменить 45 | Пожалуйста подождите... 46 | Опции 47 | Язык 48 | База данных для новых схем 49 | Некоторые опции заработают только после полной перезагрузки страницы. Cookie должны быть включены. 50 | Шаг при перемещении таблицы 51 | В пикселях, 0 = отключить 52 | Шаблон для имён внешних ключей 53 | %T = первичная таблица, %R = первичный ключ, %t = внешняя таблица 54 | Прятать связи при перетаскивании таблиц? 55 | Рисовать сглаженные связи (если поддерживается браузером)? 56 | Показывать размеры полей таблиц? 57 | Показывать типы данных полей таблиц? 58 | Стиль 59 | 60 | 61 | Ключи 62 | Ключи в таблице "%s" 63 | Тип: 64 | Имя: 65 | Поля в ключе 66 | Доступные поля 67 | Редактировать ключ 68 | Добавить ключ 69 | Удалить ключ 70 | 71 | 72 | Сохранить / Загрузить 73 | Пожалуйста, вставьте XML данные в поле ниже и попробуйте ещё раз. 74 | Клиент 75 | Сервер 76 | Ввод / Вывод 77 | Сохранить XML 78 | Загрузить XML 79 | Сохранить в браузере 80 | Загрузить из браузера 81 | Получить список схем из браузера 82 | Сохранить в Dropbox 83 | Загрузить из Dropbox 84 | Получить список из Dropbox 85 | Генерировать SQL 86 | Серверные технологии: 87 | Сохранить 88 | Быстрое сохранение 89 | Загрузить 90 | Получить список схем 91 | Импортировать из БД 92 | Введите ключевое слово под которым сохранена ваша схема: 93 | Введите ключевое слово под которым будет сохранена ваша схема: 94 | Введите имя импортируемой базы данных: 95 | Ответ сервера 96 | Сохранено 97 | Не найдено 98 | Внутренняя ошибка сервера 99 | Не реализовано 100 | Служба недоступна 101 | 102 | 103 | Ошибка XML 104 | Документация 105 | 106 | 107 | -------------------------------------------------------------------------------- /locale/sv.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Skapa tabell 5 | Redigera tabell 6 | Ta bort tabell 7 | Ta bort tabeller 8 | Räta upp tabeller 9 | Ta bort alla tabeller 10 | Vill du verkligen ta bort alla tabeller 11 | Ny tabell 12 | Placera tabell 13 | Namn 14 | Kommentar 15 | 16 | 17 | Lägg till fält 18 | Redigera fält 19 | Ta bort field 20 | Upp 21 | Ner 22 | Ny field 23 | Skapa främmande nyckel 24 | Klicka på motsvarande tabell 25 | Anslut främmande nycke 26 | Välj motsvarande rad 27 | Ta bort främmande nyckel 28 | Vill du verkligen ta bort denna tabell? 29 | Vill du verkligen ta bort detta fält? 30 | 31 | 32 | Namn 33 | Typ 34 | Storlek 35 | Standard 36 | NOT NULL 37 | NULL 38 | Autoincrement 39 | Redigera kommentar 40 | Ange kommentar för detta fält 41 | 42 | 43 | OK 44 | Avbryt 45 | Var god vänta... 46 | Alternativ 47 | Språk 48 | Databas for nya designer 49 | Vissa alternativ ändras bara efter att du laddat om sidan. Cookies krävs för att alternativ ska fungera. 50 | Tabellers fästavstånd 51 | Ange pixlar, 0 = stäng av fästning 52 | Mönster för främmande namn 53 | %T = primär tabell, %R = primär nycke, %t = främmande tabell 54 | Dölj anslutningar när du drar i tabellen? 55 | Rita mjuka anslutningar (om din webbläsare stöder det)? 56 | Stil 57 | 58 | 59 | Nycklar 60 | Nycklar i tabellen "%s" 61 | Typ: 62 | Namn: 63 | Fields in nyckel 64 | Available fields 65 | Edit nyckel 66 | Add key 67 | Ta bort key 68 | 69 | 70 | Spara / Ladda 71 | Vänligen klistra in XML i textrutan nedan och försök igen. 72 | Klient 73 | Server 74 | Input / Output 75 | Spara XML 76 | Ladda XML 77 | Generera SQL 78 | Server backend: 79 | Spara 80 | Ladda 81 | Lista innehåll 82 | Importera från DB 83 | Ange vilket nyckelord din design sparades under: 84 | Ange vilket nyckelord din design ska sparas under: 85 | Ange namnet på databasen som ska importeras: 86 | Serversvar 87 | Sparad 88 | Ej funnen 89 | Intert serverfel 90 | Ej implementerat 91 | Service Unavailable 92 | 93 | 94 | XML error 95 | Dokumentation 96 | 97 | 98 | -------------------------------------------------------------------------------- /locale/tr.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Tablo Ekle 5 | Tablo Düzenle 6 | Tablo Sil 7 | Tabloları Sil 8 | Tabloları Hizala 9 | Tabloları Temizle 10 | Gerçekten tabloları sil 11 | Yeni Tablo 12 | Tablo Yerleşim Yeri 13 | Adı 14 | Açıklama 15 | 16 | 17 | Alan Ekle 18 | Alan Düzenle 19 | Alan Sil 20 | Yukarı 21 | Aşağıya 22 | Yeni Alan 23 | Foreign Key Oluştur 24 | Hedef Tablosuna Tıkla 25 | Foreign Key Bağlan 26 | Hedef Satırı Tıklayın 27 | Foreign Key Sil 28 | Gerçekten Tabloyu Sil 29 | Gerçekten Alanı Sil 30 | 31 | 32 | Name 33 | Type 34 | Size 35 | Default 36 | NOT NULL 37 | NULL 38 | Autoincrement 39 | Yorumu düzenle 40 | Bu alan için yorum girin 41 | 42 | 43 | Tamam 44 | İptal 45 | Lütfen Bekleyiniz... 46 | Ayarlar 47 | Diller 48 | Yeni tasarımlar için veritabanı 49 | Bazı seçenekler yalnızca tam sayfa yeniden yüklendikten sonra uygulanır. Seçeneklerin çalışması için çerezlerin etkinleştirilmesi gerekir. 50 | Table snap distance 51 | In pixels, 0 = disable snapping 52 | Pattern for foreign names 53 | %T = primary table, %R = primary key, %t = foreign table 54 | Tablo sürüklemesindeki bağlayıcıları gizle? 55 | Draw smooth connectors (if supported by browser)? 56 | Tablo tasarımında alan boyutunu gösterme? 57 | Alan veri tipini tablo tasarımında göster? 58 | Stil 59 | 60 | 61 | Anahtarlar 62 | Tablodaki tuşlar "%s" 63 | Tipi: 64 | Adı: 65 | Anahtardaki Alanlar 66 | Mevcut Alanlar 67 | Anahtar Düzenle 68 | Anahtar Ekle 69 | Anahtar Sil 70 | 71 | 72 | Kaydet / Yükle 73 | Lütfen XML verilerini aşağıdaki metin alanına yapıştırın ve tekrar deneyin. 74 | İstemci 75 | Sunucu 76 | Giriş / Çıkış 77 | XML Kaydet 78 | XML Yükle 79 | Browser'a Kaydet 80 | Browser'a Yükle 81 | Browser'da Listele 82 | Dropbox Kaydet 83 | Dropbox Yükle 84 | Dropbox Listele 85 | SQL oluştur 86 | Sunucu Kısmı: 87 | Kaydet 88 | Hızlı Kayıt 89 | Yükle 90 | Ürünleri Listele 91 | DB'den içe aktar 92 | Tasarımınızın kaydedildiği anahtar kelimeyi girin: 93 | Tasarımınızın kaydedileceği anahtar kelimeyi girin: 94 | Yüklenecek veritabanının adını girin: 95 | Sunucu yanıtı 96 | Kaydedilmiş 97 | Bulunamadı 98 | İç Sunucu Hatası 99 | Uygulanmadı 100 | Hizmet Kullanılamıyor 101 | 102 | 103 | XML hatası 104 | Belgeleme 105 | 106 | 107 | -------------------------------------------------------------------------------- /locale/zh.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 添加表 5 | 修改表 6 | 移除表 7 | 重组表格位置 8 | 删除所有表 9 | 真的要删除所有表么 10 | 表名称 11 | 放置表格…… 12 | 表名 13 | 注释 14 | 15 | 16 | 添加列 17 | 修改列 18 | 删除列 19 | 上移 20 | 下移 21 | newfield 22 | 创建外连表格列 23 | 点击选择目标表 24 | 连接到外部列 25 | 点击选择目标列 26 | 断开外部连接 27 | 真的删除表么 28 | 真的删除列么 29 | 30 | 31 | 列名 32 | 类型 33 | 大小 34 | 默认 35 | 不能为空 36 | 可留空 37 | 自增长 38 | 改备注 39 | 输入此列备注 40 | 41 | 42 | 搞定 43 | 不要了 44 | 请等待... 45 | 选项设置 46 | 语言 47 | 新建的数据库设为: 48 | 有些属性需要刷新页面后才能起作用,所以,浏览器的Cookies必须启用。 49 | 表格捕捉距离 50 | 像素, 0 = 关闭捕捉 51 | 外连名称规则 52 | %T = 主表, %R = 主键, %t = 外连表 53 | 在表格移动时不显示连接? 54 | 绘制平滑的连接 (如果浏览器支持)? 55 | 设计表格时显示字段大小? 56 | 设计表格时显示字段数据类型? 57 | 样式 58 | 59 | 60 | 设置表键 61 | 在 "%s" 表中可用列属性 62 | 类型: 63 | 属性名称: 64 | 此属性中的列 65 | 可用列 66 | 修改属性 67 | 添加属性 68 | 删除属性 69 | 70 | 71 | 登录 72 | 注销 73 | 保存 / 载入 74 | 请先粘帖一个XML文件内容到文本框中,然后再导入。 75 | 客户端 76 | 服务端 77 | 输入 / 输出 78 | 保存为XML 79 | 载入XML 80 | 传化为数据库脚本 81 | 服务后台: 82 | 保存 83 | 载入 84 | 显示清单 85 | 快速保存 86 | 从数据库中导入 87 | 输入你所保存的名字: 88 | 输入所要保存的名字: 89 | 输入所要导入的数据库名称: 90 | 服务器反馈 91 | 已存 92 | 找不到 93 | 网络服务错误 94 | 未执行 95 | 服务暂不可用 96 | 97 | 98 | XML 错误 99 | 文档 100 | 101 | 102 | -------------------------------------------------------------------------------- /styles/ie6.css: -------------------------------------------------------------------------------- 1 | v\:* { 2 | behavior: url(#default#VML); 3 | } 4 | 5 | #bar { 6 | position: absolute; 7 | right: auto; 8 | left: expression(eval(document.documentElement.scrollLeft)+document.documentElement.clientWidth-eval(this.offsetWidth)); 9 | top: expression(eval(document.documentElement.scrollTop)); 10 | } 11 | 12 | #bar .shadow-corner { 13 | background-image: none; 14 | filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/bar_corner.png', sizingMethod='crop'); 15 | overflow: hidden; 16 | } 17 | 18 | #bar .shadow-left { 19 | background-image: none; 20 | filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/bar_left.png', sizingMethod='crop'); 21 | height: expression(eval(this.parentNode.offsetHeight)); 22 | overflow: hidden; 23 | } 24 | 25 | #bar .shadow-bottom { 26 | background-image: none; 27 | filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/bar_bottom.png', sizingMethod='crop'); 28 | width: expression(eval(this.parentNode.offsetWidth)); 29 | overflow: hidden; 30 | } 31 | 32 | .table .shadow-corner { 33 | background-image: none; 34 | } 35 | 36 | .table .shadow-right { 37 | background-image: none; 38 | } 39 | 40 | .table .shadow-bottom { 41 | background-image: none; 42 | } 43 | 44 | #minimap { 45 | filter: alpha(opacity=90); 46 | position: absolute; 47 | right: auto; 48 | left: expression(eval(document.documentElement.scrollLeft)+document.documentElement.clientWidth-eval(this.offsetWidth)); 49 | top: expression(eval(document.documentElement.scrollTop)+document.documentElement.clientHeight-eval(this.offsetHeight)); 50 | } 51 | 52 | #background { 53 | filter: alpha(opacity=50); 54 | } 55 | 56 | #keys, #opts { 57 | width: expression(eval(document.documentElement.clientWidth)/2); 58 | } 59 | 60 | #rubberband { 61 | filter: alpha(opacity=50); 62 | } -------------------------------------------------------------------------------- /styles/ie7.css: -------------------------------------------------------------------------------- 1 | v\:* { 2 | behavior: url(#default#VML); 3 | } 4 | 5 | #minimap { 6 | filter: alpha(opacity=90); 7 | } 8 | 9 | #background { 10 | filter: alpha(opacity=50); 11 | } 12 | 13 | #keys, #opts { 14 | width: expression(eval(document.documentElement.clientWidth)/2); 15 | } 16 | 17 | #rubberband { 18 | filter: alpha(opacity=50); 19 | } -------------------------------------------------------------------------------- /styles/original.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: verdana, sans serif; 3 | font-size: small; 4 | padding: 0px; 5 | margin: 0px; 6 | background: #FFF; 7 | visibility: hidden; 8 | -moz-user-select: -moz-none; 9 | -khtml-user-select: none; 10 | -webkit-user-select: none; 11 | -ms-user-select: none; 12 | user-select: none; 13 | } 14 | 15 | #area { 16 | position: relative; 17 | background: transparent url(../images/back.png); 18 | width: 3000px; 19 | height: 3000px; 20 | } 21 | 22 | #controls { 23 | position: absolute; 24 | left: 0px; 25 | top: 0px; 26 | } 27 | 28 | #bar { 29 | text-align: center; 30 | background-color: #ccc; 31 | position: fixed; 32 | top: 0px; 33 | right: 0px; 34 | width: 150px; 35 | padding: 0px 5px 5px; 36 | -moz-box-shadow: -4px 4px 8px #888; 37 | /* FF 3.5+ */ 38 | -webkit-box-shadow: -4px 4px 8px #888; 39 | /* Safari 3.0+, Chrome */ 40 | box-shadow: -4px 4px 8px #888; 41 | /* Opera 10.5, IE 9.0 */ 42 | filter: progid:DXImageTransform.Microsoft.Shadow(Strength=5, Direction=215, Color='#888888'); 43 | /* IE 6, IE 7 */ 44 | -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=5, Direction=215, Color='#888888')"; 45 | /* IE 8 */ 46 | } 47 | 48 | #bar input { 49 | display: block; 50 | width: 90%; 51 | margin: auto; 52 | } 53 | 54 | #bar input.small { 55 | width: 45%; 56 | display: inline; 57 | } 58 | 59 | #toggle { 60 | padding: 5px 0px; 61 | margin-bottom: 5px; 62 | cursor: pointer; 63 | background-position: 50% 5px; 64 | background-repeat: no-repeat; 65 | height: 5px; 66 | } 67 | 68 | #toggle:hover { 69 | background-color: #bbb; 70 | } 71 | 72 | #toggle.on { 73 | background-image: url(../images/up.gif); 74 | } 75 | 76 | #toggle.off { 77 | background-image: url(../images/down.gif); 78 | } 79 | 80 | #minimap { 81 | position: fixed; 82 | width: 100px; 83 | height: 100px; 84 | right: 0px; 85 | bottom: 0px; 86 | background-color: #fff; 87 | border: 1px solid #000; 88 | opacity: 0.9; 89 | overflow: hidden; 90 | } 91 | 92 | .mini { 93 | position: absolute; 94 | border: 1px solid #000; 95 | background-color: #eea; 96 | font-size: 1px; 97 | line-height: 1px; 98 | } 99 | 100 | .mini_selected { 101 | background-color: #f85; 102 | } 103 | 104 | .port { 105 | position: absolute; 106 | border: 2px solid #f00; 107 | } 108 | 109 | .table { 110 | position: absolute; 111 | border: 1px solid #000; 112 | background-color: #ddd; 113 | cursor: pointer; 114 | -moz-box-shadow: 4px 4px 8px #888; 115 | /* FF 3.5+ */ 116 | -webkit-box-shadow: 4px 4px 8px #888; 117 | /* Safari 3.0+, Chrome */ 118 | box-shadow: 4px 4px 8px #888; 119 | /* Opera 10.5, IE 9.0 */ 120 | filter: progid:DXImageTransform.Microsoft.Shadow(Strength=5, Direction=135, Color='#888888'); 121 | /* IE 6, IE 7 */ 122 | -ms-filter: progid:DXImageTransform.Microsoft.Shadow(Strength=5, Direction=135, Color='#888888'); 123 | /* IE 8 */ 124 | border-radius: 3px; 125 | } 126 | 127 | .table table { 128 | border-collapse: collapse; 129 | } 130 | 131 | .table.selected { 132 | border: 2px solid #000; 133 | } 134 | 135 | .table thead .title { 136 | text-align: center; 137 | padding: 3px 30px; 138 | } 139 | 140 | .table tbody { 141 | border-top: 1px dotted #888; 142 | } 143 | 144 | .table tbody td { 145 | padding: 3px; 146 | } 147 | 148 | .table tbody .selected { 149 | font-weight: bold; 150 | color: #f00; 151 | display: inline-block; 152 | } 153 | 154 | .table tbody .title { 155 | display: inline-block; 156 | } 157 | 158 | .table thead td[title]:not([title=""]):after { 159 | content: ''; 160 | position: absolute; 161 | top: 0; 162 | right: 0; 163 | border-color: royalblue; 164 | border-style: solid; 165 | border-width: 5px; 166 | border-bottom-color: transparent; 167 | border-left-color: transparent; 168 | } 169 | 170 | .table tbody td { 171 | position: relative; 172 | } 173 | 174 | .table tbody[title]:not(.expanded):not([title=""]) td:last-child:after { 175 | content: ''; 176 | position: absolute; 177 | top: 0; 178 | right: 0; 179 | border-color: royalblue; 180 | border-style: solid; 181 | border-width: 5px; 182 | border-bottom-color: transparent; 183 | border-left-color: transparent; 184 | } 185 | 186 | .primary { 187 | font-weight: bold; 188 | } 189 | 190 | .key { 191 | font-style: italic; 192 | } 193 | 194 | .primary.key { 195 | font-style: normal; 196 | } 197 | 198 | .typehint { 199 | font-size: 80%; 200 | color: gray; 201 | } 202 | 203 | .comment { 204 | font-size: 80%; 205 | font-weight: normal; 206 | margin-right: 0.5em; 207 | } 208 | 209 | .adding { 210 | cursor: crosshair; 211 | } 212 | 213 | .relation { 214 | overflow: hidden; 215 | } 216 | 217 | #background { 218 | position: absolute; 219 | background-color: #000; 220 | opacity: 0.5; 221 | visibility: hidden; 222 | } 223 | 224 | #window { 225 | position: absolute; 226 | visibility: hidden; 227 | background-color: #fff; 228 | border: 6px double #333; 229 | } 230 | 231 | #windowtitle { 232 | border-bottom: 2px solid #333; 233 | padding: 2px; 234 | padding-left: 1em; 235 | font-weight: bold; 236 | background-color: rgb(238, 238, 170); 237 | } 238 | 239 | #windowcontent { 240 | padding: 1em; 241 | } 242 | 243 | #windowok, #windowcancel { 244 | margin: 0em 1em 1em; 245 | } 246 | 247 | .small { 248 | font-size: 85%; 249 | } 250 | 251 | #textarea { 252 | width: 650px; 253 | height: 200px; 254 | } 255 | 256 | #opts { 257 | width: 700px; 258 | } 259 | 260 | #keys { 261 | white-space: nowrap; 262 | text-align: center; 263 | } 264 | 265 | legend { 266 | font-weight: bold; 267 | } 268 | 269 | label, input, select { 270 | vertical-align: middle; 271 | } 272 | 273 | #throbber { 274 | position: absolute; 275 | top: 2px; 276 | right: 3px; 277 | } 278 | 279 | #rubberband { 280 | position: absolute; 281 | border: 1px solid #000; 282 | background: #888; 283 | opacity: 0.5; 284 | visibility: hidden; 285 | } -------------------------------------------------------------------------------- /styles/print.css: -------------------------------------------------------------------------------- 1 | #bar, #background, #minimap { 2 | display: none; 3 | } 4 | 5 | .table { 6 | border: 1px solid #000000; 7 | background-color: none; 8 | } 9 | 10 | .row { 11 | background-color: none; 12 | } 13 | 14 | .table .shadow-corner, .shadow-right, .shadow-bottom { 15 | display: none; 16 | } 17 | 18 | .table_title { 19 | font-weight: bold; 20 | font-size: 115%; 21 | background-color: none; 22 | } --------------------------------------------------------------------------------