MainViewFactory is a singleton for managing view factories.
Registering a view factory:
registerViewFactory({
canOpenFile: function (fullPath) {
return (fullPath.slice(-4) === ".ico");
},
openFile: function(file, pane) {
return createIconView(file, pane);
}
});
The openFile method is used to open the file and construct a view of it. Implementation should add the view to the pane
function createIconView(file, pane) {
// IconView will construct its DOM and append
// it to pane.$el
var view = new IconView(file, pane.$el);
// Then tell the pane to add it to
// its view map and show it
pane.addView(view, true);
return new $.Deferred().resolve().promise();
}
Factories should only create 1 view of a file per pane. Brackets currently only supports 1 view of a file open at a given time but that may change to allow the same file open in more than 1 pane. Therefore Factories can do a simple check to see if a view already exists and show it before creating a new one:
var view = pane.getViewForPath(file.fullPath);
if (view) {
pane.showView(view);
} else {
return createIconView(file, pane);
}
Finds a factory that can open the specified file
function findSuitableFactoryForPath(fullPath) {
return _.find(_factories, function (factory) {
// This could get more complex in the future by searching in this order
// 1) a factory that can open the file by fullPath
// 2) a factory that can open the file by name
// 3) a factory that can open the file by filetype
return factory.canOpenFile(fullPath);
});
}