Code: Select all
; ******************************
; Plugins
; ******************************
Macro InitPlugins(IsInitialized=#True) ; internal functions
CompilerIf IsInitialized
!"undefined"==typeof window.SpiderPlugins&&(window.SpiderPlugins={extensions:{},paths:{},names:[]})
CompilerElse
!window.SpiderPlugins={extensions:{},paths:{},names:[]};
CompilerEndIf
EndMacro
Procedure DeclarePluginResource(Resource.s)
InitPlugins()
!,window.SpiderPlugins.names.push(v_resource)
EndProcedure
Procedure DeclarePlugin(Plugin.s, Path.s, IsUsed=#True)
InitPlugins()
!,window.SpiderPlugins.paths[v_plugin]=v_path
!,v_isused && window.SpiderPlugins.names.push(v_plugin);
EndProcedure
Procedure UsePlugins(*FunctionUsingPlugins, EnforceDefine=#False)
!var cfg=$.extend({ enforceDefine: v_enforcedefine, paths: window.SpiderPlugins.paths }, window.SpiderPlugins.extensions);
!requirejs.config(cfg);
!require(window.SpiderPlugins.names, p_functionusingplugins);
InitPlugins(#False)
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
; *************************
; EXAMPLE - REACT plugin
; *************************
Procedure InitReact(React, JSXTransformer)
!React = v_react
!JSXTransformer = v_jsxtransformer
EndProcedure
Procedure CreateReactComponent(Component.s, CodeJSX.s="render: function() { return (); }")
Protected jsx.s="window."+Component+" = React.createClass({"+CodeJSX+"});"
!JSXTransformer.exec(v_jsx);
EndProcedure
Procedure RenderReactComponent(CodeJSX.s, Target.s="document.body")
Protected jsx.s="React.render( "+CodeJSX+", "+Target+" );"
!JSXTransformer.exec(v_jsx);
EndProcedure
Procedure CreateReactApplication(React, JSXTransformer)
InitReact(React, JSXTransformer)
CreateReactComponent("Store",
"render: function() {"+
" return ( <div className='myStore'>{this.props.children}</div> );"+
"}")
CreateReactComponent("Book",
"render: function() {"+
" return ( <div className='myBook'>{this.props.author}</div> );"+
"}")
RenderReactComponent("<Store><Book author='Eddy' /><Book author='John' /></Store>")
EndProcedure
DeclarePlugin("react","//cdnjs.cloudflare.com/ajax/libs/react/0.13.1/react")
DeclarePlugin("JSXTransformer","//cdnjs.cloudflare.com/ajax/libs/react/0.13.1/JSXTransformer")
UsePlugins(@CreateReactApplication())
CompilerEndIf