Page 1 of 1

InitPlugins, DeclarePlugin, DeclarePluginExtension,UsePlugin

Posted: Fri Apr 03, 2015 10:09 pm
by eddy
Load plugins using RequireJS

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

Re: InitPlugins, DeclarePlugin, DeclarePluginExtension,UsePl

Posted: Tue Apr 07, 2015 6:28 am
by Fred
NIce code