function ExtendDataPreviewDialog(column, rowIndices, onDone) { this._column = column; this._rowIndices = rowIndices; this._onDone = onDone; this._extension = { properties: [] }; var self = this; var frame = DialogSystem.createDialog(); frame.width("900px").addClass("extend-data-preview-dialog"); var header = $('
').addClass("dialog-header").text("Add Columns from Freebase Based on Column " + column.name).appendTo(frame); var body = $('
').addClass("dialog-body").appendTo(frame); var footer = $('
').addClass("dialog-footer").appendTo(frame); var html = $( '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
Add PropertyPreview
Suggested Properties
' ).appendTo(body); this._elmts = DOM.bind(html); $('').html("  OK  ").click(function() { DialogSystem.dismissUntil(self._level - 1); self._onDone(self._previewWidget.getExpression(true)); }).appendTo(footer); $('').text("Cancel").click(function() { DialogSystem.dismissUntil(self._level - 1); }).appendTo(footer); this._level = DialogSystem.showDialog(frame); var suggestConfig = { type: '/type/property' }; if ("reconConfig" in column) { suggestConfig.schema = column.reconConfig.type.id; } this._elmts.addPropertyInput.suggestP(suggestConfig).bind("fb-select", function(evt, data) { self._addProperty(data); }); }; ExtendDataPreviewDialog.prototype._update = function() { this._elmts.previewContainer.empty().text("Querying Freebase ..."); var self = this; var params = { project: theProject.id, columnName: this._column.name }; $.post( "/command/preview-extend-data?" + $.param(params), { rowIndices: JSON.stringify(this._rowIndices), extension: JSON.stringify(this._extension) }, function(data) { self._renderPreview(data) }, "json" ); }; ExtendDataPreviewDialog.prototype._addProperty = function(p) { this._extension.properties.push({ id : p.id, name: p.name, expected: p["/type/property/expected_type"] }); this._update(); }; ExtendDataPreviewDialog.prototype._renderPreview = function(data) { var container = this._elmts.previewContainer.empty(); if (data.code == "error") { container.text("Error."); return; } var table = $('')[0]; for (var r = 0; r < data.rows.length; r++) { var tr = table.insertRow(table.rows.length); var row = data.rows[r]; for (var c = 0; c < row.length; c++) { var td = tr.insertCell(tr.cells.length); var cell = row[c]; if (cell != null) { if ($.isPlainObject(cell)) { $('').attr("href", "http://www.freebase.com/view" + cell.id).text(cell.name).appendTo(td); } else { $('').text(cell).appendTo(td); } } } } container.append(table); }