Currently, all views (jquery.wikibase widgets) are immediately constructed wherever needed. This has several implications:
- They are harder to test because they construct subviews
- Dependencies have to be passed through all parent views
- Knowledge about our views being jQuery-based is scattered throughout our code-base
I propose to introduce a ViewFactory along the following rough spec:
ViewFactory = function( valueViewBuilder, entityStore, dataTypeStore, entityChangersFactory, … ) ViewFactory.prototype = { getEntityview: function( node, wb.datamodel.Entity value ){ return $( node ).entityview( { value: value, viewFactory: this, … } ); }, getStatementview: function( node, wb.datamodel.Statement value ), … }
That could be constructed in wb.ui.entityViewInit.
- Task: Implement Factory
Introduce factory to the following widgets:
- Task: Children of entityviews https://gerrit.wikimedia.org/r/242337
- Task: Statementgroupviews in statementgrouplistview https://gerrit.wikimedia.org/r/242823
- Task: Statement list view
- Task: Statementview in statementlistview
- Task: Referenceview and snaklistview in statementview https://gerrit.wikimedia.org/r/246767
- Task: Snaklistview in referenceview https://gerrit.wikimedia.org/r/246768
- Task: Snakview in snaklistview https://gerrit.wikimedia.org/r/246769
- Task: Cleanup Statement https://gerrit.wikimedia.org/r/#/c/247241/