@@ -148,10 +176,11 @@
Welcome to WhiteboardJS !
+
+
+
diff --git a/src/jquery.whiteboard.js b/src/jquery.whiteboard.js
index 3a0b16a..d18f538 100644
--- a/src/jquery.whiteboard.js
+++ b/src/jquery.whiteboard.js
@@ -3,11 +3,13 @@
* - 1 textTool
* - 2 rectTool
* - 3 circleTool
+ * - 4 mathsTool
* ...
*/
var elID = tool = 0;
var appSelector = "#app";
var contentSelector = appSelector + " .wbjs-content";
+var mathInsertCoords = null;
// Helper: get page coordinates from mouse or touch event
function getEventCoords(event) {
@@ -48,6 +50,10 @@ $(function(){
tool = 3;
$(contentSelector).css("cursor", "crosshair");
break;
+ case "mathsTool":
+ tool = 4;
+ $(contentSelector).css("cursor", "crosshair");
+ break;
//TODO: To be continued...
}
$(appSelector).css({"cursor": "text"});
@@ -182,6 +188,12 @@ $(function(){
newEl.resizable();
elID++;
break;
+ case 4:
+ mathInsertCoords = { pageX: coords.pageX, pageY: coords.pageY, ctTop: ctTop, ctLeft: ctLeft };
+ $("#mathLatexInput").val("");
+ $("#mathPreview").html('
Preview will appear here');
+ $("#mathModal").modal("show");
+ break;
}
}
@@ -208,4 +220,69 @@ $(function(){
}
}
});
+
+ //-- Math formula modal: live preview
+ $("#mathLatexInput").on("input", function() {
+ var latex = $(this).val().trim();
+ if (latex) {
+ try {
+ katex.render(latex, document.getElementById("mathPreview"), { throwOnError: false, displayMode: true });
+ } catch(e) {
+ $("#mathPreview").html('
Invalid formula');
+ }
+ } else {
+ $("#mathPreview").html('
Preview will appear here');
+ }
+ });
+
+ //-- Math formula modal: insert button
+ $("#mathInsertBtn").on("click", function() {
+ var latex = $("#mathLatexInput").val().trim();
+ if (!latex || !mathInsertCoords) return;
+
+ var rendered = $('
')[0];
+ try {
+ katex.render(latex, rendered, { throwOnError: false, displayMode: true });
+ } catch(e) {
+ return;
+ }
+
+ var newEl = $(contentSelector).append(
+ '
'
+ ).children(":last-child");
+
+ newEl.find(".wbjs-math").append(rendered);
+
+ newEl.css({
+ "position": "absolute",
+ "top": mathInsertCoords.ctTop + mathInsertCoords.pageY,
+ "left": mathInsertCoords.ctLeft + mathInsertCoords.pageX
+ });
+
+ $("#mathModal").modal("hide");
+ $("#mouseTool").trigger("click");
+
+ newEl.draggable({handle: "div.btn", scroll: false});
+ elID++;
+ mathInsertCoords = null;
+ });
+
+ //-- Math formula modal: allow Enter key to insert
+ $("#mathLatexInput").on("keydown", function(e) {
+ if (e.key === "Enter") {
+ e.preventDefault();
+ $("#mathInsertBtn").trigger("click");
+ }
+ });
+
+ //-- Math formula modal: reset tool on cancel
+ $("#mathModal").on("hidden.bs.modal", function() {
+ mathInsertCoords = null;
+ if (tool === 4) {
+ $("#mouseTool").trigger("click");
+ }
+ });
});
\ No newline at end of file