REVO2700 WebDiagram3@0 MacOSXaltMinWidth531 altDCpreXMLa close Fred Dot Diagram close Left to Right true #FFFFFF 1000 1000 Sans true 7 plain rounded #C0C0C0 #808080 #FFFFFF solid Sans 7 normal #000000 medium #000000 Sans box plain square #000000 solid true 7 #E6E6E6 #000000 WinXPaltMinWidth531WinXPaltminHeight413 altMinWidth531 altMinHeight413altResizeControlListfield id 1004 of card id 1002 of stack "" field id 1006 of card id 1002 of stack "" button id 1011 of card id 1002 of stack "" field id 1017 of card id 1002 of stack "" button id 1019 of card id 1002 of stack "" button id 1021 of card id 1002 of stack "" button id 1023 of card id 1002 of stack "" field id 1025 of card id 1002 of stack "" button id 1047 of card id 1002 of stack ""MacOSXaltMinHeight413 altAboutc

Website Diagrammer Plugin for DiagramCreator

©2010 Chipp Walters

This plugin allows you to create editable node diagrams using DiagramCreator. It generates a standard DiagramCreator XML file by crawling the website URL designated in the HTTP URL field. Be sure the URL is a valid one and not a redirection of a domain.

This plugin works by downloading the html from the host page, then searching for links, and following them to their destination. If the Level Iterations is greater than 1, the followed links will themselves also be followed, up to the number of iterations you choose. Warning, too many iterations will create an unwieldy chart! Currently, this plugin is limited to only 600 lines of chart data, which will take SOME TIME to render. I have used it to generate over 4000 lines, but DiagramCreator balks on rendering such a large number of nodes. Actually, at 600 nodes, the diagram is almost too large.

After you enter the URL, press the Crawl Web button and the plugin begins the process. It can take up to several minutes to finish.

You can press the STOP button anytime during the web crawling and the data up to that point is saved.

You can press the Generate Diagram button and your data will be transferred to DiagramCreator. If the file is larger than 300 lines, the auto redraw on DiagramCreator will be turned off. This is so you can make any changes you like and manually redraw the diagram.

priv_ResizeControlListRfield id 1004 of card id 1002 of stack "C:/My Dropbox/DiagramCreator/dc_plugs/WebDiagram.rev" field id 1006 of card id 1002 of stack "C:/My Dropbox/DiagramCreator/dc_plugs/WebDiagram.rev" button id 1011 of card id 1002 of stack "C:/My Dropbox/DiagramCreator/dc_plugs/WebDiagram.rev" field id 1017 of card id 1002 of stack "C:/My Dropbox/DiagramCreator/dc_plugs/WebDiagram.rev" button id 1019 of card id 1002 of stack "C:/My Dropbox/DiagramCreator/dc_plugs/WebDiagram.rev" button id 1021 of card id 1002 of stack "C:/My Dropbox/DiagramCreator/dc_plugs/WebDiagram.rev" button id 1023 of card id 1002 of stack "C:/My Dropbox/DiagramCreator/dc_plugs/WebDiagram.rev" field id 1025 of card id 1002 of stack "C:/My Dropbox/DiagramCreator/dc_plugs/WebDiagram.rev" button id 1047 of card id 1002 of stack "C:/My Dropbox/DiagramCreator/dc_plugs/WebDiagram.rev"E--> XML FUNCTIONS function addTagData pTagName, pTagData return "<" & pTagName & ">" & encodeCRs(encodeTabs(pTagData)) & "" end addTagData function encodeAll pStr put encodeCRs(pStr) into pStr put encodeTabs(pStr) into pStr return pStr end encodeAll function decodeAll pStr put decodeCRs(pStr) into pStr put decodeTabs(pStr) into pStr return pStr end decodeAll function encodeCRs pStr replace cr with gCR in pStr return pStr end encodeCRs function decodeCRs pStr replace gCR with cr in pStr return pStr end decodeCRs function encodeTabs pStr replace tab with gTab in pStr return pStr end encodeTabs function decodeTabs pStr replace gTab with tab in pStr return pStr end decodeTabs function delTagData pTagName, pTagData put "<" & pTagName & ">*" into tFilter put "filter pTagData without " & quote & tFilter & quote into tDo do tDo return pTagData end delTagData function getTagData pTagName,pTagData filter pTagData with "*<" & pTagName & ">*" put word 1 to the number of words in pTagData of pTagData into pTagData replace "<" & pTagName & ">" with "" in pTagData replace "" with "" in pTagData return pTagData end getTagData function getTag pTagName,pTagData --> RETRIEVES SINGLE LINE OF TAG INCLUDING TAG AND ELEMENT TEXT filter pTagData with "<" & pTagName & ">*" return word 1 to -1 of pTagData end getTag function getTagName pLine put offset("<",pLine) into tStart put offset(">",pLine) into tEnd return char tStart+1 to tEnd-1 of pLine end getTagName function getAltNumberNodes pTagName,pXML --> RETURNS THE NUMBER OF NODES FOR TAG pTagName IN pXML put "<"& pTagName &">" into tTag put 0 into tCount put 0 into tOffset repeat put offset(tTag,pXML,tOffset) into tStart if tStart = 0 then return tCount add tStart to tOffset add 1 to tCount end repeat retrun tCount end getAltNumberNodes function getAltNumberChildrenNodes pTagName,pTagData --> RETURNS THE NUMBER OF CHILD NODES FOR TAG pTagName IN pXML put getAltTagData(pTagName,pTagData) into tXML put "<" into tTag put 0 into tCount put 0 into tOffset repeat put offset("<",tXML) into tStart if tStart=0 then exit repeat put offset(" RETURNS XML OF CHILD pNodeNum OF TAG pTagName --> USE WHEN YOU DON'T KNOW ALL THE NAME OF CHILDREN put getAltTagData(pTagName,pXML) into tXML put "" into tTxt repeat pNodeNum times put offset("<",tXML) into tStart if tStart = 0 then return "" put offset(">",tXML) into tEnd if tEnd = 0 then return "" put char tStart+1 to tEnd-1 of tXML into tTagName put offset("",tXML) into tEnd put the number of chars in ("") into tLength put char tStart to (tEnd+tLength-1) of tXML into tTxt put char (tEnd+tLength+1) to -1 of tXML into tXML end repeat return tTxt end getAltChildNode function getAltTagData pTagName,pTagData,pTagInstance --> RETURNS ALL DATA INSIDE OF THE INSTANCE pTagInstance OF TAG pTagName FROM THE pTagData if pTagInstance is "" then put 1 into pTagInstance put 0 into tOffset repeat pTagInstance times put offset("<"& pTagName &">",pTagData,tOffset) into tStart if tStart = 0 then return "" add tStart to tOffset end repeat delete char 1 to tOffset + the length of pTagName +1 of pTagData put offset("",pTagData) into tEnd delete char tEnd to the length of pTagData of pTagData replace numToChar(13) with "" in pTagData return word 1 to the number of words of pTagData of pTagData end getAltTagData function getAltElementText pTagName,pTagData,pTagInstance --> RETURNS THE ELEMENT TEXT OF THE INSTANCE pTagInstance OF TAG pTagName FROM THE pTagData --> THE ELEMENT TEXT IS DEFINED AS THE TEXT AFTER THE TAG AND BEFORE ANY OTHER TAGS if pTagInstance is "" then put 1 into pTagInstance put 0 into tOffset repeat pTagInstance times put offset("<"& pTagName &">",pTagData,tOffset) into tStart if tStart = 0 then return "" add tStart to tOffset end repeat delete char 1 to tOffset + the length of pTagName +1 of pTagData put offset("<",pTagData) into tEnd delete char tEnd to the length of pTagData of pTagData replace numToChar(13) with "" in pTagData return word 1 to the number of words of pTagData of pTagData end getAltElementText --> ALTLAYOUT SCRIPTS --> DO NOT TOUCH UNLESS YOU KNOW WHAT YOU ARE DOING local lAltChecking,lAltOldWH,lPlatform local lHasDividerBeenUsed on preOpenStack --> AUTO-GENERATED BY altLayout Manager initAltLayoutLib end preOpenStack on preOpenCard --> COMMENT THIS SCRIPT OUT FOR SINGLE CARD STACKS --> THIS SCRIPT WILL AUTO LAYOUT FOR EACH CARD BEFORE OPENING --> THIS WAY ONLY THE CONTROLS ON A GIVEN CARD ARE MANANAGED AT ONE TIME --> RESULTING IN MUCH FASTER PERFORMANCE --> IF YOU HAVE A preOpenCard SCRIPT IN YOUR CARD, THEN BE SURE AND PASS IT --> EDIT THIS SCRIPT HOW YOU LIKE put the width of this stack into pW put the height of this stack into pH send "resizeStack pW,pH,pW,pH" to this card in 50 millisecs end preOpenCard on resizeStack pNewW,pNewH,pOldW,pOldH --> AUTO-GENERATED BY altLayout Manager --> CAPTURE FIRST pOldW,pOldH if lAltOldWH is empty then put pOldW,pOldH into lAltOldWH get the priv_ResizeControlList of this stack repeat for each line L in it if exists(L) then put the altLayoutManager["altCard"] of L into tCard if word 1 of tCard is not "card" then --> IT IS A CONTROL WHICH IS PART OF A BACKGROUND --> IS THE BACKGROUND ON THIS CD? if tCard is among the lines of the groupIDs of this card then altSetRect L,(the altLayoutManager["altCmd"] of L) end if else if tCard = the name of this card then altSetRect L,(the altLayoutManager["altCmd"] of L) end if end if end if end repeat if lAltChecking <> true then CheckMouseState end if pass resizeStack end resizeStack --> END AUTO-GENERATED BY altLayout Manager function checkHasDividerBeenUsed return lHasDividerBeenUsed end checkHasDividerBeenUsed() on setHasDividerBeenUsed pFlag put pFlag into lHasDividerBeenUsed end setHasDividerBeenUsed on initAltLayoutLib switch the platform case "MacOS" put "MacOSX" into lPlatform altSetLayoutMode "MacOSX" break case "Win32" put "WinXP" into lPlatform altSetLayoutMode "WinXP" break default put "Other" into lPlatform altSetLayoutMode "Other" break end switch put false into lHasDividerBeenUsed end initAltLayoutLib on altSetLayoutMode pMode put the short name of this stack into tTheStackName if tTheStackName is "LayoutManager" then answer "Can't edit the Layout Manager stack!" exit to top end if replace space with "" in pMode altInitStack pMode altInitControls pMode end altSetLayoutMode on altInitStack pMode put the short name of this stack into tTheStackName if pMode is "WinXP" then if there is a btn "altDrag" then show btn "altDrag" end if else if there is a btn "altDrag" then hide btn "altDrag" end if end if --> RESIZE STACK put the rect of this stack into tRect --> MINWIDTH put pMode & "altMinWidth" into tProp if "altMinWidth" is among the lines of the customKeys of this stack then if tProp is among the lines of the customKeys of this stack then put "put the " & tProp & " of this stack into tPropValue" into tDo do tDo if isNumber(tPropValue) and tPropValue > 32 then set the altMinWidth of this stack to tPropValue end if end if set the minWidth of this stack to the altMinWidth of this stack end if --> MINHEIGHT put pMode & "altMinHeight" into tProp if "altMinHeight" is among the lines of the customKeys of this stack then if tProp is among the lines of the customKeys of this stack then put "put the " & tProp & " of stack " & quote & tTheStackName & quote & " into tPropValue" into tDo do tDo if isNumber(tPropValue) and tPropValue > 32 then set the altMinHeight of this stack to tPropValue end if end if set the minHeight of this stack to the altMinHeight of this stack #set the height of this stack to the altMinHeight of this stack end if --> MAXWIDTH put pMode & "altMaxWidth" into tProp if "altMaxWidth" is among the lines of the customKeys of this stack then if tProp is among the lines of the customKeys of this stack then put "put the " & tProp & " of stack " & quote & tTheStackName & quote & " into tPropValue" into tDo do tDo if isNumber(tPropValue) and tPropValue > 32 then set the altMaxWidth of this stack to tPropValue end if end if set the maxWidth of this stack to the altMaxWidth of this stack #set the width of this stack to the altMaxWidth of this stack end if --> MAXHEIGHT put pMode & "altMaxHeight" into tProp if "altMaxHeight" is among the lines of the customKeys of this stack then if tProp is among the lines of the customKeys of this stack then put "put the " & tProp & " of stack " & quote & tTheStackName & quote & " into tPropValue" into tDo do tDo if isNumber(tPropValue) and tPropValue > 32 then set the altMaxHeight of this stack to tPropValue end if end if set the maxHeight of this stack to the altMaxHeight of this stack #set the height of this stack to the altMaxHeight of this stack end if --> SET THE STACK RECT USING MIN NUMBERS set the rect of this stack to \ item 1 of tRect, \ item 2 of tRect, \ item 1 of tRect + the minWidth of this stack, \ item 2 of tRect + the minHeight of this stack end altInitStack on altInitControls pMode --> SET CONTROL RECTS AND BEHAVIOR put the short name of this stack into tStackName put the environment into tEnvironment --> NEVER WALK THRU CONTROLS...JUST USE CONTROL LIST if tEnvironment is "development" then --> WALK THRU CONTROLS IS SLOWER BUT MORE ACCURATE makeControlsList end if --> WALK THRU CONTROL LIST AND SET LOC put the altResizeControlList of this stack into tControlList --> CORRECT STACK NAMES put the effective fileName of this stack into tStackName replace "" with tStackName in tControlList set the priv_ResizeControlList of stack tStackName to tControlList repeat for each line L in tControlList if exists(L) then put the altLayoutManager["altCard"] of L into tCard if word 1 of tCard is not "card" then --> IT IS A CONTROL WHICH IS PART OF A BACKGROUND --> IS THE BACKGROUND ON THIS CD? if tCard is among the lines of the groupIDs of this card then altInitRect L,pMode end if else if tCard = the name of this card then altInitRect L,pMode end if end if end if end repeat end altInitControls on makeControlsList put the short name of me into tTopStack set the wholeMatches to true put the long ID of the current card of stack tTopStack into tCurrCdID lock messages repeat with x = 1 to the number of cds in stack tTopStack go cd x put "" into tDupeNamesList repeat with y = 1 to the number of controls in the current card of stack tTopStack put the long id of control y of cd x of stack tTopStack into tObjID if "altLayoutManager" is among the lines of the customPropertySets of tObjID then --> WE NEED TO CHECK FOR DUPLICATE NAMES AND NOTIFY USER IF THERE ARE SOME put the name of control y into tTestForDupe if lineOffset(tTestForDupe,tDupeNamesList) is not 0 then --> A CONTROL WITH THIS NAME EXISTS answer warning "You have two controls on cd: " &y& " with the same name:" & cr &\ tTestForDupe &cr&cr& "Please rename one!" go tCurrCdID unlock messages exit to top end if put the name of control y of cd x of stack tTopStack & cr after tDupeNamesList --> CHECK TO SEE IF THIS CONTROL IS IN A BG GRP #put the long id of control y of cd x of stack tTopStack into tObjID if tObjID contains "group" then --> CHECK TO SEE IF IT IS BG GRP put the backgroundIDs of stack tTopStack into tGrpID # of cd x of stack tTopSTack into tGrpID repeat for each line U in tGrpID put "group id " & U into tID if tID is in tObjID then --> IT IS A BACKGROUND GRP CONTROL SO DELETE THE CARD/STACK REF put offset(" of card",tObjID) into tStart delete char tStart to the length of tObjID of tObjID if tObjID is among the lines of tControlList then put "" into tObjID end if exit repeat end if end repeat end if --> TRACK EACH CONTROL SO THAT WE CAN LATER SET A PROPERTY FOR THE CONTROLLIST if tObjID is not "" then put tObjID & cr after tControlList end if end repeat end repeat delete last char of tControlList go tCurrCdID unlock messages --> SAVE THE CONTROL LIST FOR PARSING ON STARTUP --> THIS WAY YOU DON'T HAVE TO DO THRU EACH OBJECT ON EACH CD, JUST CHECK THIS LIST --> ALSO NEED TO REPLACE THE ABSOLUTE STACK NAME BECAUSE IT MAY CHANGE IN THE STANDALONE --> CHANGED TO MAKE PERFORMANCE FASTER FOR MULTIPLE CARD STACKS set itemDel to quote put empty into tList repeat for each line L in tControlList put L into tStr if tStr contains " stack" then put item -1 of L into tReplaceStr replace tReplaceStr with "" in tStr end if put tStr & cr after tList end repeat if tList <> "" then delete last char of tList set the altResizeControlList of stack tTopStack to tList set the priv_ResizeControlList of stack tTopStack to tControlList end makeControlsList on altInitRect pObj,pPlatform put the altLayoutManager["WinXPaltRect"] of pObj into tRect if tRect is "" then put the altLayoutManager["MacOSXaltRect"] of pObj into tRect if tRect is "" then put the altLayoutManager["OtheraltRect"] of pObj into tRect switch pPlatform case "MacOSX" get the altLayoutManager["MacOSXaltRect"] of pObj if it is not empty then put it into tRect break case "Other" get the altLayoutManager["OtheraltRect"] of pObj if it is not empty then put it into tRect break end switch set the rect of pObj to tRect end altInitRect on altSetRect pObj,pCommands put long id of this card into pRelativeTo -- ANOTHER OBJECT PASSED AS LONG ID put the left of pRelativeTo into tLeft put the top of pRelativeTo into tTop put the right of pRelativeTo into tRight put the bottom of pRelativeTo into tBot put the rect of pObj into tRect put the rect of pObj into tRectNew replace comma with cr in pCommands replace ":" with comma in pCommands repeat for each line tCmd in pCommands switch (item 1 of tCmd) case "SX" -->SCALES RIGHT put (tRight + (item 2 of tCmd)) into item 3 of tRectNew break case "SY" -->SCALES DOWN put (tBot + (item 2 of tCmd)) into item 4 of tRectNew break case "MX" --> MOVES RIGHT put (tRight + (item 2 of tCmd)) into tRightNew put tRightNew - (item 3 of tRect - item 1 of tRect) into item 1 of tRectNew put tRightNew into item 3 of tRectNew break case "MY" --> MOVES DOWN put (tBot + (item 2 of tCmd)) into tBotNew --item 4 of tRectNew put tBotNew - (item 4 of tRect - item 2 of tRect) into item 2 of tRectNew put tBotNew into item 4 of tRectNew break case "CX" --> CENTERS ALONG THE X AXIS (NO SCALE) put (item 3 of tRect - item 1 of tRect) into tWidth put round((tRight/2) - (tWidth/2)) + item 2 of tCmd into tLeftNew put tLeftNew + tWidth into item 3 of tRectNew put tLeftNew into item 1 of tRectNew break case "CY" --> CENTERS ALONG THE Y AXIS (NO SCALE) put (item 4 of tRect - item 2 of tRect) into tHeight put round((tBot/2) - (tHeight/2)) + item 2 of tCmd into tTopNew put tTopNew + tHeight into item 4 of tRectNew put tTopNew into item 2 of tRectNew break end switch end repeat set the rect of pObj to tRectNew end altSetRect on doneResizing put false into lAltChecking put item 1 of lAltOldWH into tOldWidth put item 2 of lAltOldWH into tOldHeight put the rect of this stack into tRect put the width of this stack into tWidth put the height of this stack into tHeight if tOldHeight > tHeight or tOldWidth > tWidth then if checkHasDividerBeenUsed() is true then altInitControls lPlatform setHasDividerBeenUsed false put the width of this stack into pW put the height of this stack into pH send "resizeStack pW,pH,pW,pH" to this cd in 50 millisecs end if end if put "" into lAltOldWH end doneResizing on CheckMouseState put true into lAltChecking if the mouse is up then doneResizing else if "CheckMouseState" is not among the items of the pendingMessages then send CheckMouseState to me in 10 milliseconds end if end if end CheckMouseState --> END ALTLAYOUT SCRIPTS 4Website Diagrammer U Segoe UI U Segoe UIcREVGeometryCachestackID1052 cREVGeneralbreakpointconditionsscripteditorvscroll108 breakpointsscripteditorselection1639breakpointstatesstackfileversion2.7AlreadyHiddenfalse P"local lData,lKillCrawl,lCrawledLinks,lUrlArray,lTicks,lUrlCount,lExceeded constant kNoFollowExtensions = "jpg,jpeg,png,gif,pdf,js,zip,sit,exe,xml,rss" on startCrawl if fld "URL" is "" then answer information "You must first enter in a valid URL." exit startCrawl end if delete local lUrlArray put the ticks into lTicks put false into lExceeded put 0 into lUrlCount put 1 into tCurrentLevel put fld "URL" into tWebURL put the label of btn "levels" into tIterationLevels put the altDCpreXML of this stack into lData put false into lKillCrawl put "" into lCrawledLinks put "" into fld "data" lock cursor set cursor to watch crawlWeb tWebURL,tIterationLevels,tCurrentLevel put "Done!" &cr& "Time: " & (the ticks-lTicks)/60 && "seconds" &cr& "Number of URL's fetched: " & lUrlCount into tMsg altStatus tMsg if lExceeded is true then answer warning "Diagram aborted after 600 lines of data!" end if filter lData without "" put "
" after lData put lData into fld "data" unlock cursor set cursor to arrow end startCrawl on crawlWeb pURL,pIterationLevels,pCurrentLevel if the number of lines in lData > 600 then put true into lExceeded exit crawlWeb end if put the hilite of btn "stayOnDomain" into tCrawlOnlyDomain if pCurrentLevel > pIterationLevels then exit crawlWeb --> PAGE EXTENSION FOR OTHER FILES get getPageExtension(pURL) if it is among the items of kNoFollowExtensions then exit crawlWeb end if put "" into tTitle altStatus "Crawling Page: " & pURL put pURL & cr after lCrawledLinks put getRootPath(pURL) into tRootPath put getDomainRoot(pURL) into tDomainRoot put getPageURL(pURL) into tPageURL put pURL & cr into tURLlist put getTheURL(pURL) into tData #altStatus "Crawling Page: " & pURL --> CHECK FOR RSS FEED put line 1 to 10 of tData into tRSS if offset(" 0 then exit crawlWeb end if if pURL is not among the keys of lUrlArray then put getPageTitle(tData) into tTitle put tTitle into lUrlArray[pURL] else put lUrlArray[pURL] into tTitle end if if tTitle is "bad link" then exit crawlWeb if tTitle is "" then exit crawlWeb put tTitle & "\n" & tPageURL into tFullTitle put ""&tFullTitle&""&cr after lData put "Crawling Page: " & tTitle into tMsg altStatus tMsg replace " CREATE UNIQUE LINKS LIST FROM PAGE AT pURL set cursor to watch repeat for each line M in tFollowLinks put "" into tTitle2 if lKillCrawl is true then exit crawlWeb set cursor to watch # if M contains "this" then breakpoint put getLinkURL(M,tRootPath) into tURL if tURL is "ERROR" then next repeat if tURL is among the lines of tURLlist then next repeat if tURL is among the lines of lCrawledLinks then next repeat --> GET LINK TITLE OR IMG # if M contains "other" then breakpoint put getLinkName(M) into tLinkName --> CHECK TO SEE IF WE ALREADY HAVE THE TITLE TO THIS PAGE URL if tURL is not among the keys of lUrlArray then get getPageExtension(tURL) if it is among the items of kNoFollowExtensions then put it into tTitle2 break end if if tTitle2 is "" then put getURLtitle(tURL) into tTitle2 end if put tTitle2 into lUrlArray[tURL] else put lUrlArray[tURL] into tTitle2 end if put ""&tFullTitle&"--->"&tLinkName&"--->"&tTitle2&"\n"&getPageURL(tURL)&""&cr after lData put tMsg && "--" && getLinkName(M) && "Level: "&pCurrentLevel& " of " & pIterationLevels into tMsg2 altStatus tMsg2 altStatus tMsg2 && "--" && "done" if stayOnDomain is true then if getDomainRoot(tURL) = tDomainRoot then put tURL & cr after tURLlist end if else put tURL & cr after tURLlist end if end repeat --> REMOVE THIS PAGE FROM tURLlist delete line 1 of tURLlist #if pCurrentLevel <= pIterationLevels then repeat for each line N in tURLlist altStatus "Checking: " & N wait 200 millisecs with messages if lKillCrawl is true then exit crawlWeb crawlWeb N,pIterationLevels,pCurrentLevel+1 end repeat # end if --> CREATE DIAGRAM CREATOR XML end crawlWeb on exitCrawl put true into lKillCrawl altStatus "Stopping Crawl... please wait." end exitCrawl on stripAndShip put "" into fld "URL" put "" into fld "data" hilite btn "stayOnDomain" set the label of btn "Levels" to 2 altStatus "Welcome" end stripAndShip function getURLtitle pURL set cursor to watch put getTheURL( pURL) into tStr put line 1 to 10 of tStr into tRSS if offset(" 0 then put "RSS feed" into lUrlArray[pURL] return "RSS feed" end if return getPageTitle(tStr) end getURLtitle function getPageTitle pStr replace "" with ">" in pStr return pStr end cleanIt function getRootPath pURL --> RETURNS URL WITHOUT PAGE.HTM set itemDel to "/" if the number of items in pURL > 3 then delete last item of pURL return pURL end getRootPath function getPageExtension pURL put getPageURL(pURL) into t set itemDel to "." if the number of items in t > 1 then return last item of t else return "" end if end getPageExtension function getDomainRoot pURL --> RETURNS DOMAIN set itemDel to "/" return item 1 to 3 of pURL end getDomainRoot function getPageURL pURL --> RETURNS PAGE URL set itemDel to "/" put last item of pURL into pURL set itemDel to "?" return item 1 of pURL end getPageURL function getLinkURL pStr,pRootPath put offset("href",pStr) into tStart delete char 1 to tStart of pStr put offset("=",pStr) into tStart delete char 1 to tStart of pStr put offset(quote,pStr) into tStart put offset(quote,pStr,tStart) into tEnd put char tStart to tStart+tEnd of pStr into tURL #put offset(">",pStr) into tEnd #put char 1 to tEnd-1 of pStr into tURL replace quote with "" in tURL put word 1 of tURL into tURL if tURL is "" then return "ERROR" if char 1 to 2 of tURL is ".." then delete char 1 to 2 of tURL return getRootPath(pRootPath) & tURL end if if char 1 to 4 of tURL is not "http" then return pRootPath & "/" & tURL end if return tURL end getLinkURL function getLinkName pStr put offset(">",pStr) into tStart delete char 1 to tStart of pStr put offset(" 0 then put char 1 to tStart of pStr into tWord replace space with empty in tWord replace "<" with empty in tWord if tWord is empty then --> PARSE IMG delete char 1 to tStart of pStr put offset("src",pStr) into tStart delete char 1 to tStart of pStr put offset("=",pStr) into tStart delete char 1 to tStart of pStr put offset(">",pStr) into tEnd put char 1 to tEnd-1 of pStr into tWord replace quote with "" in tWord put word 1 of tWord into tWord set itemDel to "/" put last item of tWord into tWord return cleanIt(tWord) else return cleanIt(tWord) end if else put offset("<",pStr) into tEnd return cleanIt(char 1 to tEnd-1 of pStr) end if end getLinkName function getTheURL pURL altStatus "Loading Page: " & pURL add 1 to lUrlCount return URL pURL end getTheURL on altStatus pMsg if exists(fld "altStatus") then put pMsg into fld "altStatus" end altStatus on generateDiagram if fld "data" is "" then answer information "You must first press the Crawl Web button." exit generateDiagram end if if there is a stack "InstantDiagrams" then set the hilite of btn "autodraw" of stack "InstantDiagrams" to the number of lines in fld "data" < 300 if not the hilite of btn "autodraw" of stack "InstantDiagrams" then answer information "auto redraw turned OFF!" send "openViaPlugin lData" to stack "InstantDiagrams" end if end generateDiagram cREVGeometryCacheIDs1277002262199105212769255773491019127700159258410471276762777333101112769275611791021127700151117610451277001702578104812767627295551004127693364405710231276762749438100912767627408531006127693368336310251276923970787101712769358506211028cREVGeometrycacheorder total14 cREVGeneralscripteditorvscroll2472scripteditorselection315 URL)pIon returnInField send "mouseUp" to btn "Crawl Web" end returnInField JaltLayoutManager WinXPaltVistruealtCard card id 1002 WinXPaltCmdSX:-15 WinXPaltRect 13,74,516,95altCmdSX:-15altRect 13,74,516,95 cREVGeneralscripteditorvscroll0 revUniqueID 1276762729555  data)` altLayoutManager WinXPaltVistruealtCard card id 1002 WinXPaltCmd SX:-15,SY:-71 WinXPaltRect13,130,516,342altCmd SX:-15,SY:-71altRect13,130,516,342 cREVGeneral revUniqueID 1276762740853scripteditorvscroll0scripteditorselection0   `@  Label Field 4J cREVTable currentview HTTP URL: cREVGeneral revUniqueID 1276762749438 HTTP URL: Crawl WebEp'on mouseUp startCrawl end mouseUp cR altAbout\

Website Diagrammer Plugin for DiagramCreator

©2010 Chipp Walters

This plugin allows you to create editable node diagrams using DiagramCreator. It generates a standard DiagramCreator XML file by crawling the website URL designated in the HTTP URL field. Be sure the URL is a valid one and not a redirection of a domain.

This plugin works by downloading the html from the host page, then searching for links, and following them to their destination. If the Level Iterations is greater than 1, the followed links will themselves also be followed, up to the number of iterations you choose. Warning, too many iterations will create an unwieldy chart! Currently, this plugin is limited to only 600 lines of chart data, which will take SOME TIME to render. I have used it to generate over 4000 lines, but DiagramCreator balks on rendering such a large number of nodes. Actually, at 600 nodes, the diagram is almost too large.

After you enter the URL, press the Crawl Web button and the plugin begins the process. It can take up to several minutes to finish.

You can press the STOP button anytime during the web crawling and the data up to that point is saved.

You can press the Generate Diagram button and your data will be transferred to DiagramCreator. If the file is larger than 300 lines, the auto redraw on DiagramCreator will be turned off. This is so you can make any changes you like and manually redraw the diagram.

<altLayoutManager WinXPaltVistruealtCard card id 1002 WinXPaltCmdMX:-15 WinXPaltRect434,99,516,122altCmdMX:-15altRect434,99,516,122 cREVGeneralscripteditorvscroll0 revUniqueID 1276762777333scripteditorselection0  altStatus Z;altLayoutManager WinXPaltVistruealtCard card id 1002 WinXPaltCmd SX:-123,MY:-8 WinXPaltRect 9,346,408,405altCmd SX:-123,MY:-8altRect 9,346,408,405 cREVGeneral revUniqueID 1276923970787 WelcomeSTOPEp%on mouseUp exitCrawl end mouseUp qc<<altLayoutManager WinXPaltVistruealtCard card id 1002 WinXPaltCmdMX:-102 WinXPaltRect369,99,429,122altCmdMX:-102altRect369,99,429,122 cREVGeneral revUniqueID 1276925577349scripteditorvscroll0scripteditorselection23 Generate DiagramEp,on mouseUp generateDiagram end mouseUp ]l2altLayoutManager WinXPaltVistruealtCard card id 1002 WinXPaltCmd MX:-15,MY:-41 WinXPaltRect408,349,516,372altCmd MX:-15,MY:-41altRect408,349,516,372 cREVGeneral revUniqueID 1276927561179scripteditorvscroll0scripteditorselection30 levels e5d7821 2 3 4altLayoutManager WinXPaltVistruealtCard card id 1002 WinXPaltCmdMX:-167 WinXPaltRect309,100,364,122altCmdMX:-167altRect309,100,364,122 cREVGeneral revUniqueID 1276933644057  Label Field ddaltLayoutManager WinXPaltVistruealtCard card id 1002 WinXPaltCmdMX:-229 WinXPaltRect202,100,302,121altCmdMX:-229altRect202,100,302,121 cREVTable currentviewLevel Iterations: cREVGeneral revUniqueID 1276933683363 Level Iterations: stayOnDomainhe dCrawl only same domain cREVGeneral revUniqueID 1276935850621  InstructionsEpIon mouseUp answer information the altAbout of this stack end mouseUp R[ cREVGeneral revUniqueID 1277001511176scripteditorvscroll0 Check for UpdatesEp --> all handlers on mouseUp answer question "This will check the server for updates to this stack." &cr& \ "Any changes you have made to this stack will be lost! Continue?" with "Cancel" or "OK" if it is "Cancel" then exit to top checkForPluginUpdate end mouseUp on checkForPluginUpdate get altCheckInternetConnect() put the altVers of image "altPlug.png" into tVers put the altUpdateURL of img "altPlug.png" into tURL put URL tURL into tData put getTagData(tData,"Version") into tVers2 if tVers2 <> tVers then answer information "There is an update to this stack. Do you wish to retrieve it?" with "Cancel" or "OK" if it is "Cancel" then exit checkForPluginUpdate end if --> DOWNLOAD NEW STACK put the filename of this stack into tPluginPath put getTagData(tData,"UpdateURL") into tURL put "Downloading file, please wait..." put URL tURL into tBinData put the result into tResult if tResult is not "" then answer information "Problem downloading stack." &cr&cr& tResult altStatus "" exit to top end if topLevel this stack if char -3 to -1 of tURL is ".gz" then --> NEED TO UNCOMPRESS put "Decompressing Stack..." put decompress(tBinData) into tBinData end if put tBinData into URL ("binfile:" & tPluginPath) revert put "Stack updated!" into msg else answer information "You are currently using the latest version of this stack" end if end checkForPluginUpdate function altCheckInternetConnect --> CHECK FOR INTERNET CONNECTION TO EXTERNALS SERVER put "Checking for internet connection..." get URL "http://www.gadgetplugins.com/RevAccessTest.txt" put the result into tResult put "" if line 1 of it is not "GOOD" or tResult is not empty then answer warning "Cannot connect with the Altuit Externals Server: Error" &cr& tResult exit to top else return true end if end altCheckInternetConnect function getTagData theTagData,theTagName filter theTagData with "<" & theTagName & ">*" replace "<" & theTagName & ">" with "" in theTagData replace " " with "" in theTagData replace "" with "" in theTagData replace "|" with tab in theTagData replace "\" with return in theTagData replace "/***---***/" with "" in theTagData replace " " with "" in theTagData return theTagData end getTagData  t"checks for updates to this pluginYaltLayoutManager WinXPaltVistruealtCard card id 1002 WinXPaltCmdMX:-15 WinXPaltRect 400,11,516,34altCmdMX:-15altRect 400,11,516,34 cREVGeneral revUniqueID 1277001592584scripteditorvscroll672  altPlug.png$ altOpenVisibletruealtVersv1.50altPlugFileName WebDiagram altOnClickMedoIt altUpdateURL6http://www.gadgetplugins.com/altplugins/WebDiagram.txt-Website Diagrammer Plugin for DiagramCreatorPNG  IHDR szzgAMA abIDATx=EgnxJC6~*tje@%,ll"QI A~5QI-4ٝ93o޽@0>G'hEP I-Ā qN|`--L`-ܸE3Ec._0!`&4Ð##~! WWB锲qv5*% h D;zDJT1H'HID|hC` bzZ`!1"h:$:3"&&.-=e $2% LOCV gs C&zx}<`!'7!p[Ҟlnqk|e`{7N:^>ۀ9Ͼ~z l9wtۧ=o޾͡k,w?~?ĥ.%n63dؓR@j=§ǁh>s[~Axѷro]\آJla^xx'\=٨EO`0>pK߰ F&ϑ0PPPPvA8@Uy`@3^yY {ȖT@x5(ox~' Շk2`IݥrѱucKߔ@_'iMj ^rs]4j:4뫆$퍗g 6@ͥC _e8g@Y\)ms֖TZUeT3S 5+נ[5jQU ޣO3[CfɗQ} ]Li+QM7!a "eC@1 H }>'4۷bg;2?Lc*J hQ4ԞԵMrK*P?}}IIENDB` cREVGeneralscripteditorvscroll0 revUniqueID 1277001702578scripteditorselection0 vers  on mouseUp if the shiftKey is down then ask "New Version:" with me if it is empty then exit mouseUp put it into me set the altVers of img "altPlug.png" to it end if end mouseUp $% cREVGeneral revUniqueID 1277002262199 v1.50