Okay, I've interpreted the silence as a "just go ahead and merge it and people will complain if it's broken".
Seeing as we've now cut the next branch, I figured it was a good time to merge these remaining changes in. So, I did. Please let me know if symbols aren't working. On Tue, Feb 12, 2013 at 2:39 PM, Andrew Grieve <agri...@chromium.org> wrote: > I've just merged in most of the changes for this (CB-2227). Again, the > goal here was to move all plugin-specific logic out of common files. It's > not the end-game solution, but a step in the right direction. > > There are still some changes left on the symbolmapping branch that affect > windows & webos. If there's someone who knows how, it would be great if you > could try merging in the branch and ensure mobile-spec is still working > with the changes. If so, these changes can also be merged into master. > > > > On Tue, Jan 29, 2013 at 3:38 PM, Andrew Grieve <agri...@chromium.org>wrote: > >> 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 >>>>> > >>>>> >* >>>>> >>>>> >>>> >>> >> >