You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
205 lines
6.0 KiB
JavaScript
205 lines
6.0 KiB
JavaScript
10 years ago
|
var editor_factory = aa_aceeditor(window.ace),
|
||
|
editor = editor_factory.get_editor(),
|
||
|
listing_url = d3.select("link[rel='listing-data-source']").attr("href"),
|
||
|
save_url = d3.select("link[rel='save-url']").attr("href")
|
||
|
preview_div = d3.select("#editor")
|
||
|
.append("div")
|
||
|
.attr("class", "preview"),
|
||
|
preview_iframe = preview_div
|
||
|
.append("iframe"),
|
||
|
make_div = d3.select("#editor")
|
||
|
.append("div")
|
||
|
.attr("class", "make"),
|
||
|
make_body = make_div.append("div")
|
||
|
.attr("class", "body"),
|
||
|
make_busy = make_div
|
||
|
.append("div")
|
||
|
.attr("class", "busy");
|
||
|
|
||
|
function path_for_href (href) {
|
||
|
var p = new RegExp("^/projects/([^/]+)/(.*)$"),
|
||
|
m = href.match(p);
|
||
|
if (m != null) {
|
||
|
return m[2];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
editor.save(function (data) {
|
||
|
console.log("save", data);
|
||
|
$.ajax({
|
||
|
url: save_url,
|
||
|
method: "post",
|
||
|
data: {
|
||
|
text: data.text,
|
||
|
f: path_for_href(data.href)
|
||
|
},
|
||
|
dataType: "json",
|
||
|
success: function (data) {
|
||
|
console.log("save.success", data);
|
||
|
},
|
||
|
error: function (err) {
|
||
|
console.log("save error", err);
|
||
|
}
|
||
|
})
|
||
|
});
|
||
|
|
||
|
make_body
|
||
|
.append("div")
|
||
|
.attr("class", "stdout");
|
||
|
make_body
|
||
|
.append("div")
|
||
|
.attr("class", "stderr");
|
||
|
make_busy.append("img")
|
||
|
.attr("src", "/imgs/gear.gif");
|
||
|
|
||
|
aa_frames(document.getElementById("split"));
|
||
|
|
||
|
document.getElementById("editor").appendChild(editor.elt);
|
||
|
|
||
|
function edit (url) {
|
||
|
editor.href(url);
|
||
|
preview_div
|
||
|
.style("display", "none");
|
||
|
make_div.style("display", "none");
|
||
|
}
|
||
|
|
||
|
function preview (url) {
|
||
|
preview_div
|
||
|
.style("display", "block");
|
||
|
preview_iframe
|
||
|
.attr("src", url);
|
||
|
make_div.style("display", "none");
|
||
|
}
|
||
|
|
||
|
function make (path, done) {
|
||
|
// console.log("make", path);
|
||
|
var make_url = d3.select("link[rel='make-url']").attr("href");
|
||
|
make_div.style("display", "block");
|
||
|
make_busy.style("display", "block");
|
||
|
make_url += "&f="+encodeURIComponent(path);
|
||
|
d3.json(make_url, function (data) {
|
||
|
d3.select("#editor .make .stdout").text(data.stdout);
|
||
|
d3.select("#editor .make .stderr").text(data.stderr);
|
||
|
make_busy.style("display", "none");
|
||
|
refresh_listing();
|
||
|
if (done) {
|
||
|
done.call(data, data);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function update_selection() {
|
||
|
var checkboxes = d3.selectAll(".itemcheckbox"),
|
||
|
checked = d3.selectAll(".itemcheckbox:checked"),
|
||
|
ss = checked.size(),
|
||
|
select_all_button = d3.select("#listing_select_all"),
|
||
|
selfunk = d3.select("#listing .selection_functions");
|
||
|
if (ss >= 1) {
|
||
|
selfunk.style("display", "inline");
|
||
|
} else {
|
||
|
selfunk.style("display", "none");
|
||
|
}
|
||
|
if (ss > 0 && ss == checkboxes.size()) {
|
||
|
select_all_button.text("deselect all");
|
||
|
} else {
|
||
|
select_all_button.text("select all");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function select_all () {
|
||
|
var checkboxes = d3.selectAll(".itemcheckbox"),
|
||
|
checked = d3.selectAll(".itemcheckbox:checked");
|
||
|
if (checkboxes.size() == checked.size()) {
|
||
|
checkboxes.property("checked", false);
|
||
|
} else {
|
||
|
checkboxes.property("checked", true);
|
||
|
}
|
||
|
update_selection();
|
||
|
}
|
||
|
|
||
|
function delete_selection () {
|
||
|
var rm_url = d3.select("link[rel='rm-url']").attr("href"),
|
||
|
checked = d3.selectAll(".itemcheckbox:checked"),
|
||
|
ss = checked.size(),
|
||
|
paths = checked.data().map(function (d) { return d.path });
|
||
|
|
||
|
if (ss == 0) return;
|
||
|
var ok = confirm("Delete " + ss + " items?");
|
||
|
if (ok) {
|
||
|
$.ajax({
|
||
|
url: rm_url,
|
||
|
method: "post",
|
||
|
data: {
|
||
|
'f[]': paths
|
||
|
},
|
||
|
dataType: "json",
|
||
|
success: function (data) {
|
||
|
checked.property("checked", false);
|
||
|
update_selection();
|
||
|
// console.log("rm response", data);
|
||
|
refresh_listing();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function refresh_listing() {
|
||
|
d3.json(listing_url, function (data) {
|
||
|
// console.log("data", data);
|
||
|
var div = d3.select("#listing .body");
|
||
|
item = div
|
||
|
.selectAll("div.item")
|
||
|
.data(data.items, function (d) { return d.path });
|
||
|
|
||
|
var newitem = item.enter()
|
||
|
.append("div")
|
||
|
.attr("class", "item");
|
||
|
newitem
|
||
|
.append("input")
|
||
|
.attr("class", "itemcheckbox")
|
||
|
.attr("type", "checkbox")
|
||
|
.on("change", update_selection);
|
||
|
newitem
|
||
|
.append("a")
|
||
|
.text(function(d) { return d.path })
|
||
|
.attr("href", function (d) { return d.url })
|
||
|
.on("click", function (d) {
|
||
|
d3.event.preventDefault();
|
||
|
// console.log("d", d);
|
||
|
if (d.remake) {
|
||
|
// alert("make");
|
||
|
make(d.path, function () {
|
||
|
if (!d.binary) {
|
||
|
edit(d.url);
|
||
|
} else {
|
||
|
preview(d.url);
|
||
|
}
|
||
|
});
|
||
|
return false;
|
||
|
} else if (!d.binary) {
|
||
|
edit(d.url);
|
||
|
} else {
|
||
|
preview(d.url);
|
||
|
}
|
||
|
});
|
||
|
// console.log("item.update", item);
|
||
|
item
|
||
|
.select("a")
|
||
|
.classed("normal", function (d) { return d.exists && !d.remake })
|
||
|
.classed("make", function (d) { return d.exists && d.remake })
|
||
|
.classed("potential", function (d) { return !d.exists })
|
||
|
.classed("exists", function (d) { return d.exists })
|
||
|
.classed("remake", function (d) { return d.remake });
|
||
|
|
||
|
item.exit()
|
||
|
.remove();
|
||
|
|
||
|
});
|
||
|
}
|
||
|
refresh_listing();
|
||
|
|
||
|
$("#listing .body").niceScroll({cursorcolor:"#0F0"});
|
||
|
$("#listing_refresh_button").click(refresh_listing);
|
||
|
$("#listing_delete_selection").click(delete_selection);
|
||
|
$("#listing_select_all").click(select_all);
|