Editor: CSS-beautifier
This commit is contained in:
parent
0ebb464e5d
commit
b5df8802a0
|
@ -261,6 +261,10 @@
|
|||
"message": "Regexp is invalid.",
|
||||
"description": "Validation message for a bad regexp in a style"
|
||||
},
|
||||
"styleBeautify": {
|
||||
"message": "Beautify",
|
||||
"description": "Label for the CSS-beautifier button on the edit style page"
|
||||
},
|
||||
"styleCancelEditLabel": {
|
||||
"message": "Back to manage",
|
||||
"description": "Label for cancel button for style editing"
|
||||
|
|
26
edit.html
26
edit.html
|
@ -124,7 +124,7 @@
|
|||
#sections > div:only-of-type .remove-section {
|
||||
display: none;
|
||||
}
|
||||
#sections > div .add-section {
|
||||
#sections > div > button:not(:first-of-type) {
|
||||
margin-left: 0.4rem;
|
||||
}
|
||||
.dirty > label::before {
|
||||
|
@ -316,6 +316,28 @@
|
|||
text-align: left;
|
||||
}
|
||||
|
||||
/************ CSS beautifier ************/
|
||||
.beautify-options {
|
||||
white-space: nowrap;
|
||||
font-family: monospace;
|
||||
}
|
||||
.beautify-options div {
|
||||
float: left;
|
||||
}
|
||||
.beautify-options div[newline="true"] + div {
|
||||
clear: left;
|
||||
}
|
||||
.beautify-options div[newline="true"] + div span[indent] {
|
||||
padding-left: 2rem;
|
||||
}
|
||||
.beautify-options span {
|
||||
font-weight: bold;
|
||||
}
|
||||
.beautify-options select {
|
||||
border: none;
|
||||
background-color: rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/************ reponsive layouts ************/
|
||||
@media(max-width:737px) {
|
||||
#header {
|
||||
|
@ -425,7 +447,7 @@
|
|||
</div>
|
||||
</section>
|
||||
<section id="actions">
|
||||
<div><button id="to-mozilla" i18n-text="styleToMozillaFormat"></button><img id="to-mozilla-help" src="help.png"></div>
|
||||
<div><button id="to-mozilla" i18n-text="styleToMozillaFormat"></button><img id="to-mozilla-help" src="help.png"> <button id="beautify" i18n-text="styleBeautify"></button></div>
|
||||
<div><a href="manage.html"><button id="cancel-button" i18n-text="styleCancelEditLabel"></button></a></div>
|
||||
<div><button id="save-button" title="Ctrl-S" i18n-text="styleSaveLabel"></button></div>
|
||||
</section>
|
||||
|
|
58
edit.js
58
edit.js
|
@ -44,6 +44,7 @@ var sectionTemplate = tHTML('\
|
|||
</div>\
|
||||
<button class="remove-section" i18n-text="sectionRemove"></button>\
|
||||
<button class="add-section" i18n-text="sectionAdd"></button>\
|
||||
<button class="beautify-section" i18n-text="styleBeautify"></button>\
|
||||
</div>\
|
||||
');
|
||||
|
||||
|
@ -483,6 +484,7 @@ function addSection(event, section) {
|
|||
div.querySelector(".applies-to-help").addEventListener("click", showAppliesToHelp, false);
|
||||
div.querySelector(".remove-section").addEventListener("click", removeSection, false);
|
||||
div.querySelector(".add-section").addEventListener("click", addSection, false);
|
||||
div.querySelector(".beautify-section").addEventListener("click", beautify);
|
||||
|
||||
var codeElement = div.querySelector(".code");
|
||||
var appliesTo = div.querySelector(".applies-to-list");
|
||||
|
@ -825,6 +827,61 @@ function gotoLintIssue(event) {
|
|||
});
|
||||
}
|
||||
|
||||
function beautify(event) {
|
||||
if (exports.css_beautify) { // thanks to csslint's definition of 'exports'
|
||||
doBeautify();
|
||||
} else {
|
||||
var script = document.head.appendChild(document.createElement("script"));
|
||||
script.src = "beautify/beautify-css.js";
|
||||
script.onload = doBeautify;
|
||||
}
|
||||
function doBeautify() {
|
||||
var tabs = prefs.getPref("editor.indentWithTabs");
|
||||
var options = prefs.getPref("editor.beautify");
|
||||
options.indent_size = tabs ? 1 : prefs.getPref("editor.tabSize");
|
||||
options.indent_char = tabs ? "\t" : " ";
|
||||
|
||||
var section = querySelectorParent(event.target, "#sections > div");
|
||||
var scope = section ? [getCodeMirrorForSection(section)] : editors;
|
||||
scope.forEach(function(cm) {
|
||||
setTimeout(function() {
|
||||
var text = cm.getValue();
|
||||
var newText = exports.css_beautify(text, options);
|
||||
if (newText != text) {
|
||||
cm.setValue(newText);
|
||||
}
|
||||
}, 0);
|
||||
});
|
||||
|
||||
showHelp(t("styleBeautify"), "<div class='beautify-options'>" +
|
||||
optionHtml(".selector1,", "selector_separator_newline") +
|
||||
optionHtml(".selector2,", "newline_before_open_brace") +
|
||||
optionHtml("{", "newline_after_open_brace") +
|
||||
optionHtml("border: none;", "newline_between_properties", true) +
|
||||
optionHtml("display: block;", "newline_before_close_brace", true) +
|
||||
optionHtml("}", "newline_between_rules") +
|
||||
"</div>");
|
||||
|
||||
document.querySelector(".beautify-options").addEventListener("change", function(event) {
|
||||
var value = event.target.selectedIndex > 0;
|
||||
options[event.target.dataset.option] = value;
|
||||
prefs.setPref("editor.beautify", options);
|
||||
event.target.parentNode.setAttribute("newline", value.toString());
|
||||
doBeautify();
|
||||
});
|
||||
|
||||
function optionHtml(label, optionName, indent) {
|
||||
var value = options[optionName];
|
||||
return "<div newline='" + value.toString() + "'>" +
|
||||
"<span" + (indent ? " indent" : "") + ">" + label + "</span>" +
|
||||
"<select data-option='" + optionName + "'>" +
|
||||
"<option" + (value ? "" : " selected") + "> </option>" +
|
||||
"<option" + (value ? " selected" : "") + ">\\n</option>" +
|
||||
"</select></div>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("load", init, false);
|
||||
|
||||
function init() {
|
||||
|
@ -883,6 +940,7 @@ function initHooks() {
|
|||
});
|
||||
document.getElementById("to-mozilla").addEventListener("click", showMozillaFormat, false);
|
||||
document.getElementById("to-mozilla-help").addEventListener("click", showToMozillaHelp, false);
|
||||
document.getElementById("beautify").addEventListener("click", beautify);
|
||||
document.getElementById("save-button").addEventListener("click", save, false);
|
||||
document.getElementById("sections-help").addEventListener("click", showSectionHelp, false);
|
||||
document.getElementById("keyMap-help").addEventListener("click", showKeyMapHelp, false);
|
||||
|
|
|
@ -180,6 +180,15 @@ var prefs = {
|
|||
"editor.tabSize": 4, // tab width, in spaces
|
||||
"editor.keyMap": navigator.appVersion.indexOf("Windows") > 0 ? "sublime" : "default",
|
||||
"editor.theme": "default", // CSS theme
|
||||
"editor.beautify": { // CSS beautifier
|
||||
selector_separator_newline: true,
|
||||
newline_before_open_brace: false,
|
||||
newline_after_open_brace: true,
|
||||
newline_between_properties: true,
|
||||
newline_before_close_brace: true,
|
||||
newline_between_rules: false,
|
||||
end_with_newline: false
|
||||
},
|
||||
|
||||
NO_DEFAULT_PREFERENCE: "No default preference for '%s'",
|
||||
UNHANDLED_DATA_TYPE: "Default '%s' is of type '%s' - what should be done with it?",
|
||||
|
|
Loading…
Reference in New Issue
Block a user