f0b8268809
git-svn-id: http://google-refine.googlecode.com/svn/trunk@147 7d457c2a-affb-35e4-300a-418c747d4874
253 lines
7.0 KiB
JavaScript
253 lines
7.0 KiB
JavaScript
var theProject;
|
|
var ui = {};
|
|
|
|
var Gridworks = {
|
|
};
|
|
|
|
Gridworks.reportException = function(e) {
|
|
if (window.console) {
|
|
console.log(e);
|
|
}
|
|
};
|
|
|
|
function onLoad() {
|
|
var params = URL.getParameters();
|
|
if ("project" in params) {
|
|
theProject = {
|
|
id: parseInt(params.project)
|
|
};
|
|
|
|
var uiState = {};
|
|
if ("ui" in params) {
|
|
try {
|
|
uiState = JSON.parse(params.ui);
|
|
} catch (e) {
|
|
}
|
|
}
|
|
|
|
Gridworks.reinitializeProjectData(function() {
|
|
initializeUI(uiState);
|
|
});
|
|
}
|
|
}
|
|
$(onLoad);
|
|
|
|
function initializeUI(uiState) {
|
|
document.title = theProject.metadata.name + " - Gridworks";
|
|
|
|
var path = $("#path");
|
|
$('<span></span>').text(theProject.metadata.name).addClass("app-path-section").appendTo(path);
|
|
$('<span></span>').text(" project").appendTo(path);
|
|
|
|
$('<span>').html(" » ").appendTo(path);
|
|
$('<a href="javascript:{}"></a>')
|
|
.addClass("app-path-section")
|
|
.text("current view")
|
|
.mouseenter(function() {
|
|
this.href = Gridworks.getPermanentLink();
|
|
})
|
|
.appendTo(path);
|
|
|
|
var body = $("#body").empty();
|
|
|
|
var table = document.createElement("table");
|
|
$(table).attr("cellspacing", 20).css("width", "100%");
|
|
body.append(table);
|
|
|
|
var tr = table.insertRow(0);
|
|
|
|
var tdLeft = tr.insertCell(0);
|
|
var tdRight = tr.insertCell(1);
|
|
tdLeft.setAttribute("width", "82%");
|
|
tdRight.setAttribute("width", "18%");
|
|
|
|
ui.viewPanel = $('<div></div>').appendTo(tdLeft);
|
|
ui.facetPanel = $('<div></div>').appendTo(tdRight);
|
|
ui.historyPanel = $('<div></div>').addClass("history-panel").appendTo(document.body);
|
|
ui.processPanel = $('<div></div>').addClass("process-panel").appendTo(document.body);
|
|
ui.menuBarPanel = $('<div></div>'); $("#header").after(ui.menuBarPanel);
|
|
|
|
ui.browsingEngine = new BrowsingEngine(ui.facetPanel, uiState.facets || []);
|
|
ui.processWidget = new ProcessWidget(ui.processPanel);
|
|
ui.historyWidget = new HistoryWidget(ui.historyPanel);
|
|
ui.dataTableView = new DataTableView(ui.viewPanel);
|
|
ui.menuBar = new MenuBar(ui.menuBarPanel);
|
|
}
|
|
|
|
Gridworks.reinitializeProjectData = function(f) {
|
|
Ajax.chainGetJSON(
|
|
"/command/get-project-metadata?" + $.param({ project: theProject.id }), null,
|
|
function(data) {
|
|
theProject.metadata = data;
|
|
},
|
|
"/command/get-models?" + $.param({ project: theProject.id }), null,
|
|
function(data) {
|
|
theProject.columnModel = data.columnModel;
|
|
theProject.protograph = data.protograph;
|
|
|
|
for (var i = 0; i < theProject.columnModel.columns.length; i++) {
|
|
theProject.columnModel.columns[i].collapsed = false;
|
|
}
|
|
},
|
|
f
|
|
);
|
|
}
|
|
|
|
/*
|
|
* Utility state functions
|
|
*/
|
|
|
|
Gridworks.createUpdateFunction = function(options, onFinallyDone) {
|
|
var functions = [];
|
|
var pushFunction = function(f) {
|
|
var index = functions.length;
|
|
functions.push(function() {
|
|
f(functions[index + 1]);
|
|
});
|
|
};
|
|
|
|
pushFunction(function(onDone) {
|
|
ui.historyWidget.update(onDone);
|
|
});
|
|
if (options["everythingChanged"] || options["modelsChanged"] || options["columnStatsChanged"]) {
|
|
pushFunction(Gridworks.reinitializeProjectData);
|
|
}
|
|
if (options["everythingChanged"] || options["modelsChanged"] || options["rowsChanged"] || options["cellsChanged"] || options["engineChanged"]) {
|
|
pushFunction(function(onDone) {
|
|
ui.dataTableView.update(onDone);
|
|
});
|
|
pushFunction(function(onDone) {
|
|
ui.browsingEngine.update(onDone);
|
|
});
|
|
}
|
|
|
|
functions.push(onFinallyDone || function() {});
|
|
|
|
return functions[0];
|
|
};
|
|
|
|
Gridworks.update = function(options, onFinallyDone) {
|
|
var done = false;
|
|
var dismissBusy = null;
|
|
|
|
Gridworks.createUpdateFunction(options, function() {
|
|
done = true;
|
|
if (dismissBusy) {
|
|
dismissBusy();
|
|
}
|
|
if (onFinallyDone) {
|
|
onFinallyDone();
|
|
}
|
|
})();
|
|
|
|
window.setTimeout(function() {
|
|
if (!done) {
|
|
dismissBusy = DialogSystem.showBusy();
|
|
}
|
|
}, 500);
|
|
};
|
|
|
|
Gridworks.postProcess = function(command, params, body, updateOptions, callbacks) {
|
|
params = params || {};
|
|
params.project = theProject.id;
|
|
|
|
body = body || {};
|
|
body.engine = JSON.stringify(ui.browsingEngine.getJSON());
|
|
|
|
updateOptions = updateOptions || {};
|
|
callbacks = callbacks || {};
|
|
|
|
var done = false;
|
|
var dismissBusy = null;
|
|
|
|
function onDone(o) {
|
|
done = true;
|
|
if (dismissBusy) {
|
|
dismissBusy();
|
|
}
|
|
|
|
if (o.code == "error") {
|
|
if ("onError" in callbacks) {
|
|
try {
|
|
callbacks["onError"](o);
|
|
} catch (e) {
|
|
Gridworks.reportException(e);
|
|
}
|
|
}
|
|
} else {
|
|
if ("onDone" in callbacks) {
|
|
try {
|
|
callbacks["onDone"](o);
|
|
} catch (e) {
|
|
Gridworks.reportException(e);
|
|
}
|
|
}
|
|
|
|
if (o.code == "ok") {
|
|
Gridworks.update(updateOptions, callbacks["onFinallyDone"]);
|
|
} else if (o.code == "pending") {
|
|
if ("onPending" in callbacks) {
|
|
try {
|
|
callbacks["onPending"](o);
|
|
} catch (e) {
|
|
Gridworks.reportException(e);
|
|
}
|
|
}
|
|
ui.processWidget.update(updateOptions, callbacks["onFinallyDone"]);
|
|
}
|
|
}
|
|
}
|
|
|
|
$.post(
|
|
"/command/" + command + "?" + $.param(params),
|
|
body,
|
|
onDone,
|
|
"json"
|
|
);
|
|
|
|
window.setTimeout(function() {
|
|
if (!done) {
|
|
dismissBusy = DialogSystem.showBusy();
|
|
}
|
|
}, 500);
|
|
};
|
|
|
|
/*
|
|
* Utility model functions
|
|
*/
|
|
|
|
Gridworks.cellIndexToColumn = 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;
|
|
};
|
|
|
|
Gridworks.fetchRows = function(start, limit, onDone) {
|
|
$.post(
|
|
"/command/get-rows?" + $.param({ project: theProject.id, start: start, limit: limit }),
|
|
{ engine: JSON.stringify(ui.browsingEngine.getJSON()) },
|
|
function(data) {
|
|
theProject.rowModel = data;
|
|
if (onDone) {
|
|
onDone();
|
|
}
|
|
},
|
|
"json"
|
|
);
|
|
};
|
|
|
|
Gridworks.getPermanentLink = function() {
|
|
var params = [
|
|
"project=" + escape(theProject.id),
|
|
"ui=" + escape(JSON.stringify({
|
|
facets: ui.browsingEngine.getFacetUIStates()
|
|
}))
|
|
];
|
|
return "project.html?" + params.join("&");
|
|
};
|