function FreebaseLoadingDialog() { this._createDialog(); this._signedin = false; } FreebaseLoadingDialog.prototype._createDialog = function() { var self = this; var dialog = $(DOM.loadHTML("freebase", "scripts/dialogs/freebase-loading-dialog.html")); this._elmts = DOM.bind(dialog); this._elmts.cancelButton.click(function() { self._dismiss(); }); var provider = "www.freebase.com"; var authorization = this._elmts.authorization; var loadButton = this._elmts.loadButton; var check_authorization = function(cont) { $.get("/command/freebase/check-authorization/" + provider, function(data) { if ("status" in data && data.code == "/api/status/ok") { authorization.html('Signed in as: ' + data.username + ' | Sign Out').show(); DOM.bind(authorization).signout.click(function() { self._signedin = false; loadButton.attr("disabled","disabled"); $("#freebase-loading-graph-selector-freebase").attr("disabled","disabled").button("refresh"); Sign.signout(check_authorization,provider); }); loadButton.unbind().click(function() { self._load(); }); self._signedin = true; $("#freebase-loading-source-name").keyup(); if (typeof cont == "function") cont(data); } else { authorization.html('Sign into Freebase to enable loading').show(); DOM.bind(authorization).signin.click(function() { Sign.signin(function() { check_authorization(cont); },provider); }); } },"json"); }; var make_topic = function(new_topic_id, topic_type, cont) { var mql_query = [{ "create": "unless_exists", "name": new_topic_id, "a:type": topic_type, "b:type": "/common/topic", "id": null, "guid": null }]; $.post("/command/freebase/mqlwrite/" + provider, { "query" : JSON.stringify(mql_query) }, function(data) { if ("status" in data && data.code == "/api/status/ok") { self._elmts.source_id.val(data.result[0].id); if (typeof cont == "function") cont(); } else { self._show_error("Error creating new topic", data); } }, "json" ); }; var show_triples = function(cont) { $.post( "/command/freebase/preview-protograph?" + $.param({ project: theProject.id }), { protograph: JSON.stringify(theProject.overlayModels.freebaseProtograph || {}), engine: JSON.stringify(ui.browsingEngine.getJSON()) }, function(data) { var body = self._elmts.dialogBody; if ("tripleloader" in data) { body.html( '
' + '' + '' + '
Name this data load ¬ required
' + '
Source ID ¬ optional
' + '
' + '
' + data.tripleloader + '
' ); self._elmts = DOM.bind(dialog); self._elmts.source_name.keyup(function() { if (self._signedin && $(this).val() != "") { loadButton.removeAttr("disabled"); } else { loadButton.attr("disabled","disabled"); } }); self._elmts.source_id.suggest({ "type": "/dataworld/information_source", "suggest_new": "Click here to add a new information source" }).bind("fb-select", function(e, data) { self._elmts.source_id.val(data.id); }).bind("fb-select-new", function(e, val) { make_topic(val, "/dataworld/information_source"); }); $.getJSON( "/command/core/get-preference?" + $.param({ project: theProject.id, name: "freebase.load.jobName" }), null, function(data) { if (data.value != null) { self._elmts.source_name[0].value = data.value; } } ); if (typeof cont == "function") cont(); } else { body.html( '
'+ '

This dataset has no triples

' + '

Have you aligned it with the Freebase schemas yet?

' + '
' ); self._elmts = DOM.bind(dialog); self._end(); } self._level = DialogSystem.showDialog(dialog); }, "json" ); }; show_triples(check_authorization); }; FreebaseLoadingDialog.prototype._load = function() { var self = this; var qa = self._elmts.qaCheckbox.is(':checked'); var get_refinery_url = function(url) { return "http://refinery.freebaseapps.com/load/" + url.split("/").slice(-1)[0]; }; var doLoad = function() { var dismissBusy = DialogSystem.showBusy(); $.post("/command/freebase/upload-data", { project: theProject.id, "qa" : qa, "engine" : JSON.stringify(ui.browsingEngine.getJSON()), "source_name" : self._elmts.source_name.val(), "source_id" : self._elmts.source_id.val() }, function(data) { dismissBusy(); var body = self._elmts.dialogBody; if ("status" in data && typeof data.status == "object" && "code" in data.status && data.status.code == 200) { body.html( '
' + '

' + data.result.added + ' triples successfully scheduled for loading

' + '

Follow the loading progress in the Freebase Refinery

' + '
' ); self._end(); } else { self._show_error("Error loading data",data); } }, "json" ); }; if (qa) { var dialog = $( '
' + '
Are you sure this data is ready to be tested for upload into Freebase?
' + '
' ).dialog({ resizable: false, width: 400, height: 230, modal: true, buttons: { 'yes, I\'m sure': function() { $(this).dialog('close'); doLoad(); }, 'hmm, not really': function() { $(this).dialog('close'); } } }); } else { doLoad(); } }; FreebaseLoadingDialog.prototype._dismiss = function() { DialogSystem.dismissUntil(this._level - 1); }; FreebaseLoadingDialog.prototype._show_error = function(msg, error) { console.log(error); var self = this; var body = self._elmts.dialogBody; body.html( '
' + '

' + msg + '

' + (('message' in error) ? '

' + error.message + '

' : '
' + JSON.stringify(error, null, 2) + '
') + (('stack' in error) ? '
' + error.stack.replace(/\\n/g,'\n').replace(/\\t/g,'\t') + '
' : "") + '
' ); this._end(); }; FreebaseLoadingDialog.prototype._end = function() { var self = this; self._elmts.loadButton.text("Close").removeAttr("disabled").unbind().click(function() { self._dismiss(); }); self._elmts.cancelButton.hide(); self._elmts.qaCheckboxContainer.hide(); self._elmts.authorization.hide(); };