diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 00000000..2c907302 --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,3 @@ +{ + "extends": "stylelint-config-wikimedia" +} diff --git a/Gruntfile.js b/Gruntfile.js index 018adf8c..38a5102c 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -6,6 +6,7 @@ module.exports = function ( grunt ) { grunt.loadNpmTasks( 'grunt-contrib-jshint' ); grunt.loadNpmTasks( 'grunt-jscs' ); grunt.loadNpmTasks( 'grunt-jsonlint' ); + grunt.loadNpmTasks( 'grunt-stylelint' ); grunt.initConfig( { jshint: { @@ -23,6 +24,18 @@ module.exports = function ( grunt ) { jscs: { src: '<%= jshint.all %>' }, + stylelint: { + options: { + syntax: 'less' + }, + src: [ + '**/*.css', + '**/*.less', + '!lib/**', + '!node_modules/**', + '!vendor/**' + ] + }, jsonlint: { all: [ '**/*.json', @@ -35,6 +48,6 @@ module.exports = function ( grunt ) { } } ); - grunt.registerTask( 'test', [ 'jshint', 'jscs', 'jsonlint', 'banana' ] ); + grunt.registerTask( 'test', [ 'jshint', 'jscs', 'stylelint', 'jsonlint', 'banana' ] ); grunt.registerTask( 'default', 'test' ); }; diff --git a/package.json b/package.json index 1805312b..b445d445 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,8 @@ "grunt-banana-checker": "0.5.0", "grunt-contrib-jshint": "1.0.0", "grunt-jscs": "2.8.0", - "grunt-jsonlint": "1.0.7" + "grunt-jsonlint": "1.0.7", + "grunt-stylelint": "0.3.0", + "stylelint-config-wikimedia": "0.2.0" } } diff --git a/resources/css/ext.uls-monobook.css b/resources/css/ext.uls-monobook.css index 293b62b8..409c3e1b 100644 --- a/resources/css/ext.uls-monobook.css +++ b/resources/css/ext.uls-monobook.css @@ -1,3 +1,3 @@ -#pt-uls { +#pt-uls { /* stylelint-disable selector-no-id */ text-transform: none; } diff --git a/resources/css/ext.uls.compactlinks.less b/resources/css/ext.uls.compactlinks.less index 0dbd7394..a3ba30f5 100644 --- a/resources/css/ext.uls.compactlinks.less +++ b/resources/css/ext.uls.compactlinks.less @@ -1,4 +1,6 @@ -@import "mediawiki.mixins"; +@import 'mediawiki.mixins'; + +/* stylelint-disable selector-no-id */ #p-lang .body ul .uls-trigger, #p-lang .pBody ul .uls-trigger { @@ -6,12 +8,14 @@ padding: 0; } +/* stylelint-enable selector-no-id */ + .mw-interlanguage-selector, .mw-interlanguage-selector:active { cursor: pointer; padding: 4px 6px 4px 25px; font-size: 13px; - font-weight: 400; + font-weight: normal; .background-image-svg( '../images/compact-links-trigger.svg', '../images/compact-links-trigger.png' ); background-size: 18px; background-repeat: no-repeat; @@ -22,16 +26,16 @@ .mw-interlanguage-selector:active, .mw-interlanguage-selector.selector-open { - color: #555555; - background-color: #cccccc; + color: #555; + background-color: #ccc; } .interlanguage-uls-menu:before { - background: none repeat scroll 0 0 #FCFCFC; + background: none repeat scroll 0 0 #fcfcfc; border-left: 1px solid rgba( 0, 0, 0, 0.2 ); border-top: 1px solid rgba( 0, 0, 0, 0.2 ); box-shadow: -2px -2px 2px rgba( 0, 0, 0, 0.1 ); - content: ""; + content: ''; height: 24px; width: 24px; left: -13px; diff --git a/resources/css/ext.uls.css b/resources/css/ext.uls.css index 5c359db1..faab31c1 100644 --- a/resources/css/ext.uls.css +++ b/resources/css/ext.uls.css @@ -21,7 +21,7 @@ .uls-menu.callout .caret-before, .uls-menu.callout .caret-after { border-top: 10px solid transparent; - border-right: 10px solid #C9C9C9; + border-right: 10px solid #c9c9c9; border-bottom: 10px solid transparent; display: inline-block; left: -11px; @@ -31,13 +31,13 @@ } .uls-menu.callout .caret-after { - border-right: 10px solid #FCFCFC; + border-right: 10px solid #fcfcfc; display: inline-block; left: -10px; } .uls-menu.callout--languageselection .caret-after { - border-right: 10px solid #FFF; + border-right: 10px solid #fff; } .uls-ui-languages button { @@ -58,7 +58,7 @@ button.uls-more-languages { } .settings-text { - color: #555555; + color: #555; font-size: 9pt; } @@ -74,10 +74,10 @@ div.display-settings-block:hover .settings-text { } .uls-icon-back { - background: transparent url('../images/back-grey-ltr.png') no-repeat scroll center center; - background-image: -webkit-linear-gradient(transparent, transparent), url('../images/back-grey-ltr.svg'); + background: transparent url( ../images/back-grey-ltr.png ) no-repeat scroll center center; + background-image: -webkit-linear-gradient( transparent, transparent ), url( ../images/back-grey-ltr.svg ); /* @embed */ - background-image: linear-gradient(transparent, transparent), url('../images/back-grey-ltr.svg'); + background-image: linear-gradient( transparent, transparent ), url( ../images/back-grey-ltr.svg ); background-size: 28px; background-position: center center; height: 32px; @@ -85,7 +85,7 @@ div.display-settings-block:hover .settings-text { display: block; position: absolute; left: 0; - border-right: 1px solid #C9C9C9; + border-right: 1px solid #c9c9c9; opacity: 0.8; } @@ -96,7 +96,7 @@ div.display-settings-block:hover .settings-text { /* TODO: move to jquery.uls */ .grid .uls-search { - padding-left: 0px; + padding-left: 0; } .uls-search-label { @@ -105,5 +105,5 @@ div.display-settings-block:hover .settings-text { } .uls-filterinput { - padding-left: 0px; + padding-left: 0; } diff --git a/resources/css/ext.uls.displaysettings.less b/resources/css/ext.uls.displaysettings.less index d8204705..d488f3e9 100644 --- a/resources/css/ext.uls.displaysettings.less +++ b/resources/css/ext.uls.displaysettings.less @@ -1,4 +1,4 @@ -@import "mediawiki.mixins"; +@import 'mediawiki.mixins'; div.display-settings-block { background: transparent no-repeat left top; @@ -22,7 +22,7 @@ div.display-settings-block { } .ext-uls-sub-panel { - border-top: 1px solid #EEEEEE; + border-top: 1px solid #eee; padding-top: 25px; top: -20px; position: relative; @@ -31,12 +31,12 @@ div.display-settings-block { .uls-display-settings-font-selectors { margin: 5px 0 15px 0; - border-top: 1px solid #EEEEEE; + border-top: 1px solid #eee; } .uls-font-item { - border-bottom: 1px solid #EEEEEE; - background: #FBFBFB; + border-bottom: 1px solid #eee; + background: #fbfbfb; margin: 0; padding: 10px 0; } @@ -48,7 +48,7 @@ div.display-settings-block { .uls-content-fonts:hover, .uls-ui-fonts:hover { - background-color: #F6F6F6; + background-color: #f6f6f6; } .uls-font-label strong { @@ -56,7 +56,7 @@ div.display-settings-block { } .uls-font-label { - color: #555555; + color: #555; font-size: 10pt; } @@ -64,6 +64,6 @@ div.display-settings-block { font-weight: bold; } -#uls-display-settings-anon-log-in-cta { +#uls-display-settings-anon-log-in-cta { /* stylelint-disable-line selector-no-id */ font-size: 10pt; } diff --git a/resources/css/ext.uls.inputsettings.less b/resources/css/ext.uls.inputsettings.less index 70f6b329..06e2f823 100644 --- a/resources/css/ext.uls.inputsettings.less +++ b/resources/css/ext.uls.inputsettings.less @@ -1,4 +1,4 @@ -@import "mediawiki.mixins"; +@import 'mediawiki.mixins'; div.input-settings-block { background: transparent no-repeat left top; @@ -48,7 +48,7 @@ div.input-settings-block { background: transparent no-repeat center top; .background-image-svg( '../images/cog.svg', '../images/cog.png' ); background-size: auto 14px; - border-left: 1px solid #CCCCCC; + border-left: 1px solid #ccc; width: 22px; height: 14px; position: absolute; @@ -73,15 +73,15 @@ div.input-settings-block { font-size: 11pt; } -.down+.uls-input-settings-caret { +.down + .uls-input-settings-caret { display: inline-block; width: 0; height: 0; - border-top: none; + border-top: 0; border-right: 8px solid transparent; border-left: 8px solid transparent; border-bottom: 8px solid #f0f0f0; - content: ""; + content: ''; position: relative; vertical-align: bottom; top: 12px; @@ -101,7 +101,7 @@ div.input-settings-block { } .uls-ime-notification-bubble .link { - color: #0645AD; + color: #0645ad; cursor: pointer; } diff --git a/resources/css/ext.uls.interlanguage.less b/resources/css/ext.uls.interlanguage.less index c5617567..f1b76509 100644 --- a/resources/css/ext.uls.interlanguage.less +++ b/resources/css/ext.uls.interlanguage.less @@ -1,4 +1,6 @@ -@import "mediawiki.mixins"; +@import 'mediawiki.mixins'; + +/* stylelint-disable selector-no-id */ #p-lang .uls-settings-trigger { background: transparent no-repeat right top; diff --git a/resources/css/ext.uls.languagesettings.css b/resources/css/ext.uls.languagesettings.css index 08ad3d36..f77cbbef 100644 --- a/resources/css/ext.uls.languagesettings.css +++ b/resources/css/ext.uls.languagesettings.css @@ -1,11 +1,13 @@ +/* stylelint-disable selector-no-id */ + #uls-settings-block { - border-top: 1px solid #C9C9C9; + border-top: 1px solid #c9c9c9; background: #f8f8f8; - background: -webkit-gradient(linear, left top, left bottom, from(#FBFBFB), to(#F0F0F0)); - background: -webkit-linear-gradient(top, #FBFBFB, #F0F0F0); - background: -moz-linear-gradient(top, #FBFBFB, #F0F0F0); - background: -o-linear-gradient(top, #FBFBFB, #F0F0F0); - background: linear-gradient(#FBFBFB, #F0F0F0); + background: -webkit-gradient( linear, left top, left bottom, from( #fbfbfb ), to( #f0f0f0 ) ); + background: -webkit-linear-gradient( top, #fbfbfb, #f0f0f0 ); + background: -moz-linear-gradient( top, #fbfbfb, #f0f0f0 ); + background: -o-linear-gradient( top, #fbfbfb, #f0f0f0 ); + background: linear-gradient( #fbfbfb, #f0f0f0 ); padding-left: 10px; line-height: 1.2em; border-radius: 0 0 5px 5px; @@ -34,19 +36,15 @@ line-height: 20pt; margin-top: 0; font-weight: normal; - border: none; + border: 0; padding: 15px 0 3px 15px; color: #555; } -.language-settings-buttons { - text-align: right; -} - #languagesettings-settings-panel { padding-left: 5%; color: #252525; - background: #FFFFFF; + background: #fff; border-bottom-right-radius: 5px; } @@ -73,18 +71,18 @@ } #language-settings-dialog { - background: #FBFBFB; + background: #fbfbfb; } .uls-language-settings-close-block { - background: #FFFFFF; + background: #fff; } #languagesettings-panels .menu-section.active, #languagesettings-panels .menu-section.active:hover { - color: black; - background-color: #F0F0F0; - border-left-color: #3366BB; + color: #000; + background-color: #f0f0f0; + border-left-color: #36b; } .settings-menu-items .menu-section { @@ -94,14 +92,15 @@ } .settings-menu-items .menu-section:hover { - background-color: #F5F5F5; + background-color: #f5f5f5; } .language-settings-buttons { - border-top: 1px solid #F0F0F0; + border-top: 1px solid #f0f0f0; margin-top: 25px; padding: 15px; width: auto; + text-align: right; } .language-settings-buttons button { @@ -110,16 +109,16 @@ .uls-ui-languages p, .checkbox { - color: #555555; + color: #555; font-size: 10pt; } /* mediawiki.ui does not have a pressed state style. */ #languagesettings-panels .mw-ui-pressed { - background-color: #D8D8D8; + background-color: #d8d8d8; } -.checkbox input[type="checkbox"] { +.checkbox input[type='checkbox'] { margin-left: 0; } @@ -127,7 +126,7 @@ color: #252525; } -label.checkbox input[type="checkbox"] { +label.checkbox input[type='checkbox'] { float: left; } @@ -136,10 +135,10 @@ label.checkbox input[type="checkbox"] { } .uls-icon-close { - background: transparent url('../images/close.png') no-repeat scroll center center; - background-image: -webkit-linear-gradient(transparent, transparent), url('../images/close.svg'); + background: transparent url( ../images/close.png ) no-repeat scroll center center; + background-image: -webkit-linear-gradient( transparent, transparent ), url( ../images/close.svg ); /* @embed */ - background-image: linear-gradient(transparent, transparent), url('../images/close.svg'); + background-image: linear-gradient( transparent, transparent ), url( ../images/close.svg ); float: right; padding: 15px; cursor: pointer; diff --git a/resources/css/ext.uls.nojs.css b/resources/css/ext.uls.nojs.css index 99ec7e5d..10c965c2 100644 --- a/resources/css/ext.uls.nojs.css +++ b/resources/css/ext.uls.nojs.css @@ -1,4 +1,4 @@ /* Don't show it to users who disabled JS */ -.client-nojs #pt-uls { +.client-nojs #pt-uls { /* stylelint-disable-line selector-no-id */ display: none; } diff --git a/resources/css/ext.uls.pt.less b/resources/css/ext.uls.pt.less index 91d96ea7..821e31e3 100644 --- a/resources/css/ext.uls.pt.less +++ b/resources/css/ext.uls.pt.less @@ -1,4 +1,6 @@ -@import "mediawiki.mixins"; +@import 'mediawiki.mixins'; + +/* stylelint-disable selector-no-id */ /* * The trigger can be placed in the personal toolbar near the username @@ -24,19 +26,20 @@ /* Opera for some inexplicable reason confuses right and left padding with */ /* RTL text direction here (bug T47142). x:-o-prefocus won't match anything, */ /* but will make other browsers ignore this rule. */ -x:-o-prefocus, body.rtl li#pt-uls { +x:-o-prefocus, +body.rtl li#pt-uls { /* @noflip */ direction: ltr; } #uls-settings-block { - border-top: 1px solid #C9C9C9; + border-top: 1px solid #c9c9c9; background: #f8f8f8; - background: -webkit-gradient(linear, left top, left bottom, from(#FBFBFB), to(#F0F0F0)); - background: -webkit-linear-gradient(top, #FBFBFB, #F0F0F0); - background: -moz-linear-gradient(top, #FBFBFB, #F0F0F0); - background: -o-linear-gradient(top, #FBFBFB, #F0F0F0); - background: linear-gradient(#FBFBFB, #F0F0F0); + background: -webkit-gradient( linear, left top, left bottom, from( #fbfbfb ), to( #f0f0f0 ) ); + background: -webkit-linear-gradient( top, #fbfbfb, #f0f0f0 ); + background: -moz-linear-gradient( top, #fbfbfb, #f0f0f0 ); + background: -o-linear-gradient( top, #fbfbfb, #f0f0f0 ); + background: linear-gradient( #fbfbfb, #f0f0f0 ); padding-left: 10px; line-height: 1.2em; border-radius: 0 0 5px 5px;