InitPlugins, DeclarePlugin, DeclarePluginExtension,UsePlugin

Share your advanced knowledge/code with the community.
User avatar
eddy
Posts: 124
Joined: Thu Mar 27, 2014 8:34 am

InitPlugins, DeclarePlugin, DeclarePluginExtension,UsePlugin

Post 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
Last edited by eddy on Fri Apr 10, 2015 9:56 pm, edited 2 times in total.
Fred
Site Admin
Posts: 1510
Joined: Mon Feb 24, 2014 10:51 am

Re: InitPlugins, DeclarePlugin, DeclarePluginExtension,UsePl

Post by Fred »

NIce code
Post Reply