HTTPServer/__workflow_js.h
2020-03-03 15:02:42 -08:00

98 lines
4.8 KiB
C++

#ifndef ____workflow_js_h__
#define ____workflow_js_h__
#include "HTTPPage.h"
namespace http {
class __workflow_js : public HTTPPage {
int processCommand(std::string request, core::TCPSession *session, HTTPSession *httpSession, HTTPRequest &httpRequest, std::stringstream &data) {
data << "var mouseDownX;" << std::endl;
data << "var mouseDownY;" << std::endl;
data << "var isMouseDown = false;" << std::endl;
data << "var dragObject;" << std::endl;
data << "var dragHint = \"move\";" << std::endl;
data << "var selected;" << std::endl;
data << "listSource();" << std::endl;
data << "" << std::endl;
data << "function listSource() {" << std::endl;
data << " var connectors = document.getElementsByTagName(\"path\");" << std::endl;
data << " for(var i = 0; connectors[i]; ++i) {" << std::endl;
data << " var source = connectors[i].getAttribute(\"data-source\");" << std::endl;
data << " var sourceElem = source.split(\":\");" << std::endl;
data << " var sourceId = document.getElementById(sourceElem[0]);" << std::endl;
data << " var offset = 0;" << std::endl;
data << " if(sourceElem.length > 1) {" << std::endl;
data << " var options = sourceId.getElementsByTagName(\"div\");" << std::endl;
data << " for(var o = 0; options[o]; ++o) {" << std::endl;
data << " var option = options[o];" << std::endl;
data << " if(sourceElem[1] == options[o].getAttribute(\"data-name\")) {" << std::endl;
data << " offset = option.offsetTop + (parseInt(option.style.height) / 2);" << std::endl;
data << " }" << std::endl;
data << " }" << std::endl;
data << " }" << std::endl;
data << "" << std::endl;
data << " var dest = connectors[i].getAttribute(\"data-dest\");" << std::endl;
data << " var destId = document.getElementById(dest);" << std::endl;
data << " var d = \"M\" + getPos(sourceId, sourceId.offsetWidth, offset) +" << std::endl;
data << " \" L\" + getPos(sourceId, sourceId.offsetWidth + 30, offset) + " << std::endl;
data << " \" L\" + getPos(destId, destId.offsetWidth / 2, -30) + " << std::endl;
data << " \" L\" + getPos(destId, destId.offsetWidth / 2);" << std::endl;
data << " connectors[i].setAttribute(\"d\", d);" << std::endl;
data << "// console.log(d);" << std::endl;
data << " } " << std::endl;
data << "}" << std::endl;
data << "" << std::endl;
data << "function getMouseX(e) {" << std::endl;
data << " return e.clientX;" << std::endl;
data << "}" << std::endl;
data << "" << std::endl;
data << "function getMouseY(e) {" << std::endl;
data << " return e.clientY;" << std::endl;
data << "}" << std::endl;
data << "" << std::endl;
data << "function getPos(item, offsetX = 0, offsetY = 0) {" << std::endl;
data << " var pos = \" \" + (parseInt(item.style.left) + offsetX);" << std::endl;
data << " pos += \" \" + (parseInt(item.style.top) + offsetY);" << std::endl;
data << " return pos; " << std::endl;
data << "}" << std::endl;
data << "" << std::endl;
data << "function mousedown(obj, e) {" << std::endl;
data << " var mouseX = getMouseX(e);" << std::endl;
data << " var mouseY = getMouseY(e);" << std::endl;
data << " mouseDownX = mouseX - obj.offsetLeft;" << std::endl;
data << " mouseDownY = mouseY - obj.offsetTop;" << std::endl;
data << " dragObject = obj;" << std::endl;
data << " selected = obj;" << std::endl;
data << " isMouseDown = true;" << std::endl;
data << "}" << std::endl;
data << "" << std::endl;
data << "function mouseup(e) {" << std::endl;
data << " isMouseDown = false;" << std::endl;
data << " dragObject = null;" << std::endl;
data << "}" << std::endl;
data << "" << std::endl;
data << "function mousemove(e) {" << std::endl;
data << " var mouseX = getMouseX(e);" << std::endl;
data << " var mouseY = getMouseY(e);" << std::endl;
data << " if(isMouseDown) {" << std::endl;
data << " if(dragHint == \"move\") {" << std::endl;
data << " dragObject.style.left = (mouseX - mouseDownX) + \"px\";" << std::endl;
data << " dragObject.style.top = (mouseY - mouseDownY) + \"px\"; " << std::endl;
data << " listSource();" << std::endl;
data << " } " << std::endl;
data << " }" << std::endl;
data << "}" << std::endl;
httpRequest.response.addHeader("Content-Type", "script/javascript");
return 0;
}
};
}
#endif