blob: 4e8a5a72e896d5c06d1a8a48fa0f5133a5b5513f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var textHeight = 10;
var padding = 10;
var namespace = "http://www.w3.org/2000/svg";
var displayAttributes = true;
var displayMethods = true;
var displayNotes = true;
function Type(name){
this.width = 160;
this.style = "type";
this.insert = function(evt){
y = 0;
y = this.insertOutline(evt,y);
y = this.insertName(evt,y);
if(displayAttributes==true){
y = this.insertAttributes(evt,y);
}
if(displayMethods==true){
y = this.insertMethods(evt,y);
}
if(displayNotes==true){
y = this.insertNotes(evt,y);
}
}
this.height = function(){
height = 0;
height += this.heightName();
if(displayAttributes==true){
height += this.heightAttributes();
}
if(displayMethods==true){
height += this.heightMethods();
}
return height;
}
this.insertOutline = function(evt,y){
style = evt.target.getAttributeNS(null, "class");
evt.target.setAttributeNS(null,"class",style+" "+this.style);
e = document.createElementNS(namespace, "rect");
e.setAttributeNS(null, "x", 0);
e.setAttributeNS(null, "y", 0);
e.setAttributeNS(null, "width", this.width);
e.setAttributeNS(null, "height", this.height());
e.setAttributeNS(null, "class", "outline");
evt.target.appendChild(e);
return y;
}
this.name = name;
this.heightName = function(){
return padding * 2 + textHeight;
}
this.insertName = function(evt,y){
y += padding;
y += textHeight;
e = document.createElementNS(namespace, "text");
e.setAttributeNS(null, "x", this.width/2);
e.setAttributeNS(null, "y", y);
e.setAttributeNS(null, "class", "title");
e.appendChild(document.createTextNode(this.name));
evt.target.appendChild(e);
y += padding;
return y;
}
this.attributeList = new Array();
this.attributeCount = 0;
this.addAttribute = function(text){
this.attributeList[this.attributeCount++]=text;
}
this.heightAttributes = function(){
if(this.attributeCount>0){
return padding * 2 + this.attributeCount*textHeight;
}
else{
return padding;
}
}
this.insertAttributes = function(evt,y){
e = document.createElementNS(namespace, "line");
e.setAttributeNS(null, "x1", 0);
e.setAttributeNS(null, "y1", y);
e.setAttributeNS(null, "x2", this.width);
e.setAttributeNS(null, "y2", y);
e.setAttributeNS(null, "class", "divider");
evt.target.appendChild(e);
y += padding;
for(i=0;i<this.attributeCount;++i){
y += textHeight;
e = document.createElementNS(namespace, "text");
e.setAttributeNS(null, "x", padding);
e.setAttributeNS(null, "y", y);
e.setAttributeNS(null, "class", "attribute");
e.appendChild(document.createTextNode(this.attributeList[i]));
evt.target.appendChild(e);
}
if(this.attributeCount>0){
y += padding;
}
return y;
}
this.methodList = new Array();
this.methodCount = 0;
this.addMethod = function(text){
this.methodList[this.methodCount++]=text;
}
this.heightMethods = function(){
if(this.methodCount>0){
return padding * 2 + this.methodCount*textHeight;
}
else{
return padding;
}
}
this.insertMethods = function(evt,y){
e = document.createElementNS(namespace, "line");
e.setAttributeNS(null, "x1", 0);
e.setAttributeNS(null, "y1", y);
e.setAttributeNS(null, "x2", this.width);
e.setAttributeNS(null, "y2", y);
e.setAttributeNS(null, "class", "divider");
evt.target.appendChild(e);
y += padding;
for(i=0;i<this.methodCount;++i){
y += textHeight;
e = document.createElementNS(namespace, "text");
e.setAttributeNS(null, "x", padding);
e.setAttributeNS(null, "y", y);
e.setAttributeNS(null, "class", "method");
e.appendChild(document.createTextNode(this.methodList[i]));
evt.target.appendChild(e);
}
if(this.methodCount>0){
y += padding;
}
return y;
}
this.noteList = new Array();
this.noteCount = 0;
this.addNote = function(text){
this.noteList[this.noteCount++]=text;
}
this.insertNotes = function(evt,y){
if(this.noteCount>0){
joinTop = y;
y += padding;
e = document.createElementNS(namespace, "line");
e.setAttributeNS(null, "x1", this.width/2-padding*2);
e.setAttributeNS(null, "y1", y);
e.setAttributeNS(null, "x2", this.width/2+padding*2);
e.setAttributeNS(null, "y2", joinTop);
e.setAttributeNS(null, "class", "note connect");
evt.target.appendChild(e);
height = this.heightNotes();
e = document.createElementNS(namespace, "polygon");
e.setAttributeNS(null, "points", "0,"+(y+padding)+" 0,"+(y+height)+" "+this.width+","+(y+height)+" "+this.width+","+y+" "+padding+","+y);
e.setAttributeNS(null, "class", "note");
evt.target.appendChild(e);
e = document.createElementNS(namespace, "polygon");
e.setAttributeNS(null, "points", ""+padding+","+y+" 0,"+(y+padding)+" "+padding+","+(y+padding));
e.setAttributeNS(null, "class", "note corner");
evt.target.appendChild(e);
y += padding;
for(i=0;i<this.noteCount;++i){
y += textHeight;
e = document.createElementNS(namespace, "text");
e.setAttributeNS(null, "x", padding);
e.setAttributeNS(null, "y", y);
e.setAttributeNS(null, "class", "note");
e.appendChild(document.createTextNode(this.noteList[i]));
evt.target.appendChild(e);
}
}
}
this.heightNotes = function(){
if(this.noteCount>0){
return padding*2 + this.noteCount*textHeight;
}
}
}
function Interface(name){
this.superclass = Type;
this.superclass(name);
delete this.superclass;
this.rounded = true;
this.insertOutline = function(evt,y){
style = evt.target.getAttributeNS(null, "class");
evt.target.setAttributeNS(null,"class",style+" "+this.style);
e = document.createElementNS(namespace, "rect");
e.setAttributeNS(null, "x", 0);
e.setAttributeNS(null, "y", 0);
e.setAttributeNS(null, "width", this.width);
e.setAttributeNS(null, "height", this.height());
e.setAttributeNS(null, "rx", padding*1.5);
e.setAttributeNS(null, "ry", padding*1.5);
e.setAttributeNS(null, "class", "outline");
evt.target.appendChild(e);
return y;
}
this.heightAttributes = function(){
return 0;
}
this.insertAttributes = function(evt,y){
return y;
}
}
Interface.prototype = new Type;
function Class(name){
this.superclass = Type;
this.superclass(name);
delete this.superclass;
this.rounded = false;
}
Class.prototype = new Type;
function PackageSymbol(name,width,height){
this.name = name;
this.nameWidth = 150;
this.width = width;
this.height = height;
this.insert = function(evt){
style = evt.target.getAttributeNS(null, "class");
evt.target.setAttributeNS(null,"class",style+" package");
first = evt.target.getFirstChild();
e = document.createElementNS(namespace, "rect");
e.setAttributeNS(null, "x", 0);
e.setAttributeNS(null, "y", 0);
e.setAttributeNS(null, "width", this.nameWidth);
e.setAttributeNS(null, "height", textHeight+padding);
e.setAttributeNS(null, "class", "outline");
e.appendChild(document.createTextNode(this.name));
evt.target.insertBefore(e,first);
e = document.createElementNS(namespace, "text");
e.setAttributeNS(null, "x", this.nameWidth/2);
e.setAttributeNS(null, "y", textHeight+padding/2);
e.setAttributeNS(null, "class", "title");
e.appendChild(document.createTextNode(this.name));
evt.target.insertBefore(e,first);
e = document.createElementNS(namespace, "rect");
e.setAttributeNS(null, "x", 0);
e.setAttributeNS(null, "y", textHeight+padding);
e.setAttributeNS(null, "width", this.width);
e.setAttributeNS(null, "height", this.height-textHeight-padding);
e.setAttributeNS(null, "class", "outline");
e.appendChild(document.createTextNode(this.name));
evt.target.insertBefore(e,first);
e = document.createElementNS(namespace, "rect");
e.setAttributeNS(null, "x", padding);
e.setAttributeNS(null, "y", textHeight+padding*2);
e.setAttributeNS(null, "width", this.width-padding*2);
e.setAttributeNS(null, "height", this.height-textHeight-padding*3);
e.setAttributeNS(null, "class", "inner");
e.appendChild(document.createTextNode(this.name));
evt.target.insertBefore(e,first);
}
}