The spiderbasic.com website is a regular website, but this is created with SpiderBasic;
There is no secret in this code, so here it is if you want to take a closer look:
Code: Select all
;
; Quick and dirty OnlineViewer for SpiderBasic web site
;
Enumeration Window
#MainWindow
#AboutWindow
EndEnumeration
Enumeration Gadget
#SourceTreeGadget
#EditorContainerGadget
#SplitterGadget
; About window gadgets
#AboutCloseGadget
EndEnumeration
Enumeration Image
#CutImage
#CopyImage
#PasteImage
#LaunchImage
#ArrowUpImage
#ArrowDownImage
#SpiderBasicImage
EndEnumeration
Enumeration MenuItem
#MenuAbout
#MenuLaunch
#MenuCopy
#MenuSelectAll
#MenuPreviousExample
#MenuNextExample
EndEnumeration
Enumeration XML
#DemosXML
EndEnumeration
Global AceEditor, AceSelector
Procedure.i LoadAsynchronously(FileName.s, *OnLoadFunction, FileType.s)
!return $.ajax({ url:v_filename, dataType:v_filetype, beforeSend:function(jqxhr, settings) { jqxhr.url = settings.url; } })
!.done(function(data, status, jqxhr) { p_onloadfunction(data,status,jqxhr.url); })
!.fail(function(jqxhr, status, errorThrown) { p_onloadfunction('',status,jqxhr.url,jqxhr.status,errorThrown); });
EndProcedure
Procedure LoadScript(FileName.s, *OnLoadFunction)
ProcedureReturn LoadAsynchronously(FileName, *OnLoadFunction, "script")
EndProcedure
Procedure MainWindowResize()
Debug "resize !"
Debug WindowWidth(#MainWindow)
Debug WindowHeight(#MainWindow)
ResizeGadget(#SplitterGadget, #PB_Ignore, #PB_Ignore, WindowWidth(#MainWindow), WindowHeight(#MainWindow)-54)
EndProcedure
Procedure GetSourceCodeEvent(Success, Result$, UserData)
If Success
!v_aceeditor.getSession().setValue(v_result$);
!v_aceeditor.focus();
Else
Debug "HTTPRequest(): Error"
EndIf
EndProcedure
Procedure UpdateEditorContent(Filename$)
HTTPRequest(#PB_HTTP_Get, "examples/" + LCase(Filename$)+".sb", "", @GetSourceCodeEvent())
EndProcedure
Procedure UpdateUpDownArrowState()
IsPreviousExampleDisabled = Bool(GetGadgetState(#SourceTreeGadget) = 0)
IsNextExampleDisabled = Bool(GetGadgetState(#SourceTreeGadget) >= CountGadgetItems(#SourceTreeGadget)-1)
; Disable the toolbar
DisableToolBarButton(0, #MenuPreviousExample, IsPreviousExampleDisabled)
DisableToolBarButton(0, #MenuNextExample, IsNextExampleDisabled)
; And the menus
DisableMenuItem(0, #MenuPreviousExample, IsPreviousExampleDisabled)
DisableMenuItem(0, #MenuNextExample, IsNextExampleDisabled)
EndProcedure
Procedure SourceTreeEvent()
If EventType() = #PB_EventType_Change
UpdateEditorContent(GetGadgetText(#SourceTreeGadget))
UpdateUpDownArrowState()
EndIf
EndProcedure
Procedure OpenAboutWindow()
OpenWindow(#AboutWindow, 0, 0, ImageWidth(#SpiderBasicImage), 190, "About...", #PB_Window_ScreenCentered)
ImageGadget(#PB_Any, 0, 0, ImageWidth(#SpiderBasicImage), ImageHeight(#SpiderBasicImage), ImageID(#SpiderBasicImage))
TextGadget(#PB_Any, 90, 90, 300, 50, "SpiderBasic online Viewer v1.0"+"<br>(c) 2015 Fantaisie Software")
ButtonGadget(#AboutCloseGadget, 140, 150, 100, 25, "Close")
EndProcedure
Procedure MenuEvents()
Select EventMenu()
Case #MenuAbout
OpenAboutWindow()
Case #MenuPreviousExample
If GetGadgetState(#SourceTreeGadget) > 0
SetGadgetState(#SourceTreeGadget, GetGadgetState(#SourceTreeGadget)-1)
UpdateEditorContent(GetGadgetText(#SourceTreeGadget))
UpdateUpDownArrowState()
EndIf
Case #MenuNextExample
If GetGadgetState(#SourceTreeGadget) < CountGadgetItems(#SourceTreeGadget)-1
SetGadgetState(#SourceTreeGadget, GetGadgetState(#SourceTreeGadget)+1)
UpdateEditorContent(GetGadgetText(#SourceTreeGadget))
UpdateUpDownArrowState()
EndIf
Case #MenuSelectAll
!v_aceeditor.selection.selectAll();
Case #MenuLaunch
Debug "Launch"
CurrentExample$ = GetGadgetText(#SourceTreeGadget)
Url$ = "examples/" + LCase(CurrentExample$) + ".html"
!var win = window.open(v_url$, '_blank');
!win.focus();
EndSelect
EndProcedure
Procedure GadgetEvents()
Select EventGadget()
Case #AboutCloseGadget
CloseWindow(#AboutWindow)
EndSelect
EndProcedure
Procedure LoadACE(content.s, status.s, url.s, errorCode, error.s)
If status<>"success"
Debug "Loading: FAILED"
Debug "File: "+url
Debug "Error code: "+errorCode
Select errorCode
Case 401 : Debug "Error: Authentification Failed"
Case 404 : Debug "Error: File Not Found"
Case 500 : Debug "Error: Server Failed"
Case 504 : Debug "Error: Server Timeout"
Default : Debug "Error: "+error
EndSelect
Debug ""
ProcedureReturn
EndIf
OpenWindow(#MainWindow, 10, 10, 200, 200, "Code viewer", #PB_Window_Background)
CreateMenu(0, WindowID(#MainWindow))
MenuTitle("File")
MenuItem(#MenuPreviousExample, "Previous example")
MenuItem(#MenuNextExample, "Next example")
MenuTitle("Edit")
MenuItem(#MenuSelectAll, "Select all")
MenuTitle("Help")
MenuItem(#MenuAbout, "About")
CreateToolBar(0, WindowID(#MainWindow))
ToolBarImageButton(#MenuPreviousExample, ImageID(#ArrowUpImage))
ToolBarImageButton(#MenuNextExample, ImageID(#ArrowDownImage))
ToolBarSeparator()
ToolBarImageButton(#MenuLaunch, ImageID(#LaunchImage))
TreeGadget(#SourceTreeGadget, 0, 0, 100, 100)
; Read the XML file and fill the tree gadget
Demos = MainXMLNode(#DemosXML)
If Demos
Demo = ChildXMLNode(Demos)
While Demo
AddGadgetItem(#SourceTreeGadget, -1, GetXMLAttribute(Demo, "name"))
Demo = NextXMLNode(Demo)
Wend
EndIf
ContainerGadget(#EditorContainerGadget, 0, 0, 100, 100, #PB_Container_Flat)
ContainerID = GadgetID(#EditorContainerGadget)
!v_containerid.div.style.border = "1px solid silver";
!v_aceeditor = ace.edit(v_containerid.div);
;!v_AceEditor.setTheme("ace/theme/chrome");
!v_aceeditor.setTheme("ace/theme/eclipse");
;!v_AceEditor.setTheme("ace/theme/dawn");
!v_aceeditor.getSession().setMode("ace/mode/spiderbasic");
;!v_AceEditor.getSession().setUseWorker(false);
!v_aceeditor.setReadOnly(true);
!v_aceeditor.focus();
CloseGadgetList()
SplitterGadget(#SplitterGadget, 0, -6, WindowWidth(#MainWindow), WindowHeight(#MainWindow)-54, #SourceTreeGadget, #EditorContainerGadget, #PB_Splitter_Vertical)
SetGadgetState(#SplitterGadget, 150) ; Set the splitter bar at 150 px
BindGadgetEvent(#SourceTreeGadget, @SourceTreeEvent())
BindEvent(#PB_Event_SizeWindow, @MainWindowResize(), #MainWindow)
BindEvent(#PB_Event_Gadget, @GadgetEvents())
BindEvent(#PB_Event_Menu, @MenuEvents())
SetGadgetState(#SourceTreeGadget, 0)
; GetGadgetText() doesn't work right after a SetGadgetState()...
UpdateEditorContent(GetGadgetItemText(#SourceTreeGadget, 0))
DisableToolBarButton(0, #MenuPreviousExample, #True)
DisableMenuItem(0, #MenuPreviousExample, #True)
EndProcedure
#NbResources = 8
Procedure LoadResources()
Static NbLoadedResources
NbLoadedResources+1
If NbLoadedResources = #NbResources
;LoadScript("//ajaxorg.github.io/ace-builds/src-min-noconflict/ace.js", @LoadACE())
;LoadScript("javascript/ace/ace.js", @LoadACE())
LoadScript("http://www.spiderbasic.com/showcase/onlineviewer/ace/ace.js", @LoadACE())
EndIf
EndProcedure
BindEvent(#PB_Event_Loading, @LoadResources())
LoadXML(#DemosXML, "examples/demos.xml")
LoadImage(#SpiderBasicImage, "icons/spiderbasic.png")
LoadImage(#CutImage, "icons/cut.png")
LoadImage(#CopyImage, "icons/copy.png")
LoadImage(#PasteImage, "icons/paste.png")
LoadImage(#LaunchImage, "icons/launch.png")
LoadImage(#ArrowUpImage, "icons/arrow_up.png")
LoadImage(#ArrowDownImage, "icons/arrow_down.png")