Commit 9ff7a5c3 authored by Cédric Le Ninivin's avatar Cédric Le Ninivin

EditorPage: Types not supported by editor use a File Input

parent d3561189
...@@ -49,8 +49,16 @@ ...@@ -49,8 +49,16 @@
</tr> </tr>
</table> </table>
</div> </div>
<div class="container-fluid file-upload" style="display:none;">
<form class="crib-editor-file-upload form-inline">
<div class="form-group">
<label>URL:
<input name="file" class="file form-control" type="file"></label>
</div>
</form>
</div>
</div> </div>
<div class="container-fluid"> <div class="container-fluid editor-gadget">
<div data-gadget-url="./codemirror.gadget.html" <div data-gadget-url="./codemirror.gadget.html"
data-gadget-scope="codeeditor" data-gadget-scope="codeeditor"
data-gadget-sandbox="public"></div> data-gadget-sandbox="public"></div>
......
...@@ -5,6 +5,27 @@ ...@@ -5,6 +5,27 @@
var CODE_CONTENT_KEY = "text_content"; var CODE_CONTENT_KEY = "text_content";
function getEditorContent(gadget) {
return new RSVP.Queue()
.push(function () {
return gadget.getDeclaredGadget('codeeditor');
})
.push(function (code_editor_gadget) {
return code_editor_gadget.getContent();
});
}
function getFileContent(gadget) {
var file_list = gadget.props.element
.querySelector("form.crib-editor-file-upload .file")
.files;
if (file_list.length === 0) {
throw "No file Provided, not saving";
} else {
return file_list[0];
}
}
function saveTextContent(gadget, event) { function saveTextContent(gadget, event) {
var content, var content,
url = gadget.props.element.querySelector("form.crib-editor-get .url").value, url = gadget.props.element.querySelector("form.crib-editor-get .url").value,
...@@ -14,13 +35,18 @@ ...@@ -14,13 +35,18 @@
} }
return new RSVP.Queue() return new RSVP.Queue()
.push(function () { .push(function () {
return gadget.getDeclaredGadget('codeeditor'); if (gadget.props.use_editor) {
}) return getEditorContent(gadget);
.push(function (code_editor_gadget) { } else {
return code_editor_gadget.getContent(); return getFileContent(gadget);
}
}) })
.push(function (data) { .push(function (data) {
if (gadget.props.use_editor) {
content = data[CODE_CONTENT_KEY] || ""; content = data[CODE_CONTENT_KEY] || "";
} else {
content = data;
}
return gadget.crib_sw_put(url, {content: content, type: mimetype}); return gadget.crib_sw_put(url, {content: content, type: mimetype});
}) })
.push(function () { .push(function () {
...@@ -31,38 +57,84 @@ ...@@ -31,38 +57,84 @@
message: "Saved " + url + " files at " + Date() message: "Saved " + url + " files at " + Date()
}); });
} }
gadget.props.element
.querySelector("form.crib-editor-file-upload").reset();
gadget.props.element.querySelector(".crib-editor-save-status") gadget.props.element.querySelector(".crib-editor-save-status")
.textContent = "Saved " + url + " files at " + Date(); .textContent = "Saved " + url + " files at " + Date();
})
.push(undefined, function (error) {
gadget.props.element.querySelector(".crib-editor-save-status")
.textContent = error;
});
}
function displayProperEditor(gadget) {
if (gadget.props.use_editor) {
gadget.props.element.querySelector("div.file-upload")
.style = "display:none;";
gadget.props.element.querySelector("div.editor-gadget")
.style = "";
} else {
gadget.props.element.querySelector("div.file-upload")
.style = "";
gadget.props.element.querySelector("div.editor-gadget")
.style = "display:none;";
}
}
function displayDataInCodeEditor(gadget, code_editor, data, type) {
return RSVP.Queue()
.push(function () {
return jIO.util.readBlobAsText(data, type);
})
.push(function (evt) {
return code_editor.render({
key: CODE_CONTENT_KEY,
value: evt.target.result,
mode: type
});
})
.push(function () {
gadget.props.use_editor = true;
displayProperEditor(gadget);
}); });
} }
function displayFile(gadget, data, type) {
gadget.props.element
.querySelector("form.crib-editor-file-upload").reset();
gadget.props.use_editor = false;
displayProperEditor(gadget);
}
function getUrlTextContent(gadget, event, url) { function getUrlTextContent(gadget, event, url) {
var type; var type, code_editor;
return new RSVP.Queue() return new RSVP.Queue()
.push(function () { .push(function () {
return gadget.crib_sw_get(url); return gadget.getDeclaredGadget('codeeditor');
}) })
.push(function (data) { .push(function (editor) {
code_editor = editor;
return RSVP.all([
editor.getSupportedTypeList(),
gadget.crib_sw_get(url)
]);
})
.push(function (result_list) {
var data = result_list[1];
type = data.type; type = data.type;
if (!type || type === "application/octet-stream") { if (!type || type === "application/octet-stream") {
type = mimeType.lookup(url, false, "application/octet-stream"); type = mimeType.lookup(url, false, "application/octet-stream");
} }
return jIO.util.readBlobAsText(data, type); gadget.props.element.querySelector("form.crib-editor-save .mimetype")
}) .value = type;
.push(function (evt) { if (result_list[0].indexOf(type) !== -1) {
return RSVP.all([ return displayDataInCodeEditor(gadget, code_editor, data, type);
evt.target.result, } else {
gadget.getDeclaredGadget('codeeditor') return displayFile(gadget, data, type);
]); }
}) })
.push(function (data_list) { .push(undefined, function (error) {
gadget.props.element.querySelector("form.crib-editor-save .mimetype").value = type;
return data_list[1].render({
key: CODE_CONTENT_KEY,
value: data_list[0],
mode: type
});
}, function (error) {
gadget.props.element.querySelector(".crib-editor-save-status") gadget.props.element.querySelector(".crib-editor-save-status")
.textContent = error; .textContent = error;
}); });
...@@ -74,6 +146,7 @@ ...@@ -74,6 +146,7 @@
return g.getElement() return g.getElement()
.push(function (element) { .push(function (element) {
g.props.element = element; g.props.element = element;
g.props.use_editor = true;
g.props.start_deferred = RSVP.defer(); g.props.start_deferred = RSVP.defer();
}); });
}) })
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment