Skip to content

Commit 91dea0c

Browse files
Normalize Whitespace Plugin: Add configuration via attributes (#3467)
Co-authored-by: Michael Schmidt <[email protected]>
1 parent 2815f69 commit 91dea0c

File tree

4 files changed

+58
-2
lines changed

4 files changed

+58
-2
lines changed

plugins/normalize-whitespace/demo.html

+15
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,21 @@
1717

1818
</pre>
1919

20+
<pre data-break-lines="50">
21+
22+
<code>
23+
24+
25+
var there_is_a_very_very_very_very_long_line_it_can_break_it_for_you = true;
26+
27+
if (there_is_a_very_very_very_very_long_line_it_can_break_it_for_you === true) {
28+
};
29+
30+
31+
</code>
32+
33+
</pre>
34+
2035
</section>
2136

2237
<script src="prism.js"></script>

plugins/normalize-whitespace/index.html

+11-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ <h1>How to use</h1>
5757
});
5858
</code></pre>
5959

60-
<p>The following settings are available:</p>
60+
<p>The following settings are available and can be set via the <code>data-[setting]</code> attribute on the <code>&lt;pre&lt;</code> element:</p>
6161

6262
<dl>
6363
<dt>remove-trailing</dt>
@@ -103,6 +103,16 @@ <h1>Examples</h1>
103103
};
104104

105105

106+
var
107+
there_is_a_very_very_very_very_long_line_it_can_break_it_for_you
108+
= true;
109+
110+
if
111+
(there_is_a_very_very_very_very_long_line_it_can_break_it_for_you
112+
=== true) {
113+
};
114+
115+
106116
</code>
107117

108118
</pre>

plugins/normalize-whitespace/prism-normalize-whitespace.js

+31
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,18 @@
3333
return str.length + res;
3434
}
3535

36+
var settingsConfig = {
37+
'remove-trailing': 'boolean',
38+
'remove-indent': 'boolean',
39+
'left-trim': 'boolean',
40+
'right-trim': 'boolean',
41+
'break-lines': 'number',
42+
'indent': 'number',
43+
'remove-initial-line-feed': 'boolean',
44+
'tabs-to-spaces': 'number',
45+
'spaces-to-tabs': 'number',
46+
};
47+
3648
NormalizeWhitespace.prototype = {
3749
setDefaults: function (defaults) {
3850
this.defaults = assign(this.defaults, defaults);
@@ -161,6 +173,25 @@
161173
return;
162174
}
163175

176+
if (env.settings == null) { env.settings = {}; }
177+
178+
// Read settings from 'data-' attributes
179+
for (var key in settingsConfig) {
180+
if (Object.hasOwnProperty.call(settingsConfig, key)) {
181+
var settingType = settingsConfig[key];
182+
if (pre.hasAttribute('data-' + key)) {
183+
try {
184+
var value = JSON.parse(pre.getAttribute('data-' + key) || 'true');
185+
if (typeof value === settingType) {
186+
env.settings[key] = value;
187+
}
188+
} catch (_error) {
189+
// ignore error
190+
}
191+
}
192+
}
193+
}
194+
164195
var children = pre.childNodes;
165196
var before = '';
166197
var after = '';

plugins/normalize-whitespace/prism-normalize-whitespace.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)