From e8fa4b7ae6a9e743c42e07f2905320098797c4b3 Mon Sep 17 00:00:00 2001 From: Tretter Date: Tue, 7 Feb 2017 20:13:14 +0000 Subject: [PATCH] initial checkin from subversion --- WebThinkTC.html | 40 +++ addJavaScriptHash.sh | 11 + config.php.example | 8 + consyntools.jar | Bin 0 -> 19887 bytes dataTools.js | 83 ++++++ deploy/deploy.sh | 29 +++ dragNDrop.js | 96 +++++++ drawLine.js | 81 ++++++ fileSelectorControl.js | 90 +++++++ iconControl.js | 57 ++++ icons/arrowDown.png | Bin 0 -> 866 bytes icons/arrowDownExclam.png | Bin 0 -> 956 bytes icons/arrowLeft.png | Bin 0 -> 874 bytes icons/arrowRight.png | Bin 0 -> 998 bytes icons/arrowUp.png | Bin 0 -> 588 bytes icons/arrowUpExclam.png | Bin 0 -> 716 bytes icons/bulb.png | Bin 0 -> 536 bytes icons/clock.png | Bin 0 -> 1187 bytes icons/cross.png | Bin 0 -> 1445 bytes icons/exclamationMark.png | Bin 0 -> 1061 bytes icons/heart.png | Bin 0 -> 1113 bytes icons/phone.png | Bin 0 -> 750 bytes icons/questionSign.png | Bin 0 -> 885 bytes icons/rose.png | Bin 0 -> 353 bytes icons/smileyBad.png | Bin 0 -> 1049 bytes icons/smileyGood.png | Bin 0 -> 1055 bytes icons/smileyOh.png | Bin 0 -> 1071 bytes icons/smileysBase.xcf | Bin 0 -> 3527 bytes icons/thumbDown.png | Bin 0 -> 323 bytes icons/thumbUp.png | Bin 0 -> 333 bytes icons/tick.png | Bin 0 -> 1263 bytes impressum.html | 16 ++ login.css | 11 + login.js | 146 +++++++++++ login.php | 117 +++++++++ mainPage.php | 67 +++++ menu.css | 115 ++++++++ menuBar.css | 67 +++++ menuBarControl.js | 100 +++++++ menuControl.js | 75 ++++++ miscMain.css | 51 ++++ node.css | 54 ++++ node.js | 348 +++++++++++++++++++++++++ nodeRel.css | 14 + nodeRel.js | 163 ++++++++++++ obfuscate.sh | 5 + observerHandling.js | 36 +++ pix/WebthinkLogo.png | Bin 0 -> 4553 bytes pix/WebthinkLogoMedium.png | Bin 0 -> 6176 bytes pix/ginamail.jpg | Bin 0 -> 2642 bytes pix/icnArrowDown.png | Bin 0 -> 866 bytes pix/icnArrowUp.png | Bin 0 -> 588 bytes pix/icnBusyWait.png | Bin 0 -> 1187 bytes pix/icnMoveBranch.png | Bin 0 -> 1163 bytes pix/icnNewBranch.png | Bin 0 -> 703 bytes pix/icnStar.png | Bin 0 -> 1340 bytes pix/icnWaste.png | Bin 0 -> 885 bytes profile.html | 53 ++++ requestTarget.php | 493 +++++++++++++++++++++++++++++++++++ sql/createDB.sql | 11 + sql/exportSchema.sh | 5 + sql/prepareIcon.sql | 24 ++ sql/preparePKey.sql | 2 + textControl.js | 288 ++++++++++++++++++++ todoList.txt | 16 ++ toolbar.js | 178 +++++++++++++ tutorial/exampleMap1.png | Bin 0 -> 11135 bytes tutorial/freeRelation1.png | Bin 0 -> 294 bytes tutorial/iconMenu1.png | Bin 0 -> 10163 bytes tutorial/iconMenu2.png | Bin 0 -> 1149 bytes tutorial/icons1.png | Bin 0 -> 2686 bytes tutorial/index.html | 27 ++ tutorial/node1.png | Bin 0 -> 716 bytes tutorial/node2.png | Bin 0 -> 1201 bytes tutorial/parentRelation1.png | Bin 0 -> 299 bytes tutorial/relationMenu1.png | Bin 0 -> 1117 bytes tutorial/toolBar1.png | Bin 0 -> 3358 bytes uiTools.js | 20 ++ webRequest.js | 243 +++++++++++++++++ workspaceResize.js | 78 ++++++ 80 files changed, 3318 insertions(+) create mode 100644 WebThinkTC.html create mode 100644 addJavaScriptHash.sh create mode 100644 config.php.example create mode 100644 consyntools.jar create mode 100644 dataTools.js create mode 100644 deploy/deploy.sh create mode 100644 dragNDrop.js create mode 100644 drawLine.js create mode 100644 fileSelectorControl.js create mode 100644 iconControl.js create mode 100644 icons/arrowDown.png create mode 100644 icons/arrowDownExclam.png create mode 100644 icons/arrowLeft.png create mode 100644 icons/arrowRight.png create mode 100644 icons/arrowUp.png create mode 100644 icons/arrowUpExclam.png create mode 100644 icons/bulb.png create mode 100644 icons/clock.png create mode 100644 icons/cross.png create mode 100644 icons/exclamationMark.png create mode 100644 icons/heart.png create mode 100644 icons/phone.png create mode 100644 icons/questionSign.png create mode 100644 icons/rose.png create mode 100644 icons/smileyBad.png create mode 100644 icons/smileyGood.png create mode 100644 icons/smileyOh.png create mode 100644 icons/smileysBase.xcf create mode 100644 icons/thumbDown.png create mode 100644 icons/thumbUp.png create mode 100644 icons/tick.png create mode 100644 impressum.html create mode 100644 login.css create mode 100644 login.js create mode 100644 login.php create mode 100644 mainPage.php create mode 100644 menu.css create mode 100644 menuBar.css create mode 100644 menuBarControl.js create mode 100644 menuControl.js create mode 100644 miscMain.css create mode 100644 node.css create mode 100644 node.js create mode 100644 nodeRel.css create mode 100644 nodeRel.js create mode 100644 obfuscate.sh create mode 100644 observerHandling.js create mode 100644 pix/WebthinkLogo.png create mode 100644 pix/WebthinkLogoMedium.png create mode 100644 pix/ginamail.jpg create mode 100644 pix/icnArrowDown.png create mode 100644 pix/icnArrowUp.png create mode 100644 pix/icnBusyWait.png create mode 100644 pix/icnMoveBranch.png create mode 100644 pix/icnNewBranch.png create mode 100644 pix/icnStar.png create mode 100644 pix/icnWaste.png create mode 100644 profile.html create mode 100644 requestTarget.php create mode 100644 sql/createDB.sql create mode 100644 sql/exportSchema.sh create mode 100644 sql/prepareIcon.sql create mode 100644 sql/preparePKey.sql create mode 100644 textControl.js create mode 100644 todoList.txt create mode 100644 toolbar.js create mode 100644 tutorial/exampleMap1.png create mode 100644 tutorial/freeRelation1.png create mode 100644 tutorial/iconMenu1.png create mode 100644 tutorial/iconMenu2.png create mode 100644 tutorial/icons1.png create mode 100644 tutorial/index.html create mode 100644 tutorial/node1.png create mode 100644 tutorial/node2.png create mode 100644 tutorial/parentRelation1.png create mode 100644 tutorial/relationMenu1.png create mode 100644 tutorial/toolBar1.png create mode 100644 uiTools.js create mode 100644 webRequest.js create mode 100644 workspaceResize.js diff --git a/WebThinkTC.html b/WebThinkTC.html new file mode 100644 index 0000000..ffe6af3 --- /dev/null +++ b/WebThinkTC.html @@ -0,0 +1,40 @@ + +webthink.net disclaimer + +
+Version 0.1 - Last Update 2008-04-07
+
+Terms and Conditions for the use of www.webthink.net 
+====================================================
+
+Terminology:
+============
+service  - refers to content and functionality available at www.webthink.net
+provider - refers to the service provider who is running the www.webthink.net website
+User     - refers to a consumer of the service.
+
+Terms and Condition:
+====================
+- By using webthink.net you accept these terms and conditions
+
+- All Material, including code, pictures, design is the property of the provider. Copying, modification or deletion without the written permission of the provider is not allowed
+
+- At no time can the provider be held reliable for any damage caused by the service or the unavailablity of it - Use at your own risk!
+
+- The provider might change any part of the service at anytime without prior notice
+
+- The provider doesn't guarantee any data being secure, available or well-performing at any point in time
+
+- The provider doesn't guarantee the service being error-free or usable
+
+- The provider reserves the right to shut the service down, change any aspect of the service or to stop providing the service without any notice given to the user
+
+- The user accepts to receive e-mails from the service provider in case information are sent including but not limited to
+	- Notifications about changes in the Terms and conditions
+	- Notifications of planned outages
+	- Informations on updates to the service
+
+- These terms and conditions can be changed at anytime without notice, it is up to the user to check for changes.
+
+ + diff --git a/addJavaScriptHash.sh b/addJavaScriptHash.sh new file mode 100644 index 0000000..dc62bd7 --- /dev/null +++ b/addJavaScriptHash.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# Script adds a MD5-Hash as a get-parameter to all javascript-sourced-files in order to get around +# delivery of old content from caches. + +md5sum *.js | while read l; +do md5=$(echo $l|cut -d " " -f 1) + filename=$(echo $l|cut -d " " -f 2) + sed -e "s/src=\"${filename}\"/src=\"${filename}?md5=${md5}\"/g" $1 > tmp.$$ + mv tmp.$$ $1 +done diff --git a/config.php.example b/config.php.example new file mode 100644 index 0000000..e829f46 --- /dev/null +++ b/config.php.example @@ -0,0 +1,8 @@ + diff --git a/consyntools.jar b/consyntools.jar new file mode 100644 index 0000000000000000000000000000000000000000..130f118bd8ac3a85412f10a50e1c701a5101940d GIT binary patch literal 19887 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 literal 0 HcmV?d00001 diff --git a/dataTools.js b/dataTools.js new file mode 100644 index 0000000..7fe8f7d --- /dev/null +++ b/dataTools.js @@ -0,0 +1,83 @@ +var dataTools=new dataTools(); + +// Add an extends - function to the objects +// so that we have proper inheritance +Object.prototype.extends = function (oSuper) { + for (sProperty in oSuper) { + this[sProperty] = oSuper[sProperty]; + } +} + +function dataTools(){ + var m_pkey=0; + this.getNewPKey=getNewPKey; + this.setPKey=setPKey; + this.urlArgs=new urlArgs(); + this.getCookie=getCookie; + this.setCookie=setCookie; + this.imageDom=imageDom; + function getNewPKey(){ + return(m_pkey++); + } + function setPKey(inPKey){ + m_pkey=inPKey; + } + + function urlArgs(){ + var m_allPairs=window.location.search.substring(1).split("&"); + this.getValueByKey=getValueByKey; + function getValueByKey(key){ + for (var i=0;i m_diffY) { + drawHorizontalLine(); + } else { + drawVerticalLine(); + } + + function drawHorizontalLine(){ + var i; + for (i=toX;i<=fromX;i++){ + pX=i; + if (toY < fromY) { + pY=toY+((i-toX)*(m_diffY/m_diffX)); + } else { + pY=toY-((i-toX)*(m_diffY/m_diffX)); + } + drawPoint(pX,pY,style); + } + for (i=fromX;i<=toX;i++){ + pX=i; + if (toY < fromY) { + pY=fromY-((i-fromX)*(m_diffY/m_diffX)); + } else { + pY=fromY+((i-fromX)*(m_diffY/m_diffX)); + } + drawPoint(pX,pY,style); + } + } + + function drawVerticalLine(){ + var i; + + for (i=toY;i<=fromY;i++){ + pY=i; + if (toX < fromX) { + pX=toX+((i-toY)*(m_diffX/m_diffY)); + } else { + pX=toX-((i-toY)*(m_diffX/m_diffY)); + } + drawPoint(pX,pY,style); + } + for (i=fromY;i<=toY;i++){ + pY=i; + if (toX < fromX) { + pX=fromX-((i-fromY)*(m_diffX/m_diffY)); + } else { + pX=fromX+((i-fromY)*(m_diffX/m_diffY)); + } + drawPoint(pX,pY,style); + } + } + function drawPoint(x,y,style){ + if ((pointCnt++%3)==0) { // performance, don't draw all points. + var point=document.createElement("div"); + point.setAttribute("class",style); + point.style.left=x+"px"; + point.style.top=y+"px"; + + pointsContainer.appendChild(point); + } + } +} + diff --git a/fileSelectorControl.js b/fileSelectorControl.js new file mode 100644 index 0000000..1d28293 --- /dev/null +++ b/fileSelectorControl.js @@ -0,0 +1,90 @@ +function fileSelectorControl(fileData) { + var m_displayDom=document.createElement("div"); + m_displayDom.setAttribute("class","fileSelector"); + var m_selectedFile=null ; + var m_fileList=null; + + return(construct()); + + function construct() { + update(fileData); + addActionButtons(); + m_displayDom.isVisible; + m_displayDom.show=show; + m_displayDom.hide=hide; + m_displayDom.update=update; + + return(m_displayDom); + } + function update(fileData){ + var fileList=document.createElement("ul"); + fileList.setAttribute("class","fileList"); + var allFiles=fileData.childNodes; + for (var i=0;iPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFW3 z3^5TlMap6T000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0008LNklu+Cm_Ly3m~q!JUE#(naaI zi!KEh-F2ZtEs8Eg5sPgptzQKfA`zqJL!87!Ci9h5YsS;#It&E?)lxrd7KL^ zVp+7mr@QO)pI`Uhn7;hmsC^eKH9V6)o6BCZhY$X1zdP~37K@DqQPVQ1v%aY2!GHlC zJ@nC9xOu&>U?ZwkvKfq&v`$g06?idPqf~0rzpry?C_uS-2TeBsiMRn6Trvt!ss97O zwW|eybsq(dx!VCaeloYHpSvh@s&*BCv%ft5C}#&)cJ1j{GTIGvq>>v(s*T$g z;KsF=i$aaH_Q~Ag4-Zu-6vhWGU%8-vK6AU>1mDQ)P8ZrLb70@mb(`|Xnw{CG`S0!| zeS15(e{YgMejk5UsjRJN!}VzEK0-C=7_JL$B`fy}oK{!DymL!w$`6L@57FBHRNpa!) z2yMP59(Oo*X@>v^z?xM%!e>K&OD6FHTEz*&DxUKxN?btCz@e?8#3Q{Tf&gP<^_kq$ zu|9eCEwe^p0anCMQJ%hqR!KZ3hwtrvdraQWvw}$Uz4F=MTok~%CP$msOT96OF=-H& zW-v~~$)i;gElE%jj3m)2{XcL%6u|o4mx#C^hA=E+Z4KAyLU3sWL%7a*eD5osj~|+^ zeqI!%eCw*!I3|mThoz3AR$HwT7`0M7XXCsbwtP>+uq4xVz>4yyH-~X_hqbznBdZW` z?9;KnmYXOo*G&?GTD7f=y4ws`@guvHpnnpHoDOYyVs!F&@q*A`kV$;M*41muz|`=>k=oq4Hx{7u)2UfNmH+?%07*qoM6N<$g3)1%{Qv*} literal 0 HcmV?d00001 diff --git a/icons/arrowDownExclam.png b/icons/arrowDownExclam.png new file mode 100644 index 0000000000000000000000000000000000000000..64fa0bd22844b59618c4f78780353a26f3136ac2 GIT binary patch literal 956 zcmV;t14I0YP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFWA z1|=BrcNqKt000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0009QNkl1v7&b@PIGLxC6O{Q@sNgFhYOcbFdm}vb;q^pz`qC!CzT?plD;jrE6W)8qAxqCj~zXy-+JRuU9Eceg&IwZDw`0} zKN^r{=1Kyk1gC#kzV9HiS$$n;mZ9%LM;d_@xFlvTGg!U^SFb^_*s*130dhNm zUBN9{41p;EsH{RD9^4Z2MNl)aKR{y&iI6}v2EGTj?QaSCHRP6|wXQ5@6^)0$sW!kc zpeM7`^ebwuuLHez*@cYFTe)_RAZ`;F;ZO~PAC&8^TeYL?S9~Eh||HZzcowT<{xR$Tc z5>w1vvB^D>Xn>C7o79~%D7gd6>?0LK7f|&N$vL0XQ@zZ@NS(1!aDrKau)Ha7 zvn?fDKd&PygOo8s?Xc!ou$51vT4R2Cf$7-=9M8tIp4}9<(f)tq%Y=@|9!w*P5EdF2 zQ}$@3QW&yRSZ3~?zdv8STsROk_ e<(2h~eg6QX4nq$b3x#h00000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFWA z1{^LhNdVsf000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0008TNkls90ChAuA@|RI z)Q_2&(V&ca1ygB#w6d%_0Hhm*ioZSHzZ>3;#xMZFdH~+4oxT{6!<4+(+YsW;)7xz7wGrS@A0T5I%e za+DCH0DNi~di7FSR4a1d$La9&)TD-G2_=MPCPtyCslCHQW{T{=ZKCs+tQG-`0@wgx z<4;g8E-$_sE$$h8u|$?daNU?F6avIsOy$QN&Sh;q_F5XXFyy5rNB3$xq7*CZ<%QD$TmYEtgnAgnzjkxE7_4eW*%c?o&W#<07*qoM6N<$f(%Q9 AzyJUM literal 0 HcmV?d00001 diff --git a/icons/arrowRight.png b/icons/arrowRight.png new file mode 100644 index 0000000000000000000000000000000000000000..ba77fb0aed1833d6a9aab0baf36943fa9652c784 GIT binary patch literal 998 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 B8)yIk literal 0 HcmV?d00001 diff --git a/icons/cross.png b/icons/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..e48686e5544ae90c295658c7f6cad17be1bcff6f GIT binary patch literal 1445 zcmV;W1zP%vP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iO4* z3Lz>D2~_6*000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000F5NklBV(=0{XEKApIuBEN%=0B-R zXO6bSX}Z)_=4FM7h~@<|FNsINz_ z6p6@x=KnPIl~L>|{l<1dj!iT_4LWPa60)=2r}Daoq1mxan%1}bZ8wZQ)Dtl z?wc}YV#As>2Op%Qd?z9&j>#VGO8rA%E;x@syHC?XvUTfC*|_nvl$OqynwlgL(EuE= z3mE7;f|QgnG%d}tOsNU``}Nz=keOL$?Amor%F8dcOEZS(XaE(UcEf?=npPV+emog? zj>N=GT)8rls;YGH`?c2lJE<(v6oG*1Xm58Sk{{RFIy^BmGh8({C)3&aY&cN>m;vIU ze7-&`Uc8~f~C91LFH(b;*=wQgMut*sW6az=>QEh3st*UcjZb%`=+3diDX zi|-lkVO#oFdhB%$g5*_WAkt0t_Lqm>;m_`VE z@<9s{3iVi@m;qtfhnWdaG%@g7GdZWi8B;g_AbSpc=?Axf2#6#kcx3L}D%rN}3%PM4 zPejy(^M0hOt0(l4B2r8M^Z|PgOkM*>Wp%=1f3t z-yW8nl-CV>1l76|(4dp_5IA!hyfFjDzX*}3@Ic^vxl#vf4CBoAEiHFDR0}kbZiC&0k_2JtFggp~8V_ml5M~8W2u?P@sXI#DJZ~6fnW50s?OtzQ z!JmH))*Bn=N4VY3yX$JVlbTw#UWGSxJ52&pGUUX;`u>n=16wSZ;@~$g{7?-?+YIAs zrO4$*!#Gl>>nDHQx$}3ecW))ZU=A+VW=cz^t&o7D+i4WUd7*e2_+Ntr1+500?124M zaQJ9w%=v-$lolU**mW*9@%JMVa&Ea`Cq3j~G>^zj4H z`HJj17-7JOC(z56xQGKS5+ZZqg~>3l7*+{H325pGsP*4J4haO!QOXpSjP6`3^qK{2 z$%oN2m^~*4fGN`>89gq7Xr)vLA^{@+K7fA!y{KqbO>NL@00000NkvXXu0mjf@?4eJ literal 0 HcmV?d00001 diff --git a/icons/exclamationMark.png b/icons/exclamationMark.png new file mode 100644 index 0000000000000000000000000000000000000000..e08c8ca6687fe1b88c42bb280cc0be242f896769 GIT binary patch literal 1061 zcmV+=1ls$FP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFW8 z2Oc3g3*B%4000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000AkNkl8lO)<5JF)8te z5Bks;QxjuitVV4gOcb;aO}!ALLu^Y8VA~A0fg&<6%nUFLbcVw@=iff6;WEYjy7yYy zYwwi>SxQDm>tt{!A|h=qEiH%$|GO;wzS+j6Clhy82c6Sj%}c1SOMbiZjzlMGvte^q zYPiTliS~}_`H6`l|An71$H%=0k8$KsrHqY_s?8gRR>B%9HD(J6tbxv}`v)D{xAZ+EL}9~ecv4$9-&w!t^w-OVrU0nVM@%*5m_Od~GQ zSm|w(p37lRYSAj6wyly1!zjLGS%zKUcX8bSMMYalrynFdJgx#|)2rU})Tz&yn@chO zcH`4CuHLn%FdxAv^okgFD77xPuu#bN30{w4!P2;HT)MA4%g%ex04SxFZhGw4VP@Vs z5lCvcct#w*N9zg)R8&NpS}ROb5l<+}*4y~T+9>5;MH=ZB?bFX7?@@$ zxyi39HlV7?F~*zm_J4HpPb(2~*}E^Fp5HBAd95V7d;r^tp~Xh)40iE>n_c^#d9S(S z;`_*4!Kqm&iZZA<|dFL%F6@Y2b(h4iJIEiYP#b;U}@7yAeDxE@M#{wIgOB4>do f4nB8$#nb%_-^RPl<>=p`00000NkvXXu0mjf1ODp| literal 0 HcmV?d00001 diff --git a/icons/heart.png b/icons/heart.png new file mode 100644 index 0000000000000000000000000000000000000000..caacda874921dced8836551540f44569132c934d GIT binary patch literal 1113 zcmV-f1g86mP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFWA z2NeUQmW|W^000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000BDNklyZ_Sj z=gZR5lOc{Xl*=*BDM8Rt)o(@QH2`l4_J0ANd?fN@E=>ohRxLr`SXc<`z(8!{*haT* z`6XlKu5~(kU}?#h`S}b(Lot<#0$Jwfe5R(xRaHeqyck}219tQ~*9TYtN~J8usHxR# zHi~R@agmpUpmQaPGU<&Q8B-_-g@Vx4C3HF#V{+`=88APu0Nw~3=z&3d*WZ8PoKUHF z7U=EiNo^Qri=L+|%gbId3?2DASSxJWl%rJgId#gheY>ctnoBT}g0>+|AW_h@znQC4 zY`=5zLmZolR?Eb&4B!LL zI|q%1rP(wzn;uI`7T;Hr1g57~b1LxePtbJ}WEsLTgl%vUBvpvgyP`9|4G?t>vRMZh z>UE*fP@*VCwZie^OClm>1}yB6#PegOhiaLy2hhAn&C!1ZaUIH);Da!^+=4qAyw)KG2wEmEnfHWKF?aXcr(!-pQ&{rhnQ z4s3&0hv9`C(9A-Y2fYo@0q}Ytm-oEt2H#(?#>`2rc4)1JT|4+4=JvpzCHT{aom(M@ z!PwOln2LxSHs(?o$6xvF_J`}Wm|br;0l)5rzH2aTV6YEtH~1E;fSy$C9anwpVO?t< zMohvVPlL=t<~i7%2b*6_!^y+&`lAZmdlZ?0tGl6+zPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFWA z1`RU+mQNM{000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0006>Nkln&9LTM zc=MxJ{F1e8ig6bcCz7G43{QB1`JGNlrfN<4|hs1%Fj_xAX? zv;Mk&-H_`r-m=wMW2g)RFRM?;#VSk2W@hWYPePNch=ow)1XsvON+%lMz{6?Tbi1YEpAi zDQhHty$;Rh(4=8+3R;iEFMHnLU87b$pO;<7k&*ZyvbH874>x4Q?*BH;JLLP?b?@}) z>Cj-IyI-|!?5!>OzAw*2j2q;_J^aGuWpw=c`FZ(}N}YW-&30X>o@gy%St5=j;<|&u z2a%PP==e%0zH~b3n`Nm?Jg$sh4=ihd90YK6H8^;9I5b%3NQ^1f`mB_^=yn}U6K*C# g>sxIMMk=)a0$BcBUdFET7ytkO07*qoM6N<$g4CZ*BLDyZ literal 0 HcmV?d00001 diff --git a/icons/questionSign.png b/icons/questionSign.png new file mode 100644 index 0000000000000000000000000000000000000000..c5f47595ddc7d2dd6ec7ae6dbab044ced32cd726 GIT binary patch literal 885 zcmV-*1B(2KP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFW8 z2PF|BU;^X-000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0008eNkl9(U6o#L3@BFlLow--WwoFC}rKCWJ1d;fIwT;xqg!r>4F@{M93khB5)`c!` z;eu$4u83jNg)tgdMwVzdM4B2jwFywHQ(!D$OPfxa&L8*Q@34W5ftj{E%k$;DIq!MT zCp17$oH$4j93q?Tqo-$uOlClK?OLP>^0!r zjz5dV1UzrTm2r7u+V4G|e`D*7QDtAm>b%L#&KuHC$;XK&wLN~+r1 zY`fewGZT9;9#7KOw~?{295CF}zJZ?|C{;i!uzV4wzcyy+q-uJ~n7{wJbH@;kLb)74 z#MT=(LcMSy)^O5OFt;1n4EH+0zX&-CA}cUHVa(m`FbueS*`l>o34%Cbi1hZ}YZ}xf zY&Z+%Gz0_iP7TI?ho^UdzsVT8JUwmjeVZ#+piq!i1qCn(^r;VsWBy!ps8Tn|{lRo4Z7|B9nLn@U> zY~3nRk-E&zhSun)yQVt@xMo?-H>%Hfs19s)-K4a&sTGe`n3%m zlz9byI0$*d@HKq@(gRU_q7~@*^Y(gsA8F~!_V$;%Jnw^{T|`e*G>B z3kf`L%ew6YZykk`uSO!7x5Lou*t4fZF83L(8^M@w<@oWHMxyrtih~nJ{X$yq00000 LNkvXXu0mjf%B+_P literal 0 HcmV?d00001 diff --git a/icons/rose.png b/icons/rose.png new file mode 100644 index 0000000000000000000000000000000000000000..2ddeb3f8b7756eecaad5e9b6c354faa4d087dbd1 GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RY7>k44ofy`glX(f`uqAoByDx`7I;J!Gca%qgD@k*tT_@uLG}_)Usv|)Jo4-&mhV{|TY*B7C9V-A&iT2y zsd*&~&PAz-C8;S2<(VZJ3hti10pX2&;y^`vJY5_^EKaYTv{A6xfX8+JiU_r(+-eI> zyWJ@~?)Gvu`TF7)K zWx@1#Pln(}n*t&awu$)$_%(Dd=-G5RLcT~>gYn3zKQCU%+Ps@AnsztXC-(H=O_z&# z?sM)rHg(mRExQ8crmDTTW&cWZ?yhg!Todmts+@jFA|c}2|69}7MmK1MFzK+Re*bd) rqd|V@lxb&zLSNnWo_bP0l+XkK*Fc5C literal 0 HcmV?d00001 diff --git a/icons/smileyBad.png b/icons/smileyBad.png new file mode 100644 index 0000000000000000000000000000000000000000..5047d67992ba167e74a9154b2a8b05da835f799e GIT binary patch literal 1049 zcmV+!1m^pRP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFW8 z2ns5TE0mA`000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000AYNklK_3YMI%L_)vscK@yTd*h>mBBt6BH^)e4ahW6H@ z1VKb3#S}#L5IGSBI??zLL_z)`CeT5t2hlV$HAcs|_wLn$XD*5vzSM%v*_?Cu@$GM| zZ^M63y4{D#$&qYeVBz{0^A~_M;0qvJhUx*B{}C+uR$AM^F*E0uXjRUniQ%6(SCx`1j4FLq1YUcLo-@?`c+qtSJ5rBc6d-@d@;=oKI` zJiLsdp?gYj;NZdE*|X;tAh2c2D%P!gummsOBt19AoP?uC?WK0RwI-$MWzr?a$1gH9 zHOuY?*P zHg8@`S62kYh7C)BtK}pBq)os!mB+u_(-SL=Mzl&LD8^uU9+CQiUZA^dN-X^g9gnZK zW$t~YDZQCTfRr@TY^nl65|Z3qlCIt`Ix6Qic2r-tL_o7tYoT-eqEN+Mx^~T}Ruhr| zZT#3Y9Jzv)&%n}(M)}3r*;GpjHJgcSyeWO0#2-LE`13j5S3_U6(OXk+;wKng z0}n4O!_W!H_Z=vt55ae~+w%5TZs|BQH(K&14b3xMmy)n&yOFxl5wKm8Fme?hTZGh! z?Dm@yb?g|Y?Iiv4_Y$wXNXnO+ib8~-@*k5~A+st{7dBnRM$X``-;W;XMOylb^uc>K zLA{rOKcC>oQ*RJrM70{BR>NWxA%MFJf+R!AFsl-Ot0?Zg#LVcb-Szqpw`SjaDJDN< z#Y{h+g+PCvQ?J#CSq52#r3CK6%w;A*$S}*z#(6 T(rbh>00000NkvXXu0mjf%PrfA literal 0 HcmV?d00001 diff --git a/icons/smileyGood.png b/icons/smileyGood.png new file mode 100644 index 0000000000000000000000000000000000000000..7c421db2c56874982f82f3ea8b913c397d4e775d GIT binary patch literal 1055 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 Ra1PMT44$rjF6*2UngB<_azy|D literal 0 HcmV?d00001 diff --git a/icons/tick.png b/icons/tick.png new file mode 100644 index 0000000000000000000000000000000000000000..56570acc7dfa90afc34027b61bd5cb1dcc2c4478 GIT binary patch literal 1263 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFW8 z2oo{`N2T5X000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000C^NklF`TaQe8wW(W9l#4fXM9JTJH$|ozff6?%nuUQ_J%6QP$mVUa=e%6hY5+MWt$Il#ldsa$JDGi}3JiR8=A5FXUX?b({t5Hd~g-n?EC`cENM=^2=9xQWs~e2o&LYF`dk# z<2oJDz|iLaM4W@JLx=KPn;TnPbCwk+l!~A}1$}E8nO_>Qeh29PH*`cclYRTqMz7I6 z*%--w)FE7I`uY1P{T{>tv#?$RZqIbvwoeEIu9N1+Apyp2;P8(Wx!w-wkUwbIE$~pYGvl^LhN=ER|ldLPAg~g zhjUgdD4WtsP3oe3g`GM_yfaMT=zJbOAP|v>V*0JaRj)j_?IcGWEz&!X$8@htO#K0G z9l{%A#j^K_hTQDfU6_|q;;b>4_1fe|vU>gY{*xB$zXg!r3Uo0uw&a~1sR6hm%`N@XmYD|9ulc)Z8V+R96Z=yOxZA=S0CM;G{MENyCNXSdQw0#N~9@u#> z`tZuTn5dg}zBV)A2+OT`8%w9n&z<`a%UUv&yn@!==JqO2-3b6SjoF$#W-zVtrzWSw zeln81_h!ARr#l`c)pZwC*b5C&;Y`M&ebQV|D>QSiD(97z{`J(A^&OE&Wb*PUtJb+z zu-9B9%L3GoajgkP`7g}r`o=`%c*W;6TXnV zEEB8^p5RoVJx;H`!zmYCotly^@+Q87UT2X3)MUR9;%tIwxPE^Xs$yVTk%Mz+_lDk> zF#D5(7%y!_3AJg`-;@Z-gwzQG8qfuzUejs5$_>6-C2Q8ykdGJ}8a%BHlfs5r9~b*; zg<`AJa@|{Gexy?XGz&yuk~pdgzj{MtW~o#yDaZU@P=JO(L?V%RJ!6t;I1jVsL zo(`Qv1;R@=`>;E7ba%$7SZIP+?Dnk_9Q%EzOc1kGm-r>Un$VmM5@nJX$|N&J;v3id z*tp)u;)O3GGYXJckyyuedQ&}Gj4Q(z1aTh{XaV~EoirRVfp1`x%dwzgBzuI8A$=}U zBz_=pXTpPJMvgUofFL-k?R$QG@d2sntfDD#jo(8plo{N_uH^hEi*n$Jr%M1xPape# Z{|CTCxd)HY98v%P002ovPDHLkV1n>YPpJR^ literal 0 HcmV?d00001 diff --git a/impressum.html b/impressum.html new file mode 100644 index 0000000..96e3fc4 --- /dev/null +++ b/impressum.html @@ -0,0 +1,16 @@ + + + + IMPRESSUM + + +IMPRESSUM:
+Regina Tretter
+31 Cole Cres
+Liberty Grove
+NSW 2138
+Australia
+
+ + + diff --git a/login.css b/login.css new file mode 100644 index 0000000..37cd7dc --- /dev/null +++ b/login.css @@ -0,0 +1,11 @@ +div#signUpAdvice { + width:200px; + font-weight:bold; + font-size:12px; + background:#eeeeee; + border:1px solid #000000; +} +th { + text-align:center; + background:#cccccc; +} diff --git a/login.js b/login.js new file mode 100644 index 0000000..ebbe8dc --- /dev/null +++ b/login.js @@ -0,0 +1,146 @@ +function onClickLogin(){ + var mail=document.getElementById('mail').value; + var password=document.getElementById('password').value; + var isAutoLogin=document.getElementById('isAutoLogin').checked; + var isLoggedIn=loginUser(mail,password,isAutoLogin); + if (isLoggedIn) { + dataTools.setCookie("mailaddress",mail); + document.location="mainPage.php"; + } else { + hideAllPanes(); + document.getElementById("defaultLogin").style.display='block'; + document.getElementById("loginFailed").style.display='block'; + } +} + +function onClickRegister(){ + document.getElementById("loginFailed").style.display='none'; + + var mail=document.getElementById('RegisterMail').value; + var password=document.getElementById('RegisterPassword').value; + var repeatPassword=document.getElementById('RegisterPasswordRepeat').value; + var tcAgree=document.getElementById('TcAgree').checked; + + if (!tcAgree) { + alert("You have to agree to the Terms and Conditions!"); + return(1); + } + + if (password != repeatPassword) { + alert("The Passwords don't match!"); + return(2); + } + + if (optinUser(mail,password)) { + hideAllPanes(); + document.getElementById("optinSuccess").style.display='block'; + document.getElementById("defaultLogin").style.display='block'; + dataTools.setCookie("mailaddress",mail); + } +} +function onClickChangePassword(){ + hideAllPanes(); + document.getElementById("btnChangePassword").style.display='none'; + document.getElementById("defaultLogin").style.display='block'; + document.getElementById("overridePassword").style.display='block'; +} +function onClickMailPassword(){ + var mail=document.getElementById('mail').value; + + if (result=mailPassword(mail)) { + document.getElementById("loginFailed").style.display='none'; + document.getElementById("confirmMailPassword").style.display='block'; + } + +} +function OptinConfirm(){ + if ("confirmOptin"==dataTools.urlArgs.getValueByKey("action")) { + var token=dataTools.urlArgs.getValueByKey("token"); + if (token.length != 32) { + alert("Your URL is incomplete!\nPlease paste in the complete URL to confirm your mail-address."); + } else { + if (confirmOptin(token)) { + return(true); + } + } + } + return(false); +} +function PasswordOverride(){ + if ("overridePassword"==dataTools.urlArgs.getValueByKey("action")) { + var token=dataTools.urlArgs.getValueByKey("token"); + if (token.length != 32) { + alert("Your URL is incomplete!\nPlease make sure you copied the full URL!"); + } else { + document.getElementById('mail').value=""; + return(true); + } + } + return(false); +} +function updatePassword(){ + var newPass=document.getElementById('newPassword').value; + var mail=document.getElementById('mail').value; + var oldPass=document.getElementById('password').value; + var token=dataTools.urlArgs.getValueByKey("token"); + + if (changePassword(mail,newPass,oldPass,token)){ + hideAllPanes(); + document.getElementById("defaultLogin").style.display='block'; + } + +} +function hideAllPanes(){ + document.getElementById("defaultLogin").style.display='none'; + document.getElementById("autoLoginProgress").style.display='none'; + document.getElementById("overridePassword").style.display='none'; + document.getElementById("optinSuccess").style.display='none'; + document.getElementById("confirmMailPassword").style.display='none'; + document.getElementById("confirmOptinSuccess").style.display='none'; + document.getElementById("loginFailed").style.display='none'; + document.getElementById("btnChangePassword").style.display='inline'; +} + +function fireOnEnter(evt, frm ) { + var keyCode = null; + + if( evt.which ) { + keyCode = evt.which; + } else if( evt.keyCode ) { + keyCode = evt.keyCode; + } + if( 13 == keyCode ) { + onClickLogin(); + return(false); + } + return(true); +} + +function init(){ + hideAllPanes(); + if (OptinConfirm()) { + document.getElementById("confirmOptinSuccess").style.display='block'; + } + if (dataTools.getCookie("autoLoginMail")) { + hideAllPanes(); + document.getElementById("autoLoginProgress").style.display='block'; + if (tokenLoginUser()){ + document.location="mainPage.php"; + } else { + hideAllPanes(); + document.getElementById("defaultLogin").style.display='block'; + document.getElementById("loginFailed").style.display='block'; + dataTools.setCookie("autoLoginMail","",-1); + dataTools.setCookie("autoLoginToken","",-1); + } + } else { + document.getElementById('mail').value=dataTools.getCookie("mailaddress"); + document.getElementById('mail').focus(); + document.getElementById('password').onkeydown=fireOnEnter; + if (PasswordOverride()) { + document.getElementById("overridePassword").style.display='block'; + } else { + document.getElementById("defaultLogin").style.display='block'; + } + } +} diff --git a/login.php b/login.php new file mode 100644 index 0000000..9c24be5 --- /dev/null +++ b/login.php @@ -0,0 +1,117 @@ + + + + WebThink Login + + + + + + + + + + +
+
+
- L O G I N -
+
At this stage only Firefox version 2 and 3 is supported! +
+
+
+THIS SITE IS CURRENTLY IN AN EARLY ALPHA STADIUM + YOU MIGHT SIGN UP AND PLAY AROUND HERE HOWEVER DATA-SECURITY + CANNOT BE GAURANTEED AT THIS TIME.

+ ALL INFORMATION YOU CAPTURE MIGHT BE LOST FOREVER!!!
+
+
+ If you want to have a look around without registering then you can log in with Email demo and Password demo. +
+
+ + + + + + + + + + +quote($_SERVER['REMOTE_ADDR']) . ", " . $dh->quote($_SERVER['HTTP_REFERER']) .")"; + $dh->exec($query); + $dh->close(); +} catch (Exception $e) { +} +?> diff --git a/mainPage.php b/mainPage.php new file mode 100644 index 0000000..bc42c4c --- /dev/null +++ b/mainPage.php @@ -0,0 +1,67 @@ + + + + + WebThink.net + + + + + + + + +
WebThink.net
+
+
+
+
.
+ + + + + + + + + + + + + + + + + + + + + diff --git a/menu.css b/menu.css new file mode 100644 index 0000000..4905b52 --- /dev/null +++ b/menu.css @@ -0,0 +1,115 @@ +div.menuBarMenu { + position:absolute; + background:#AB934B; + border:1px #000000 solid; + z-index:100; +} +div.contextMenu { + position:absolute; + background:#FFFFFF; + border:1px #000000 solid; + z-index:100; + cursor:default; +} +div.contextMenuItem { + font-weight:bold; + border:1px #000000 solid; + font-size:14px; + font-family: Arial, Helvetica, sans-serif; + position:inherit; + text-align:left; + white-space:nowrap; + width:100%; + height:100%; + background:#eeeeee; + color:#000000; + cursor:pointer; +} +div.ContextMenuItem:hover { + background: #37add4; +} +div.nodeIconMenuItem { + font-weight:bold; + font-size:14px; + font-family: Arial, Helvetica, sans-serif; + position:inherit; + text-align:left; + white-space:nowrap; + width:100%; + height:100%; + background:#eeeeee; + color:#000000; + cursor:pointer; +} +div.nodeIconMenuItem:hover { + background: #37add4; +} +div.nodeContextMenu { + border:1px #000000 solid; + position:absolute; + background:#FFFFFF; + border:1px #000000 solid; + z-index:100; + cursor:default; +} +div.nodeContextMenuItem { + font-weight:bold; + font-size:14px; + font-family: Arial, Helvetica, sans-serif; + border:1px #000000 solid; + position:inherit; + text-align:left; + white-space:nowrap; + width:54px; + background:#eeeeee; + color:#000000; + cursor:pointer; +} +div.nodeContextMenuItem:hover { + background: #37add4; +} +div.menuBarRootItem { + font-weight:bold; + font-size:14px; + font-family: Arial, Helvetica, sans-serif; + border:1px #000000 solid; + position:inherit; + text-align:left; + white-space:nowrap; + width:55px; + background:#eeeeee; + color:#000000; + cursor:pointer; +} +div.menuBarRootItem:hover { + background: #37add4; +} +div.menuBarSubItem { + font-weight:bold; + font-size:14px; + font-family: Arial, Helvetica, sans-serif; + border:1px #000000 solid; + position:inherit; + text-align:left; + white-space:nowrap; + width:150px; + background:#eeeeee; + color:#000000; + cursor:pointer; +} +div.menuBarSubItem:hover { + background: #37add4; +} +div.contextMenuItemRed { + font-weight:bold; + font-size:14px; + font-family: Arial, Helvetica, sans-serif; + border:1px #000000 solid; + position:inherit; + background:#FF0000; + color:#000000; + cursor:pointer; +} +div.contextMenuItemRed:hover { + background: #37add4; +} diff --git a/menuBar.css b/menuBar.css new file mode 100644 index 0000000..a451aaf --- /dev/null +++ b/menuBar.css @@ -0,0 +1,67 @@ +div.menuBar { + -moz-border-radius-bottomright:20px; + position:fixed; + top:0px; + left:150px; + width:280px; + height:50px; + background:#AB934B; + z-index:100; +} +div.logoContainer { + position:fixed; + top:0; + left:0; + height:50px; + width:150; + background:#AB934B; + color:#60A3CC; + z-index:100; + font-style:italic; + font-family:arial; + font-weight:bold; + font-size:22px; + text-align:left; +} +img#icnBusyWait { + position:absolute; + left:30; + top:28; + z-index:101; +} +span.userName { + position:fixed; + top:0; + left:450; +} + +/* File-Selector Control */ +div.fileSelector{ + position:fixed; + top:50px; + left:0px; + background:#AB934B; +} +div.btnContainer { + background:#AB934B; + z-index:100; +} +ul.fileList { + background:#AB934B; + color:#cccccc; + z-index:100; + max-height:300px; + min-width:100px; + overflow:auto; + cursor:pointer; +} +li.selected { + color:#080808; + background:#F7D56D; +} +li.unselected { + color:#F7F7F7; +} +li:hover { + color:#0000FF; +} diff --git a/menuBarControl.js b/menuBarControl.js new file mode 100644 index 0000000..ff6e58a --- /dev/null +++ b/menuBarControl.js @@ -0,0 +1,100 @@ +function menuBarControl() { + var m_displayDom=document.createElement("div"); + m_displayDom.setAttribute("class","menuBar"); + m_displayDom.setAttribute("id","menuBar"); + var m_fsControl=new fileSelectorControl(getFileList()); + var m_fileName=new textControl("FILENAME",true); + var m_userName=new textControl("USER",true,true); + + return(construct()); + + function construct() { + m_fileName.setDisplayMode(); + m_displayDom.appendChild(m_fileName); + m_userName.setDisplayMode(); + m_userName.setAttribute('id','userName'); + m_userName.setAttribute('class','userName'); + m_userName.setText(getUserInfo("name")); + var profileLink=document.createElement("span"); + profileLink.setAttribute("class","link"); + profileLink.appendChild(document.createTextNode("[Profile]")); + profileLink.onclick=function(){ window.open("profile.html"); } + m_userName.appendChild(document.createTextNode(" ")); + m_userName.appendChild(profileLink); + m_displayDom.appendChild(m_userName); + + var menuItems = new Array(); + menuItems[menuItems.length]=new textMenuItem("Files",onFilesClick,"menuBarRootItem"); + menuItems[menuItems.length]=new textMenuItem("Save",onSaveClick,"menuBarRootItem"); + menuItems[menuItems.length]=new textMenuItem("More",onMoreClick,"menuBarRootItem"); + menuItems[menuItems.length]=new textMenuItem("Log Out",logOutUser,"menuBarRootItem"); + + m_displayDom.menu=new menuControl(menuItems,0); + m_displayDom.menu.setAttribute("class","menuBarMenu"); + + m_displayDom.appendChild(m_displayDom.menu); + + m_fsControl.hide(); + m_displayDom.appendChild(m_fsControl); + document.addSubscriber(m_fsControl.hide,"clicked"); + + m_displayDom.setFileDescription=setFileDescription; + m_displayDom.show=show; + m_displayDom.hide=hide; + + return(m_displayDom); + function onMoreClick(){ + if (!this.menu){ + var menuItems = new Array(); + menuItems[menuItems.length]=new textMenuItem("New Map/Clear",onNewClick,"menuBarSubItem"); + menuItems[menuItems.length]=new textMenuItem("Save Copy As",onSaveAsClick,"menuBarSubItem"); + menuItems[menuItems.length]=new textMenuItem("Add Rootnode",onNewRootNodeClick,"menuBarSubItem"); + menuItems[menuItems.length]=new textMenuItem("Reposition Nodes",autoRepositionNodes,"menuBarSubItem"); + + this.menu= new menuControl(menuItems,1); + this.menu.setAttribute("class","menuBarMenu"); + this.appendChild(this.menu); + document.addSubscriber(this.menu.hide,"clicked"); + } else { + this.menu.toggleVisible(); + } + } + } + + function onNewRootNodeClick(){ + rootNode[rootNode.length]=new node(dataTools.getNewPKey(),"(enter text)"); + } + + function onNewClick() { + g_filePKey=null; + setFileDescription("FILENAME"); + + deleteAllRootNodes(); + rootNode[0]=new node(dataTools.getNewPKey(),"(enter text)"); + } + function onSaveClick() { + saveMap(m_fileName.getText()); + m_fsControl.update(getFileList()); + } + function onSaveAsClick() { + g_filePKey=null; + saveMap(m_fileName.getText()); + m_fsControl.update(getFileList()); + } + function onFilesClick() { + if (m_fsControl.isVisible) { + m_fsControl.hide(); + } else { + m_fsControl.show(); + } + } + function setFileDescription(description) { + m_fileName.setText(description); + } + function hide() { + this.style.display="none"; + } + function show() { + this.style.display="block"; + } +} diff --git a/menuControl.js b/menuControl.js new file mode 100644 index 0000000..a8eea28 --- /dev/null +++ b/menuControl.js @@ -0,0 +1,75 @@ +function menuControl(menuItems,colCount) { + var m_domElement=document.createElement("div"); + m_domElement.setAttribute("class","contextMenu"); + var m_menuItems=menuItems; + var m_colCount=colCount?colCount:0; + + return(construct()); + + function construct() { + m_domElement.isVisible=true; + m_domElement.show=show; + m_domElement.hide=hide; + m_domElement.toggleVisible=toggleVisible; + + var btnTbl=document.createElement("table"); + if (0==m_colCount) { + var tblRow=document.createElement("tr"); + btnTbl.appendChild(tblRow); + } + for(var i=0;i= 1) { + return(construct()); + } else { + this.fromXML=fromXML; + return(this); + } + + // properties + function getPKey() { return(m_PKey); } + function getNodeRelations() { return(m_nodeRelations); } + + // methods + function construct() { + // the basic node + m_displayDom.setAttribute("id","mmNode_" + m_PKey); + m_displayDom.setAttribute("class","node"); + m_displayDom.extends(new Publisher()); + dragNDrop.activateForObject(m_displayDom); + + m_contextMenu=addContextMenu(); + m_displayDom.appendChild(m_contextMenu); + + exportFunctions(); + + // add a toolbar + if (!m_toolbar) { + m_toolbar=new toolbar(m_displayDom); + m_displayDom.appendChild(m_toolbar); + m_toolbar.hide(); + } + + if (!m_textControl){ m_textControl=new textControl(nodeText); } + m_displayDom.appendChild(m_textControl); + m_textControl.addSubscriber(notifyTextUpdate,"changeMode"); + + if (!m_iconControl) { + m_iconControl=new iconControl(); + } + //m_displayDom.appendChild(document.createElement("br")); + m_displayDom.appendChild(m_iconControl); + + if (m_isCollapsed) {collapse();} + + m_displayDom.onmouseup=mouseUpHandler; + m_displayDom.onmouseover=mouseOverHandler; + m_displayDom.onmouseout=mouseOutHandler; + + document.getElementById('nodes').appendChild(m_displayDom); + + m_textControl.focus(); + return(m_displayDom); + } + function addContextMenu(){ + var contextMenu; + var mi=new Array(); + for (var i=0;i=0;i--) { + if (!m_nodeRelations[i].isMain()) { + var nodeRel=m_nodeRelations[i]; + deleteNodeRelation(nodeRel); + nodeRel.erase(); + } + } + for (var i=m_nodeRelations.length-1;i>=0;i--) { + // recursively delete childs following the Main-Links + if (m_nodeRelations[i].getParentNode()==m_displayDom) { + m_nodeRelations[i].getChildNode().erase(); + + } + } + // delete the relation to the parent + for (var i=0;i < m_nodeRelations.length;i++) { + if (m_nodeRelations[i].getChildNode()==m_displayDom){ + m_nodeRelations[i].erase(); + } + } + removeFromRootNodes(); + destroy(); + } + function isRootNode(){ + for (var i=0;i < rootNode.length;i++) { + if (m_displayDom==rootNode[i]) { + return(true); + } + } + return(false); + } + function removeFromRootNodes(){ + // remove current node from the rootnodes + for (var i=0;i < rootNode.length;i++) { + if (m_displayDom==rootNode[i]) { + rootNode.splice(i,1); + } + } + } + function destroy(){ + m_displayDom.parentNode.removeChild(m_displayDom); + } + + function collapse(){ + m_isCollapsed=true; + if (!isLeafNode()) { m_displayDom.setAttribute("class","collapsedNode"); } + for (var i=0;i < m_nodeRelations.length;i++) { + if ((m_nodeRelations[i].isMain()) + && (m_nodeRelations[i].getParentNode()==m_displayDom)){ + m_nodeRelations[i].getChildNode().collapse(); + m_nodeRelations[i].getChildNode().hide(); + } + } + } + + function hide(){ + m_displayDom.style.display="none"; + for (var i=0;i < m_nodeRelations.length;i++) { + m_nodeRelations[i].hide(); + } + } + + function show(){ + m_displayDom.style.display="block"; + for (var i=0;i < m_nodeRelations.length;i++) { + m_nodeRelations[i].show(); + } + redrawNodeRelations(); + } + + function addNodeRelation(newNodeRel) { + if (!hasNodeRelation(newNodeRel)) { + m_nodeRelations[m_nodeRelations.length]=newNodeRel; + if ((newNodeRel.getChildNode) && (newNodeRel.getChildNode()==m_displayDom) && (newNodeRel.isMain())) { + removeFromRootNodes(); + } + } + } + function deleteNodeRelation(nodeRel) { + for (var i=0;i= 1) { + return(construct()); + } else { + this.fromXML=fromXML; + return(this); + } + + function construct() { + m_displayDom.setAttribute("id","mmNodeRel_" + m_PKey); + m_displayDom.appendChild(createPointsContainer()); + m_styleClass=(m_relationType=="main")?"defaultPoint":"freePoint"; + + // exported functions + m_displayDom.debugOut=debugOut; + m_displayDom.getPKey=getPKey; + m_displayDom.getParentNode=getParentNode; + m_displayDom.setParentNode=setParentNode; + m_displayDom.getChildNode=getChildNode; + m_displayDom.setChildNode=setChildNode; + m_displayDom.redraw=redraw; + m_displayDom.erase=erase; + m_displayDom.show=show; + m_displayDom.hide=hide; + m_displayDom.isMain=isMain; + + m_displayDom.toXML=toXML; + m_displayDom.fromXML=fromXML; + + document.getElementById("nodeRels").appendChild(m_displayDom); + + return(m_displayDom); + } + function show(){ + m_displayDom.style.display="block"; + } + function hide(){ + m_displayDom.style.display="none"; + } + function createPointsContainer(){ + m_pointsContainer=document.createElement("div"); + m_pointsContainer.setAttribute("id","mmPointsContainer_" + m_PKey); + m_pointsContainer.onclick=onPointsContainerClick; + // m_pointsContainer.oncontextmenu=onPointsContainerRightClick; + return(m_pointsContainer); + } + function onPointsContainerClick(event){ + if (m_contextMenu==null) { + var menuItems = new Array(); + menuItems[0]=new menuItem(document.createTextNode("Delete Relation"),erase); + m_contextMenu=new menuControl(menuItems,1); + m_pointsContainer.appendChild(m_contextMenu); + document.addSubscriber(m_contextMenu.hide,"clicked"); + + } else { + m_contextMenu.toggleVisible(); + } + m_contextMenu.style.top=(event.clientY + window.scrollY) + "px"; + m_contextMenu.style.left=(event.clientX + window.scrollX) + "px"; + return(false); + } + function debugOut() { + var output=("\nPKey: _"+ m_PKey + "_\np/c PKeys:_" + m_parentNode.getPKey() + "/"+ m_childNode.getPKey() +"_ (" + m_relationType + ")" ); + return(output); + } + function redraw() { + var parentEle=getParentNode(); + var childEle=getChildNode(); + + var parentX=parentEle.offsetLeft + (parentEle.offsetWidth/2); + var parentY=parentEle.offsetTop + (parentEle.offsetHeight/2); + + var childX=childEle.offsetLeft + (childEle.offsetWidth/2); + var childY=childEle.offsetTop + (childEle.offsetHeight/2); + + // performance: only redraw the line if the corrdinates changed. and both nodes are visible + if ( ((m_parentX!=parentX) || (m_parentY!=parentY) || (m_childX!=childX) || (m_childY!=childY)) + && (childEle.style.display != "none") && (parentEle.style.display != "none")) { + + eraseLine(); + drawLine(parentX,parentY,childX,childY,m_styleClass,m_pointsContainer); + m_parentX=parentX; + m_parentY=parentY; + m_childX=childX; + m_childY=childY; + } + } + function eraseLine() { + m_displayDom.removeChild(m_pointsContainer); + m_pointsContainer=createPointsContainer(); + m_displayDom.appendChild(m_pointsContainer); + } + function erase() { + if (isMain()) { + // new rootnode by deleting main relation. + rootNode[rootNode.length]=getChildNode(); + } + + getChildNode().deleteNodeRelation(m_displayDom); + getParentNode().deleteNodeRelation(m_displayDom); + + m_displayDom.parentNode.removeChild(m_displayDom); + } + function toXML(){ + var xmlEle=document.createElement('NODEREL'); + xmlEle.setAttribute("pkey",m_PKey); + xmlEle.setAttribute("parentnodepkey",m_parentNode.getPKey()); + xmlEle.setAttribute("childnodepkey",m_childNode.getPKey()); + xmlEle.setAttribute("relationtype",m_relationType); + // including child nodes if this is the main relation + if (isMain()) { + xmlEle.appendChild(m_childNode.toXML()); + } + return(xmlEle); + } + function fromXML(inXML){ + m_PKey=inXML.getAttribute("pkey"); + m_relationType=inXML.getAttribute("relationtype"); + if (m_relationType == "") { m_relationType="main"; } + m_displayDom.setAttribute("id","mmNodeRel_" + m_PKey); + + var parentNodePKey=inXML.getAttribute("parentnodepkey"); + var childNodePKey=inXML.getAttribute("childnodepkey"); + m_parentNode=document.getElementById("mmNode_" + parentNodePKey); + + if (inXML.childNodes.length > 0){ + // Main-Relation + m_childNode=new node().fromXML(inXML.firstChild); + } else { + // free links don't create nodes + m_childNode=document.getElementById("mmNode_" + childNodePKey); + if (m_childNode==null) { alert("Error: Assertion failed,\ncan't backlink NodePKey _ " + childNodePKey + "_"); } + } + m_childNode.addNodeRelation(m_displayDom); + m_parentNode.addNodeRelation(m_displayDom); + + return(construct()); + } +} + diff --git a/obfuscate.sh b/obfuscate.sh new file mode 100644 index 0000000..66c6d76 --- /dev/null +++ b/obfuscate.sh @@ -0,0 +1,5 @@ +set -e +set -x +ls *.js | while read i; +do java -jar consyntools.jar Obfuscator "${i}" "${i}" +done diff --git a/observerHandling.js b/observerHandling.js new file mode 100644 index 0000000..8b41b3c --- /dev/null +++ b/observerHandling.js @@ -0,0 +1,36 @@ +function Publisher() { + var m_subscribers=new Array(); + + this.addSubscriber=addSubscriber; + this.removeSubscriber=removeSubscriber; + this.notifySubscribers=notifySubscribers; + + function addSubscriber(subscriber,eventType){ + for(var i=0;iy(2{_K|lnhNhF~+g+QdY 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 Mfa$1}-Lwk-59kV?`Tzg` literal 0 HcmV?d00001 diff --git a/pix/WebthinkLogoMedium.png b/pix/WebthinkLogoMedium.png new file mode 100644 index 0000000000000000000000000000000000000000..1bc76e43b14841c6ffe87fb43ccef59e93d2399e GIT binary patch literal 6176 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 g!i_@% literal 0 HcmV?d00001 diff --git a/pix/icnArrowDown.png b/pix/icnArrowDown.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac71c7fbc759523ce829daedf2c484578f7d855 GIT binary patch literal 866 zcmV-o1D*VdP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFW3 z3^5TlMap6T000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0008LNklu+Cm_Ly3m~q!JUE#(naaI zi!KEh-F2ZtEs8Eg5sPgptzQKfA`zqJL!87!Ci9h5YsS;#It&E?)lxrd7KL^ zVp+7mr@QO)pI`Uhn7;hmsC^eKH9V6)o6BCZhY$X1zdP~37K@DqQPVQ1v%aY2!GHlC zJ@nC9xOu&>U?ZwkvKfq&v`$g06?idPqf~0rzpry?C_uS-2TeBsiMRn6Trvt!ss97O zwW|eybsq(dx!VCaeloYHpSvh@s&*BCv%ft5C}#&)cJ1j{GTIGvq>>v(s*T$g z;KsF=i$aaH_Q~Ag4-Zu-6vhWGU%8-vK6AU>1mDQ)P8ZrLb70@mb(`|Xnw{CG`S0!| zeS15(e{YgMejk5UsjRJN!}VzEK0-C=7_JL$B`fy}oK{!DymL!w$`6L@57FBHRNpa!) z2yMP59(Oo*X@>v^z?xM%!e>K&OD6FHTEz*&DxUKxN?btCz@e?8#3Q{Tf&gP<^_kq$ zu|9eCEwe^p0anCMQJ%hqR!KZ3hwtrvdraQWvw}$Uz4F=MTok~%CP$msOT96OF=-H& zW-v~~$)i;gElE%jj3m)2{XcL%6u|o4mx#C^hA=E+Z4KAyLU3sWL%7a*eD5osj~|+^ zeqI!%eCw*!I3|mThoz3AR$HwT7`0M7XXCsbwtP>+uq4xVz>4yyH-~X_hqbznBdZW` z?9;KnmYXOo*G&?GTD7f=y4ws`@guvHpnnpHoDOYyVs!F&@q*A`kV$;M*41muz|`=>k=oq4Hx{7u)2UfNmH+?%07*qoM6N<$g3)1%{Qv*} literal 0 HcmV?d00001 diff --git a/pix/icnArrowUp.png b/pix/icnArrowUp.png new file mode 100644 index 0000000000000000000000000000000000000000..5094ba8cf215ab015410f3cfb854054845a85c8b GIT binary patch literal 588 zcmV-S0<-;zP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFW3 z3?Ck?{odaI000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004}NklA$te$V|dOGgk1gjy6-3nL+dT+GH+K`UK}O#eq8YySbk*6vyev+FW* z196dvP%uQBXy2;AA;;_M!nv0_Ix`xLD}Qhn=i`0O!^=5vxoEv!S5;L;6a}=p)Y2^f z4UD`OI$N&kY`Lb@rIse2Iv0YiVL;!RCn_xhP^m1CrYT9>!LmSARYas;p)m;PSa1DoJsVtn{ro#8;G2z$|BK?ie znyPJ1<2z5d8N8;|-pV)PIO#dKzkAw>=GXL`anV!_3GnQDj0dY6{QXSmEdm|D&P}tV zDKx(w1BZaqW1MNLh)w7|!!~CS@$lW}v=4Xj-KQ9Gqo)PMxGqdg3d<`l_aB-_m#hG{ z!WBRf?7Sc5UxB71{sj4pW4c=x;Y zp{HPDGgu!69QIDLyao8v{#ac5anUz4F7sE5y#=C?K+l-Ixe8OR!jx-fT1=zS7#;Lq aY)=5iIho$I&y1e{0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFWA z1vfJ%c`r5q000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000C2NklL1-wgs<8^Ll?Kr6~&_cZavbv z%``{<(j#ZXO0ddMf|aq^&6zbdFYZpU$&&zB4egDpp*^F_>}TfRp4$Hy-cet`A$}f| z5UNUTAz*$B2u?zpWm#99AcMf>ge2YHbLC3M<-WeD<*V+=9M1E)U4Ubd$o@KDxt#7p z*N7yc9Vb_;#)BYLsm%s(CtKl8kQo7sHUJU{sS)NWMG)>7PO)!Glcc-w+Y=|X1FM`XVWShCZ7SO%~gBz{Utu-ffOZBVBsUOJ(wvA5FFGpa=qm4GC=J%`g0 zu@MoHB809r^%%y5y8t>0$UBKLT@Kf-QGgyN0LaL2dNs|+(X{9ZCAjOFDEZdd9p&lC zdC!*;5w!5<)27jT90UVww2O8Fojh53psiH8#jR{evv8 z>lOfH=jW&10ti7{%99TKPvQeu_u3s52kg#j69BON;8q9%ie{8rX66B2grxg$1L2tu zG-mEH*R6_ox~+H_h@j6XZyo@^iIq%8N5_KFdG#aRZ~_2?k+UI)qM!f*m^r}Ab51!B z2%xU64h!X+sMRB_lK_^Vff1JifWskh0&E`sw3<^d*t#cP(q|iOUv{7Cw|CXW!~v z)6(*Hw-VfG5Qzpz{1Xs-1Q84dV1Zc!SP!~9M@LL^q(qX}|2yRkY~Eb(w%6+!J@Q`R zbLW;{`g)%kBO5`^B6!~i)?Ng1 zvl`&dZou}^bEquuL~gE|n@?`El+X@lw*E-=`~%t*mB&X8eewVR002ovPDHLkV1m;Q B8)yIk literal 0 HcmV?d00001 diff --git a/pix/icnMoveBranch.png b/pix/icnMoveBranch.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e6c57693ad385596ffdbd953c5169595ba0c38 GIT binary patch literal 1163 zcmV;61a$j}P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iO4` z2r&ToGyJ0f000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000B#Nklx~qE?wQ>c%LNQqYx^ZEkg=tlPT2q$_4?nkG%#yg$!#k008Uv~+g(hYR-{ zF28f``Cl$DCpx_MDiIM?drl)OkD~+2=tNKVBmqFV<6JgJbzUD`y&R@GuMZr+X6Nd9 zjE|?#aqaw@ebfJPXuwhk=|M=UP`-o1dhX6EX0S|G%PZL2R5tbsclNOJog8{(E za16KlXP{{Ta01+_mfq3wU9s-=m{@gfv7d;Z1^^H89 zC7AOJ$j>j^NhHdRveIa?Y_1RCJQvx-nt1m0SeS07we{uOx%z zfKj%0RzKcOm1}qP0oV!v1WPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iO4` z2sI9S=M_CX>@2HM@dakSAh-}0006SNkl6m}{P0eOa^qk0i?LL-)VYmTJ zHQ3tpxS~qySBJXS)Q6X(r98D!2Ac=z^Yk&V@n6Yq-I%UeQ@gK2fhWbDZQpg8!REn= lx^D*pxD##}B7n literal 0 HcmV?d00001 diff --git a/pix/icnStar.png b/pix/icnStar.png new file mode 100644 index 0000000000000000000000000000000000000000..e46697e82fc6dabcc420af5e989cf2549f05b26a GIT binary patch literal 1340 zcmV-C1;hG@P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFW4 z016f*H7@u7000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000D+Nkl7{;G-PEWhFwA;FNz!WGBg>7O$Wg}_~5DX?jgVDqUVlY7ggT%y$L4zU& z$0boQYzWJ;O$Hm6QW8cX-f(OMCQ~;C1J>QTc3p2APS58bq{|o``uz93mtWrR zd*0-OPHVzsRU9@_HPr@YLTED~gy1pqxFZSx80Vz}*HjxaCLGE42P|YNaMzuolDl2@ zw^-DDz3$$g9+$Ul zZ^HrrpaCEf@u6>^TW+!RZUJxs03u;pbFA{aX{qM5Z_EUM;AE&qqx77rH&d4GVYA&n z!Yz14FG)=ThhyMSC^WXXwi=nkj({isiLAVuYQqWuS021s8~~IPfvwk_7IA)v}(^{ue*o_PbgtnS&eG+#&$_ zn%M@0as>O!DmT2p^%ZB@smv|+UAH?2hk7i-4!h0kwGDbgfj}f44#yJ*_SF*!qam|q zY$qpbETT?p8egqQI8I_Qo+J_iNhZaZD3TZ<#6k!urwR)`8Oha1BJo&^bq+(bdTk+P zw{iHZjbms^ff(P3Z21Q0-^wEKSd8RohiJz@9&X$;K&@Pl!eS+|)hs}e%v89=xdp71 z0zd#b0kks=vw)(ge1>6KOG-+0ZdXv(*Vl(E`FhCMr;!i_Fd8fefB^t=r?BLs#~Nll zdz&a^r9?vKk!cyrNv3oOkxQ47+S;>1BEj!Ce!MO%m`NA>{L{Kkdi}etKOFig;u-0X z@kuA-vZZ68*e}f)(qb()2C2hNFOf-S${H_L{XDs!o*ejKb4AYd8Om)(kDLfttv7i> z_+=EN5E1rD7|lJFnOWm@3lZbFCW>Xn6-O(~i>HL{{rY6?!TqN;KD#i#tNx@Z84TIu zB8lkvr0Xg{0xbPxfsCCu!qEA3BOak#NJjap%0KdRvQ>v~-*T-<3oR_1SFmVN(as|k z=lz!6wy0;cbyhgqcP*9Ylg>CzDTlpW+24Y||HyH%j$nxEKT&7S^ZTPad0v?F2sFrX zwR?6~X4(d=-TpwwtB+iX$_OV#P7VOh(Q$qs??Y{f%!NxI(go!?4R8H1H zZGiI+S^5nd(|ET`C0{pRBmqN)v`9r$vXGE;M?>Mx<}Br6nZOIezAxjAW086Q00jVR zUf((2W*-zgyBd0?*e)_#WAJfN<7Xn_E>jd00U!W~0pK$-McIt$MWq4HvL>r{^#dUO yhf-fowqpGY0HBiVB`Ud|R>}2@Mz#H+x_<$V(@(&Wo$Dz80000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iFW3 z4GSF`m@)?d000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0008eNklaHNX5~8c1 z8@n*Do1g?C%_2*ztBS%xWSQlf!?QCt-P!rNacgeVDfM2xJm>kI^S$r;eBVcqBPgXb z9V3L0t=4e4L{GQ&z*W(UPaj3pxXf}>%PuL`8YUMZ99h8Kdv`GXHi+q|Ae(1V8?xT;>mV+u<$>;*iWrTHju zaCkozMMzYzzg&&O4cZVP#JFkibbJ-n3vLGhoNBpEPc#gk2LNyTBz-=*=m3DB!R6%i zA3qXlx*IZj6IUd}NszjXt^?V()f)gx5(A-)L zK}#SA1QsiYN|y%iI)2NeO9@!nYHE`Kz;5nJ_Nu&iB$?mn{TaM`Vbs!h#V1x*T>6pA zr-UNTf)d7V_V#TcvLwYmjQPRC#wCu`7@TD$2LOFe^RLFfBPRQmRE%Y^SJ&O`1%S1j zqAJct7{V`ZAg+rJ^ardQ2Wes~>~IuvXgu!85Y6^`su$egSSwh@2!>IwqvvE?qbfeC;tCkMxr7?|4)_;WQC9Sfwx6v90N8BorZ?6fVDIhs@|&#!00000 LNkvXXu0mjfgr0>~ literal 0 HcmV?d00001 diff --git a/profile.html b/profile.html new file mode 100644 index 0000000..790630c --- /dev/null +++ b/profile.html @@ -0,0 +1,53 @@ + + + + WebThink Edit UserProfile + + + + + + + + + +
+ +
- P R O F I L E -
+
+ + + + + + + +
NameDisplay-name
Mail-AddressMail-Address
PasswordEnter your new password twice.
Repeat

+ +
+ + + diff --git a/requestTarget.php b/requestTarget.php new file mode 100644 index 0000000..1ea6383 --- /dev/null +++ b/requestTarget.php @@ -0,0 +1,493 @@ +\r\n" . + 'Reply-To: <' . $fromAddr . ">\r\n" . + 'X-Mailer: PHP/' . phpversion() . "\r\n\r\n"; + mail($to,$subject,$message,$headers); +} + +function getRequest(){ + $putdata=fopen("php://input", "rb"); + $myData=""; + while(!feof($putdata)){ + $myData=$myData. fread($putdata, 4096); + } + fclose($putdata); + return($myData); +} + +function writeToFile($filename,$text){ + // create directory if not already present + $cmd="mkdir -p \"$(dirname \"" . $filename . "\")\""; + system($cmd); + + $fp=fopen($filename,'w') or die("Can't open file"); + fwrite($fp,$text); + fclose($fp); +} + +function readFromFile($filename){ + $fp=fopen($filename,'r') or die("Can't open file"); + $text = fread($fp, filesize($filename)); + fclose($fp); + return($text); +} +function isFileOwner($dh,$filePKey,$userPKey){ + $query="Select count(*) \"count\",max(pkey) from fileUserRel where filePKey=" . $dh->quote($filePKey) . " and userPKey=" . $dh->quote($userPKey) ; + $result=$dh->query($query) ; + $row=$result->fetch(); + if ($row['count']==1) { + return(true); + } else { + return(false); + } +} +function deleteFile($dh,$mapPath,$fileInfo){ + if (isFileOwner($dh,$fileInfo["PKey"],$_SESSION['UserPKey'])) { + //$query="delete from file where pkey = " . $fileInfo["PKey"] . ""; + $query="update file set deleteDate=datetime('now') where pkey = " . $dh->quote($fileInfo["PKey"]) ; + $dh->exec($query) ; + //unlink($mapPath . "/" . $fileInfo['Name']); + } + return(""); +} +function getNewPKey($dh){ +// $dh->beginTransaction(); + $query="Select nextFree from pkey"; + $result=$dh->query($query) ; + $row=$result->fetch(); + $newPKey=$row['nextFree']; + + $query="update pkey set nextFree=nextFree+1"; + $dh->exec($query) ; +// $dh->commit(); + return($newPKey); +} + + +function getUserInfo($dh){ + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("response"); + $xmlDoc->appendChild($rootNode); + + $query="Select name,mail from user where pkey=" . $dh->quote($_SESSION['UserPKey']); + writeToFile("/tmp/rrr",$query); + $result=$dh->query($query) ; + $row=$result->fetch(); + if (!$row) { + $success="false"; + $rootNode->setAttribute("name","Unknown"); + $rootNode->setAttribute("mail","Unknown"); + $error="UserNotFoundError"; + } else { + $success="true"; + $rootNode->setAttribute("name",$row['name']); + $rootNode->setAttribute("mail",$row['mail']); + $dh->exec($query) ; + } + + $rootNode->setAttribute("success",$success); + if ($success=="false") { + $rootNode->setAttribute("error",$error); + } + return($xmlDoc); + +} + +// Inserts new files into the DB, updates the description. +// returns the filename. +// filePKey must be null for new records +function getFileNameAndPKey($dh,$filePKey,$description){ + if ($filePKey=="") { + $isNew=true; + $filePKey=getNewPKey($dh); + $fileName=$_SESSION["UserPKey"] . "/" . $filePKey; // TODO - should include the user + $query="insert into file (pkey,filename,description) values (" . $dh->quote($filePKey) . "," . $dh->quote($fileName) . "," . $dh->quote($description) . ")"; + $dh->exec($query) ; + $query="insert into fileUserRel (pkey,filePKey,userPKey,isOwner) values (" . $dh->quote(getNewPKey($dh)) . "," . $dh->quote($filePKey) . "," . $dh->quote($_SESSION['UserPKey']) . ",1)"; + $dh->exec($query) ; + } else { + $isNew=false; + $query="Select file.filename \"fileName\", file.description \"fileDescription\" from file,fileUserRel where file.pkey=" . $dh->quote($filePKey) . " and fileUserRel.filePKey=file.pkey and fileUserRel.userPKey=" . $dh->quote($_SESSION['UserPKey']) ; + $result=$dh->query($query) ; + $row=$result->fetch(); + $fileName=$row['fileName']; + $currDescription=$row['fileDescription']; + if (($description!=null) and ($currDescription != $description)) { + $query="update file set description=" . $dh->quote($description) . " where pkey=" . $dh->quote($filePKey) ; + $dh->exec($query) ; + } + } + $ret=array("Name"=>$fileName, + "PKey"=>$filePKey, + "isNew"=>$isNew); + return($ret); +} +function getIconList($dh){ + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("icons"); + $rootNode->setAttribute("success","true"); + $xmlDoc->appendChild($rootNode); + + $query="Select icon.pkey \"iconPKey\", icon.filename \"filename\" ,icon.description \"description\" from icon order by sort"; + $result=$dh->query($query) ; + while ($row=$result->fetch()) { + $recordNode=$xmlDoc->createElement("icon"); + $recordNode->setAttribute("pkey",$row['iconPKey']); + $recordNode->setAttribute("filename",$row['filename']); + $recordNode->setAttribute("description",$row['description']); + $rootNode->appendChild($recordNode); + } + return($xmlDoc); +} +function listFiles($dh){ + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("div"); + $rootNode->setAttribute("class","fileList"); + $rootNode->setAttribute("success","true"); + $xmlDoc->appendChild($rootNode); + + $query="Select file.pkey \"filePKey\", file.description \"fileDescription\" from file,fileUserRel where file.pkey=fileUserRel.filePKey and fileUserRel.userPKey=" . $dh->quote($_SESSION['UserPKey']) . " and file.deleteDate is null order by description"; + $result=$dh->query($query) ; + while ($row=$result->fetch()) { + $fileNode=$xmlDoc->createElement("div"); + $fileNode->setAttribute("class","singleFile"); + $fileNode->setAttribute("pkey",$row['filePKey']); + $fileNode->appendChild($xmlDoc->createTextNode($row['fileDescription'])); + $rootNode->appendChild($fileNode); + } + return($xmlDoc); +} +function confirmOptin($dh,$token){ + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("response"); + $xmlDoc->appendChild($rootNode); + + $query="Select count(*) \"count\",max(pkey) \"userOptinPKey\" from userOptin where confirmed != '1' and token=" . $dh->quote($token); + $result=$dh->query($query) ; + $row=$result->fetch(); + if ($row['count']!=1) { + $success="false"; + $error="TokenNotFoundError"; + } else { + $success="true"; + $query="update userOptin set confirmed='1' where pkey ='" . $row['userOptinPKey'] . "'"; + $dh->exec($query) ; + } + + $rootNode->setAttribute("success",$success); + if ($success=="false") { + $rootNode->setAttribute("error",$error); + } + return($xmlDoc); +} +function checkMailAddress($mail){ + if ((strlen($mail) < 6) || (false === strpos($mail,"@"))) { + return("Invalid E-Mail Address!"); + } + + $result=""; + try { + $fp=popen($GLOBALS['conf_basePath'] . "checkMail.sh " . $mail,"r"); + while (!feof($fp)) { + $result=$result . fgets($fp, 4096); + } + pclose($fp); + } catch (Exception $e) { + $result="Can't execute check-script."; + } + return($result); +} +function optinUser($dh,$mail,$password){ + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("response"); + $xmlDoc->appendChild($rootNode); + + $mailCheckErr=checkMailAddress($mail); + if ("" != $mailCheckErr) { + $rootNode->setAttribute("success","false"); + $rootNode->setAttribute("error","MailAddressNotValidError"); + $rootNode->setAttribute("description",$mailCheckErr); + + return($xmlDoc); + } + + $query="Select count(*) \"count\",max(pkey) \"userPKey\" from user where mail=" . $dh->quote($mail); + $result=$dh->query($query) ; + $row=$result->fetch(); + if ($row['count']!=0) { + $rootNode->setAttribute("success","false"); + $rootNode->setAttribute("error","MailAlreadyRegisteredValidation"); + } else { + $rootNode->setAttribute("success","true"); + $userPKey=getNewPKey($dh); + $query="Insert into user (pkey,name,mail,password) values (" . $dh->quote($userPKey) . "," . $dh->quote($mail) . "," . $dh->quote($mail) . "," . $dh->quote($password) . ")"; + $dh->exec($query) ; + $token=getToken(); + $query="Insert into userOptin (pkey, userPKey, pendingSince, ip, confirmed, token) values (" . $dh->quote(getNewPKey($dh)) . "," . $dh->quote($userPKey) . ",datetime('now')," . $dh->quote($_SERVER["REMOTE_ADDR"]) . ",'0'," . $dh->quote($token) . ")"; + $dh->exec($query) ; + myMail($mail, $GLOBALS["conf_appName"] . "Sign up Confirmation","Thanks for signing up!\nplease follow this link to confirm your mail-address:\n<" . $GLOBALS["conf_appURL"] . "login.php?action=confirmOptin&token=" . $token . ">"); + } + + return($xmlDoc); +} +function getToken(){ + $salt=microtime() . "_" . $_SERVER["REMOTE_ADDR"] . "_" . rand(1,32768); + return(md5($salt)); +} +function setupAutoLogin($dh){ + $token=getToken(); + $query="insert into userAutologin (pkey, userPKey, token,setupDate) values (" . $dh->quote(getNewPKey($dh)) . "," . $dh->quote($_SESSION["UserPKey"]) . "," . $dh->quote($token) . ",datetime('now'))"; + $dh->exec($query); + return($token); +} +function logOutUser($dh,$loginToken){ + $query="delete from userAutoLogin where userPKey=" . $dh->quote($_SESSION['userPKey']) . " and token=" . $dh->quote($loginToken); + $dh->exec($query) ; + unset($_SESSION['UserPKey']); + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("response"); + $rootNode->setAttribute("success","true"); + $xmlDoc->appendChild($rootNode); + + return($xmlDoc); +} + +function logInUser($dh,$mail,$password,$isSetupAutoLogin,$loginToken){ + if ($loginToken) { + $query="Select count(*) \"count\",max(user.pkey) \"userPKey\" from user, userOptin, userAutologin where userAutoLogin.userPKey=user.pkey and userAutoLogin.token=" . $dh->quote($loginToken) . " and userOptin.userPKey=user.PKey and userOptin.confirmed='1' and user.mail=" . $dh->quote($mail); + } else { + $query="Select count(*) \"count\",max(user.pkey) \"userPKey\" from user, userOptin where userOptin.userPKey=user.PKey and userOptin.confirmed='1' and user.mail=" . $dh->quote($mail) . " and user.password=" . $dh->quote($password); + } + + $result=$dh->query($query) ; + $row=$result->fetch(); + if ($row['count']==1) { + $success="true"; + $_SESSION['UserPKey']=$row['userPKey']; + $query="insert into userLogin (pkey, userpkey, loginDate, loginIp) values (" . $dh->quote(getNewPKey($dh)) . "," . $dh->quote($_SESSION["UserPKey"]) . ",datetime('now')," . $dh->quote($_SERVER["REMOTE_ADDR"]) . ")"; + $dh->exec($query) ; + if ($isSetupAutoLogin) { + $autoLoginToken=setupAutoLogin($dh); + } + } else { + $success="false"; + $errorclass="AppError"; + $_SESSION['UserPKey']=null; + } + + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("response"); + $rootNode->setAttribute("success",$success); + $rootNode->setAttribute("autologintoken",$autoLoginToken); + $rootNode->setAttribute("errorclass",$errorclass); + $xmlDoc->appendChild($rootNode); + + return($xmlDoc); +} +function mailPassword($dh,$mail){ + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("response"); + $xmlDoc->appendChild($rootNode); + + $query="Select count(*) \"count\",max(user.pkey) \"userPKey\",min(userOptin.confirmed) \"optinConfirmed\",min(userOptin.token) \"optinToken\" from user, userOptin where userOptin.userPKey=user.PKey and userOptin.confirmed='1' and user.mail=" . $dh->quote($mail); + $result=$dh->query($query) ; + $row=$result->fetch(); + if ($row['count']!=1) { + $success="false"; + $error="MailAddressNotRegisteredValidation"; + } else { + $success="true"; + if ($row['optinConfirmed']!="1") { + $token=$row['optinToken']; + myMail($mail, $GLOBALS["conf_appName"] . " Password-Request/Sign up Confirmation","During your password request we found that your mail-address was not confirmend yet.\nYou can only sign in if your address is confirmed.\nplease follow this link to confirm your mail-address:\n<" . $GLOBALS["conf_appURL"] . "login.php?action=confirmOptin&token=" . $token . ">"); + } else { + $token=getToken(); + $query="Insert into userPassReq (pkey, userPKey, token, requestDate) values (" . $dh->quote(getNewPKey($dh)) . ",'" . $row['userPKey'] . "'," . $dh->quote($token) . ",datetime('now'))"; + $dh->exec($query) ; + myMail($mail, $GLOBALS["conf_appName"] . " Password override request","To override your password please follow this link:\n<" . $GLOBALS["conf_appURL"] . "login.php?action=overridePassword&token=" . $token . ">"); + } + } + + + $rootNode->setAttribute("success",$success); + if ($success=="false") { + $rootNode->setAttribute("error",$error); + } + return($xmlDoc); +} + +function setUserPassword($dh,$UserPKey,$newPass){ + $query="update user set password=" . $dh->quote($newPass) . " where mail<>'demo' and pkey = " . $dh->quote($UserPKey); + $dh->exec($query) ; +} + +function updateUserProfile($dh,$mail,$password,$name){ + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("response"); + $xmlDoc->appendChild($rootNode); + + // check the mail-address if it was changed + if (getUserInfo($dh)->firstChild->getAttribute("mail") != $mail) { + $mailCheckErr=checkMailAddress($mail); + if ("" != $mailCheckErr) { + $rootNode->setAttribute("success","false"); + $rootNode->setAttribute("error","MailAddressNotValidError"); + $rootNode->setAttribute("description",$mailCheckErr); + + return($xmlDoc); + } + } + + if ($password) { + setUserPassword($dh,$_SESSION["UserPKey"],$password); + } + $query="update user set name=" . $dh->quote($name) . ", mail=" . $dh->quote($mail) . " where mail<>'demo' and pkey = " . $dh->quote($_SESSION["UserPKey"]); + $dh->exec($query) ; + + $rootNode->setAttribute("success","true"); + return($xmlDoc); +} + +function changePassword($dh,$mail,$newPass,$oldPass,$token){ + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("response"); + $xmlDoc->appendChild($rootNode); + + if (strlen($mail)>1) { // change password with mail and old password + $query="select count(*) \"count\", max(user.pkey) \"userPKey\" from user,userOptin where user.pkey=userOptin.userPKey and userOptin.confirmed='1' and user.password=" . $dh->quote($oldPass) . " and user.mail=" . $dh->quote($mail); + + $result=$dh->query($query) ; + $row=$result->fetch(); + if ($row['count']!=1) { + $success="false"; + $error="MailNotExistentOrPasswordWrongValidation"; + } else { + setUserPassword($dh,$row['userPKey'],$newPass); + $success="true"; + } + } else { // change password via token + $query="select count(*) \"count\", max(userPassReq.userPKey) \"userPKey\", max(userPassReq.pkey) \"userPassReqPKey\" from userPassReq where token is not null and token=" . $dh->quote($token) ; + $result=$dh->query($query) ; + $row=$result->fetch(); + if ($row['count']!=1) { + $success="false"; + $error="TokenExpiredValidation"; + } else { + setUserPassword($dh,$row['userPKey'],$newPass); + $success="true"; + $query="update userPassReq set token=null where pkey = " . $row['userPassReqPKey'] ; + $result=$dh->query($query) ; + } + } + + $rootNode->setAttribute("success",$success); + if ($success=="false") { + $rootNode->setAttribute("error",$error); + } + return($xmlDoc); +} + +try { + $dh=new PDO("sqlite:".$db); + + $reqXML=new DomDocument(); + $reqXML->loadXML(getRequest()); + $theFunction=$reqXML->documentElement->getAttribute("function"); + + writeToFile("/tmp/reqtgt.log",$reqXML->saveXML()); + + switch ($theFunction) { + case "SAVEFILE": + $description=$reqXML->documentElement->getAttribute("description"); + $filePKeyReq=$reqXML->documentElement->getAttribute("filepkey"); + $fileInfo=getFileNameAndPKey($dh,$filePKeyReq,$description); + if ($fileInfo["isNew"]) { $reqXML->documentElement->setAttribute("filepkey",$fileInfo["PKey"]); } + writeToFile($mapPath . $fileInfo["Name"],$reqXML->saveXML()); + echo (""); + break; + case "OPENFILE": + $filePKey=$reqXML->documentElement->getAttribute("filepkey"); + $fileInfo=getFileNameAndPKey($dh,$filePKey,null); + echo(readFromFile($mapPath . $fileInfo["Name"])); + break; + case "DELETEFILE": + $filePKey=$reqXML->documentElement->getAttribute("filepkey"); + $fileInfo=getFileNameAndPKey($dh,$filePKey,null); + echo(deleteFile($dh,$mapPath ,$fileInfo)); + break; + case "LISTFILES": + echo(listFiles($dh)->saveXML()); + break; + case "LOGIN": + $mail=$reqXML->documentElement->getAttribute("mail"); + $password=$reqXML->documentElement->getAttribute("password"); + $isSetupAutoLogin=($reqXML->documentElement->getAttribute("isautologin")=="1"); + echo(logInUser($dh,$mail,$password,$isSetupAutoLogin,null)->saveXML()); + break; + case "LOGOUT": + $loginToken=$reqXML->documentElement->getAttribute("token"); + echo(logOutUser($dh,$loginToken)->saveXML()); + break; + case "TOKENLOGIN": + $mail=$reqXML->documentElement->getAttribute("mail"); + $loginToken=$reqXML->documentElement->getAttribute("token"); + echo(logInUser($dh,$mail,null,false,$loginToken)->saveXML()); + break; + case "OPTINUSER": + $mail=$reqXML->documentElement->getAttribute("mail"); + $password=$reqXML->documentElement->getAttribute("password"); + echo(optinUser($dh,$mail,$password)->saveXML()); + break; + case "MAILPASSWORD": + $mail=$reqXML->documentElement->getAttribute("mail"); + echo(mailPassword($dh,$mail)->saveXML()); + break; + case "CONFIRMOPTIN": + $token=$reqXML->documentElement->getAttribute("token"); + echo(confirmOptin($dh,$token)->saveXML()); + break; + case "CHANGEPASSWORD": + $mail=$reqXML->documentElement->getAttribute("mail"); + $newPass=$reqXML->documentElement->getAttribute("newpass"); + $oldPass=$reqXML->documentElement->getAttribute("oldpass"); + $token=$reqXML->documentElement->getAttribute("token"); + echo(changePassword($dh,$mail,$newPass,$oldPass,$token)->saveXML()); + break; + case "UPDATEUSERPROFILE": + $mail=$reqXML->documentElement->getAttribute("mail"); + $password=$reqXML->documentElement->getAttribute("password"); + $name=$reqXML->documentElement->getAttribute("name"); + echo(updateUserProfile($dh,$mail,$password,$name)->saveXML()); + break; + case "GETICONLIST": + echo(getIconList($dh)->saveXML()); + break; + case "GETUSERINFO": + echo(getUserInfo($dh)->saveXML()); + break; + } +} catch (PDOException $exception) { + $xmlDoc= new DomDocument(); + $rootNode=$xmlDoc->createElement("response"); + $xmlDoc->appendChild($rootNode); + $rootNode->setAttribute("success","false"); + $rootNode->setAttribute("error","DB-Error"); + $rootNode->setAttribute("message",$exception->getMessage()); + die($xmlDoc->saveXML()); +} + +?> diff --git a/sql/createDB.sql b/sql/createDB.sql new file mode 100644 index 0000000..73d928c --- /dev/null +++ b/sql/createDB.sql @@ -0,0 +1,11 @@ +CREATE TABLE file(pkey int, filename varchar, description varchar, deleteDate dateTime); +CREATE TABLE fileUserRel(pkey int, filePKey int, userPKey int, isOwner boolean); +CREATE TABLE icon (pkey int, filename varchar, description varchar, sort int); +CREATE TABLE pkey(nextFree int); +CREATE TABLE referer (date dateTime,userIp varchar,refererURL varchar); +CREATE TABLE tmp (pkey int); +CREATE TABLE user(pkey int, name varchar,mail varchar,password varchar, autologintoken varchar); +CREATE TABLE userAutologin (pkey int, userPKey int, token varchar, setupDate dateTime); +CREATE TABLE userLogin(pkey int, userPKey int, loginDate datetime, loginIp varchar); +CREATE TABLE userOptin(pkey int, userPKey int, pendingSince datetime, ip varchar, confirmed boolean, token varchar); +CREATE TABLE userPassReq(pkey int,userPKey int, token varchar,requestDate dateTime); diff --git a/sql/exportSchema.sh b/sql/exportSchema.sh new file mode 100644 index 0000000..ef5f112 --- /dev/null +++ b/sql/exportSchema.sh @@ -0,0 +1,5 @@ +#!/bin/bash +echo ".schema" | sqlite3 ../WebThink.db > createDB.sql + +echo "drop table icon;" > prepareIcon.sql +echo ".dump icon" | sqlite3 ../WebThink.db >> prepareIcon.sql diff --git a/sql/prepareIcon.sql b/sql/prepareIcon.sql new file mode 100644 index 0000000..8d92389 --- /dev/null +++ b/sql/prepareIcon.sql @@ -0,0 +1,24 @@ +drop table icon; +BEGIN TRANSACTION; +CREATE TABLE icon (pkey int, filename varchar, description varchar, sort int); +INSERT INTO "icon" VALUES(1,'exclamationMark.png','Exclamation Mark',1); +INSERT INTO "icon" VALUES(2,'questionSign.png','Question Sign',2); +INSERT INTO "icon" VALUES(3,'smileyGood.png','Smiley Good',3); +INSERT INTO "icon" VALUES(4,'smileyBad.png','Smiley Bad',4); +INSERT INTO "icon" VALUES(5,'smileyOh.png','Smiley Oh',5); +INSERT INTO "icon" VALUES(6,'tick.png','Tick',6); +INSERT INTO "icon" VALUES(7,'bulb.png','Idea',7); +INSERT INTO "icon" VALUES(8,'thumbUp.png','Good',8); +INSERT INTO "icon" VALUES(9,'thumbDown.png','Bad',9); +INSERT INTO "icon" VALUES(10,'clock.png','Time',10); +INSERT INTO "icon" VALUES(11,'heart.png','Heart',11); +INSERT INTO "icon" VALUES(12,'phone.png','Phone',12); +INSERT INTO "icon" VALUES(13,'arrowLeft.png','Left',13); +INSERT INTO "icon" VALUES(14,'arrowRight.png','Right',14); +INSERT INTO "icon" VALUES(15,'arrowUp.png','Up',15); +INSERT INTO "icon" VALUES(16,'arrowDown.png','Down',16); +INSERT INTO "icon" VALUES(17,'arrowUpExclam.png','Up!',17); +INSERT INTO "icon" VALUES(18,'arrowDownExclam.png','Down!',18); +INSERT INTO "icon" VALUES(19,'rose.png','Rose',19); +INSERT INTO "icon" VALUES(20,'cross.png','Not Ok!',6); +COMMIT; diff --git a/sql/preparePKey.sql b/sql/preparePKey.sql new file mode 100644 index 0000000..e5d1e4c --- /dev/null +++ b/sql/preparePKey.sql @@ -0,0 +1,2 @@ +insert into pkey values (10000); + diff --git a/textControl.js b/textControl.js new file mode 100644 index 0000000..dcaa2c2 --- /dev/null +++ b/textControl.js @@ -0,0 +1,288 @@ +// Modes: +// - display +// - singleLine Entry +// - MultiLine Entry + +function textControl(initialText,isMultiLineDisabled,isDisabled) { + var m_text=initialText; + var m_isMultiline=false; + + var m_mode=isDisabled?"display":"slEntry"; // Initial Mode + + var m_slEntryControl; + var m_mlEntryControl; + var m_displayControl; + + var m_displayDom=document.createElement("span"); + + // call the constructor only if the argument is given. + if (arguments.length>=1) { + return(construct()); + } else { + // if no argument is given then we can only loadXML + this.fromXML=fromXML; + return(this); + } + + function construct() { + m_slEntryControl=createSingleLineEntryControl(); + m_displayControl=createDisplayControl(); + m_mlEntryControl=createMultiLineEntryControl(); + + m_displayDom.appendChild(m_slEntryControl); + m_displayDom.appendChild(m_mlEntryControl); + m_displayDom.appendChild(m_displayControl); + + m_displayDom.focus=focus; + m_displayDom.setDisplayMode=setDisplayMode; + m_displayDom.setText=setText; + m_displayDom.getText=getText; + + m_displayDom.toXML=toXML; + m_displayDom.fromXML=fromXML; + + m_displayDom.extends(new Publisher()); + + changeMode(m_mode); + + return (m_displayDom); + } + + function focus(){ + changeMode(m_mode); + } + + function getText() { return(m_text); } + function setText(text) { + // stop user form entering empty text. + if (text.length>0) { + m_text=text; + changeMode(m_mode); + return(true); + } else { + return(false); + } + } + + function setDisplayMode() { changeMode("display"); } + + function setSlEntryMode() { + if ((m_isMultiline) && (!isMultiLineDisabled)) { + changeMode("mlEntry"); + } else { + changeMode("slEntry"); + } + } + function setMlEntryMode() { changeMode("mlEntry"); } + + function changeMode(newMode){ + m_mode=newMode; + // hide all + m_slEntryControl.hide(); + m_displayControl.hide(); + m_mlEntryControl.hide(); + + // and show the selected one + switch(newMode) { + case "slEntry": + m_slEntryControl.update(); + m_slEntryControl.show(); + m_slEntryControl.focus(); + break; + case "mlEntry": + m_mlEntryControl.update(); + m_mlEntryControl.show(); + m_mlEntryControl.focus(); + break; + case "display": + m_displayControl.update(); + m_displayControl.show(); + m_displayControl.focus(); + break; + } + m_displayDom.notifySubscribers(m_displayDom,"changeMode"); + } + + function createMultiLineEntryControl() { + var txtara=document.createElement("textarea"); + txtara.appendChild(document.createTextNode(m_text)); + txtara.onclick=onClickTextArea; + txtara.onkeyup=updateText; + + var submit=document.createElement("input"); + submit.type="submit"; + submit.value="OK"; + submit.onclick=onClickOk; + + var container=document.createElement("span"); + container.appendChild(txtara); + container.appendChild(submit); + + container.update=update; + container.focus=focus; + container.show=show; + container.hide=hide; + + return(container); + + function onClickTextArea(event) { + txtara.focus(); + event.stopPropagation(); + } + function onClickOk(event) { + endEdit(); + event.stopPropagation(); + } + function update(){ + txtara.value=m_text; + } + function show(){ + container.style.display="inline"; + txtara.focus(); + } + function hide(){ + container.style.display="none"; + } + function focus(){ + } + function updateText() { + m_text = txtara.value; + } + function endEdit(){ + if (txtara.value.indexOf("\n")!=-1) { + m_isMultiline=true; + } else { + m_isMultiline=false; + } + if (setText(txtara.value)) { + setDisplayMode(); + } + } + } + + function createSingleLineEntryControl() { + var container=document.createElement("span"); + container.style.whiteSpace="nowrap"; + + var entry=document.createElement("input"); + entry.value=m_text; + entry.onkeyup=updateText; + entry.onkeydown=fireOnEnter; + entry.onchange=endEdit; + entry.onclick=onClickSingleLineEntry; + + var btnML=document.createElement("input"); + btnML.type="button"; + btnML.value="ML"; + btnML.onclick=onClickSwitchMultiline; + + container.appendChild(entry); + if (!isMultiLineDisabled) { + container.appendChild(btnML); + } + container.entry=entry; + + container.update=update; + container.focus=focus; + container.show=show; + container.hide=hide; + + return(container); + function onClickSingleLineEntry(event){ + entry.focus(); + event.stopPropagation(); + } + function onClickSwitchMultiline(event){ + switchMultiLine(); + event.stopPropagation(); + } + function hide() { + container.style.display="none"; + } + + function show() { + container.style.display="inline"; + } + + function update() { + entry.value=m_text; + } + + function focus() { + entry.focus(); + entry.select(); + } + function updateText() { + m_text = entry.value; + } + function fireOnEnter(evt, frm ) { + var keyCode = null; + + if( evt.which ) { + keyCode = evt.which; + } else if( evt.keyCode ) { + keyCode = evt.keyCode; + } + if( 13 == keyCode ) { + endEdit(); + return(false); + } + return(true); + } + + function endEdit(){ + if (setText(entry.value)) { + setDisplayMode(); + } + } + + function switchMultiLine(){ + endEdit(); + changeMode("mlEntry"); + } + } + + function createDisplayControl() { + var container=document.createElement("span"); + container.setAttribute("class","boxText"); + container.onclick=onClickDisplayControl; + container.appendChild(document.createTextNode(m_text)); + + container.update=update; + container.show=show; + container.hide=hide; + container.focus=focus; + return(container); + function onClickDisplayControl(event){ + if (!isDisabled) { + setSlEntryMode(); + } + event.stopPropagation(); + } + function hide() { + container.style.display="none"; + } + function show() { + container.style.display="block"; + } + function update(){ + container.firstChild.data=m_text; + } + function focus(){ + return(true); + } + } + function toXML(){ + var xmlEle=document.createElement('TEXTCONTROL'); + xmlEle.setAttribute("ismultiline",(m_isMultiline)?"true":"false"); + xmlEle.setAttribute("mode",m_mode); + xmlEle.appendChild(document.createTextNode(m_text)); + return(xmlEle); + } + function fromXML(inXML){ + m_isMultiline=("true"==inXML.getAttribute("ismultiline")); + m_text=inXML.firstChild.nodeValue; + m_mode=inXML.getAttribute("mode"); + return(construct()); + } +} diff --git a/todoList.txt b/todoList.txt new file mode 100644 index 0000000..f0daca9 --- /dev/null +++ b/todoList.txt @@ -0,0 +1,16 @@ +Icons in Nodes (standard) +Proper Error Handling (PHP/JAVASCRIPT) (Error message translations) +Terms and Conditions +(MSIE support) +Documentation +---------------------------------- +Changable stylesheets +Change colors of Nodes +Changing font +Change colors of Relations +Change relation design (Bezier) +Import foreign file formats +User uploadable icons +sharing files +collaboration online +printing diff --git a/toolbar.js b/toolbar.js new file mode 100644 index 0000000..acd3846 --- /dev/null +++ b/toolbar.js @@ -0,0 +1,178 @@ +function toolbar(nodeClass) { + var m_displayDom=document.createElement("span"); + m_displayDom.setAttribute("id","mmToolbar_" + nodeClass.getPKey()); + m_displayDom.setAttribute("class","boxToolbar"); + + var m_addNode=new dataTools.imageDom('pix/icnStar.png',"+","Add node"); + m_addNode.onclick=addNodeClick; + m_displayDom.appendChild(m_addNode); + + var m_collapseNode=new dataTools.imageDom("pix/icnArrowUp.png","_","Collapse node"); + m_collapseNode.onclick=collapseNodeClick; + m_collapseNode.hide=function(){m_collapseNode.style.display="none";} + m_collapseNode.show=function(){m_collapseNode.style.display="inline";} + m_collapseNode.hide(); + m_displayDom.appendChild(m_collapseNode); + + var m_expandNode=new dataTools.imageDom("pix/icnArrowDown.png","-","Expand node"); + m_expandNode.onclick=expandNodeClick; + m_expandNode.hide=function(){m_expandNode.style.display="none";} + m_expandNode.show=function(){m_expandNode.style.display="inline";} + m_expandNode.hide(); + m_displayDom.appendChild(m_expandNode); + + var m_eraseNode=new dataTools.imageDom("pix/icnWaste.png","E","Erase Node and subnodes"); + m_eraseNode.onclick=eraseNodeClick; + m_displayDom.appendChild(m_eraseNode); + + var m_addFreeLink=new dataTools.imageDom("pix/icnNewBranch.png","F","Add Free relation"); + m_addFreeLink.style.position="absolute"; + m_addFreeLink.isDragging=false; + m_displayDom.appendChild(m_addFreeLink); + dragNDrop.activateForObject(m_addFreeLink); + dragNDrop.addSubscriber(freeLinkEventNotify,"endMoving"); + + var m_changeParentNode=new dataTools.imageDom("pix/icnMoveBranch.png","P","Change Parent relation"); + m_changeParentNode.style.position="absolute"; + m_changeParentNode.isDragging=false; + m_displayDom.appendChild(m_changeParentNode); + dragNDrop.activateForObject(m_changeParentNode); + dragNDrop.addSubscriber(changeParentNodeEventNotify,"endMoving"); + + var m_debugNode=document.createElement("span"); + if (g_debug) { + m_debugNode.appendChild(document.createTextNode("d")); + m_debugNode.style.position="absolute"; + m_debugNode.onclick=debugNodeClick; + m_displayDom.appendChild(m_debugNode); + } + + m_displayDom.mmClass=nodeClass; + m_displayDom.hide=hide; + m_displayDom.show=show; + + return(m_displayDom); + + + function freeLinkEventNotify(publisher,eventType,addInfo){ + if (("endMoving"==eventType) && (publisher==m_addFreeLink) && (addInfo != null)) { + var parentNode=nodeClass; + var childNode=addInfo; + if ( parentNode!=childNode) { + var newNodeRel=new nodeRel(dataTools.getNewPKey(),parentNode,childNode,"free"); + parentNode.addNodeRelation(newNodeRel); + childNode.addNodeRelation(newNodeRel); + childNode.redrawNodeRelations(); + } + hide(); + } + } + + function changeParentNodeEventNotify(publisher,eventType,addInfo){ + if (("endMoving"==eventType) && (publisher==m_changeParentNode) && (addInfo!=null)) { + var childNode=nodeClass; + var newParentNode=addInfo; + var mainNodeRel=childNode.getParentNodeRelation(); + if ( (newParentNode!=childNode) + && (!newParentNode.isChildNodeOf(childNode)) + && (newParentNode!=childNode.getParentNode()) ) { + if (mainNodeRel != null) { + var oldParentNode=mainNodeRel.getParentNode(); + oldParentNode.deleteNodeRelation(mainNodeRel); + childNode.deleteNodeRelation(mainNodeRel); + mainNodeRel.erase(); + } + var newNodeRel=new nodeRel(dataTools.getNewPKey(),newParentNode,childNode); + newParentNode.addNodeRelation(newNodeRel); + childNode.addNodeRelation(newNodeRel); + newNodeRel.redraw(); + } + hide(); + } + } + + function addNodeClick(event){ + event.stopPropagation(); + nodeClass.expand(true); + var child=new node(dataTools.getNewPKey(),"(enter text)"); + var originX=parseInt(nodeClass.style.top.split("px")[0]); + var originY=parseInt(nodeClass.style.left.split("px")[0]); + + child.style.top=(originX+50)+"px"; + child.style.left=(originY+50)+"px"; + + var parent=nodeClass; + + var newNodeRel=new nodeRel(dataTools.getNewPKey(),parent,child); + + parent.addNodeRelation(newNodeRel); + child.addNodeRelation(newNodeRel); + + child.redrawNodeRelations(); + } + + function eraseNodeClick(event){ + event.stopPropagation(); + nodeClass.erase(); + } + + function expandNodeClick(event){ + event.stopPropagation(); + nodeClass.expand(); + m_expandNode.hide(); + m_collapseNode.show(); + } + + function collapseNodeClick(event){ + event.stopPropagation(); + nodeClass.collapse(); + m_collapseNode.hide(); + m_expandNode.show(); + } + + function debugNodeClick(event){ + event.stopPropagation(); + alert( nodeClass.debugOut()); + } + + function handleCollapseExpand(){ + // Collapse + if ((!m_displayDom.parentNode.isLeafNode()) + && (!m_displayDom.parentNode.isCollapsed())) { + m_collapseNode.show(); + } else { + m_collapseNode.hide(); + } + // Expand + if ((!m_displayDom.parentNode.isLeafNode()) + && (m_displayDom.parentNode.isCollapsed())) { + m_expandNode.show(); + } else { + m_expandNode.hide(); + } + } + function show(){ + handleCollapseExpand(); + m_displayDom.style.display="block"; + m_displayDom.style.top=-1*(m_displayDom.offsetHeight) + "px"; + // -20 is for the round corners (takes 10 px each side) + m_displayDom.style.width=(nodeClass.offsetWidth-20) + "px"; + + //repaint FreeLink Control + m_addFreeLink.style.left=66; + m_addFreeLink.style.top=0; + + //reposition changeParent Control + m_changeParentNode.style.left=88; + m_changeParentNode.style.top=0; + + //reposition debug Control + m_debugNode.style.left=0; + m_debugNode.style.top=15; + } + function hide(){ + if ((!m_addFreeLink.isDragging) && (!m_changeParentNode.isDragging)) { + m_displayDom.style.display="none"; + } + } +} diff --git a/tutorial/exampleMap1.png b/tutorial/exampleMap1.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d25ab282d849bd6bb99403252de25808cd1b6d GIT binary patch literal 11135 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 literal 0 HcmV?d00001 diff --git a/tutorial/iconMenu1.png b/tutorial/iconMenu1.png new file mode 100644 index 0000000000000000000000000000000000000000..de00b1cb0f3e02699ca9f1e696145d9887bbed08 GIT binary patch literal 10163 zcmV;kCrsFhP)Px#32;bRa{vGmbN~PnbOGLGA9w%&00(qQO+^RT1PBN^2q)~lJ^%m!8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9bAOJ~3K~#9!?R|H2T-CMyKIgXSqZ#!s z+p=X#?gbmLvBAa^6EKiGdW$J9h43CpfL|a9A%qYDaT-ZzF`dv%HO7FujT^4AEyrVs=lwCVkZox+Gg1hwpZ4-vzH@cwn|;rB_ugmkv*!$Yxu_ialj|A|!H9f? zf=7m6gozP3N%+`**Eb$M0VV)|F*Y(B|0zKTjd-V#I58pvd8c0S`~Cf1 zD(Jc;6d^?g;cz$(qRZuq55?Eji8VF6VX!e{!ewO)!UPnoME^C&^Hb$Atvw_dmc20A9U%rSaBgNy@X|?BgR+)WPI_$3q`?T2Bnqj z=H?lKfalH?_wJR;$`av$kiQ_bis!9@00@}@0SEv*fEB20@tuzvj^04hmUg3$3zff~dnYTo~_cK2SvAY(%j6CoLzE@Y&G%?gqPs>T4s za743N2W7&Rm9+^VPZWtDjDGs*-y6pCnKQp%RJ2r*;Lss3nLyXUFrd6V4oEosf~xM4 zBo!gkC!gRWM|1$ZW=-2wR~4L?4b-n&*9HJ)Gk@;6Qvk5d_EC5DwTww$f2erAFWk`? z40LJ^V|;{Q@K2O#hCwOS$B$=rJJ{`b!UPL|0YCw$&Bk*a;y7fpaR8kF9st#3 zs`^Gi#j^>?ZVSjVn9Ty_A_$eMY8YcDAy6>^3<@0`Fm|k-fI;-i-zzKku3VYFY#9I? zd-&mb2$?iZDlG*?VT_@{rcVg@1p#A>7=x>>Vl!tt0GwrIZU6%S1EBAGr@(6E0no)4 z7Xc^$3;+b-fTB$O`a{KILa zU$zVY>hHM2xn)bC&E}pv7fTXrZr0|`Rn9qQkSUzOFvg;YIS%LM;^JZhApp<;q5ueh zO`DcBZCW}22H*e;fG7aPn0zCk28k1C1^G6QSJg#KI9;fOM2eYIot=S~UP>%!GU<8*03n0`5Mu}-1waJg0T6%*fR8}Y7izCUw^%y|Ci6>RWjZ7Bge}kGUGUO;E;a% z&D3l*lB9t}B2AT*rcIl&5ki@n$l;)b$iMz|f^Qc^l`&95)Wk6)AOOOc3J^w!JMqND zChxT8K6iG)8F~E`ZF5Y*7f45DXcBx?=3-g@ha|NY;6U0u8& zpu$39(W3B*6||%z(P|~ehQY{jL-?`67@^c)OlM4C%mdI35Co6`Gynp?pg97|4**cc zgn^)1bCP8uXtlmnQ&XmC*kU0w zXKFX!oLse%cNhj!i$MM!hwqIT^(rAMrBO;ll=>Kx0U`hq02zWoxPLo5G#!8#M&UqE zloG=**eV5I8-X<%qyxKKq(8T_3!Sk12+UXwds+Y#01d!M2x@B-J+B)7jmZi#r6D>? zW$%uGyYoQM;oYNfv?C5wLWQG@?ChoY|7`Q*2~{&Dw-gn0AKD3$ltRt!yeqEw_Uzg3 z0?^D%T3ifCu1%Rt*8osLSU879&qnBFoxUD5I%UI9bv=Sq zzl)7DVi?MoT9wFT4$u5SrUV!X4g|#~I0^*?1vmZAU9CrJy}3CSw=2cP5R7lQ^2*YZ z61-yv89NpjgJjldEtY#^d4;C=Wf`$K;4qlwUxa�aFRow=jjhaI4BaNMBJjz!aX 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 h_cf4_;rI{A{{g4~LH?PAf? literal 0 HcmV?d00001 diff --git a/tutorial/iconMenu2.png b/tutorial/iconMenu2.png new file mode 100644 index 0000000000000000000000000000000000000000..6383f7b16d7e360326257b0464b2a79f7f620373 GIT binary patch literal 1149 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 literal 0 HcmV?d00001 diff --git a/tutorial/index.html b/tutorial/index.html new file mode 100644 index 0000000..09c00d8 --- /dev/null +++ b/tutorial/index.html @@ -0,0 +1,27 @@ + +Webthink.net - Tutorial + + +

Example

+ +
With a mindmap you can structure information hierarchically. This is a good way to do capturel information during a brain-storming.
+ +

Players

+ + + + + + + + + +
NodeMindmaps consists of nodes which are joined by relations.
Parent-RelationA node can have either one or no parent relations.
Free-RelationThere can be as many free relation between nodes as you like.
Relation-MenuWhen clicking on relations a context menu is offered in order to delete the relation.
IconsNodes can carry icons.
Icon-MenuWhen clicking on a nodes Border then the Icon-selection pops up. Click the icons you want to add.
Icon-Context menuWhen clicking on a icon in a node, a context menu offers to delete the clicked icon.
ToolbarWhen hovering a node with the mouse a toolbar menu becomes visible. From here operations that are related to the node are accessible.
+ +

Basic operations

+ + +

Advanced operations

+ + + diff --git a/tutorial/node1.png b/tutorial/node1.png new file mode 100644 index 0000000000000000000000000000000000000000..9416f77908434920d11196e26bfe0fe4e8d5cdf4 GIT binary patch literal 716 zcmV;-0yF)IP)Px#32;bRa{vGmbN~PnbOGLGA9w%&00(qQO+^RT1PBN-8JwObg#Z8m8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0y#-UK~z}7?U_A@;y@I~$4^8BgNt_F zfr97>B9`HZ7TN?XL=bcd+E^)e3c+53*ouXPjfWBx3*j0+3qd;%!*(`{tr!#}g#oV! zgq$ABR%;CTck|C9%#ZgnGcTjKUa#OzzrK6GGwAjG?cP)fk)DO*V>YD(cy1=IlmO2S zf>IhhLMkPYoFs^(Xn*@5XGuo-a;ZOljQ&}OaMHhhKjp&vS9ZI7Fc{o8pM3l0Bft7v zYBrk;!$@j*NG6l@dRN3dxiAc)XWEEZv;)9K`ME*2!4%?878 zx7+0%2!hV%v(ac|7zTnM&U|@!+3)vOtCfcY0GLds<#MUfXhe4)%4W0ecAFm}2r?WF zFPFJDm>8vW-TAj|>Kb+wGQRS&}4Uv6zUE^m=_JlM$BUa5(gOz5RZ_ zR4Q?1p-@<_*TG=W=kp08%jL4i<7u^8{6g}W=0ZN>$<2k_)yiG1j3jEL|Nbd|UcJ7* y$%XeUNRp{N4n!#&NPq|2T$yotu8WNOWc&p)8`f|dSc_i(0000 literal 0 HcmV?d00001 diff --git a/tutorial/node2.png b/tutorial/node2.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd6b261ee3d5ebb3c82a39cc343968a6f7fc342 GIT binary patch literal 1201 zcmV;i1Wx;jP)Px#32;bRa{vGmbN~PnbOGLGA9w%&00(qQO+^RT1PBQfDPcg)djJ3c8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b1RhC5K~!ko?V3?YDp?rEM=1-0P3rdG zB18r@-AE!4dkC{u#k8!D>Lr;#iVRnXl90fMz_1Jo*(kEIH^Y)3Z5Oe!C?ZHGMs_0% zpQ0Wr#Ue}++K02unx#Z*ce!)@p1$*+!*~3h?>KYj%tv^Beulo4J^rNzPVQF|^#2** zO=j%Jeed?>R+ZEYxuTCLW#wKa>yg7Z9^&1M8a8XFr)BvNs4 zv0ksY+wC}K-re05i9}eF$z(bl4&VoaLAhKG!?0W~4~0U>BAlF@G&eWHFwEg_R##WC z1-Y`aQc+RS(a~{pa|1+|%T-!h%3v@g63Nlg5fH=Sa93AXSy>r^Aa{3n@k3WtRoQH| z^fO;xUeai^7rRyh0XPPOK`a*ge7^Sfc7wr?EP_U(Q7V-viVhAA>h*d|_jtprtIu&KA*q6y`3zA+wB&KL?jZarKKet4r97nt;Ga8LLolf9~LLoAl z3_(zCZf=UTeS3RrGMW1N`UC<&yiTQ3AqXOq$=F0pPEJN5k?!tp7K`Qc`LIzK3u8r%)&l4-XIoMIsRjg_10SLZNtk ze3Z##^YioZdN3G-An5-7{>zsyKq)9FSYBR6QBLG93LO^c)ZHW z$~2!DeBOSWPNxR~fp50o&YT%!-X%Zqg7z`{?WdnVFL)-;8RiUgh8dU4;8R`vH%q)4 zV9fn$A|^=q27Y60;}tuBiwM1}JHQ|I>r#WaYb$VRiM18+hBNrrr9*!M3)97*d;jt; P00000NkvXXu0mjfBupzZ literal 0 HcmV?d00001 diff --git a/tutorial/parentRelation1.png b/tutorial/parentRelation1.png new file mode 100644 index 0000000000000000000000000000000000000000..ce198bc89a7a8a7fbd0884eccd57872d92220fd4 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^en70m!2~4h{#9fHDaPU;cPEB*=VV?2Ih+L^k;M!Q zLM0%~crQ)90w~B{;_2(keuIUBlaaaC@8M3MkYtH#M2T~LZf(F{))$B>A_Z*OkoZBP(kz3@2cp~$7f9`7C)oKsNtd@oiOF+tNQl|QQ3gug~qE|B> o`&Si`liq2hsruu^v-E$=UKeD=BUS1z0Nu#o>FVdQ&MBb@0EEbH@&Et; literal 0 HcmV?d00001 diff --git a/tutorial/relationMenu1.png b/tutorial/relationMenu1.png new file mode 100644 index 0000000000000000000000000000000000000000..5bd2dc6161fb1b6629c9e05b2a8d44ef3e1f4b66 GIT binary patch literal 1117 zcmV-j1fu(iP)T00001b5ch_0Itp) z=>Px#32;bRa{vGmbN~PnbOGLGA9w%&00(qQO+^RT1PBN_F6{aVf&c&j8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b1IkH6K~!ko?OHucD@_o$+I&{bpPD{1OUM7SOdpjfSy~x@$I1lAW0H8 z;&1t@)A2&VYw`ET4_Q_dLbxe^4y)D5vzQl(|F^|83|d-Rrl+Ul@wk>)bVxzk#l?ls z=POnytE#rP)^4}Y&(CKvng2wUOp?ZhlyYdJwOAS5YPH5?C9u-cCiEV z(Ug{{1Z2Sme|~-rhr=bP>h0}iX?D9krzCbrI2_jLbnKxk91gRQS@iYw(Jt1~!WO5~ zX#i%knKqqHCxET3tyC(tySocuVq!wM7>zV_rqW^=R##VxosJOl{{DV`eh$E3Fy!R0 zO}E<(V0Ly^6h*(^4`6U`kfjX|4=0n!&CN{!CX=aji;YGjZJNzy**fd%>y^qh($twM z7Pq&z3xc2}h-|uOG`g^`;BYwD=PDMLmzM(&MUfEl`1r_X8>L-cT@gZ3sT4bkwY2b| zjmFKs>y#ffa;BI@T2V{@Z*OlWCnpw*MHIzEB2jD*K@faCpI)!u*x1l|@$vD?%S(2(>+9=wyWL%*;GJ zJ>{G-A8mVkyRNRzWHJp64XHC#EWW$DtEi{|;Pra7t2#V9?Ck6`8jT*0=j`kZz}(!N zQj%=0U@+)#IE+SPS6A2G-d;XQ`7F+H_25_DFS>eg@XtWpVh(Qcm*I!{Er5e(F}Ik5 j;|rkU|7qie;@jh2%X&Deq&SM000000NkvXXu0mjf6T1rO literal 0 HcmV?d00001 diff --git a/tutorial/toolBar1.png b/tutorial/toolBar1.png new file mode 100644 index 0000000000000000000000000000000000000000..1a04b1694be0e63369975cfb554b8a418d4d0c64 GIT binary patch literal 3358 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 literal 0 HcmV?d00001 diff --git a/uiTools.js b/uiTools.js new file mode 100644 index 0000000..96a9cb4 --- /dev/null +++ b/uiTools.js @@ -0,0 +1,20 @@ +document.getElementById("generalControls").appendChild(createWaitIcon()); +setBusyWait(); + +function createWaitIcon(){ + var imgNode=document.createElement("img"); + imgNode.setAttribute("src","pix/icnBusyWait.png"); + imgNode.id="icnBusyWait"; + imgNode.style.display="none"; + return(imgNode); +} + +function setBusyWait(){ + document.body.style.cursor="wait"; + document.getElementById("icnBusyWait").style.display="block"; +} + +function unsetBusyWait(){ + document.body.style.cursor=""; + document.getElementById("icnBusyWait").style.display="none"; +} diff --git a/webRequest.js b/webRequest.js new file mode 100644 index 0000000..4349146 --- /dev/null +++ b/webRequest.js @@ -0,0 +1,243 @@ +var g_filePKey=null; + +function makeRequest(tgtPage,requesttext){ + // Mozilla + if (window.XMLHttpRequest) { + var oXML=new XMLHttpRequest(); + } else { + // IE + var oXML=new ActiveXObject("Microsoft.XMLHTTP"); + } + + oXML.open("POST",tgtPage,false); +// alert("req" + requesttext); + oXML.send(requesttext); + + var theResponse = oXML.responseText; +// alert("resp" + theResponse); + + // Generic Webservice Error handling... + var parser=new DOMParser(); + var doc=parser.parseFromString(theResponse,"text/xml"); + if ((doc.documentElement.getAttribute("success")!="true") + && (doc.documentElement.getAttribute("fileformat")==null) + && (doc.documentElement.getAttribute("errorclass")!="AppError")) { + alert("Problem: (" + doc.documentElement.getAttribute("success") + ")\n" + theResponse); + } + return(theResponse); +} + + +function loadMap(filePKey) { + setBusyWait(); + window.scrollTo(0,0); + var xmlDoc=document.implementation.createDocument('','X',null); + xmlDoc.documentElement.setAttribute("function","OPENFILE"); + xmlDoc.documentElement.setAttribute("filepkey",filePKey); + var txtResp=makeRequest('requestTarget.php',xmlDoc); + var parser=new DOMParser(); + var doc=parser.parseFromString(txtResp,"text/xml"); + g_filePKey=filePKey; + dataTools.setPKey(doc.documentElement.getAttribute("nextpkey")); + deleteAllRootNodes(); + for (var i=0;i0){ + createFreeRelations(theChild); + } + if (theChild.nodeName=="NODEREL"){ + if (theChild.getAttribute("relationtype")!="main"){ + var newNodeRel=new nodeRel().fromXML(theChild); + newNodeRel.redraw(); + } + } + } +} + +function saveMap(description) { + setBusyWait(); + var xmlDoc=document.implementation.createDocument('','ALL',null); + xmlDoc.documentElement.setAttribute("fileformat","1"); + xmlDoc.documentElement.setAttribute("nextpkey",dataTools.getNewPKey()); + xmlDoc.documentElement.setAttribute("function","SAVEFILE"); + xmlDoc.documentElement.setAttribute("filepkey",g_filePKey); + xmlDoc.documentElement.setAttribute("description",description); + var nodeSets=xmlDoc.createElement("NODESET"); + for (var i=0;i=0;i--){ + rootNode[i].erase(); + } +} + +function getUserInfo(attribute) { + var xmlDoc=document.implementation.createDocument('','X',null); + xmlDoc.documentElement.setAttribute("function","GETUSERINFO"); + var txtResp=makeRequest('requestTarget.php',xmlDoc); + var parser=new DOMParser(); + var doc=parser.parseFromString(txtResp,"text/xml"); + return(doc.documentElement.getAttribute(attribute)); +} diff --git a/workspaceResize.js b/workspaceResize.js new file mode 100644 index 0000000..957ca9d --- /dev/null +++ b/workspaceResize.js @@ -0,0 +1,78 @@ +const BOTTOMBORDER=100; +const RIGHTBORDER=300; +const LEFTBORDER=50; +const TOPBORDER=50; + +document.maxX=0; +document.maxY=0; +dragNDrop.addSubscriber(notifyObjectMove,"endMoving"); + + +function notifyObjectMove(publisher,eventType,addInfo){ + if (("endMoving"==eventType) && (addInfo != null)){ + var posX=parseInt(addInfo.style.left.split("px")[0]); + var posY=parseInt(addInfo.style.top.split("px")[0]); + + if (posYdocument.maxX) || ((posY+BOTTOMBORDER)>document.maxY)) { + document.maxX=posX+RIGHTBORDER; + document.maxY=posY+BOTTOMBORDER; + resizeWorkspace(); + } + } +} + +function moveAllNodes(axis,pixels){ + var allNodes=document.getElementById("nodes").childNodes; + for (var i=0;i