This is now finished in the branch. There is now *no* plugin logic left in common.js, nor in any platform.js files.
https://git-wip-us.apache.org/repos/asf?p=cordova-js.git;a=shortlog;h=refs/heads/symbolmapping There is one exception, and that's things like the "app" plugin, where it's not really a plugin that a platform can live without. Changes of interest: 1. In tests, I've added helpers for stubbing out modules & for stubbing out properties. I used this to be able to undo symbol mapping within tests. var propertyreplacer = require('cordova/propertyreplacer'); propertyreplacer.stub(platform, 'id', 'test'); var modulereplacer = require('cordova/modulereplacer'); modulereplacer.replace('cordova/platform', {id:'test', initialize:createSpy()}); 2. Loading plugins by name (aka, looping through all defined modules and loading the ones that have names that match a pattern). A) "symbols" Modules that have the name "symbols" are loaded to define their plugin's module->JS symbol mappings (merges/clobbers/defaults). On Blackberry, sub-platform symbol files are called "bbsymbols". B) "plugininit" Modules that have the name "plugininit" are loaded to perform any custom start-up logic. C) "*Proxy" On Windows8, modules that end with "Proxy" are loaded on start-up. I don't love the looping-through-module-names approach, but thought it was a good initial solution while we talk about better ideas. To do this, I had to make the moduleMap exported, which it wasn't before. Certainly interested to hear if this is a really bad idea, and what alternatives we could use going forward. On Thu, Jan 17, 2013 at 12:45 PM, Andrew Grieve <agri...@chromium.org>wrote: > Pushed up the change with the File plugin being registered in this new > way. Please let me know if you have concerns about it, since the next step > is moving over other plugin APIs, which is boring work :P. > > Also, let's move any discussion into the JIRA issue: > https://issues.apache.org/jira/browse/CB-2227 > > > > On Wed, Jan 16, 2013 at 4:35 PM, Andrew Grieve <agri...@chromium.org>wrote: > >> Branch started! >> >> I've completed steps 1 & 2. >> >> >> https://git-wip-us.apache.org/repos/asf?p=cordova-js.git;a=shortlog;h=refs/heads/symbolmapping >> >> >> On Wed, Jan 16, 2013 at 1:39 PM, Filip Maj <f...@adobe.com> wrote: >> >>> This all seems reasonable. Shall we start a branch? >>> >>> On 1/15/13 2:47 PM, "Andrew Grieve" <agri...@google.com> wrote: >>> >>> >Sorry to dump another large email on the list, but I'm hoping this one >>> is >>> >at least less controversial :). I wrote up a plan for moving >>> >module->symbol >>> >mapping out of common.js & platform.js and into individual plugins. >>> > >>> >If you have feedback/comments, let me know. >>> > >>> >* Goals: >>> > >>> > - Change from listing module->symbol mapping within common.js & >>> > platform.js, to listing this within the plugins themselves. >>> > - Support apps that don't want us to clobber global symbols. >>> > - aka, allow module->symbol mapping to be turned off >>> > - Allow retrieval of clobbered globals >>> > - Currently modules save it themselves when they are loaded >>> > - This won't work (reliably) for saving references to globals >>> > overridden by other modules >>> > - This gets in the way of the idea of lazy-loading modules via >>> >getters >>> > - Support the use of other module loaders >>> > - So... don't do crazy things at require() time. >>> > >>> > >>> >Requirements: >>> > >>> > - Plugins must be able to declare dependencies >>> > - Plugins must be able to delay onDeviceReady() >>> > - Plugins must be able to run code to initialize >>> > >>> > >>> >Implementation modulemapper.js: >>> > >>> > - clobbers(...) >>> > - merges(...) >>> > - defaults(...) >>> > - mapModules(wnd) >>> > - getOriginalSymbol('FileSystem') >>> > >>> > >>> >Start-up flow: >>> > >>> > 1. Parse all modules >>> > 2. common-bootstrap: >>> > 1. Loads list of modules named "cordova.*/symbols" >>> > 2. Run modulemapper.mapModules(window); >>> > 3. Loads list of modules named "cordova.*/main" >>> > >>> > >>> >symbols.js files: >>> > >>> > - Will make calls to modulemapper instead of exporting {clobbers:} >>> > - This make dependencies work by require()ing dependent symbols >>> > - We want the to be an evaluated .js file instead of something listed >>> >in >>> > plugin.xml >>> > - So that it can export based on browser version >>> > >>> > >>> >Implementation Steps >>> > >>> > 1. Expose list of registered modules in scripts/require.js so that we >>> > can loop over them >>> > 2. Write modulemapper.js (and have unit tests, of course) >>> > 3. Add logic to bootstrap.js that calls into modulemapper >>> > 4. create $PLUGIN_NAME/symbols.js files for each plugin within >>> cordova. >>> > 5. Add logic to bootstrap.js that calls into modulemapper >>> > 6. Create main.js files for those that currently have logic in their >>> > platform.js files >>> > >>> >* >>> >>> >> >