aboutsummaryrefslogtreecommitdiff
path: root/guidelines/wikipedia/src/inlineStyle.js
diff options
context:
space:
mode:
Diffstat (limited to 'guidelines/wikipedia/src/inlineStyle.js')
-rw-r--r--guidelines/wikipedia/src/inlineStyle.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/guidelines/wikipedia/src/inlineStyle.js b/guidelines/wikipedia/src/inlineStyle.js
new file mode 100644
index 0000000..261586d
--- /dev/null
+++ b/guidelines/wikipedia/src/inlineStyle.js
@@ -0,0 +1,47 @@
+exports.name = "Do not use in-line styles";
+exports.description = "In-line styles make it much harder for people with specific needs to change the wikimedia styles and to retain consistency.";
+
+exports.rule = function(report) {
+ $5('#mw-content-text [style]').filter(excludes).each(function(i, elem) {
+ report.error("Element contains in-line style rules.", elem);
+ });
+};
+
+function excludes(i, elem) {
+ var $elem = $(elem);
+
+ // Ignore width rules.
+ var widthRule = everyStyle($elem, function(s) {
+ return s === 'width';
+ });
+
+ // It seems that Wikipedia's standard table templates include some
+ // inline styles. Ignore these.
+ var table = $elem.is('table, th, td');
+
+ // The standard reference list template also seems to include some
+ // inline styles.
+ var reference = $elem.hasClass('reflist references-column-width') ||
+ $elem.hasClass('error') ||
+ ($elem.is('.citation ~ * *') && !$.trim($elem.text())); // <span>&nbsp;</span>
+
+ // The [citation needed] template includes a white-space:nowrap style.
+ var citationNeeded = $elem.hasClass('Template-Fact') && everyStyle($elem, function(s) {
+ return s === 'white-space';
+ });
+
+ var navboxPadding = $elem.closest('.navbox').length > 0 && everyStyle($elem, function(s) {
+ return s.slice(0,7) === 'padding';
+ });
+
+ // Ignore hidden microformat fields.
+ var microformat = $elem.css('display') === 'none' &&
+ $elem.closest('.vcard, .vevent').length > 0;
+
+ return !widthRule && !table && !reference && !citationNeeded &&
+ !navboxPadding && !microformat;
+}
+
+function everyStyle($elem, fn) {
+ return Array.prototype.every.call($elem.prop('style'), fn);
+}