Bartosz Dziewoński has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/267288

Change subject: Split the library into four parts
......................................................................

Split the library into four parts

TODO: Write this commit message explaining what is going on here.

Thoughts:
* Gruntfile is noticeably more awful after this change.
* I'm not sure if the Less build changes are conducive
  to allowing custom themes one day.
* We should kill the 'noimages' build, it will no longer
  be useful after MediaWiki switches to the new ones,
  but that'll be a breaking change?

Bug: T113681
Change-Id: I647e2b55cea5c37b4944683b1416bc60b7aa7eb3
---
M Gruntfile.js
M build/modules.yaml
M src/styles/common.less
M src/styles/core.less
R src/styles/empty-theme.less
A src/styles/toolbars.less
A src/styles/widgets.less
A src/styles/windows.less
M src/themes/apex/common.less
D src/themes/apex/core.less
A src/themes/apex/theme.less
M src/themes/blank/common.less
D src/themes/blank/core.less
A src/themes/blank/theme.less
M src/themes/mediawiki/common.less
D src/themes/mediawiki/core.less
A src/themes/mediawiki/theme.less
17 files changed, 341 insertions(+), 222 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/oojs/ui refs/changes/88/267288/1

diff --git a/Gruntfile.js b/Gruntfile.js
index ab899b0..c2b6e47 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -10,10 +10,15 @@
                        apex: 'Apex',
                        mediawiki: 'MediaWiki'
                },
-               lessFiles = {},
+               lessFiles = {
+                       apex: {},
+                       mediawiki: {}
+               },
                colorizeSvgFiles = {},
                requiredFiles = [],
                concatCssFiles = {},
+               concatJsFiles = {},
+               concatOmnibus = {},
                rtlFiles = {},
                minBanner = '/*! OOjs UI v<%= pkg.version %> | 
http://oojs.mit-license.org */';
 
@@ -39,7 +44,8 @@
        grunt.loadTasks( 'build/tasks' );
 
        ( function () {
-               var module, theme;
+               var distFile, module, theme, moduleStyleFiles;
+
                function themify( str ) {
                        return str.replace( /\{theme\}/g, theme ).replace( 
/\{Theme\}/g, themes[ theme ] );
                }
@@ -47,6 +53,7 @@
                        if ( module.indexOf( '{theme}' ) !== -1 || 
module.indexOf( '{Theme}' ) !== -1 ) {
                                for ( theme in themes ) {
                                        modules[ themify( module ) ] = {};
+                                       modules[ themify( module ) ].theme = 
theme;
                                        if ( modules[ module ].scripts ) {
                                                modules[ themify( module ) 
].scripts = modules[ module ].scripts.map( themify );
                                        }
@@ -57,29 +64,22 @@
                                delete modules[ module ];
                        }
                }
-       }() );
 
-       ( function () {
-               var module;
                for ( module in modules ) {
                        requiredFiles.push.apply( requiredFiles, modules[ 
module ].scripts || [] );
                        requiredFiles.push.apply( requiredFiles, modules[ 
module ].styles || [] );
                }
-       }() );
 
-       ( function () {
-               var distFile, module, moduleStyleFiles;
                function rtlPath( fileName ) {
                        return fileName.replace( /\.(\w+)$/, '.rtl.$1' );
                }
                // Generate all task targets required to process given file 
into a pair of CSS files (for LTR
                // and RTL), and return file name of LTR file.
                function processFile( fileName ) {
-                       var lessFileName, cssFileName, theme, path;
+                       var lessFileName, cssFileName, path;
                        path = require( 'path' );
                        if ( path.extname( fileName ) === '.json' ) {
                                lessFileName = fileName.replace( /\.json$/, 
'.less' ).replace( /^src/, 'dist/tmp' );
-                               theme = path.basename( path.dirname( fileName ) 
);
 
                                colorizeSvgFiles[ fileName.replace( 
/.+\/(\w+)\/([\w-]+)\.(?:json|less)$/, '$1-$2' ) ] = {
                                        options: grunt.file.readJSON( fileName 
),
@@ -93,12 +93,12 @@
                                        }
                                };
 
-                               cssFileName = fileName.replace( /\.json$/, 
'.css' ).replace( /^src/, 'dist/tmp' );
-                               lessFiles[ cssFileName ] = [ lessFileName ];
-                               lessFiles[ rtlPath( cssFileName ) ] = [ 
rtlPath( lessFileName ) ];
+                               cssFileName = fileName.replace( /\.json$/, 
'.css' ).replace( /^src/, 'dist/tmp/' + theme );
+                               lessFiles[ theme ][ cssFileName ] = [ 
lessFileName ];
+                               lessFiles[ theme ][ rtlPath( cssFileName ) ] = 
[ rtlPath( lessFileName ) ];
                        } else {
-                               cssFileName = fileName.replace( /\.less$/, 
'.css' ).replace( /^src/, 'dist/tmp' );
-                               lessFiles[ cssFileName ] = [ fileName ];
+                               cssFileName = fileName.replace( /\.less$/, 
'.css' ).replace( /^src/, 'dist/tmp/' + theme );
+                               lessFiles[ theme ][ cssFileName ] = [ fileName 
];
                                rtlFiles[ rtlPath( cssFileName ) ] = 
cssFileName;
                        }
                        return cssFileName;
@@ -106,13 +106,46 @@
                for ( module in modules ) {
                        if ( modules[ module ].styles ) {
                                moduleStyleFiles = modules[ module ].styles;
+                               theme = modules[ module ].theme;
 
                                distFile = 'dist/' + module + '.css';
 
                                concatCssFiles[ distFile ] = 
moduleStyleFiles.map( processFile );
                                concatCssFiles[ rtlPath( distFile ) ] = 
concatCssFiles[ distFile ].map( rtlPath );
                        }
+                       if ( modules[ module ].scripts ) {
+                               distFile = 'dist/' + module + '.js';
+                               concatJsFiles[ distFile ] = modules[ module 
].scripts;
+                       }
                }
+
+               // Composite files
+               concatOmnibus[ 'dist/oojs-ui.js' ] = [
+                       'dist/oojs-ui-core.js',
+                       'dist/oojs-ui-widgets.js',
+                       'dist/oojs-ui-toolbars.js',
+                       'dist/oojs-ui-windows.js'
+               ];
+               for ( theme in themes ) {
+                       concatOmnibus[ themify( 'dist/oojs-ui-{theme}.css' ) ] 
= [
+                               'dist/oojs-ui-core-{theme}.css',
+                               'dist/oojs-ui-widgets-{theme}.css',
+                               'dist/oojs-ui-toolbars-{theme}.css',
+                               'dist/oojs-ui-windows-{theme}.css',
+                               'dist/oojs-ui-images-{theme}.css'
+                       ].map( themify );
+                       concatOmnibus[ rtlPath( themify( 
'dist/oojs-ui-{theme}.css' ) ) ] =
+                               concatOmnibus[ themify( 
'dist/oojs-ui-{theme}.css' ) ].map( rtlPath );
+                       concatOmnibus[ themify( 
'dist/oojs-ui-{theme}-noimages.css' ) ] = [
+                               'dist/oojs-ui-core-{theme}.css',
+                               'dist/oojs-ui-widgets-{theme}.css',
+                               'dist/oojs-ui-toolbars-{theme}.css',
+                               'dist/oojs-ui-windows-{theme}.css'
+                       ].map( themify );
+                       concatOmnibus[ rtlPath( themify( 
'dist/oojs-ui-{theme}-noimages.css' ) ) ] =
+                               concatOmnibus[ themify( 
'dist/oojs-ui-{theme}-noimages.css' ) ].map( rtlPath );
+               }
+
        }() );
 
        function strip( str ) {
@@ -149,14 +182,16 @@
                                banner: grunt.file.read( 'build/banner.txt' )
                        },
                        js: {
-                               files: {
-                                       'dist/oojs-ui.js': modules[ 'oojs-ui' 
].scripts,
-                                       'dist/oojs-ui-apex.js': modules[ 
'oojs-ui-apex' ].scripts,
-                                       'dist/oojs-ui-mediawiki.js': modules[ 
'oojs-ui-mediawiki' ].scripts
-                               }
+                               files: concatJsFiles
                        },
                        css: {
                                files: concatCssFiles
+                       },
+                       omnibus: {
+                               options: {
+                                       banner: ''
+                               },
+                               files: concatOmnibus
                        },
                        demoCss: {
                                options: {
@@ -193,8 +228,17 @@
                                        'oo-ui-default-image-ext': 'png'
                                }
                        },
-                       all: {
-                               files: lessFiles
+                       apex: {
+                               options: {
+                                       paths: [ '.', 'src/themes/apex' ]
+                               },
+                               files: lessFiles.apex
+                       },
+                       mediawiki: {
+                               options: {
+                                       paths: [ '.', 'src/themes/mediawiki' ]
+                               },
+                               files: lessFiles.mediawiki
                        }
                },
                cssjanus: {
@@ -436,6 +480,7 @@
        grunt.registerTask( 'build-tests', [ 'exec:rubyTestSuiteGenerator', 
'exec:phpGenerateJSPHPForKarma' ] );
        grunt.registerTask( 'build', [
                'clean:build', 'fileExists', 'tyops', 'build-code', 
'build-styling', 'build-i18n',
+               'concat:omnibus',
                'clean:tmp', 'demos'
        ] );
 
@@ -447,7 +492,7 @@
                'concat:js',
                'colorizeSvg', 'set-graphics:vector', 'less', 'concat:css',
                'copy:imagesCommon', 'copy:imagesApex', 'copy:imagesMediaWiki',
-               'build-i18n', 'copy:demos', 'copy:fastcomposerdemos',
+               'build-i18n', 'concat:omnibus', 'copy:demos', 
'copy:fastcomposerdemos',
                'note-quick-build'
        ] );
 
diff --git a/build/modules.yaml b/build/modules.yaml
index 1a67158..7305319 100644
--- a/build/modules.yaml
+++ b/build/modules.yaml
@@ -1,121 +1,166 @@
 {
        # The JavaScript library.
-       "oojs-ui": {
+       "oojs-ui-core": {
                "scripts": [
                        "src/intro.js.txt",
+
+                       # This is the core of the library. The basic building 
block of Element,
+                       # facilities to connect PHP and JS widgets, some 
abstract classes, a bunch
+                       # of convenience menthods.
                        "src/core.js",
                        "src/mixin.js",
-
-                       "src/mixins/PendingElement.js",
-
-                       "src/ActionSet.js",
                        "src/Element.js",
-                               "src/Layout.js",
-                               "src/Widget.js",
-                               "src/Window.js",
-                                       "src/Dialog.js",
-                               "src/WindowManager.js",
-                       "src/Error.js",
                        "src/HtmlSnippet.js",
-                       "src/Process.js",
-                       "src/ToolFactory.js",
-                       "src/ToolGroupFactory.js",
+                       "src/Layout.js",
+                       "src/Widget.js",
                        "src/Theme.js",
 
-                       "src/mixins/RequestManager.js",
+                       # Basic element mixins. These should be the same 
classes that are
+                       # supported in OOjs UI PHP.
                        "src/mixins/TabIndexedElement.js",
                        "src/mixins/ButtonElement.js",
                        "src/mixins/GroupElement.js",
-                       "src/mixins/DraggableElement.js",
-                       "src/mixins/DraggableGroupElement.js",
                        "src/mixins/IconElement.js",
                        "src/mixins/IndicatorElement.js",
                        "src/mixins/LabelElement.js",
-                       "src/mixins/LookupElement.js",
-                       "src/mixins/PopupElement.js",
                        "src/mixins/FlaggedElement.js",
                        "src/mixins/TitledElement.js",
-                       "src/mixins/ClippableElement.js",
-                       "src/mixins/FloatableElement.js",
                        "src/mixins/AccessKeyedElement.js",
 
-                       "src/Tool.js",
-                       "src/Toolbar.js",
-                       "src/ToolGroup.js",
+                       # The basic widgets and layouts, part 1. These should 
be the same classes that are
+                       # supported in OOjs UI PHP.
+                       "src/widgets/ButtonWidget.js",
+                       "src/widgets/ButtonGroupWidget.js",
+                       "src/widgets/IconWidget.js",
+                       "src/widgets/IndicatorWidget.js",
+                       "src/widgets/LabelWidget.js",
 
-                       "src/dialogs/MessageDialog.js",
-                       "src/dialogs/ProcessDialog.js",
-                       "src/windows.js",
+                       # The JavaScript-specific dependencies of the basic 
widgets.
+                       # It's sad how many there are :(
 
+                       # TextInputWidget
+                       "src/mixins/PendingElement.js",
+                       # FieldLayout, FieldsetLayout
+                       "src/mixins/ClippableElement.js",
+                       "src/widgets/PopupWidget.js",
+                       "src/mixins/PopupElement.js",
+                       "src/widgets/PopupButtonWidget.js",
+                       # DropdownInputWidget, RadioSelectInputWidget
+                       "src/mixins/GroupWidget.js",
+                       "src/mixins/ItemWidget.js",
+                       "src/widgets/OptionWidget.js",
+                       "src/widgets/SelectWidget.js",
+                       "src/widgets/DecoratedOptionWidget.js",
+                       # DropdownInputWidget
+                       "src/widgets/MenuOptionWidget.js",
+                       "src/widgets/MenuSelectWidget.js",
+                       "src/widgets/DropdownWidget.js",
+                       # RadioSelectInputWidget
+                       "src/widgets/RadioOptionWidget.js",
+                       "src/widgets/RadioSelectWidget.js",
+                       # ComboBoxInputWidget
+                       "src/mixins/FloatableElement.js",
+                       "src/widgets/FloatingMenuSelectWidget.js",
+
+                       # The basic widgets and layouts, part 2.
+                       "src/widgets/InputWidget.js",
+                       "src/widgets/ButtonInputWidget.js",
+                       "src/widgets/CheckboxInputWidget.js",
+                       "src/widgets/DropdownInputWidget.js",
+                       "src/widgets/RadioInputWidget.js",
+                       "src/widgets/RadioSelectInputWidget.js",
+                       "src/widgets/TextInputWidget.js",
+                       "src/widgets/ComboBoxInputWidget.js",
                        "src/layouts/FieldLayout.js",
                        "src/layouts/ActionFieldLayout.js",
                        "src/layouts/FieldsetLayout.js",
                        "src/layouts/FormLayout.js",
-                       "src/layouts/MenuLayout.js",
-                               "src/layouts/BookletLayout.js",
-                               "src/layouts/IndexLayout.js",
                        "src/layouts/PanelLayout.js",
-                               "src/layouts/CardLayout.js",
-                               "src/layouts/PageLayout.js",
-                               "src/layouts/StackLayout.js",
                        "src/layouts/HorizontalLayout.js",
 
+                       "src/outro.js.txt"
+               ]
+       },
+       "oojs-ui-widgets": {
+               "scripts": [
+                       "src/intro.js.txt",
+
+                       # Additional widgets and layouts that have no 
equivalent in OOjs UI PHP.
+
+                       "src/mixins/RequestManager.js",
+                       "src/mixins/DraggableElement.js",
+                       "src/mixins/DraggableGroupElement.js",
+                       "src/mixins/LookupElement.js",
+
+                       "src/layouts/CardLayout.js",
+                       "src/layouts/PageLayout.js",
+                       "src/layouts/StackLayout.js",
+                       "src/layouts/MenuLayout.js",
+                       "src/layouts/BookletLayout.js",
+                       "src/layouts/IndexLayout.js",
+
+                       "src/widgets/OutlineControlsWidget.js",
+                       "src/widgets/ToggleWidget.js",
+
+                       "src/widgets/ToggleButtonWidget.js",
+                       "src/widgets/CapsuleMultiSelectWidget.js",
+                       "src/widgets/CapsuleItemWidget.js",
+                       "src/widgets/SelectFileWidget.js",
+
+                       "src/widgets/ButtonOptionWidget.js",
+                       "src/widgets/MenuSectionOptionWidget.js",
+                       "src/widgets/OutlineOptionWidget.js",
+                       "src/widgets/TabOptionWidget.js",
+
+                       "src/widgets/ProgressBarWidget.js",
+                       "src/widgets/SearchWidget.js",
+
+                       "src/widgets/ButtonSelectWidget.js",
+                       "src/widgets/OutlineSelectWidget.js",
+                       "src/widgets/TabSelectWidget.js",
+
+                       "src/widgets/NumberInputWidget.js",
+                       "src/widgets/ToggleSwitchWidget.js",
+
+                       "src/outro.js.txt"
+               ],
+       },
+       "oojs-ui-toolbars": {
+               "scripts": [
+                       "src/intro.js.txt",
+
+                       "src/Toolbar.js",
+                       "src/Tool.js",
+                       "src/ToolGroup.js",
+                       "src/ToolFactory.js",
+                       "src/ToolGroupFactory.js",
+                       "src/tools/PopupTool.js",
+                       "src/tools/ToolGroupTool.js",
                        "src/toolgroups/BarToolGroup.js",
                        "src/toolgroups/PopupToolGroup.js",
                        "src/toolgroups/ListToolGroup.js",
                        "src/toolgroups/MenuToolGroup.js",
 
-                       "src/tools/PopupTool.js",
-                       "src/tools/ToolGroupTool.js",
+                       "src/outro.js.txt"
+               ],
+       },
+       "oojs-ui-windows": {
+               "scripts": [
+                       "src/intro.js.txt",
 
-                       "src/mixins/GroupWidget.js",
-                       "src/mixins/ItemWidget.js",
-                       "src/widgets/OutlineControlsWidget.js",
-                       "src/widgets/ToggleWidget.js",
-
-                       "src/widgets/ButtonGroupWidget.js",
-                       "src/widgets/ButtonWidget.js",
-                               "src/widgets/ActionWidget.js",
-                               "src/widgets/PopupButtonWidget.js",
-                               "src/widgets/ToggleButtonWidget.js",
-                       "src/widgets/CapsuleMultiSelectWidget.js",
-                       "src/widgets/CapsuleItemWidget.js",
-                       "src/widgets/DropdownWidget.js",
-                       "src/widgets/SelectFileWidget.js",
-                       "src/widgets/IconWidget.js",
-                       "src/widgets/IndicatorWidget.js",
-                       "src/widgets/InputWidget.js",
-                               "src/widgets/ButtonInputWidget.js",
-                               "src/widgets/CheckboxInputWidget.js",
-                               "src/widgets/DropdownInputWidget.js",
-                               "src/widgets/RadioInputWidget.js",
-                               "src/widgets/RadioSelectInputWidget.js",
-                               "src/widgets/TextInputWidget.js",
-                       "src/widgets/ComboBoxInputWidget.js",
-                       "src/widgets/LabelWidget.js",
-                       "src/widgets/OptionWidget.js",
-                               "src/widgets/DecoratedOptionWidget.js",
-                                       "src/widgets/ButtonOptionWidget.js",
-                                       "src/widgets/RadioOptionWidget.js",
-                                       "src/widgets/MenuOptionWidget.js",
-                                       
"src/widgets/MenuSectionOptionWidget.js",
-                                       "src/widgets/OutlineOptionWidget.js",
-                                       "src/widgets/TabOptionWidget.js",
-                       "src/widgets/PopupWidget.js",
-                       "src/widgets/ProgressBarWidget.js",
-                       "src/widgets/SearchWidget.js",
-                       "src/widgets/SelectWidget.js",
-                               "src/widgets/ButtonSelectWidget.js",
-                               "src/widgets/RadioSelectWidget.js",
-                               "src/widgets/MenuSelectWidget.js",
-                                       
"src/widgets/FloatingMenuSelectWidget.js",
-                               "src/widgets/OutlineSelectWidget.js",
-                               "src/widgets/TabSelectWidget.js",
-                       "src/widgets/NumberInputWidget.js",
-                       "src/widgets/ToggleSwitchWidget.js",
+                       "src/widgets/ActionWidget.js",
+                       "src/ActionSet.js",
+                       "src/Error.js",
+                       "src/Process.js",
+                       "src/WindowManager.js",
+                       "src/Window.js",
+                       "src/Dialog.js",
+                       "src/dialogs/MessageDialog.js",
+                       "src/dialogs/ProcessDialog.js",
+                       "src/windows.js",
 
                        "src/outro.js.txt"
-               ]
+               ],
        },
 
        # All styles, built per-theme, and theme-specific scripts.
@@ -127,17 +172,33 @@
        "oojs-ui-{theme}": {
                "scripts": [
                        "src/themes/{theme}/{Theme}Theme.js"
-               ],
+               ]
+       },
+       "oojs-ui-core-{theme}": {
                "styles": [
-                       "src/themes/{theme}/core.less",
+                       "src/styles/core.less"
+               ]
+       },
+       "oojs-ui-widgets-{theme}": {
+               "styles": [
+                       "src/styles/widgets.less"
+               ]
+       },
+       "oojs-ui-toolbars-{theme}": {
+               "styles": [
+                       "src/styles/toolbars.less"
+               ]
+       },
+       "oojs-ui-windows-{theme}": {
+               "styles": [
+                       "src/styles/windows.less"
+               ]
+       },
+       "oojs-ui-images-{theme}": {
+               "styles": [
                        "src/themes/{theme}/icons.json",
                        "src/themes/{theme}/indicators.json",
                        "src/themes/{theme}/textures.json"
-               ]
-       },
-       "oojs-ui-{theme}-noimages": {
-               "styles": [
-                       "src/themes/{theme}/core.less"
                ]
        },
 
@@ -145,7 +206,8 @@
        "oojs-ui-mediawiki-icons-accessibility": {
                "styles": [
                        "src/themes/mediawiki/icons-accessibility.json"
-               ]
+               ],
+               "theme": "mediawiki"
        },
        "oojs-ui-{theme}-icons-movement": {
                "styles": [
@@ -160,7 +222,8 @@
        "oojs-ui-mediawiki-icons-alerts": {
                "styles": [
                        "src/themes/mediawiki/icons-alerts.json"
-               ]
+               ],
+               "theme": "mediawiki"
        },
        "oojs-ui-{theme}-icons-interactions": {
                "styles": [
@@ -200,21 +263,25 @@
        "oojs-ui-mediawiki-icons-location": {
                "styles": [
                        "src/themes/mediawiki/icons-location.json"
-               ]
+               ],
+               "theme": "mediawiki"
        },
        "oojs-ui-mediawiki-icons-user": {
                "styles": [
                        "src/themes/mediawiki/icons-user.json"
-               ]
+               ],
+               "theme": "mediawiki"
        },
        "oojs-ui-mediawiki-icons-layout": {
                "styles": [
                        "src/themes/mediawiki/icons-layout.json"
-               ]
+               ],
+               "theme": "mediawiki"
        },
        "oojs-ui-mediawiki-icons-wikimedia": {
                "styles": [
                        "src/themes/mediawiki/icons-wikimedia.json"
-               ]
+               ],
+               "theme": "mediawiki"
        }
 }
diff --git a/src/styles/common.less b/src/styles/common.less
index dd14360..c0299bd 100644
--- a/src/styles/common.less
+++ b/src/styles/common.less
@@ -1,3 +1,7 @@
+// Import base empty theme, so that custom themes don't need to define tons of 
empty mixins
+@import 'empty-theme';
+// Import the actual theme - this is the theme.less file from the theme.
+// Build process should ensure that import paths are set up correctly for this 
to happen.
 @import 'theme';
 
 // Variables
diff --git a/src/styles/core.less b/src/styles/core.less
index 4f1c677..ebb215f 100644
--- a/src/styles/core.less
+++ b/src/styles/core.less
@@ -1,7 +1,5 @@
 //
-// Base styles.
-//
-// Themes should include this file after defining their variables and mixins.
+// Styles for the 'core' module.
 //
 
 @import 'common';
@@ -21,71 +19,36 @@
 @import 'elements/ClippableElement.less';
 @import 'elements/FloatableElement.less';
 @import 'elements/FlaggedElement.less';
-@import 'elements/DraggableElement.less';
-@import 'elements/DraggableGroupElement.less';
 @import 'elements/GroupElement.less';
 @import 'elements/IconElement.less';
 @import 'elements/IndicatorElement.less';
 @import 'elements/LabelElement.less';
-@import 'elements/LookupElement.less';
 @import 'elements/PendingElement.less';
 @import 'elements/PopupElement.less';
 @import 'elements/TabIndexedElement.less';
 @import 'elements/TitledElement.less';
 
 @import 'Layout.less';
-@import 'layouts/BookletLayout.less';
-@import 'layouts/IndexLayout.less';
 @import 'layouts/FieldLayout.less';
 @import 'layouts/ActionFieldLayout.less';
 @import 'layouts/FieldsetLayout.less';
 @import 'layouts/FormLayout.less';
-@import 'layouts/MenuLayout.less';
 @import 'layouts/PanelLayout.less';
-@import 'layouts/CardLayout.less';
-@import 'layouts/PageLayout.less';
-@import 'layouts/StackLayout.less';
 @import 'layouts/HorizontalLayout.less';
-
-@import 'Tool.less';
-@import 'tools/PopupTool.less';
-@import 'tools/ToolGroupTool.less';
-
-@import 'ToolGroup.less';
-@import 'toolgroups/BarToolGroup.less';
-@import 'toolgroups/PopupToolGroup.less';
-@import 'toolgroups/ListToolGroup.less';
-@import 'toolgroups/MenuToolGroup.less';
-
-@import 'Toolbar.less';
 
 @import 'Widget.less';
 @import 'widgets/SelectWidget.less';
 @import 'widgets/OptionWidget.less';
 @import 'widgets/DecoratedOptionWidget.less';
-@import 'widgets/ButtonSelectWidget.less';
 @import 'widgets/RadioSelectWidget.less';
-@import 'widgets/ButtonOptionWidget.less';
 @import 'widgets/RadioOptionWidget.less';
-
 @import 'widgets/LabelWidget.less';
 @import 'widgets/IconWidget.less';
 @import 'widgets/IndicatorWidget.less';
-
 @import 'widgets/ButtonWidget.less';
 @import 'widgets/ButtonGroupWidget.less';
-
-@import 'widgets/ToggleWidget.less';
-@import 'widgets/ToggleButtonWidget.less';
-@import 'widgets/ToggleSwitchWidget.less';
-
-@import 'widgets/ProgressBarWidget.less';
-
-@import 'widgets/ActionWidget.less';
-
 @import 'widgets/PopupWidget.less';
 @import 'widgets/PopupButtonWidget.less';
-
 @import 'widgets/InputWidget.less';
 @import 'widgets/ButtonInputWidget.less';
 @import 'widgets/CheckboxInputWidget.less';
@@ -93,30 +56,8 @@
 @import 'widgets/RadioInputWidget.less';
 @import 'widgets/RadioSelectInputWidget.less';
 @import 'widgets/TextInputWidget.less';
-
 @import 'widgets/MenuSelectWidget.less';
 @import 'widgets/MenuOptionWidget.less';
-@import 'widgets/MenuSectionOptionWidget.less';
 @import 'widgets/FloatingMenuSelectWidget.less';
 @import 'widgets/DropdownWidget.less';
-@import 'widgets/SelectFileWidget.less';
-
-@import 'widgets/OutlineSelectWidget.less';
-@import 'widgets/OutlineOptionWidget.less';
-@import 'widgets/OutlineControlsWidget.less';
-
-@import 'widgets/TabSelectWidget.less';
-@import 'widgets/TabOptionWidget.less';
-
-@import 'widgets/CapsuleMultiSelectWidget.less';
-@import 'widgets/CapsuleItemWidget.less';
 @import 'widgets/ComboBoxInputWidget.less';
-@import 'widgets/SearchWidget.less';
-@import 'widgets/NumberInputWidget.less';
-
-@import 'Window.less';
-@import 'Dialog.less';
-@import 'dialogs/MessageDialog.less';
-@import 'dialogs/ProcessDialog.less';
-
-@import 'WindowManager.less';
diff --git a/src/styles/theme.less b/src/styles/empty-theme.less
similarity index 100%
rename from src/styles/theme.less
rename to src/styles/empty-theme.less
diff --git a/src/styles/toolbars.less b/src/styles/toolbars.less
new file mode 100644
index 0000000..5f2ad49
--- /dev/null
+++ b/src/styles/toolbars.less
@@ -0,0 +1,17 @@
+//
+// Styles for the 'toolbars' module.
+//
+
+@import 'common';
+
+@import 'Tool.less';
+@import 'tools/PopupTool.less';
+@import 'tools/ToolGroupTool.less';
+
+@import 'ToolGroup.less';
+@import 'toolgroups/BarToolGroup.less';
+@import 'toolgroups/PopupToolGroup.less';
+@import 'toolgroups/ListToolGroup.less';
+@import 'toolgroups/MenuToolGroup.less';
+
+@import 'Toolbar.less';
diff --git a/src/styles/widgets.less b/src/styles/widgets.less
new file mode 100644
index 0000000..5bde633
--- /dev/null
+++ b/src/styles/widgets.less
@@ -0,0 +1,40 @@
+//
+// Styles for the 'widgets' module.
+//
+
+@import 'common';
+
+@import 'elements/DraggableElement.less';
+@import 'elements/DraggableGroupElement.less';
+@import 'elements/LookupElement.less';
+
+@import 'layouts/BookletLayout.less';
+@import 'layouts/IndexLayout.less';
+@import 'layouts/MenuLayout.less';
+@import 'layouts/CardLayout.less';
+@import 'layouts/PageLayout.less';
+@import 'layouts/StackLayout.less';
+
+@import 'widgets/ButtonSelectWidget.less';
+@import 'widgets/ButtonOptionWidget.less';
+@import 'widgets/ToggleWidget.less';
+@import 'widgets/ToggleButtonWidget.less';
+@import 'widgets/ToggleSwitchWidget.less';
+@import 'widgets/ProgressBarWidget.less';
+
+@import 'widgets/MenuSectionOptionWidget.less';
+@import 'widgets/SelectFileWidget.less';
+
+@import 'widgets/OutlineSelectWidget.less';
+@import 'widgets/OutlineOptionWidget.less';
+@import 'widgets/OutlineControlsWidget.less';
+
+@import 'widgets/TabSelectWidget.less';
+@import 'widgets/TabOptionWidget.less';
+
+@import 'widgets/CapsuleMultiSelectWidget.less';
+@import 'widgets/CapsuleItemWidget.less';
+@import 'widgets/SearchWidget.less';
+@import 'widgets/NumberInputWidget.less';
+
+
diff --git a/src/styles/windows.less b/src/styles/windows.less
new file mode 100644
index 0000000..fbd8695
--- /dev/null
+++ b/src/styles/windows.less
@@ -0,0 +1,14 @@
+//
+// Styles for the 'windows' module.
+//
+
+@import 'common';
+
+@import 'widgets/ActionWidget.less';
+
+@import 'Window.less';
+@import 'Dialog.less';
+@import 'dialogs/MessageDialog.less';
+@import 'dialogs/ProcessDialog.less';
+
+@import 'WindowManager.less';
diff --git a/src/themes/apex/common.less b/src/themes/apex/common.less
index ee8f043..2f4a8c9 100644
--- a/src/themes/apex/common.less
+++ b/src/themes/apex/common.less
@@ -1,6 +1,3 @@
-// Base variables and mixins
-@import '../../styles/common';
-
 // Theme variables
 @background-color-main: #fff;
 
diff --git a/src/themes/apex/core.less b/src/themes/apex/core.less
deleted file mode 100644
index 1c83a94..0000000
--- a/src/themes/apex/core.less
+++ /dev/null
@@ -1,12 +0,0 @@
-// Base and theme variables and mixins
-@import 'common';
-
-// Theme rules
-@import 'elements';
-@import 'layouts';
-@import 'tools';
-@import 'widgets';
-@import 'windows';
-
-// Base rules
-@import '../../styles/core';
diff --git a/src/themes/apex/theme.less b/src/themes/apex/theme.less
new file mode 100644
index 0000000..0ad347a
--- /dev/null
+++ b/src/themes/apex/theme.less
@@ -0,0 +1,12 @@
+// Theme entry point. Everything required to compile this theme should be 
included here.
+// This file is in turn included when building the theme.
+
+// Base and theme variables and mixins
+@import 'common';
+
+// Theme rules
+@import 'elements';
+@import 'layouts';
+@import 'tools';
+@import 'widgets';
+@import 'windows';
diff --git a/src/themes/blank/common.less b/src/themes/blank/common.less
index f9ec869..ebbb437 100644
--- a/src/themes/blank/common.less
+++ b/src/themes/blank/common.less
@@ -1,6 +1,3 @@
-// Base variables and mixins
-@import '../../styles/common';
-
 // Theme variables
 
 @oo-ui-default-image-path: 'themes/blank/images';
diff --git a/src/themes/blank/core.less b/src/themes/blank/core.less
deleted file mode 100644
index 1c83a94..0000000
--- a/src/themes/blank/core.less
+++ /dev/null
@@ -1,12 +0,0 @@
-// Base and theme variables and mixins
-@import 'common';
-
-// Theme rules
-@import 'elements';
-@import 'layouts';
-@import 'tools';
-@import 'widgets';
-@import 'windows';
-
-// Base rules
-@import '../../styles/core';
diff --git a/src/themes/blank/theme.less b/src/themes/blank/theme.less
new file mode 100644
index 0000000..1f5bf20
--- /dev/null
+++ b/src/themes/blank/theme.less
@@ -0,0 +1,12 @@
+// Theme entry point. Everything required to compile this theme should be 
included here.
+// This file is in turn included when building the theme.
+// 
+// Base and theme variables and mixins
+@import 'common';
+
+// Theme rules
+@import 'elements';
+@import 'layouts';
+@import 'tools';
+@import 'widgets';
+@import 'windows';
diff --git a/src/themes/mediawiki/common.less b/src/themes/mediawiki/common.less
index ef02568..278dae4 100644
--- a/src/themes/mediawiki/common.less
+++ b/src/themes/mediawiki/common.less
@@ -1,6 +1,3 @@
-// Base variables and mixins
-@import '../../styles/common';
-
 // Theme variables
 
 @oo-ui-default-image-path: 'themes/mediawiki/images';
diff --git a/src/themes/mediawiki/core.less b/src/themes/mediawiki/core.less
deleted file mode 100644
index 1c83a94..0000000
--- a/src/themes/mediawiki/core.less
+++ /dev/null
@@ -1,12 +0,0 @@
-// Base and theme variables and mixins
-@import 'common';
-
-// Theme rules
-@import 'elements';
-@import 'layouts';
-@import 'tools';
-@import 'widgets';
-@import 'windows';
-
-// Base rules
-@import '../../styles/core';
diff --git a/src/themes/mediawiki/theme.less b/src/themes/mediawiki/theme.less
new file mode 100644
index 0000000..0ad347a
--- /dev/null
+++ b/src/themes/mediawiki/theme.less
@@ -0,0 +1,12 @@
+// Theme entry point. Everything required to compile this theme should be 
included here.
+// This file is in turn included when building the theme.
+
+// Base and theme variables and mixins
+@import 'common';
+
+// Theme rules
+@import 'elements';
+@import 'layouts';
+@import 'tools';
+@import 'widgets';
+@import 'windows';

-- 
To view, visit https://gerrit.wikimedia.org/r/267288
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I647e2b55cea5c37b4944683b1416bc60b7aa7eb3
Gerrit-PatchSet: 1
Gerrit-Project: oojs/ui
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to