Continued work...

This commit is contained in:
Brad Arant 2020-03-03 15:02:42 -08:00
parent cc1946d073
commit 77c78bb723
13 changed files with 546 additions and 255 deletions

View File

@ -10,6 +10,8 @@ namespace http {
int HTTPHandler::processCommand(std::string request, core::TCPSession *session, std::stringstream &data) { int HTTPHandler::processCommand(std::string request, core::TCPSession *session, std::stringstream &data) {
coreutils::Log(coreutils::LOG_DEBUG_4) << "DATA[" << request << "]";
coreutils::PString request1(request); coreutils::PString request1(request);
HTTPRequest httpRequest(request1); HTTPRequest httpRequest(request1);

View File

@ -6,14 +6,16 @@
# include "__index.h" # include "__index.h"
# include "__script.h" # include "__script.h"
# include "__editview.h" # include "__editview.h"
# include "__editview_js.h"
# include "__style.h" # include "__style.h"
# include "__setupadmin.h" # include "__setupadmin.h"
# include "__favicon_ico.h" # include "__favicon_ico.h"
# include "__welcome.h" # include "__welcome.h"
# include "__mainmenu.h" # include "__mainmenu.h"
#include "__newview.h"
# include "__configure.h" # include "__configure.h"
# include "__viewlist.h" # include "__viewlist.h"
# include "__workflow.h"
# include "__workflow_js.h"
namespace http { namespace http {
@ -24,14 +26,16 @@ namespace http {
add(index, "/"); add(index, "/");
add(script, "/script"); add(script, "/script");
add(editview, "/editview"); add(editview, "/editview");
add(editview_js, "/__editview_js");
add(style, "/style"); add(style, "/style");
add(setupadmin, "/setupadmin"); add(setupadmin, "/setupadmin");
add(favicon_ico, "/favicon.ico"); add(favicon_ico, "/favicon.ico");
add(welcome, "/welcome"); add(welcome, "/welcome");
add(mainmenu, "/mainmenu"); add(mainmenu, "/mainmenu");
add(newview, "/newview");
add(configure, "/configure"); add(configure, "/configure");
add(viewlist, "/viewlist"); add(viewlist, "/viewlist");
add(workflow, "/workflow");
add(workflow_js, "/__workflow_js");
} }
bool processRequest(HTTPRequest &httpRequest, core::TCPSession *session, HTTPSession *httpSession, std::stringstream &data); bool processRequest(HTTPRequest &httpRequest, core::TCPSession *session, HTTPSession *httpSession, std::stringstream &data);
@ -48,13 +52,15 @@ namespace http {
__script script; __script script;
__style style; __style style;
__editview editview; __editview editview;
__editview_js editview_js;
__setupadmin setupadmin; __setupadmin setupadmin;
__favicon_ico favicon_ico; __favicon_ico favicon_ico;
__welcome welcome; __welcome welcome;
__mainmenu mainmenu; __mainmenu mainmenu;
__newview newview;
__configure configure; __configure configure;
__viewlist viewlist; __viewlist viewlist;
__workflow workflow;
__workflow_js workflow_js;
}; };

Binary file not shown.

View File

@ -0,0 +1,86 @@
JETServer Programmer's Guide
JETServer offers a unique set of tools for rapid application
deployment of complex workflows.
Provides libraries of already created functionality that you can snap
into your website.
Themes and theme management provide huge flexibility in style, feel and
functionality.
Complete work flow pattern design system provides graphical tools to
create complex data flow logic around described data base entities.
\chapter{Work Flow Concepts}
Work Flow within a data system can primarily be described as the
activities required in accessing, maintanining and interacting with
the data base entities and managing complex activities based upon
these interactions.
JETServer Work Flow allows you to combine various Qs (queues) to
perform various activities required in supporting workflow operations.
These Qs are:
1. Action Queue
2. External Queue
3. Decision Queue
4. Wait Queue
5. Process Queue
6. Event Queue
Each Q can have a list of associated reasons for exiting the queue and
these reasons are linked to the next queue in the flow.
Interconnecting these Qs is how work flow operations on data patterns are designed.
Action Queue (AQ)
This Q is the wrapper for the embedded work patterns and is the entry
point to initiate the work flow pattern.
External Queue (XQ)
This Q is used to interface a view on the workflows viewpoint. First
the view is rendered to XHTML and then inserted as the innerHTML on
viewpoint.
Within the placed data is the form for generating a POST request back
to the viewpoint's associated URL to provide the user response back to
the XQ and provide the link to the next queue based upon the resulting
user response from the XQ.
Decision Queue (DQ)
Decision queues are basically process queues but are designed to leave
no residual actions to the data and are considered faster. The
resulting decision is returned as a path to the the next queue.
Wait Queue (WQ)
Wait queues provide a place to `hang' a work flow unit until another
event happens or a timeout occurs.
If an event occurs and a work flow unit is in the wait queue and the
wait queue contains a response handler for the event then the workflow
unit will be forwarded to the linked queue for further work flow
processing.
Process Queue (PQ)
Process queues perform a function that produces a persistent result.
The resulting path can also be determined.
Event Queue (EQ)
Send a unit to an event queue to tell all waiting work flow units in
wait queues that the event has occured and to continue processing to
the the next queue. Only wait queues that have a handler for the event
type will respond.

View File

@ -68,204 +68,7 @@ namespace http {
data << " " << std::endl; data << " " << std::endl;
data << " </div> " << std::endl; data << " </div> " << std::endl;
data << "" << std::endl; data << "" << std::endl;
data << " <script>" << std::endl; data << " <script src=\"/__editview_js\" />" << std::endl;
data << " var mainpage;" << std::endl;
data << " var result;" << std::endl;
data << " var mousedownx;" << std::endl;
data << " var mousedowny;" << std::endl;
data << " var mouseDownWidth;" << std::endl;
data << " var mouseDownHeight;" << std::endl;
data << " var ismousedown = false;" << std::endl;
data << " var dragobject;" << std::endl;
data << " var dragHint = \"move\";" << std::endl;
data << " var data;" << std::endl;
data << " var showGrid = false;" << std::endl;
data << " var snapToGrid = false;" << std::endl;
data << " var gridSize = 10;" << std::endl;
data << " var selected;" << std::endl;
data << " var itemparameters;" << std::endl;
data << "" << std::endl;
data << " mainpage = document.getElementById(\"mainpage\");" << std::endl;
data << " data = document.getElementById(\"data\");" << std::endl;
data << " itemparameters = document.getElementById(\"itemparameters\");" << std::endl;
data << " var gridsize = document.getElementById(\"gridsize\");" << std::endl;
data << " gridsize.value = gridSize;" << std::endl;
data << " drawGrid();" << std::endl;
data << "" << std::endl;
data << " function drawGrid() {" << std::endl;
data << " var grid = document.getElementById(\"grid\");" << std::endl;
data << " var context = grid.getContext(\"2d\");" << std::endl;
data << " if(showGrid == true) {" << std::endl;
data << " context.clearRect(0,0,grid.width,grid.height);" << std::endl;
data << " context.globalAlpha = 0.2;" << std::endl;
data << " context.lineWidth = 0.5; " << std::endl;
data << " for(ix = 0; ix < grid.width; ix += gridSize) {" << std::endl;
data << " context.beginPath();" << std::endl;
data << " context.moveTo(ix, 0);" << std::endl;
data << " context.lineTo(ix, grid.height);" << std::endl;
data << " context.stroke();" << std::endl;
data << " context.beginPath();" << std::endl;
data << " context.moveTo(0, ix);" << std::endl;
data << " context.lineTo(grid.width, ix);" << std::endl;
data << " context.stroke(); " << std::endl;
data << " }" << std::endl;
data << " } else {" << std::endl;
data << " context.clearRect(0,0,grid.width,grid.height);" << std::endl;
data << " }" << std::endl;
data << " }" << std::endl;
data << "" << std::endl;
data << " function setDragHint(hint) {" << std::endl;
data << " dragHint = hint;" << std::endl;
data << " }" << std::endl;
data << " " << std::endl;
data << " function getMouseX(e) {" << std::endl;
data << " return e.clientX - mainpage.offsetLeft - parseFloat(mainpage.style.borderWidth);" << std::endl;
data << " }" << std::endl;
data << " " << std::endl;
data << " function getMouseY(e) {" << std::endl;
data << " return e.clientY - mainpage.offsetTop - parseFloat(mainpage.style.borderWidth);" << 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 << " mouseDownLeft = parseFloat(obj.style.left);" << std::endl;
data << " mouseDownTop = parseFloat(obj.style.top);" << std::endl;
data << " mouseDownWidth = parseFloat(obj.style.width);" << std::endl;
data << " mouseDownHeight = parseFloat(obj.style.height);" << std::endl;
data << " dragobject = obj;" << std::endl;
data << " selected = obj;" << std::endl;
data << " ismousedown = true;" << std::endl;
data << " displayParameters();" << std::endl;
data << " }" << std::endl;
data << " " << std::endl;
data << " function mouseup() {" << std::endl;
data << " ismousedown = false;" << std::endl;
data << " dragobject = null;" << std::endl;
data << " console.log(mainpage.innerHTML);" << 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 << " " << std::endl;
data << " if(dragHint == \"move\") {" << std::endl;
data << " if(snapToGrid == false) {" << std::endl;
data << " dragobject.style.left = (mouseX - mousedownx) + \"px\";" << std::endl;
data << " dragobject.style.top = (mouseY - mousedowny) + \"px\";" << std::endl;
data << " } else {" << std::endl;
data << " dragobject.style.left = (Math.round((mouseX - mousedownx) / gridSize) * gridSize) + \"px\";" << std::endl;
data << " dragobject.style.top = (Math.round((mouseY - mousedowny) / gridSize) * gridSize) + \"px\";" << std::endl;
data << " }" << std::endl;
data << " if((mouseX - mousedownx) < 0)" << std::endl;
data << " dragobject.style.left = \"0px\";" << std::endl;
data << " if((mouseY - mousedowny) < 0)" << std::endl;
data << " dragobject.style.top = \"0px\";" << std::endl;
data << " if((mouseX - mousedownx + parseFloat(dragobject.style.width)) > parseFloat(mainpage.style.width)) " << std::endl;
data << " dragobject.style.left = (mouseX - mousedownx) + \"px\"; " << std::endl;
data << " } else if(dragHint == \"rightbottomresize\") { " << std::endl;
data << " dragobject.style.width = (mouseX - mouseDownLeft) + \"px\";" << std::endl;
data << " dragobject.style.height = (mouseY - mouseDownTop) + \"px\";" << std::endl;
data << " } else if(dragHint == \"rightresize\") { " << std::endl;
data << " if(snapToGrid == false) {" << std::endl;
data << " dragobject.style.width = (mouseX - mouseDownLeft) + \"px\"; " << std::endl;
data << " } else {" << std::endl;
data << " dragobject.style.width = (Math.round((mouseX - mouseDownLeft) / gridSize) * gridSize) + \"px\"; " << std::endl;
data << " }" << std::endl;
data << " } else if(dragHint == \"bottomresize\") { " << std::endl;
data << " if(snapToGrid == false) {" << std::endl;
data << " dragobject.style.height = (mouseY - mouseDownTop) + \"px\";" << std::endl;
data << " } else {" << std::endl;
data << " dragobject.style.height = (Math.round((mouseY - mouseDownTop) / gridSize) * gridSize) + \"px\";" << std::endl;
data << " }" << std::endl;
data << " } else if(dragHint == \"leftresize\") { " << std::endl;
data << " dragobject.style.left = mouseX + \"px\";" << std::endl;
data << " dragobject.style.width = (mouseDownWidth + (mouseDownLeft - mouseX)) + \"px\";" << std::endl;
data << " } else if(dragHint == \"topresize\") { " << std::endl;
data << " dragobject.style.top = mouseY + \"px\";" << std::endl;
data << " dragobject.style.height = (mouseDownHeight + (mouseDownTop - mouseY)) + \"px\";" << std::endl;
data << " }" << std::endl;
data << " " << std::endl;
data << " data.innerHTML = \"<p>\" + dragobject.nodeName + \"<br>\" + " << std::endl;
data << " \"Action: \" + dragHint + \"<br>\" +" << std::endl;
data << " \"MouseLocation: \" + mouseX + \":\" + mouseY + \"<br>\" +" << std::endl;
data << " \"MouseOver Location: \" + (mouseX - dragobject.offsetLeft) + \":\" + (mouseY - dragobject.offsetTop) + \"<br>\" + " << std::endl;
data << " \"Location: \" + dragobject.style.left + \":\" + dragobject.style.top + \"<br>\" + " << std::endl;
data << " \"Size: \" + dragobject.style.width + \":\" + dragobject.style.height + \"<br>\" + " << std::endl;
data << " \"</p>\";" << std::endl;
data << " " << std::endl;
data << "" << std::endl;
data << " } else {" << std::endl;
data << " var mouseabove = document.elementFromPoint(mouseX + mainpage.offsetLeft, mouseY + mainpage.offsetTop);" << std::endl;
data << "" << std::endl;
data << " if((mouseabove.id != \"mainpage\") && (mouseabove.id != \"grid\")) {" << std::endl;
data << " " << std::endl;
data << " data.innerHTML = \"<p>\" + mouseabove.nodeName + \"<br>\" + " << std::endl;
data << " \"Action: \" + dragHint + \"<br>\" +" << std::endl;
data << " \"MouseLocation: \" + mouseX + \":\" + mouseY + \"<br>\" +" << std::endl;
data << " \"MouseOver Location: \" + (mouseX - mouseabove.offsetLeft) + \":\" + (mouseY - mouseabove.offsetTop) + \"<br>\" + " << std::endl;
data << " \"Location: \" + mouseabove.style.left + \":\" + mouseabove.style.top + \"<br>\" + " << std::endl;
data << " \"Size: \" + mouseabove.style.width + \":\" + mouseabove.style.height + \"<br>\" + " << std::endl;
data << " \"</p>\";" << std::endl;
data << " " << std::endl;
data << " if((mouseabove.nodeName == \"DIV\") || " << std::endl;
data << " (mouseabove.nodeName == \"IMG\") || " << std::endl;
data << " (mouseabove.nodeName == \"BUTTON\") ||" << std::endl;
data << " (mouseabove.nodeName == \"INPUT\") ||" << std::endl;
data << " (mouseabove.nodeName == \"SPAN\")) {" << std::endl;
data << " " << std::endl;
data << " if((parseFloat(mouseabove.style.width) <= (mouseX - mouseabove.offsetLeft)) && " << std::endl;
data << " (parseFloat(mouseabove.style.height) <= (mouseY - mouseabove.offsetTop))) {" << std::endl;
data << " mouseabove.style.cursor = \"nwse-resize\";" << std::endl;
data << " dragHint = \"rightbottomresize\"; " << std::endl;
data << " } else if((parseFloat(mouseabove.style.left) <= (mouseX - mouseabove.offsetLeft)) && " << std::endl;
data << " ((parseFloat(mouseabove.style.borderWidth) + 2) >= (mouseY - mouseabove.offsetTop))) {" << std::endl;
data << " mouseabove.style.cursor = \"nesw-resize\";" << std::endl;
data << " dragHint = \"righttopresize\"; " << std::endl;
data << " } else if(((parseFloat(mouseabove.style.borderWidth) + 2) >= (mouseX - mouseabove.offsetLeft)) && " << std::endl;
data << " (parseFloat(mouseabove.style.height) <= (mouseY - mouseabove.offsetTop))) {" << std::endl;
data << " mouseabove.style.cursor = \"nesw-resize\";" << std::endl;
data << " dragHint = \"leftbottomresize\"; " << std::endl;
data << " } else if(parseFloat(mouseabove.style.width) <= (mouseX - mouseabove.offsetLeft)) {" << std::endl;
data << " mouseabove.style.cursor = \"ew-resize\";" << std::endl;
data << " dragHint = \"rightresize\";" << std::endl;
data << " } else if(parseFloat(mouseabove.style.height) <= (mouseY - mouseabove.offsetTop)) {" << std::endl;
data << " mouseabove.style.cursor = \"ns-resize\";" << std::endl;
data << " dragHint = \"bottomresize\";" << std::endl;
data << " } else if((parseFloat(mouseabove.style.borderWidth) + 2) >= (mouseX - mouseabove.offsetLeft)) {" << std::endl;
data << " mouseabove.style.cursor = \"ew-resize\";" << std::endl;
data << " dragHint = \"leftresize\";" << std::endl;
data << " } else if((parseFloat(mouseabove.style.borderWidth) + 2) >= (mouseY - mouseabove.offsetTop)) {" << std::endl;
data << " mouseabove.style.cursor = \"ns-resize\";" << std::endl;
data << " dragHint = \"topresize\";" << std::endl;
data << " } else {" << std::endl;
data << " mouseabove.style.cursor = \"move\";" << std::endl;
data << " dragHint = \"move\";" << std::endl;
data << " }" << std::endl;
data << " } else {" << std::endl;
data << " mouseabove.style.cursor = \"default\";" << std::endl;
data << " }" << std::endl;
data << " } else {" << std::endl;
data << " mouseabove.style.cursor = \"default\";" << std::endl;
data << " dragHint = \"\";" << std::endl;
data << " data.innerHTML = \"<p></p>\";" << std::endl;
data << " }" << std::endl;
data << " }" << std::endl;
data << " displayParameters();" << std::endl;
data << " }" << std::endl;
data << " " << std::endl;
data << " function displayParameters() {" << std::endl;
data << "" << std::endl;
data << " itemparameters.innerHTML = \"<p>\" + selected.nodeName + \": \" + selected.id + \"<br>\" + " << std::endl;
data << " \"Location: \" + selected.style.left + \":\" + selected.style.top + \"<br>\" + " << std::endl;
data << " \"Size: \" + selected.style.width + \":\" + selected.style.height + \"<br>\" + " << std::endl;
data << " \"</p>\";" << std::endl;
data << "" << std::endl;
data << " }" << std::endl;
data << "</script>" << std::endl;
httpRequest.response.addHeader("Content-Type", "script/javascript"); httpRequest.response.addHeader("Content-Type", "script/javascript");

217
__editview_js.h Normal file
View File

@ -0,0 +1,217 @@
#ifndef ____editview_js_h__
#define ____editview_js_h__
#include "HTTPPage.h"
namespace http {
class __editview_js : public HTTPPage {
int processCommand(std::string request, core::TCPSession *session, HTTPSession *httpSession, HTTPRequest &httpRequest, std::stringstream &data) override {
data << " var mainpage;" << std::endl;
data << " var result;" << std::endl;
data << " var mousedownx;" << std::endl;
data << " var mousedowny;" << std::endl;
data << " var mouseDownWidth;" << std::endl;
data << " var mouseDownHeight;" << std::endl;
data << " var ismousedown = false;" << std::endl;
data << " var dragobject;" << std::endl;
data << " var dragHint = \"move\";" << std::endl;
data << " var data;" << std::endl;
data << " var showGrid = false;" << std::endl;
data << " var snapToGrid = false;" << std::endl;
data << " var gridSize = 10;" << std::endl;
data << " var selected;" << std::endl;
data << " var itemparameters;" << std::endl;
data << "" << std::endl;
data << " mainpage = document.getElementById(\"mainpage\");" << std::endl;
data << " data = document.getElementById(\"data\");" << std::endl;
data << " itemparameters = document.getElementById(\"itemparameters\");" << std::endl;
data << " var gridsize = document.getElementById(\"gridsize\");" << std::endl;
data << " gridsize.value = gridSize;" << std::endl;
data << " drawGrid();" << std::endl;
data << "" << std::endl;
data << " function drawGrid() {" << std::endl;
data << " var grid = document.getElementById(\"grid\");" << std::endl;
data << " var context = grid.getContext(\"2d\");" << std::endl;
data << " if(showGrid == true) {" << std::endl;
data << " context.clearRect(0,0,grid.width,grid.height);" << std::endl;
data << " context.globalAlpha = 0.2;" << std::endl;
data << " context.lineWidth = 0.5; " << std::endl;
data << " for(ix = 0; ix < grid.width; ix += gridSize) {" << std::endl;
data << " context.beginPath();" << std::endl;
data << " context.moveTo(ix, 0);" << std::endl;
data << " context.lineTo(ix, grid.height);" << std::endl;
data << " context.stroke();" << std::endl;
data << " context.beginPath();" << std::endl;
data << " context.moveTo(0, ix);" << std::endl;
data << " context.lineTo(grid.width, ix);" << std::endl;
data << " context.stroke(); " << std::endl;
data << " }" << std::endl;
data << " } else {" << std::endl;
data << " context.clearRect(0,0,grid.width,grid.height);" << std::endl;
data << " }" << std::endl;
data << " }" << std::endl;
data << "" << std::endl;
data << " function setDragHint(hint) {" << std::endl;
data << " dragHint = hint;" << std::endl;
data << " }" << std::endl;
data << " " << std::endl;
data << " function getMouseX(e) {" << std::endl;
data << " return e.clientX - mainpage.offsetLeft - parseFloat(mainpage.style.borderWidth);" << std::endl;
data << " }" << std::endl;
data << " " << std::endl;
data << " function getMouseY(e) {" << std::endl;
data << " return e.clientY - mainpage.offsetTop - parseFloat(mainpage.style.borderWidth);" << 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 << " mouseDownLeft = parseFloat(obj.style.left);" << std::endl;
data << " mouseDownTop = parseFloat(obj.style.top);" << std::endl;
data << " mouseDownWidth = parseFloat(obj.style.width);" << std::endl;
data << " mouseDownHeight = parseFloat(obj.style.height);" << std::endl;
data << " dragobject = obj;" << std::endl;
data << " selected = obj;" << std::endl;
data << " ismousedown = true;" << std::endl;
data << " displayParameters();" << std::endl;
data << " }" << std::endl;
data << " " << std::endl;
data << " function mouseup() {" << std::endl;
data << " ismousedown = false;" << std::endl;
data << " dragobject = null;" << std::endl;
data << " console.log(mainpage.innerHTML);" << 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 << " " << std::endl;
data << " if(dragHint == \"move\") {" << std::endl;
data << " if(snapToGrid == false) {" << std::endl;
data << " dragobject.style.left = (mouseX - mousedownx) + \"px\";" << std::endl;
data << " dragobject.style.top = (mouseY - mousedowny) + \"px\";" << std::endl;
data << " } else {" << std::endl;
data << " dragobject.style.left = (Math.round((mouseX - mousedownx) / gridSize) * gridSize) + \"px\";" << std::endl;
data << " dragobject.style.top = (Math.round((mouseY - mousedowny) / gridSize) * gridSize) + \"px\";" << std::endl;
data << " }" << std::endl;
data << " if((mouseX - mousedownx) < 0)" << std::endl;
data << " dragobject.style.left = \"0px\";" << std::endl;
data << " if((mouseY - mousedowny) < 0)" << std::endl;
data << " dragobject.style.top = \"0px\";" << std::endl;
data << " if((mouseX - mousedownx + parseFloat(dragobject.style.width)) > parseFloat(mainpage.style.width)) " << std::endl;
data << " dragobject.style.left = (mouseX - mousedownx) + \"px\"; " << std::endl;
data << " } else if(dragHint == \"rightbottomresize\") { " << std::endl;
data << " dragobject.style.width = (mouseX - mouseDownLeft) + \"px\";" << std::endl;
data << " dragobject.style.height = (mouseY - mouseDownTop) + \"px\";" << std::endl;
data << " } else if(dragHint == \"rightresize\") { " << std::endl;
data << " if(snapToGrid == false) {" << std::endl;
data << " dragobject.style.width = (mouseX - mouseDownLeft) + \"px\"; " << std::endl;
data << " } else {" << std::endl;
data << " dragobject.style.width = (Math.round((mouseX - mouseDownLeft) / gridSize) * gridSize) + \"px\"; " << std::endl;
data << " }" << std::endl;
data << " } else if(dragHint == \"bottomresize\") { " << std::endl;
data << " if(snapToGrid == false) {" << std::endl;
data << " dragobject.style.height = (mouseY - mouseDownTop) + \"px\";" << std::endl;
data << " } else {" << std::endl;
data << " dragobject.style.height = (Math.round((mouseY - mouseDownTop) / gridSize) * gridSize) + \"px\";" << std::endl;
data << " }" << std::endl;
data << " } else if(dragHint == \"leftresize\") { " << std::endl;
data << " dragobject.style.left = mouseX + \"px\";" << std::endl;
data << " dragobject.style.width = (mouseDownWidth + (mouseDownLeft - mouseX)) + \"px\";" << std::endl;
data << " } else if(dragHint == \"topresize\") { " << std::endl;
data << " dragobject.style.top = mouseY + \"px\";" << std::endl;
data << " dragobject.style.height = (mouseDownHeight + (mouseDownTop - mouseY)) + \"px\";" << std::endl;
data << " }" << std::endl;
data << " " << std::endl;
data << " data.innerHTML = \"<p>\" + dragobject.nodeName + \"<br>\" + " << std::endl;
data << " \"Action: \" + dragHint + \"<br>\" +" << std::endl;
data << " \"MouseLocation: \" + mouseX + \":\" + mouseY + \"<br>\" +" << std::endl;
data << " \"MouseOver Location: \" + (mouseX - dragobject.offsetLeft) + \":\" + (mouseY - dragobject.offsetTop) + \"<br>\" + " << std::endl;
data << " \"Location: \" + dragobject.style.left + \":\" + dragobject.style.top + \"<br>\" + " << std::endl;
data << " \"Size: \" + dragobject.style.width + \":\" + dragobject.style.height + \"<br>\" + " << std::endl;
data << " \"</p>\";" << std::endl;
data << " " << std::endl;
data << "" << std::endl;
data << " } else {" << std::endl;
data << " var mouseabove = document.elementFromPoint(mouseX + mainpage.offsetLeft, mouseY + mainpage.offsetTop);" << std::endl;
data << "" << std::endl;
data << " if((mouseabove.id != \"mainpage\") && (mouseabove.id != \"grid\")) {" << std::endl;
data << " " << std::endl;
data << " data.innerHTML = \"<p>\" + mouseabove.nodeName + \"<br>\" + " << std::endl;
data << " \"Action: \" + dragHint + \"<br>\" +" << std::endl;
data << " \"MouseLocation: \" + mouseX + \":\" + mouseY + \"<br>\" +" << std::endl;
data << " \"MouseOver Location: \" + (mouseX - mouseabove.offsetLeft) + \":\" + (mouseY - mouseabove.offsetTop) + \"<br>\" + " << std::endl;
data << " \"Location: \" + mouseabove.style.left + \":\" + mouseabove.style.top + \"<br>\" + " << std::endl;
data << " \"Size: \" + mouseabove.style.width + \":\" + mouseabove.style.height + \"<br>\" + " << std::endl;
data << " \"</p>\";" << std::endl;
data << " " << std::endl;
data << " if((mouseabove.nodeName == \"DIV\") || " << std::endl;
data << " (mouseabove.nodeName == \"IMG\") || " << std::endl;
data << " (mouseabove.nodeName == \"BUTTON\") ||" << std::endl;
data << " (mouseabove.nodeName == \"INPUT\") ||" << std::endl;
data << " (mouseabove.nodeName == \"SPAN\")) {" << std::endl;
data << " " << std::endl;
data << " if((parseFloat(mouseabove.style.width) <= (mouseX - mouseabove.offsetLeft)) && " << std::endl;
data << " (parseFloat(mouseabove.style.height) <= (mouseY - mouseabove.offsetTop))) {" << std::endl;
data << " mouseabove.style.cursor = \"nwse-resize\";" << std::endl;
data << " dragHint = \"rightbottomresize\"; " << std::endl;
data << " } else if((parseFloat(mouseabove.style.left) <= (mouseX - mouseabove.offsetLeft)) && " << std::endl;
data << " ((parseFloat(mouseabove.style.borderWidth) + 2) >= (mouseY - mouseabove.offsetTop))) {" << std::endl;
data << " mouseabove.style.cursor = \"nesw-resize\";" << std::endl;
data << " dragHint = \"righttopresize\"; " << std::endl;
data << " } else if(((parseFloat(mouseabove.style.borderWidth) + 2) >= (mouseX - mouseabove.offsetLeft)) && " << std::endl;
data << " (parseFloat(mouseabove.style.height) <= (mouseY - mouseabove.offsetTop))) {" << std::endl;
data << " mouseabove.style.cursor = \"nesw-resize\";" << std::endl;
data << " dragHint = \"leftbottomresize\"; " << std::endl;
data << " } else if(parseFloat(mouseabove.style.width) <= (mouseX - mouseabove.offsetLeft)) {" << std::endl;
data << " mouseabove.style.cursor = \"ew-resize\";" << std::endl;
data << " dragHint = \"rightresize\";" << std::endl;
data << " } else if(parseFloat(mouseabove.style.height) <= (mouseY - mouseabove.offsetTop)) {" << std::endl;
data << " mouseabove.style.cursor = \"ns-resize\";" << std::endl;
data << " dragHint = \"bottomresize\";" << std::endl;
data << " } else if((parseFloat(mouseabove.style.borderWidth) + 2) >= (mouseX - mouseabove.offsetLeft)) {" << std::endl;
data << " mouseabove.style.cursor = \"ew-resize\";" << std::endl;
data << " dragHint = \"leftresize\";" << std::endl;
data << " } else if((parseFloat(mouseabove.style.borderWidth) + 2) >= (mouseY - mouseabove.offsetTop)) {" << std::endl;
data << " mouseabove.style.cursor = \"ns-resize\";" << std::endl;
data << " dragHint = \"topresize\";" << std::endl;
data << " } else {" << std::endl;
data << " mouseabove.style.cursor = \"move\";" << std::endl;
data << " dragHint = \"move\";" << std::endl;
data << " }" << std::endl;
data << " } else {" << std::endl;
data << " mouseabove.style.cursor = \"default\";" << std::endl;
data << " }" << std::endl;
data << " } else {" << std::endl;
data << " mouseabove.style.cursor = \"default\";" << std::endl;
data << " dragHint = \"\";" << std::endl;
data << " data.innerHTML = \"<p></p>\";" << std::endl;
data << " }" << std::endl;
data << " }" << std::endl;
data << " displayParameters();" << std::endl;
data << " }" << std::endl;
data << " " << std::endl;
data << " function displayParameters() {" << std::endl;
data << "" << std::endl;
data << " itemparameters.innerHTML = \"<p>\" + selected.nodeName + \": \" + selected.id + \"<br>\" + " << std::endl;
data << " \"Location: \" + selected.style.left + \":\" + selected.style.top + \"<br>\" + " << std::endl;
data << " \"Size: \" + selected.style.width + \":\" + selected.style.height + \"<br>\" + " << std::endl;
data << " \"</p>\";" << std::endl;
data << "" << std::endl;
data << " }" << std::endl;
httpRequest.response.addHeader("Content-Type", "script/javascript");
return 0;
}
};
}
#endif

View File

@ -23,17 +23,17 @@ namespace http {
data << " <span>View and Layout Designer</span>" << std::endl; data << " <span>View and Layout Designer</span>" << std::endl;
data << " </div>" << std::endl; data << " </div>" << std::endl;
data << " <div style=\"background: #448; color: #fff; width: 400px; margin: 5px; padding: 5px; cursor: pointer;\"" << std::endl; data << " <div style=\"background: #448; color: #fff; width: 400px; margin: 5px; padding: 5px; cursor: pointer;\"" << std::endl;
data << " onmousedown=\"getPage('/entrypoints','main');\">" << std::endl;
data << " <span>Entry Points</span>" << std::endl;
data << " </div>" << std::endl;
data << " <div style=\"background: #448; color: #fff; width: 400px; margin: 5px; padding: 5px; cursor: pointer;\"" << std::endl;
data << " onmousedown=\"getPage('/viewlist','main');\">" << std::endl; data << " onmousedown=\"getPage('/viewlist','main');\">" << std::endl;
data << " <span>Data Entity Editor</span>" << std::endl; data << " <span>Data Entity Editor</span>" << std::endl;
data << " </div>" << std::endl; data << " </div>" << std::endl;
data << " <div style=\"background: #448; color: #fff; width: 400px; margin: 5px; padding: 5px; cursor: pointer;\"" << std::endl; data << " <div style=\"background: #448; color: #fff; width: 400px; margin: 5px; padding: 5px; cursor: pointer;\"" << std::endl;
data << " onmousedown=\"getPage('/viewlist','main');\">" << std::endl; data << " onmousedown=\"getPage('/workflow','main');\">" << std::endl;
data << " <span>Work Flow Process Management</span>" << std::endl; data << " <span>Work Flow Process Management</span>" << std::endl;
data << " </div>" << std::endl; data << " </div>" << std::endl;
data << " <div style=\"background: #448; color: #fff; width: 400px; margin: 5px; padding: 5px; cursor: pointer;\"" << std::endl;
data << " onmousedown=\"getPage('/viewlist','main');\">" << std::endl;
data << " <span>Storyboard</span>" << std::endl;
data << " </div>" << std::endl;
data << "</div>" << std::endl; data << "</div>" << std::endl;
httpRequest.response.addHeader("Content-Type", "text/html"); httpRequest.response.addHeader("Content-Type", "text/html");

View File

@ -1,25 +0,0 @@
#ifndef ____newview_h__
#define ____newview_h__
#include "HTTPPage.h"
namespace http {
class __newview : public HTTPPage {
int processCommand(std::string request,
core::TCPSession *session,
HTTPSession *httpSession,
HTTPRequest &httpRequest,
std::stringstream &data) override {
httpRequest.response.addHeader("Content-Type", "text/html");
return 0;
}
};
}
#endif

View File

@ -36,9 +36,12 @@ namespace http {
data << "function insertAndExecute(id, text) {" << std::endl; data << "function insertAndExecute(id, text) {" << std::endl;
data << " idresolved = document.getElementById(id);" << std::endl; data << " idresolved = document.getElementById(id);" << std::endl;
data << " idresolved.innerHTML = text;" << std::endl; data << " idresolved.innerHTML = text;" << std::endl;
data << " var script = idresolved.getElementsByTagName(\"script\");" << std::endl; data << " var scriptarr = idresolved.getElementsByTagName(\"script\");" << std::endl;
data << " for(var ix=0;ix<script.length;ix++) {" << std::endl; data << " if(scriptarr.length > 0) {" << std::endl;
data << " eval(script[ix].text);" << std::endl; data << " var script = document.createElement(\"script\");" << std::endl;
data << " script.type = \"text/javascript\";" << std::endl;
data << " script.src = scriptarr[0].src;" << std::endl;
data << " document.getElementsByTagName(\"head\")[0].appendChild(script);" << std::endl;
data << " }" << std::endl; data << " }" << std::endl;
data << "}" << std::endl; data << "}" << std::endl;

View File

@ -19,7 +19,7 @@ namespace http {
data << "<div>" << std::endl; data << "<div>" << std::endl;
data << " <div style=\"background: #484; color: #fff; width: 400px; margin: 5px; padding: 5px; cursor: pointer;\"" << std::endl; data << " <div style=\"background: #484; color: #fff; width: 400px; margin: 5px; padding: 5px; cursor: pointer;\"" << std::endl;
data << " onmousedown=\"getPage('/newview','main');\">" << std::endl; data << " onmousedown=\"getPage('/editview','main');\">" << std::endl;
data << " <span>Create new view</span>" << std::endl; data << " <span>Create new view</span>" << std::endl;
data << " </div>" << std::endl; data << " </div>" << std::endl;
@ -31,7 +31,7 @@ namespace http {
} }
data << " <div style=\"background: #448; color: #fff; width: 400px; margin: 5px; padding: 5px; cursor: pointer;\"" << std::endl; data << " <div style=\"background: #448; color: #fff; width: 400px; margin: 5px; padding: 5px; cursor: pointer;\"" << std::endl;
data << " onmousedown=\"getPage('/newview','main');\">" << std::endl; data << " onmousedown=\"getPage('/editview','main');\">" << std::endl;
data << " <span>" << directory.get().getName() << "</span>" << std::endl; data << " <span>" << directory.get().getName() << "</span>" << std::endl;
data << " </div>" << std::endl; data << " </div>" << std::endl;
directory.next(); directory.next();

102
__workflow.h Normal file
View File

@ -0,0 +1,102 @@
#ifndef ____workflow_h__
#define ____workflow_h__
#include "HTTPPage.h"
namespace http {
class __workflow : public HTTPPage {
int processCommand(std::string request, core::TCPSession *session, HTTPSession *httpSession, HTTPRequest &httpRequest, std::stringstream &data) {
data << "<svg style=\"width: 100%; height: 100%; position: absolute; top: 0px; left: 0px;\">" << std::endl;
data << " <path id=\"connector0\" data-source=\"start:bottom\" data-dest=\"formpage1\" d=\"\" stroke=\"#FFFFFF\" stroke-width=\"1\" fill=\"none\" />" << std::endl;
data << " <path id=\"connector1\" data-source=\"formpage1:next\" data-dest=\"formpage2\" d=\"\" stroke=\"#FFFFFF\" stroke-width=\"1\" fill=\"none\" />" << std::endl;
data << " <path id=\"connector2\" data-source=\"formpage2:next\" data-dest=\"formpage3\" d=\"\" stroke=\"#FFFFFF\" stroke-width=\"1\" fill=\"none\" />" << std::endl;
data << " <path id=\"connector3\" data-source=\"formpage2:previous\" data-dest=\"formpage1\" d=\"\" stroke=\"#FFFFFF\" stroke-width=\"1\" fill=\"none\" />" << std::endl;
data << " <path id=\"connector4\" data-source=\"formpage3:previous\" data-dest=\"formpage2\" d=\"\" stroke=\"#FFFFFF\" stroke-width=\"1\" fill=\"none\" />" << std::endl;
data << " <path id=\"connector5\" data-source=\"formpage3:process\" data-dest=\"processform\" d=\"\" stroke=\"#FFFFFF\" stroke-width=\"1\" fill=\"none\" />" << std::endl;
data << "</svg>" << std::endl;
data << "<div style=\"position: absolute; width: 200px; top: 20px; left: 50px; background: #C04040; border: 1px solid white;\" id=\"start\"" << std::endl;
data << " onmousedown=\"mousedown(this, event); return true;\" " << std::endl;
data << " onmouseup=\"mouseup(event); return true;\" " << std::endl;
data << " onmousemove=\"mousemove(event); return true;\">" << std::endl;
data << "[AQ] START" << std::endl;
data << "</div>" << std::endl;
data << "" << std::endl;
data << "<div style=\"position: absolute; top: 100px; left: 150px; background: #E0E0E0; border: 1px solid white; color: #000000;\" " << std::endl;
data << " id=\"formpage1\"" << std::endl;
data << " onmousedown=\"mousedown(this, event); return true;\" " << std::endl;
data << " onmouseup=\"mouseup(event); return true;\" " << std::endl;
data << " onmousemove=\"mousemove(event); return true;\">" << std::endl;
data << "" << std::endl;
data << " <div style=\"width: 200px; height: 20px; padding-left: 3px; background: #4040C0; color: #FFFFFF;\">" << std::endl;
data << " <span>[XQ] FORM Page 1</span> " << std::endl;
data << " </div>" << std::endl;
data << " <div data-name=\"cancel\" style=\"width: 200px; height: 20px; margin-top: 2px; padding-left: 3px ;background: #C0C0FF;\">" << std::endl;
data << " <span>Cancel</span> " << std::endl;
data << " </div>" << std::endl;
data << " <div data-name=\"next\" style=\"width: 200px; height: 20px; margin-top: 2px; padding-left: 3px; background: #C0C0FF;\">" << std::endl;
data << " <span>Next</span> " << std::endl;
data << " </div>" << std::endl;
data << "</div>" << std::endl;
data << "" << std::endl;
data << "<div style=\"position: absolute; top: 300px; left: 250px; background: #E0E0E0; border: 1px solid white;\" " << std::endl;
data << " id=\"formpage2\" " << std::endl;
data << " onmousedown=\"mousedown(this, event); return true;\" " << std::endl;
data << " onmouseup=\"mouseup(event); return true;\" " << std::endl;
data << " onmousemove=\"mousemove(event); return true;\">" << std::endl;
data << " <div style=\"width: 200px; height: 20px; padding-left: 3px; background: #4040C0; color: #FFFFFF;\">" << std::endl;
data << " <span>[XQ] FORM Page 2</span> " << std::endl;
data << " </div>" << std::endl;
data << " <div data-name=\"previous\" style=\"width: 200px; height: 20px; margin-top: 2px; padding-left: 3px ;background: #C0C0FF;\">" << std::endl;
data << " <span>Previous</span> " << std::endl;
data << " </div>" << std::endl;
data << " <div data-name=\"next\" style=\"width: 200px; height: 20px; margin-top: 2px; padding-left: 3px; background: #C0C0FF;\">" << std::endl;
data << " <span>Next</span> " << std::endl;
data << " </div>" << std::endl;
data << "</div>" << std::endl;
data << "" << std::endl;
data << "<div style=\"position: absolute; top: 400px; left: 200px; background: #E0E0E0; border: 1px solid white;\" " << std::endl;
data << " id=\"formpage3\" " << std::endl;
data << " onmousedown=\"mousedown(this, event); return true;\" " << std::endl;
data << " onmouseup=\"mouseup(event); return true;\" " << std::endl;
data << " onmousemove=\"mousemove(event); return true;\">" << std::endl;
data << " <div style=\"width: 200px; height: 20px; padding-left: 3px; background: #4040C0; color: #FFFFFF;\">" << std::endl;
data << " <span>[XQ] FORM Page 3</span> " << std::endl;
data << " </div>" << std::endl;
data << " <div data-name=\"previous\" style=\"width: 200px; height: 20px; margin-top: 2px; padding-left: 3px ;background: #C0C0FF;\">" << std::endl;
data << " <span>Previous</span> " << std::endl;
data << " </div>" << std::endl;
data << " <div data-name=\"process\" style=\"width: 200px; height: 20px; margin-top: 2px; padding-left: 3px; background: #C0C0FF;\">" << std::endl;
data << " <span>Process Form</span> " << std::endl;
data << " </div>" << std::endl;
data << "</div>" << std::endl;
data << "" << std::endl;
data << "<div style=\"position: absolute; top: 500px; left: 200px; background: #E0E0E0; border: 1px solid white;\" " << std::endl;
data << " id=\"processform\" " << std::endl;
data << " onmousedown=\"mousedown(this, event); return true;\" " << std::endl;
data << " onmouseup=\"mouseup(event); return true;\" " << std::endl;
data << " onmousemove=\"mousemove(event); return true;\">" << std::endl;
data << " <div style=\"width: 200px; height: 20px; padding-left: 3px; background: #40C040; color: #FFFFFF;\">" << std::endl;
data << " <span>[PQ] Process Form</span> " << std::endl;
data << " </div>" << std::endl;
data << " <div data-name=\"previous\" style=\"width: 200px; height: 20px; margin-top: 2px; padding-left: 3px ;background: #C0C0FF;\">" << std::endl;
data << " <span>Previous</span> " << std::endl;
data << " </div>" << std::endl;
data << " <div data-name=\"process\" style=\"width: 200px; height: 20px; margin-top: 2px; padding-left: 3px; background: #C0C0FF;\">" << std::endl;
data << " <span>Process Form</span> " << std::endl;
data << " </div>" << std::endl;
data << "</div>" << std::endl;
data << "" << std::endl;
data << "<script src=\"/__workflow_js\" />" << std::endl;
httpRequest.response.addHeader("Content-Type", "script/javascript");
return 0;
}
};
}
#endif

97
__workflow_js.h Normal file
View File

@ -0,0 +1,97 @@
#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