dda1714d17
git-svn-id: http://google-refine.googlecode.com/svn/trunk@1077 7d457c2a-affb-35e4-300a-418c747d4874
838 lines
32 KiB
JavaScript
Executable File
838 lines
32 KiB
JavaScript
Executable File
RdfSchemaAlignmentDialog.UINode = function(dialog, node, table, options) {
|
|
this._dialog = dialog;
|
|
this._node = node;
|
|
this._options = options;
|
|
|
|
this._linkUIs = [];
|
|
this._detailsRendered = false;
|
|
|
|
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-node-main").attr("width", "250").addClass("padded");
|
|
$(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._renderMain();
|
|
//this._renderTypes();
|
|
|
|
this._expanded = options.expanded;
|
|
if (this._isExpandable()) {
|
|
this._showExpandable();
|
|
}
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._renderMain = function() {
|
|
$(this._tdMain).empty();
|
|
var self = this;
|
|
|
|
var type_html = !this._isExpandable()? '' : '<tr>' +
|
|
'<td>' +
|
|
'<table bind="rdfTypesTable">' +
|
|
'<tr bind="rdfTypesTr"><td bind="rdfTypesTd"> </td></tr>' +
|
|
'<tr bind="addRdfTyprTr">' +
|
|
'<td>' +
|
|
'<div class="padded">' +
|
|
'<a bind="addRdfTypeLink" href="#" class="action">add rdf:type</a>' +
|
|
'</div>' +
|
|
'</td>' +
|
|
'</tr>' +
|
|
'</table>' +
|
|
'</td>' +
|
|
'</tr>';
|
|
var html = $(
|
|
'<table>' +
|
|
'<tr>' +
|
|
'<td bind="nodeLabel">' +
|
|
'</td>' +
|
|
'</tr>' +
|
|
type_html +
|
|
'</table>'
|
|
).appendTo(this._tdMain)
|
|
;
|
|
|
|
var elmts = DOM.bind(html);
|
|
this._tdNodeLabel = elmts.nodeLabel;
|
|
if(elmts.addRdfTypeLink){
|
|
var typesTable = $('<table></table>')[0];
|
|
if(self._node.rdfTypes && self._node.rdfTypes.length>0){
|
|
var func = function(i){
|
|
return function(){
|
|
self._removeRdfType(i);
|
|
self._renderMain();
|
|
};
|
|
};
|
|
for(var i=0;i<self._node.rdfTypes.length;i++){
|
|
//var f = func(i);
|
|
var tr = typesTable.insertRow(typesTable.rows.length);
|
|
var img = $('<img />').attr("title", "remove type").attr("src", "images/close.png").css("cursor", "pointer").click(
|
|
|
|
func(i)
|
|
|
|
);
|
|
$(tr).append($('<td>').append(img));
|
|
$(tr).append($('<td>').text(self._getTypeName(self._node.rdfTypes[i])));
|
|
}
|
|
elmts.rdfTypesTd.html(typesTable);
|
|
}else{
|
|
elmts.rdfTypesTr.remove();
|
|
}
|
|
elmts.addRdfTypeLink.click(function(evt){
|
|
evt.preventDefault();
|
|
self._addRdfType(evt.target);
|
|
});
|
|
}
|
|
var a = $('<a href="javascript:{}"></a>')
|
|
.addClass("schema-alignment-node-tag")
|
|
.appendTo(this._tdNodeLabel)
|
|
.click(function(evt) {
|
|
self._showNodeConfigDialog();
|
|
});
|
|
|
|
if (this._node.nodeType == "cell-as-resource" ||
|
|
this._node.nodeType == "cell-as-literal") {
|
|
|
|
if(this._node.columnIndex===-1){
|
|
$('<span></span>')
|
|
.text('Row Number')
|
|
.addClass("schema-alignment-node-column")
|
|
.prependTo(a);
|
|
}else{
|
|
if ("columnName" in this._node) {
|
|
a.html(" cell");
|
|
|
|
$('<span></span>')
|
|
.text(this._node.columnName)
|
|
.addClass("schema-alignment-node-column")
|
|
.prependTo(a);
|
|
} else {
|
|
a.html(this._options.mustBeCellTopic ? "Which column?" : "Configure...");
|
|
}
|
|
}
|
|
} else if (this._node.nodeType == "resource") {
|
|
if ("uri" in this._node) {
|
|
a.html(this._node.uri);
|
|
} else {
|
|
a.html("Which Resource?");
|
|
}
|
|
} else if (this._node.nodeType == "literal") {
|
|
if ("value" in this._node) {
|
|
a.html(this._node.value);
|
|
} else {
|
|
a.html("What value?");
|
|
}
|
|
} else if (this._node.nodeType == "blank") {
|
|
a.html("(blank) ");
|
|
}else if (this._node.nodeType == "cell-as-blank") {
|
|
a.html("(blank) cell");
|
|
}
|
|
|
|
//Types
|
|
/*var aux_table = $('<table>').appendTo($(this._tdMain));
|
|
aux_table.append($('<tr>').append(td));
|
|
this._typesTd = $('<td>').attr("width", "250").appendTo($('<tr>').appendTo(aux_table));
|
|
this._renderTypes();*/
|
|
};
|
|
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._isExpandable = function() {
|
|
return this._node.nodeType == "cell-as-resource" ||
|
|
this._node.nodeType == "blank" ||
|
|
this._node.nodeType == "resource" ||
|
|
this._node.nodeType == "cell-as-blank" ;
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._showExpandable = function() {
|
|
$(this._tdToggle).show();
|
|
$(this._tdDetails).show();
|
|
|
|
if (this._detailsRendered) {
|
|
return;
|
|
}
|
|
this._detailsRendered = true;
|
|
|
|
this._collapsedDetailDiv = $('<div></div>').appendTo(this._tdDetails).addClass("padded").html("...");
|
|
this._expandedDetailDiv = $('<div></div>').appendTo(this._tdDetails).addClass("schema-alignment-detail-container");
|
|
|
|
this._renderDetails();
|
|
|
|
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();
|
|
});
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._renderDetails = function() {
|
|
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 RdfSchemaAlignmentDialog.UILink(
|
|
this._dialog,
|
|
this._node.links[i],
|
|
this._tableLinks,
|
|
{ expanded: true },
|
|
this
|
|
));
|
|
}
|
|
}
|
|
|
|
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-literal"
|
|
}
|
|
};
|
|
self._linkUIs.push(new RdfSchemaAlignmentDialog.UILink(
|
|
self._dialog,
|
|
newLink,
|
|
self._tableLinks,
|
|
{
|
|
expanded: true,
|
|
mustBeCellTopic: false
|
|
},
|
|
self
|
|
));
|
|
});
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function(){
|
|
var self = this;
|
|
var frame = DialogSystem.createDialog();
|
|
|
|
frame.width("800px");
|
|
|
|
var header = $('<div></div>').addClass("dialog-header").text("RDF Node").appendTo(frame);
|
|
var body = $('<div class="grid-layout layout-full"></div>').addClass("dialog-body").appendTo(frame);
|
|
var footer = $('<div></div>').addClass("dialog-footer").appendTo(frame);
|
|
|
|
/*--------------------------------------------------
|
|
* Body
|
|
*--------------------------------------------------
|
|
*/
|
|
var literalTypeSelectHtml =
|
|
'<option value="untyped" checked>untyped</option>' +
|
|
'<option value="http://www.w3.org/2001/XMLSchema#int">xsd:int</option>' +
|
|
'<option value="http://www.w3.org/2001/XMLSchema#double">xsd:double</option>' +
|
|
//'<option value="/type/float">float</option>' +
|
|
//'<option value="/type/double">double</option>' +
|
|
//'<option value="/type/boolean">boolean</option>' +
|
|
'<option value="http://www.w3.org/2001/XMLSchema#date">xsd:date</option>';
|
|
|
|
var html = $(
|
|
'<table class="layout-normal">' +
|
|
'<tr>' +
|
|
'<td>' +
|
|
'<table class="grid-layout layout-tight">' +
|
|
'<tr>' +
|
|
'<td>' +
|
|
'<div class="schema-align-node-dialog-node-type">' +
|
|
'<input type="radio" name="schema-align-node-dialog-node-type" value="cell-as" bind="radioNodeTypeCellAs" /> Set to Cell in Column' +
|
|
'</div>' +
|
|
'</td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td>' +
|
|
'<table class="grid-layout layout-tight">' +
|
|
'<tr>' +
|
|
'<td><div class="schema-alignment-node-dialog-column-list" bind="divColumns"></div></td>' +
|
|
'<td>' +
|
|
'<table class="grid-layout layout-tight" cols="4">' +
|
|
'<tr>' +
|
|
'<td colspan="4">The cell\'s content is used ...</td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td><input type="radio" name="schema-align-node-dialog-node-subtype" value="cell-as-resource" bind="radioNodeTypeCellAsResource" /></td>' +
|
|
'<td colspan="3">as a resource</td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td></td>' +
|
|
'<td></td>' +
|
|
'<td colspan="1">URI:</td>' +
|
|
'<td colspan="1"><input bind="cellAsResourceUriInput" name="cellAsResourceUri" /></td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td></td>' +
|
|
'<td></td>' +
|
|
'<td></td>' +
|
|
'<td colspan="1"><a href="#" bind="previewCellUri">preview/edit</a></td>' +
|
|
'</tr>' +
|
|
|
|
'<tr>' +
|
|
'<td><input type="radio" name="schema-align-node-dialog-node-subtype" value="cell-as-literal" bind="radioNodeTypeCellAsLiteral" /></td>' +
|
|
'<td colspan="3">as a literal value</td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td></td>' +
|
|
'<td colspan="2">Literal type</td>' +
|
|
'<td colspan="1"><select bind="cellAsLiteralTypeSelect">' + literalTypeSelectHtml + '</select></td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td></td>' +
|
|
'<td colspan="2">Language (for text)</td>' +
|
|
'<td colspan="1"><input bind="cellAsLiteralLanguageInput" /></td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td><input type="radio" name="schema-align-node-dialog-node-subtype" value="cell-as-blank" bind="radioNodeTypeCellAsBlank" /></td>' +
|
|
'<td colspan="3">as a blank node</td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td colspan="4"><div class="note">* relative URIs will be resolved against base URI</div></td>' +
|
|
'</tr>' +
|
|
'</table>' +
|
|
'</td>' +
|
|
'</tr>' +
|
|
'</table>' +
|
|
'</td>' +
|
|
'</tr>' +
|
|
'</table>' +
|
|
'</td>' +
|
|
|
|
|
|
'<td>' +
|
|
'<table class="grid-layout layout-tight">' +
|
|
'<tr>' +
|
|
'<td colspan="3">' +
|
|
'<div class="schema-align-node-dialog-node-type">' +
|
|
'<input type="radio" name="schema-align-node-dialog-node-type" value="resource" bind="radioNodeTypeResource" /> Use a constant resource' +
|
|
'</div>' +
|
|
'</td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td></td>' +
|
|
'<td>URI:</td>' +
|
|
'<td><input bind="resourceNodeTypeInput" /></td>' +
|
|
'</tr>' +
|
|
|
|
'<tr>' +
|
|
'<td colspan="3">' +
|
|
'<div class="schema-align-node-dialog-node-type">' +
|
|
'<input type="radio" name="schema-align-node-dialog-node-type" value="literal" bind="radioNodeTypeLiteral" /> Use a constant literal value' +
|
|
'</div>' +
|
|
'</td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td></td>' +
|
|
'<td>Value</td>' +
|
|
'<td><input bind="literalNodeTypeValueInput" /></td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td></td>' +
|
|
'<td>Value type</td>' +
|
|
'<td><select bind="literalNodeTypeValueTypeSelect">' + literalTypeSelectHtml + '</select></td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td></td>' +
|
|
'<td>Language</td>' +
|
|
'<td><input bind="literalNodeTypeLanguageInput" /></td>' +
|
|
'</tr>' +
|
|
'<tr>' +
|
|
'<td colspan="3">' +
|
|
'<div class="schema-align-node-dialog-node-type">' +
|
|
'<input type="radio" name="schema-align-node-dialog-node-type" value="blank" bind="radioNodeTypeBlank" /> Generate a blank node (shared between all rows)' +
|
|
'</div>' +
|
|
'</td>' +
|
|
'</tr>' +
|
|
|
|
'</table>' +
|
|
'</td>' +
|
|
'</tr>' +
|
|
'</table>'
|
|
).appendTo(body);
|
|
|
|
var elmts = DOM.bind(html);
|
|
|
|
var tableColumns = $('<table></table>')
|
|
.attr("cellspacing", "5")
|
|
.attr("cellpadding", "0")
|
|
.appendTo(elmts.divColumns)[0];
|
|
|
|
var makeColumnChoice = function(column, columnIndex) {
|
|
var tr = tableColumns.insertRow(tableColumns.rows.length);
|
|
|
|
var radio = $('<input />')
|
|
.attr("type", "radio")
|
|
//.attr("value", column.name)
|
|
.attr("value",columnIndex)
|
|
.attr("name", "schema-align-node-dialog-column")
|
|
.appendTo(tr.insertCell(0))
|
|
.click(function() {
|
|
elmts.radioNodeTypeCellAs[0].checked = true;
|
|
});
|
|
|
|
if ((!("columnName" in self._node) || !self._node.columnName) && columnIndex === -1) {
|
|
radio.attr("checked", "true");
|
|
} else if (column.name == self._node.columnName) {
|
|
radio.attr("checked", "true");
|
|
}
|
|
|
|
var td = tr.insertCell(1);
|
|
if(columnIndex===-1){
|
|
$(td).addClass('highlighted');
|
|
}
|
|
$('<span></span>').text(column.name).appendTo(td);
|
|
};
|
|
|
|
//Add Row Number
|
|
makeColumnChoice({name:'Row Number'},-1);
|
|
|
|
var columns = theProject.columnModel.columns;
|
|
for (var i = 0; i < columns.length; i++) {
|
|
makeColumnChoice(columns[i], i);
|
|
}
|
|
|
|
|
|
|
|
|
|
elmts.cellAsResourceUriInput.attr("disabled","disabled");
|
|
/* elmts.previewCellUri.add(elmts.radioNodeTypeCellAsResource[0])
|
|
.bind("click", function() {
|
|
alert("shifit");
|
|
elmts.radioNodeTypeCellAs[0].checked=true;
|
|
elmts.radioNodeTypeCellAsResource[0].checked = true;
|
|
});*/
|
|
|
|
|
|
|
|
elmts.cellAsLiteralTypeSelect.add(elmts.radioNodeTypeCellAsLiteral[0])
|
|
.bind("focus", function() {
|
|
elmts.radioNodeTypeCellAs[0].checked=true;
|
|
elmts.radioNodeTypeCellAsLiteral[0].checked = true;
|
|
});
|
|
|
|
elmts.cellAsLiteralLanguageInput
|
|
.bind("focus", function() {
|
|
elmts.radioNodeTypeCellAs[0].checked=true;
|
|
elmts.radioNodeTypeCellAsLiteral[0].checked = true;
|
|
});
|
|
|
|
elmts.radioNodeTypeCellAsBlank.add(elmts.radioNodeTypeCellAsResource).add(elmts.radioNodeTypeCellAsLiteral).bind("focus", function() {
|
|
elmts.radioNodeTypeCellAs[0].checked=true;
|
|
});
|
|
|
|
elmts.resourceNodeTypeInput
|
|
.bind("focus", function() {
|
|
elmts.radioNodeTypeResource[0].checked = true;
|
|
});
|
|
|
|
elmts.literalNodeTypeValueInput
|
|
.bind("focus", function() { elmts.radioNodeTypeLiteral[0].checked = true; });
|
|
|
|
elmts.literalNodeTypeValueTypeSelect
|
|
.bind("focus", function() { elmts.radioNodeTypeLiteral[0].checked = true; });
|
|
|
|
elmts.literalNodeTypeLanguageInput
|
|
.bind("focus", function() { elmts.radioNodeTypeLiteral[0].checked = true; });
|
|
|
|
|
|
elmts.resourceNodeTypeInput.add(elmts.literalNodeTypeValueInput[0]).add(elmts.literalNodeTypeValueTypeSelect[0])
|
|
.add(elmts.literalNodeTypeLanguageInput[0]).add(elmts.radioNodeTypeBlank[0]).add(elmts.radioNodeTypeResource[0])
|
|
.add(elmts.radioNodeTypeLiteral[0])
|
|
.bind("focus",function(){
|
|
elmts.radioNodeTypeCellAsBlank[0].checked = false;
|
|
elmts.radioNodeTypeCellAsLiteral[0].checked = false;
|
|
elmts.radioNodeTypeCellAsResource[0].checked = false;
|
|
});
|
|
|
|
// elmts.radioNodeTypeCellAsResource[0].checked = true; // just make sure some subtype is selected
|
|
var uri_expr = "gel:value.urlify(baseURI)";
|
|
if (this._node.nodeType.match(/^cell-as-/)) {
|
|
elmts.radioNodeTypeCellAs[0].checked = true;
|
|
if (this._node.nodeType == "cell-as-resource") {
|
|
elmts.radioNodeTypeCellAsResource[0].checked = true;
|
|
uri_expr = this._node.uriExpression || uri_expr;
|
|
} else if (this._node.nodeType == "cell-as-literal") {
|
|
elmts.radioNodeTypeCellAsLiteral[0].checked = true;
|
|
$('>option[value=' +this._node.valueType +']',elmts.cellAsLiteralTypeSelect).attr('selected','selected');
|
|
} else if (this._node.nodeType == "cell-as-blank") {
|
|
elmts.radioNodeTypeCellAsBlank[0].checked = true;
|
|
}
|
|
} else if (this._node.nodeType == "blank") {
|
|
elmts.radioNodeTypeBlank[0].checked = true;
|
|
} else if (this._node.nodeType == "resource") {
|
|
elmts.radioNodeTypeResource[0].checked = true;
|
|
if(this._node.uri){
|
|
elmts.resourceNodeTypeInput.val(this._node.uri);
|
|
}
|
|
} else if (this._node.nodeType == "literal") {
|
|
elmts.radioNodeTypeLiteral[0].checked = true;
|
|
if(this._node.value){
|
|
elmts.literalNodeTypeValueInput.val(this._node.value);
|
|
}
|
|
$('>option[value=' +this._node.valueType +']',elmts.literalNodeTypeValueTypeSelect).attr('selected','selected');
|
|
}
|
|
|
|
elmts.cellAsResourceUriInput.val(uri_expr);
|
|
|
|
//preview/edit URI
|
|
//elmts.cellAsResourceUriInput.attr("disabled","disabled").val('"' + RdfSchemaAlignment._defaultNamespace + '" + value.urlify()');
|
|
elmts.previewCellUri.click(function(evt){
|
|
evt.preventDefault();
|
|
var cellIndex = $("input[name='schema-align-node-dialog-column']:checked")[0].value;
|
|
var expr = $("input[name='cellAsResourceUri']").val();
|
|
self._previewURI(expr,cellIndex,elmts);
|
|
});
|
|
|
|
|
|
/*--------------------------------------------------
|
|
* Footer
|
|
*--------------------------------------------------
|
|
*/
|
|
var getResultJSON = function() {
|
|
var node = {
|
|
nodeType: $("input[name='schema-align-node-dialog-node-type']:checked")[0].value
|
|
};
|
|
if (node.nodeType == "cell-as") {
|
|
node.nodeType = $("input[name='schema-align-node-dialog-node-subtype']:checked")[0].value;
|
|
|
|
node.columnIndex = parseInt($("input[name='schema-align-node-dialog-column']:checked")[0].value);
|
|
if(node.columnIndex!==-1){
|
|
node.columnName = theProject.columnModel.columns[node.columnIndex].name;
|
|
}else{
|
|
node.isRowNumberCell = true;
|
|
}
|
|
|
|
if (node.nodeType == "cell-as-resource") {
|
|
node.uriExpression = elmts.cellAsResourceUriInput[0].value;
|
|
} else if (node.nodeType == "cell-as-literal") {
|
|
node.valueType = elmts.cellAsLiteralTypeSelect[0].value;
|
|
|
|
if (node.valueType == "untyped") {
|
|
var l = elmts.cellAsLiteralLanguageInput[0].value;
|
|
node.lang = l;
|
|
}
|
|
} else if (node.nodeType == "cell-as-blank") {
|
|
//DO NOTHING
|
|
}
|
|
} else if (node.nodeType == "blank") {
|
|
//DO NOTHING
|
|
} else if (node.nodeType == "resource") {
|
|
node.uri = elmts.resourceNodeTypeInput[0].value;
|
|
if (!node.uri.length) {
|
|
alert("Please specify the URI to use.");
|
|
return null;
|
|
}
|
|
} else if (node.nodeType == "literal") {
|
|
node.value = $.trim(elmts.literalNodeTypeValueInput[0].value);
|
|
if (!node.value.length) {
|
|
alert("Please specify the value to use.");
|
|
return null;
|
|
}
|
|
node.valueType = elmts.literalNodeTypeValueTypeSelect[0].value;
|
|
|
|
if (node.valueType == "untyped") {
|
|
node.lang = elmts.literalNodeTypeLanguageInput[0].value;
|
|
}
|
|
}
|
|
|
|
return node;
|
|
};
|
|
|
|
$('<button></button>').html(" OK ").click(function() {
|
|
var node = getResultJSON();
|
|
if(self._node.rdfTypes){
|
|
node.rdfTypes = cloneDeep(self._node.rdfTypes);
|
|
}
|
|
if (node !== null) {
|
|
DialogSystem.dismissUntil(level - 1);
|
|
|
|
self._node = node;
|
|
/*if('columnIndex' in node){
|
|
if(node.columnIndex!==-1){
|
|
self._node.columnName = theProject.columnModel.columns[node.columnIndex].name;
|
|
}else{
|
|
self._node.isRowNumberCell = true;
|
|
}
|
|
}*/
|
|
self.render();
|
|
//self._dialog.preview();
|
|
}
|
|
}).appendTo(footer);
|
|
|
|
$('<button></button>').text("Cancel").click(function() {
|
|
DialogSystem.dismissUntil(level - 1);
|
|
}).appendTo(footer);
|
|
|
|
|
|
var level = DialogSystem.showDialog(frame);
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._previewURI = function(expr,cellIndex,elmts){
|
|
var self = this;
|
|
//FIXME
|
|
cellIndex = cellIndex==='-1'?0:cellIndex;
|
|
DataTableView.promptExpressionOnVisibleRows(
|
|
{
|
|
"cellIndex":cellIndex
|
|
},
|
|
"Custom Facet on column ",
|
|
expr,
|
|
function(expression){
|
|
expression = expression.substring(4);
|
|
$("input[name='cellAsResourceUri']").val(expression);
|
|
elmts.radioNodeTypeCellAs[0].checked=true;
|
|
elmts.radioNodeTypeCellAsResource[0].checked = true;
|
|
}
|
|
);
|
|
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype.render = function() {
|
|
this._renderMain();
|
|
if (this._isExpandable()) {
|
|
this._showExpandable();
|
|
} else {
|
|
this._hideExpandable();
|
|
}
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype.removeLink = function(linkUI) {
|
|
for (var i = this._linkUIs.length - 1; i >= 0; i--) {
|
|
if (this._linkUIs[i] === linkUI) {
|
|
this._linkUIs.splice(i, 1);
|
|
this._node.links.splice(i, 1);
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._hideExpandable = function() {
|
|
$(this._tdToggle).hide();
|
|
$(this._tdDetails).hide();
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._addRdfType = function(src){
|
|
var self = this;
|
|
new RdfSchemaAlignmentDialog.RdfResourceDialog(src,'class', function (obj) {
|
|
self._addNodeRdfType(obj.id,obj.name);
|
|
});
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._removeRdfType = function(index){
|
|
var self = this;
|
|
self._node.rdfTypes.splice(index,1);
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._addNodeRdfType = function(uri,curie){
|
|
if(!this._node.rdfTypes){
|
|
this._node.rdfTypes = [];
|
|
}
|
|
this._node.rdfTypes.push({uri:uri,curie:curie});
|
|
this._renderMain();
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype._getTypeName = function(t){
|
|
if(!t){return '';}
|
|
if(t.curie !== undefined && t.curie!==''){
|
|
return t.curie;
|
|
}else{
|
|
return t.uri;
|
|
}
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.UINode.prototype.getJSON = function() {
|
|
var result = null;
|
|
var getLinks = false;
|
|
|
|
if (this._node.nodeType.match(/^cell-as-/)) {
|
|
if (!("columnIndex" in this._node || this._node.isRowNumberCell) || this._node.columnIndex===undefined) {
|
|
return null;
|
|
}
|
|
|
|
if (this._node.nodeType == "cell-as-resource") {
|
|
if (!this._node.isRowNumberCell){
|
|
result = {
|
|
nodeType: this._node.nodeType,
|
|
columnIndex: this._node.columnIndex,
|
|
uriExpression: this._node.uriExpression,
|
|
isRowNumberCell: this._node.isRowNumberCell || false,
|
|
columnName: this._node.columnName
|
|
// type: "type" in this._node ? cloneDeep(this._node.type) : { "id" : "/common/topic", "name" : "Topic", "cvt" : false }
|
|
};
|
|
}else{
|
|
result = {
|
|
nodeType: this._node.nodeType,
|
|
columnIndex: this._node.columnIndex,
|
|
uriExpression: this._node.uriExpression,
|
|
isRowNumberCell: this._node.isRowNumberCell || false
|
|
// type: "type" in this._node ? cloneDeep(this._node.type) : { "id" : "/common/topic", "name" : "Topic", "cvt" : false }
|
|
};
|
|
}
|
|
getLinks = true;
|
|
} else if (this._node.nodeType == "cell-as-literal") {
|
|
result = {
|
|
nodeType: this._node.nodeType,
|
|
columnIndex: this._node.columnIndex,
|
|
valueType: "valueType" in this._node ? this._node.valueType : "untyped",
|
|
lang: "lang" in this._node ? this._node.lang : "en",
|
|
columnName: this._node.columnName
|
|
};
|
|
} else if (this._node.nodeType == "cell-as-blank") {
|
|
result = {
|
|
nodeType: this._node.nodeType,
|
|
columnIndex: this._node.columnIndex,
|
|
columnName: this._node.columnName
|
|
};
|
|
getLinks = true;
|
|
}
|
|
} else if (this._node.nodeType == "resource") {
|
|
result = {
|
|
nodeType: this._node.nodeType,
|
|
uri: this._node.uri
|
|
};
|
|
getLinks = true;
|
|
} else if (this._node.nodeType == "literal") {
|
|
if (!("value" in this._node) || !this._node.value) {
|
|
return null;
|
|
}
|
|
result = {
|
|
nodeType: this._node.nodeType,
|
|
value: this._node.value,
|
|
valueType: "valueType" in this._node ? this._node.valueType : "untyped",
|
|
lang: "lang" in this._node ? this._node.lang : "en"
|
|
};
|
|
} else if (this._node.nodeType == "blank") {
|
|
result = {
|
|
nodeType: this._node.nodeType,
|
|
columnIndex: this._node.columnIndex
|
|
};
|
|
getLinks = true;
|
|
}
|
|
|
|
if (!result) {
|
|
return null;
|
|
}
|
|
if (getLinks) {
|
|
var rdfTypes = [];
|
|
if(this._node.rdfTypes){
|
|
for(var i=0;i<this._node.rdfTypes.length; i++){
|
|
rdfTypes.push({uri:this._node.rdfTypes[i].uri,
|
|
curie:this._node.rdfTypes[i].curie
|
|
});
|
|
}
|
|
result.rdfTypes = rdfTypes;
|
|
}
|
|
var links = [];
|
|
for (var i = 0; i < this._linkUIs.length; i++) {
|
|
var link = this._linkUIs[i].getJSON();
|
|
if (link !== null) {
|
|
links.push(link);
|
|
}
|
|
}
|
|
result.links = links;
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
RdfSchemaAlignmentDialog.NewRdfResourceDialog = function(elmt,defaultVal,onDone){
|
|
var menu = MenuSystem.createMenu().width('400px');
|
|
menu.html('<div class="schema-alignment-link-menu-type-search">' +
|
|
'<span class="schema-alignment-node-column">URI: <small>(relative URIs will be resolved against base URI)</small></span>' +
|
|
'<input type="text" bind="newResourceUri" size="50"><br/>' +
|
|
'<button bind="applyBtn">Apply</button>' +
|
|
'<button bind="cancelBtn">Cancel</button>'
|
|
//'<input type="text" bind="newResourceUri2" size="50" style="display:none">'
|
|
);
|
|
MenuSystem.showMenu(menu,function(){});
|
|
MenuSystem.positionMenuLeftRight(menu, $(elmt));
|
|
var elmts = DOM.bind(menu);
|
|
elmts.newResourceUri.val(defaultVal).focus().select();
|
|
elmts.cancelBtn.click(function(){
|
|
MenuSystem.dismissAll();
|
|
});
|
|
|
|
elmts.applyBtn.click(function(){
|
|
var val = elmts.newResourceUri.val();
|
|
if(!val){
|
|
alert('Enter URI');
|
|
return;
|
|
}
|
|
MenuSystem.dismissAll();
|
|
if(val.substring(0,1)===':'){
|
|
val = val.substring(1);
|
|
}
|
|
var obj = {
|
|
id:val,
|
|
name:val.match('^http://')?val:':'+val
|
|
};
|
|
onDone(obj);
|
|
});
|
|
};
|
|
RdfSchemaAlignmentDialog.RdfResourceDialog = function(elmt,lookFor,onDone,defaultVal){
|
|
var menu = MenuSystem.createMenu().width('400px');
|
|
menu.html('<div class="schema-alignment-link-menu-type-search">' +
|
|
'<span>Search for ' + lookFor + ':</span>' +
|
|
'<input type="text" bind="newResourceUri" >'
|
|
//'<input type="text" bind="newResourceUri2" size="50" style="display:none">'
|
|
);
|
|
MenuSystem.showMenu(menu,function(){});
|
|
MenuSystem.positionMenuLeftRight(menu, $(elmt));
|
|
var elmts = DOM.bind(menu);
|
|
|
|
/*elmts.createOne.click(function(evt){
|
|
evt.preventDefault();
|
|
MenuSystem.dismissAll();
|
|
new RdfSchemaAlignmentDialog.NewRdfResourceDialog(elmt,defaultVal||'',onDone);
|
|
});*/
|
|
//Autocomplete
|
|
/*elmts.newResourceUri.autoComplete({
|
|
script:'/command/search-vocabularies?type=' + lookFor + '&',
|
|
varname:'input',
|
|
json:true,
|
|
shownoresults:true,
|
|
maxresults:16,
|
|
cache:false,
|
|
timeout:null,
|
|
minchars:2,
|
|
callback: function (obj) {
|
|
MenuSystem.dismissAll();
|
|
if(onDone){
|
|
onDone(obj);
|
|
}
|
|
}
|
|
});
|
|
elmts.newResourceUri.focus();*/
|
|
|
|
elmts.newResourceUri.suggestterm({type_strict:lookFor}).bind('fb-select',function(e,data){
|
|
MenuSystem.dismissAll();
|
|
if(onDone){
|
|
onDone(data);
|
|
}
|
|
}).bind('fb-select-new',function(e,val){
|
|
MenuSystem.dismissAll();
|
|
new RdfSchemaAlignmentDialog.NewRdfResourceDialog(elmt,defaultVal||'',onDone);
|
|
});
|
|
elmts.newResourceUri.focus();
|
|
}; |