The schema alignment dialog is starting to work. The protograph gets rendered and is interactive. No saving yet.
git-svn-id: http://google-refine.googlecode.com/svn/trunk@83 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
parent
39899b9eeb
commit
242e23c085
@ -1,31 +1,13 @@
|
|||||||
package com.metaweb.gridworks.protograph;
|
package com.metaweb.gridworks.protograph;
|
||||||
|
|
||||||
import java.util.Properties;
|
abstract public class CellNode extends Node {
|
||||||
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONWriter;
|
|
||||||
|
|
||||||
public class CellNode extends Node {
|
|
||||||
private static final long serialVersionUID = 5820786756175547307L;
|
private static final long serialVersionUID = 5820786756175547307L;
|
||||||
|
|
||||||
final public int cellIndex;
|
final public int cellIndex;
|
||||||
final public boolean createUnlessRecon;
|
|
||||||
final public FreebaseType type;
|
|
||||||
|
|
||||||
public CellNode(
|
public CellNode(
|
||||||
int cellIndex,
|
int cellIndex
|
||||||
boolean createUnlessRecon,
|
|
||||||
FreebaseType type
|
|
||||||
) {
|
) {
|
||||||
this.cellIndex = cellIndex;
|
this.cellIndex = cellIndex;
|
||||||
this.createUnlessRecon = createUnlessRecon;
|
|
||||||
this.type = type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(JSONWriter writer, Properties options)
|
|
||||||
throws JSONException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.metaweb.gridworks.protograph;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONWriter;
|
||||||
|
|
||||||
|
public class CellTopicNode extends CellNode {
|
||||||
|
private static final long serialVersionUID = 1684854896739592911L;
|
||||||
|
|
||||||
|
final public boolean createForNoReconMatch;
|
||||||
|
final public FreebaseType type;
|
||||||
|
|
||||||
|
public CellTopicNode(
|
||||||
|
int cellIndex,
|
||||||
|
boolean createForNoReconMatch,
|
||||||
|
FreebaseType type
|
||||||
|
) {
|
||||||
|
super(cellIndex);
|
||||||
|
|
||||||
|
this.createForNoReconMatch = createForNoReconMatch;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void write(JSONWriter writer, Properties options)
|
||||||
|
throws JSONException {
|
||||||
|
|
||||||
|
writer.object();
|
||||||
|
writer.key("nodeType"); writer.value("cell-as-topic");
|
||||||
|
writer.key("cellIndex"); writer.value(cellIndex);
|
||||||
|
writer.key("type"); type.write(writer, options);
|
||||||
|
writer.key("createUnlessRecon"); writer.value(createForNoReconMatch);
|
||||||
|
writer.endObject();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.metaweb.gridworks.protograph;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONWriter;
|
||||||
|
|
||||||
|
public class CellValueNode extends CellNode {
|
||||||
|
private static final long serialVersionUID = 7311884925532708576L;
|
||||||
|
|
||||||
|
final public String valueType;
|
||||||
|
final public String lang;
|
||||||
|
|
||||||
|
public CellValueNode(
|
||||||
|
int cellIndex,
|
||||||
|
String valueType,
|
||||||
|
String lang
|
||||||
|
) {
|
||||||
|
super(cellIndex);
|
||||||
|
|
||||||
|
this.valueType = valueType;
|
||||||
|
this.lang = lang;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void write(JSONWriter writer, Properties options)
|
||||||
|
throws JSONException {
|
||||||
|
|
||||||
|
writer.object();
|
||||||
|
writer.key("nodeType"); writer.value("cell-as-value");
|
||||||
|
writer.key("cellIndex"); writer.value(cellIndex);
|
||||||
|
writer.key("valueType"); writer.value(valueType);
|
||||||
|
writer.key("lang"); writer.value(lang);
|
||||||
|
writer.endObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,22 +0,0 @@
|
|||||||
package com.metaweb.gridworks.protograph;
|
|
||||||
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONWriter;
|
|
||||||
|
|
||||||
public class ExistingTopicNode extends Node {
|
|
||||||
private static final long serialVersionUID = 8418548867745587387L;
|
|
||||||
|
|
||||||
final protected FreebaseTopic _topic;
|
|
||||||
|
|
||||||
public ExistingTopicNode(FreebaseTopic topic) {
|
|
||||||
_topic = topic;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(JSONWriter writer, Properties options)
|
|
||||||
throws JSONException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.metaweb.gridworks.protograph;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONWriter;
|
||||||
|
|
||||||
|
public class FreebaseTopicNode extends Node {
|
||||||
|
private static final long serialVersionUID = 8418548867745587387L;
|
||||||
|
|
||||||
|
final public FreebaseTopic topic;
|
||||||
|
|
||||||
|
public FreebaseTopicNode(FreebaseTopic topic) {
|
||||||
|
this.topic = topic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void write(JSONWriter writer, Properties options)
|
||||||
|
throws JSONException {
|
||||||
|
|
||||||
|
writer.object();
|
||||||
|
writer.key("nodeType"); writer.value("topic");
|
||||||
|
writer.key("topic"); topic.write(writer, options);
|
||||||
|
writer.endObject();
|
||||||
|
}
|
||||||
|
}
|
@ -11,26 +11,29 @@ import com.metaweb.gridworks.Jsonizable;
|
|||||||
public class Link implements Serializable, Jsonizable {
|
public class Link implements Serializable, Jsonizable {
|
||||||
private static final long serialVersionUID = 2908086768260322876L;
|
private static final long serialVersionUID = 2908086768260322876L;
|
||||||
|
|
||||||
final protected FreebaseProperty _property;
|
final public FreebaseProperty property;
|
||||||
final protected Node _target;
|
final public Node target;
|
||||||
|
|
||||||
public Link(FreebaseProperty property, Node target) {
|
public Link(FreebaseProperty property, Node target) {
|
||||||
_property = property;
|
this.property = property;
|
||||||
_target = target;
|
this.target = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
public FreebaseProperty getProperty() {
|
public FreebaseProperty getProperty() {
|
||||||
return _property;
|
return property;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Node getTarget() {
|
public Node getTarget() {
|
||||||
return _target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(JSONWriter writer, Properties options)
|
public void write(JSONWriter writer, Properties options)
|
||||||
throws JSONException {
|
throws JSONException {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
|
writer.object();
|
||||||
|
writer.key("property"); property.write(writer, options);
|
||||||
|
writer.key("target"); target.write(writer, options);
|
||||||
|
writer.endObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.metaweb.gridworks.protograph;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONWriter;
|
||||||
|
|
||||||
|
public class ValueNode extends Node {
|
||||||
|
private static final long serialVersionUID = -5626883493437735688L;
|
||||||
|
|
||||||
|
final public Object value;
|
||||||
|
final public String valueType;
|
||||||
|
final public String lang;
|
||||||
|
|
||||||
|
public ValueNode(Object value, String valueType, String lang) {
|
||||||
|
this.value = value;
|
||||||
|
this.valueType = valueType;
|
||||||
|
this.lang = lang;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void write(JSONWriter writer, Properties options)
|
||||||
|
throws JSONException {
|
||||||
|
|
||||||
|
writer.object();
|
||||||
|
writer.key("nodeType"); writer.value("value");
|
||||||
|
writer.key("value"); writer.value(value);
|
||||||
|
writer.key("valueType"); writer.value(valueType);
|
||||||
|
writer.key("lang"); writer.value(lang);
|
||||||
|
writer.endObject();
|
||||||
|
}
|
||||||
|
}
|
BIN
src/main/webapp/images/arrow-end.png
Normal file
BIN
src/main/webapp/images/arrow-end.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 142 B |
BIN
src/main/webapp/images/arrow-start.png
Normal file
BIN
src/main/webapp/images/arrow-start.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 139 B |
BIN
src/main/webapp/images/collapsed.png
Normal file
BIN
src/main/webapp/images/collapsed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 176 B |
BIN
src/main/webapp/images/expanded.png
Normal file
BIN
src/main/webapp/images/expanded.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 115 B |
@ -91,17 +91,19 @@ SchemaAlignment._cleanName = function(s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function SchemaAlignmentDialog(protograph) {
|
function SchemaAlignmentDialog(protograph) {
|
||||||
this._originalProtograph = {
|
protograph = {
|
||||||
rootNodes: [
|
rootNodes: [
|
||||||
{
|
{
|
||||||
nodeType: "cell-as-topic",
|
nodeType: "cell-as-topic",
|
||||||
column: "name",
|
links: [
|
||||||
linkages: [
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this._originalProtograph = protograph;
|
||||||
|
this._protograph = cloneDeep(protograph);
|
||||||
|
|
||||||
this._createDialog();
|
this._createDialog();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -138,22 +140,29 @@ SchemaAlignmentDialog.prototype._renderBody = function(body) {
|
|||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this._canvas = $('<div></div>').addClass("schema-alignment-dialog-canvas").appendTo(body);
|
this._canvas = $('<div></div>').addClass("schema-alignment-dialog-canvas").appendTo(body);
|
||||||
this._nodeTable = $('<table></table>').appendTo(this._canvas)[0];
|
this._nodeTable = $('<table></table>').addClass("schema-alignment-table-layout").appendTo(this._canvas)[0];
|
||||||
|
|
||||||
for (var i = 0; i < this._originalProtograph.rootNodes.length; i++) {
|
for (var i = 0; i < this._originalProtograph.rootNodes.length; i++) {
|
||||||
new SchemaAlignmentDialog.UINode(
|
new SchemaAlignmentDialog.UINode(
|
||||||
this._originalProtograph.rootNodes[i],
|
this._protograph.rootNodes[i],
|
||||||
this._nodeTable,
|
this._nodeTable,
|
||||||
true
|
{
|
||||||
|
expanded: true,
|
||||||
|
mustBeCellTopic: true
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
SchemaAlignmentDialog.UINode = function(node, table, expanded) {
|
/*----------------------------------------------------------------------
|
||||||
this._originalNode = node;
|
* UINode
|
||||||
this._newNode = {
|
*----------------------------------------------------------------------
|
||||||
nodeType: node.nodeType
|
*/
|
||||||
};
|
SchemaAlignmentDialog.UINode = function(node, table, options) {
|
||||||
|
this._node = node;
|
||||||
|
this._options = options;
|
||||||
|
|
||||||
|
this._linkUIs = [];
|
||||||
this._detailsRendered = false;
|
this._detailsRendered = false;
|
||||||
|
|
||||||
this._tr = table.insertRow(table.rows.length);
|
this._tr = table.insertRow(table.rows.length);
|
||||||
@ -161,24 +170,74 @@ SchemaAlignmentDialog.UINode = function(node, table, expanded) {
|
|||||||
this._tdToggle = this._tr.insertCell(1);
|
this._tdToggle = this._tr.insertCell(1);
|
||||||
this._tdDetails = this._tr.insertCell(2);
|
this._tdDetails = this._tr.insertCell(2);
|
||||||
|
|
||||||
$(this._tdMain).addClass("schema-alignment-node-main").attr("width", "250");
|
$(this._tdMain).addClass("schema-alignment-node-main").attr("width", "250").addClass("padded");
|
||||||
$(this._tdToggle).addClass("schema-alignment-node-toggle").attr("width", "1%").hide();
|
$(this._tdToggle).addClass("schema-alignment-node-toggle").attr("width", "1%").addClass("padded").hide();
|
||||||
$(this._tdDetails).addClass("schema-alignment-node-details").attr("width", "90%").hide();
|
$(this._tdDetails).addClass("schema-alignment-node-details").attr("width", "90%").hide();
|
||||||
|
|
||||||
this._renderMain();
|
this._renderMain();
|
||||||
|
|
||||||
this._expanded = expanded;
|
this._expanded = options.expanded;
|
||||||
if (this._isExpandable()) {
|
if (this._isExpandable()) {
|
||||||
this._showExpandable();
|
this._showExpandable();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
SchemaAlignmentDialog.UINode.prototype._isExpandable = function() {
|
SchemaAlignmentDialog.UINode.prototype._isExpandable = function() {
|
||||||
return this._newNode.nodeType != "existing-content" && this._newNode.nodeType != "cell-as-content";
|
return this._node.nodeType == "cell-as-topic";
|
||||||
|
};
|
||||||
|
|
||||||
|
SchemaAlignmentDialog._findColumn = function(cellIndex) {
|
||||||
|
var columns = theProject.columnModel.columns;
|
||||||
|
for (var i = 0; i < columns.length; i++) {
|
||||||
|
var column = columns[i];
|
||||||
|
if (column.cellIndex == cellIndex) {
|
||||||
|
return column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
SchemaAlignmentDialog.UINode.prototype._renderMain = function() {
|
SchemaAlignmentDialog.UINode.prototype._renderMain = function() {
|
||||||
$(this._tdMain).empty().html(this._newNode.nodeType);
|
$(this._tdMain).empty();
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
var a = $('<a href="javascript:{}"></a>')
|
||||||
|
.addClass("schema-alignment-node-tag")
|
||||||
|
.appendTo(this._tdMain)
|
||||||
|
.click(function(evt) {
|
||||||
|
self._showTagMenu(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (this._node.nodeType == "cell-as-topic" || this._node.nodeType == "cell-as-value") {
|
||||||
|
if ("cellIndex" in this._node) {
|
||||||
|
a.html(" cell");
|
||||||
|
|
||||||
|
$('<span></span>')
|
||||||
|
.text(SchemaAlignmentDialog._findColumn(this._node.cellIndex).headerLabel)
|
||||||
|
.addClass("schema-alignment-node-column")
|
||||||
|
.prependTo(a);
|
||||||
|
} else {
|
||||||
|
a.html("Which column?");
|
||||||
|
}
|
||||||
|
} else if (this._node.nodeType == "topic") {
|
||||||
|
if ("topic" in this._node) {
|
||||||
|
a.html(this._node.topic.name);
|
||||||
|
} else if ("id" in this._node) {
|
||||||
|
a.html(this._node.topic.id);
|
||||||
|
} else {
|
||||||
|
a.html("Which topic?");
|
||||||
|
}
|
||||||
|
} else if (this._node.nodeType == "value") {
|
||||||
|
if ("value" in this._node) {
|
||||||
|
a.html(this._node.value);
|
||||||
|
} else {
|
||||||
|
a.html("What value?");
|
||||||
|
}
|
||||||
|
} else if (this._node.nodeType == "anonymous") {
|
||||||
|
a.html("(anonymous)");
|
||||||
|
}
|
||||||
|
|
||||||
|
$('<img />').attr("src", "images/down-arrow.png").appendTo(a);
|
||||||
};
|
};
|
||||||
|
|
||||||
SchemaAlignmentDialog.UINode.prototype._showExpandable = function() {
|
SchemaAlignmentDialog.UINode.prototype._showExpandable = function() {
|
||||||
@ -190,8 +249,8 @@ SchemaAlignmentDialog.UINode.prototype._showExpandable = function() {
|
|||||||
}
|
}
|
||||||
this._detailsRendered = true;
|
this._detailsRendered = true;
|
||||||
|
|
||||||
this._collapsedDetailDiv = $('<div></div>').appendTo(this._tdDetails).html("...");
|
this._collapsedDetailDiv = $('<div></div>').appendTo(this._tdDetails).addClass("padded").html("...");
|
||||||
this._expandedDetailDiv = $('<div></div>').appendTo(this._tdDetails).html("details");
|
this._expandedDetailDiv = $('<div></div>').appendTo(this._tdDetails).addClass("schema-alignment-detail-container");
|
||||||
|
|
||||||
this._renderDetails();
|
this._renderDetails();
|
||||||
|
|
||||||
@ -208,14 +267,13 @@ SchemaAlignmentDialog.UINode.prototype._showExpandable = function() {
|
|||||||
show();
|
show();
|
||||||
|
|
||||||
$(this._tdToggle).html(" ");
|
$(this._tdToggle).html(" ");
|
||||||
|
|
||||||
$('<img />')
|
$('<img />')
|
||||||
.attr("src", this._expanded ? "images/down-arrow.png" : "images/right-arrow.png")
|
.attr("src", this._expanded ? "images/expanded.png" : "images/collapsed.png")
|
||||||
.appendTo(this._tdToggle)
|
.appendTo(this._tdToggle)
|
||||||
.click(function() {
|
.click(function() {
|
||||||
self._expanded = !self._expanded;
|
self._expanded = !self._expanded;
|
||||||
|
|
||||||
$(this).attr("src", self._expanded ? "images/down-arrow.png" : "images/right-arrow.png");
|
$(this).attr("src", self._expanded ? "images/expanded.png" : "images/collapsed.png");
|
||||||
|
|
||||||
show();
|
show();
|
||||||
});
|
});
|
||||||
@ -227,5 +285,187 @@ SchemaAlignmentDialog.UINode.prototype._hideExpandable = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
SchemaAlignmentDialog.UINode.prototype._renderDetails = function() {
|
SchemaAlignmentDialog.UINode.prototype._renderDetails = function() {
|
||||||
var tableDetails = $('<table></table>').appendTo(this._tdDetails)[0];
|
var self = this;
|
||||||
|
|
||||||
|
this._tableLinks = $('<table></table>').addClass("schema-alignment-table-layout").appendTo(this._expandedDetailDiv)[0];
|
||||||
|
|
||||||
|
if ("links" in this._node && this._node.links != null) {
|
||||||
|
for (var i = 0; i < this._node.links.length; i++) {
|
||||||
|
this._linkUIs.push(new SchemaAlignmentDialog.UILink(this._node.links[i], this._tableLinks, true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var divFooter = $('<div></div>').addClass("padded").appendTo(this._expandedDetailDiv);
|
||||||
|
|
||||||
|
$('<a href="javascript:{}"></a>')
|
||||||
|
.addClass("action")
|
||||||
|
.text("add property")
|
||||||
|
.appendTo(divFooter)
|
||||||
|
.click(function() {
|
||||||
|
var newLink = {
|
||||||
|
property: null,
|
||||||
|
target: {
|
||||||
|
nodeType: "cell-as-value"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
self._linkUIs.push(new SchemaAlignmentDialog.UILink(
|
||||||
|
newLink,
|
||||||
|
self._tableLinks,
|
||||||
|
{
|
||||||
|
expanded: true,
|
||||||
|
mustBeCellTopic: false
|
||||||
|
}
|
||||||
|
));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
SchemaAlignmentDialog.UINode.prototype._showTagMenu = function(elmt) {
|
||||||
|
self = this;
|
||||||
|
|
||||||
|
var menu = [];
|
||||||
|
|
||||||
|
if (!this._options.mustBeCellTopic) {
|
||||||
|
menu.push({
|
||||||
|
label: "Anonymous Node",
|
||||||
|
click: function() {
|
||||||
|
self._node.nodeType = "anonymous";
|
||||||
|
self._showExpandable();
|
||||||
|
self._renderMain();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.push({
|
||||||
|
label: "Freebase Topic",
|
||||||
|
click: function() {
|
||||||
|
self._node.nodeType = "topic";
|
||||||
|
self._hideExpandable();
|
||||||
|
self._renderMain();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.push({
|
||||||
|
label: "Value",
|
||||||
|
click: function() {
|
||||||
|
self._node.nodeType = "value";
|
||||||
|
self._hideExpandable();
|
||||||
|
self._renderMain();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.push({}); // separator
|
||||||
|
}
|
||||||
|
|
||||||
|
var columns = theProject.columnModel.columns;
|
||||||
|
var createColumnMenuItem = function(index) {
|
||||||
|
menu.push({
|
||||||
|
label: columns[index].headerLabel,
|
||||||
|
click: function() {
|
||||||
|
self._node.nodeType = "cell-as-topic";
|
||||||
|
self._node.cellIndex = columns[index].cellIndex;
|
||||||
|
self._showExpandable();
|
||||||
|
self._renderMain();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
for (var i = 0; i < columns.length; i++) {
|
||||||
|
createColumnMenuItem(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
MenuSystem.createAndShowStandardMenu(menu, elmt);
|
||||||
|
};
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
* UILink
|
||||||
|
*----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
SchemaAlignmentDialog.UILink = function(link, table, expanded) {
|
||||||
|
this._link = link;
|
||||||
|
this._expanded = expanded;
|
||||||
|
|
||||||
|
this._tr = table.insertRow(table.rows.length);
|
||||||
|
this._tdMain = this._tr.insertCell(0);
|
||||||
|
this._tdToggle = this._tr.insertCell(1);
|
||||||
|
this._tdDetails = this._tr.insertCell(2);
|
||||||
|
|
||||||
|
$(this._tdMain).addClass("schema-alignment-link-main").attr("width", "250").addClass("padded");
|
||||||
|
$(this._tdToggle).addClass("schema-alignment-link-toggle").attr("width", "1%").addClass("padded");
|
||||||
|
$(this._tdDetails).addClass("schema-alignment-link-details").attr("width", "90%");
|
||||||
|
|
||||||
|
this._collapsedDetailDiv = $('<div></div>').appendTo(this._tdDetails).addClass("padded").html("...");
|
||||||
|
this._expandedDetailDiv = $('<div></div>').appendTo(this._tdDetails).addClass("schema-alignment-detail-container");
|
||||||
|
var self = this;
|
||||||
|
var show = function() {
|
||||||
|
if (self._expanded) {
|
||||||
|
self._collapsedDetailDiv.hide();
|
||||||
|
self._expandedDetailDiv.show();
|
||||||
|
} else {
|
||||||
|
self._collapsedDetailDiv.show();
|
||||||
|
self._expandedDetailDiv.hide();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
show();
|
||||||
|
|
||||||
|
$(this._tdToggle).html(" ");
|
||||||
|
$('<img />')
|
||||||
|
.attr("src", this._expanded ? "images/expanded.png" : "images/collapsed.png")
|
||||||
|
.appendTo(this._tdToggle)
|
||||||
|
.click(function() {
|
||||||
|
self._expanded = !self._expanded;
|
||||||
|
|
||||||
|
$(this).attr("src", self._expanded ? "images/expanded.png" : "images/collapsed.png");
|
||||||
|
|
||||||
|
show();
|
||||||
|
});
|
||||||
|
|
||||||
|
this._renderMain();
|
||||||
|
this._renderDetails();
|
||||||
|
};
|
||||||
|
|
||||||
|
SchemaAlignmentDialog.UILink.prototype._renderMain = function() {
|
||||||
|
$(this._tdMain).empty()
|
||||||
|
|
||||||
|
var label = this._link.property != null ? this._link.property.id : "property?";
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var a = $('<a href="javascript:{}"></a>')
|
||||||
|
.addClass("schema-alignment-link-tag")
|
||||||
|
.html(label)
|
||||||
|
.appendTo(this._tdMain)
|
||||||
|
.click(function(evt) {
|
||||||
|
self._showTagSuggest(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('<img />').attr("src", "images/arrow-start.png").prependTo(a);
|
||||||
|
$('<img />').attr("src", "images/arrow-end.png").appendTo(a);
|
||||||
|
};
|
||||||
|
|
||||||
|
SchemaAlignmentDialog.UILink.prototype._renderDetails = function() {
|
||||||
|
var tableDetails = $('<table></table>').addClass("schema-alignment-table-layout").appendTo(this._expandedDetailDiv)[0];
|
||||||
|
this._targetUI = new SchemaAlignmentDialog.UINode(this._link.target, tableDetails, true);
|
||||||
|
};
|
||||||
|
|
||||||
|
SchemaAlignmentDialog.UILink.prototype._showTagSuggest = function(elmt) {
|
||||||
|
self = this;
|
||||||
|
|
||||||
|
var fakeMenu = MenuSystem.createMenu()
|
||||||
|
.width(300)
|
||||||
|
.height(100)
|
||||||
|
.css("background", "none")
|
||||||
|
.css("border", "none");
|
||||||
|
|
||||||
|
var input = $('<input />').appendTo(fakeMenu);
|
||||||
|
|
||||||
|
var level = MenuSystem.showMenu(fakeMenu, function(){});
|
||||||
|
MenuSystem.positionMenuAboveBelow(fakeMenu, $(elmt));
|
||||||
|
|
||||||
|
input.suggest({ type : '/type/property' }).bind("fb-select", function(e, data) {
|
||||||
|
self._link.property = {
|
||||||
|
id: data.id,
|
||||||
|
name: data.name
|
||||||
|
};
|
||||||
|
|
||||||
|
window.setTimeout(function() {
|
||||||
|
MenuSystem.dismissAll();
|
||||||
|
self._renderMain();
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
|
input[0].focus();
|
||||||
};
|
};
|
@ -63,3 +63,7 @@ a img {
|
|||||||
img {
|
img {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fbs-pane, .fbs-flyout-pane {
|
||||||
|
z-index: 2000;
|
||||||
|
}
|
@ -14,6 +14,3 @@
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fbs-pane, .fbs-flyout-pane {
|
|
||||||
z-index: 200;
|
|
||||||
}
|
|
@ -2,25 +2,64 @@
|
|||||||
height: 500px;
|
height: 500px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
border: 1px solid #aaa;
|
border: 1px solid #aaa;
|
||||||
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.schema-alignment-node-main {
|
table.schema-alignment-table-layout {
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.schema-alignment-table-layout .padded {
|
||||||
|
padding: 3px 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.schema-alignment-detail-container {
|
||||||
|
border-left: 3px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.schema-alignment-node-main, td.schema-alignment-link-main {
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
width: 300px;
|
width: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.schema-alignment-node-toggle {
|
td.schema-alignment-node-toggle, td.schema-alignment-link-toggle {
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
width: 1%;
|
width: 1%;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.schema-alignment-node-toggle img {
|
td.schema-alignment-node-toggle img, td.schema-alignment-link-toggle img {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.schema-alignment-node-details {
|
td.schema-alignment-node-details, td.schema-alignment-link-details {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a.schema-alignment-node-tag {
|
||||||
|
padding: 3px 6px;
|
||||||
|
background: #ddd;
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
-moz-border-radius: 10px;
|
||||||
|
}
|
||||||
|
a.schema-alignment-node-tag:hover {
|
||||||
|
background: #888;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.schema-alignment-node-column {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.schema-alignment-link-tag {
|
||||||
|
padding: 3px 6px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
a.schema-alignment-link-tag:hover {
|
||||||
|
color: #88f;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user