Browse Source

use local storage to store settings

master
g2384 5 years ago
parent
commit
7f3fe42a7f
4 changed files with 117 additions and 15 deletions
  1. +5
    -1
      README.md
  2. +2
    -2
      VHDLFormatter.js
  3. +2
    -2
      VHDLFormatter.ts
  4. +108
    -10
      index.html

+ 5
- 1
README.md View File

@ -6,6 +6,10 @@ VHDL formatter web online written in javascript
## Release Notes ## Release Notes
### 2.4 [2018-02-23]
- use local storage to store settings
### 2.3 [2018-02-22] ### 2.3 [2018-02-22]
- bugfix "remove non-comment code by mistake" - bugfix "remove non-comment code by mistake"
@ -14,7 +18,7 @@ VHDL formatter web online written in javascript
- fix exponential notation - fix exponential notation
- user can choose EOL symbols (or use system's by default) - user can choose EOL symbols (or use system's by default)
Many thanks to @MihaiBabiac
Many thanks to [@MihaiBabiac](https://github.com/MihaiBabiac)
### 2.2 [2018-10-16] ### 2.2 [2018-10-16]


+ 2
- 2
VHDLFormatter.js View File

@ -110,7 +110,8 @@ function noFormat() {
"use_space", "use_space",
"customise_indentation", "customise_indentation",
"compress", "compress",
"mix_letter"
"mix_letter",
"cust_eol"
]; ];
var isDisabled = getHTMLInputElement("no_format").checked; var isDisabled = getHTMLInputElement("no_format").checked;
elements.forEach(element => { elements.forEach(element => {
@ -132,7 +133,6 @@ function noFormat() {
radioButtons[i].disabled = isDisabled; radioButtons[i].disabled = isDisabled;
} }
} }
getHTMLInputElement("cust_indent").disabled = isDisabled;
} }
function Compress(input) { function Compress(input) {
input = input.replace(/\r\n/g, ''); input = input.replace(/\r\n/g, '');


+ 2
- 2
VHDLFormatter.ts View File

@ -141,7 +141,8 @@ function noFormat() {
"use_space", "use_space",
"customise_indentation", "customise_indentation",
"compress", "compress",
"mix_letter"
"mix_letter",
"cust_eol"
]; ];
var isDisabled = getHTMLInputElement("no_format").checked; var isDisabled = getHTMLInputElement("no_format").checked;
elements.forEach(element => { elements.forEach(element => {
@ -163,7 +164,6 @@ function noFormat() {
(<HTMLInputElement>radioButtons[i]).disabled = isDisabled; (<HTMLInputElement>radioButtons[i]).disabled = isDisabled;
} }
} }
getHTMLInputElement("cust_indent").disabled = isDisabled;
} }
function Compress(input: string) { function Compress(input: string) {


+ 108
- 10
index.html View File

@ -328,7 +328,7 @@
</div> </div>
<div class="checkbox inline" id="sign_align_function_div"> <div class="checkbox inline" id="sign_align_function_div">
<input type="checkbox" id="sign_align_function"> <input type="checkbox" id="sign_align_function">
<label for="sign_align_function">FUNCTION()</label>
<label for="sign_align_function" class="code">FUNCTION()</label>
</div> </div>
</div> </div>
<div class="checkbox" id="sign_align_all_div"> <div class="checkbox" id="sign_align_all_div">
@ -340,9 +340,14 @@
<input type="checkbox" id="use_space"> <input type="checkbox" id="use_space">
<label for="use_space">Customise Indentation: </label> <label for="use_space">Customise Indentation: </label>
</div>(tab is \t) </div>(tab is \t)
<input type="text" id="cust_indent" size="8" onKeyUp="counterDecode('cust_indent', 'indent_s')" value=" " /> (
<input type="text" id="customise_indentation" size="8" onKeyUp="counterDecode('customise_indentation', 'indent_s')" value=" " /> (
<span id="indent_s">four blankspaces</span>) <span id="indent_s">four blankspaces</span>)
</div> </div>
<div id="cust_eol_div">
End of line:
<input type="text" id="cust_eol" size="8" onKeyUp="counterDecode('cust_eol', 'eol_s')" value="\r\n" /> (
<span id="eol_s">one \r & one \n</span>)
</div>
<div class="checkbox" id="compress_div"> <div class="checkbox" id="compress_div">
<input type="checkbox" id="compress"> <input type="checkbox" id="compress">
<label for="compress">! EVIL - compress VHDL (\r\n, comments will be removed)</label> <label for="compress">! EVIL - compress VHDL (\r\n, comments will be removed)</label>
@ -351,11 +356,6 @@
<input type="checkbox" id="mix_letter"> <input type="checkbox" id="mix_letter">
<label for="mix_letter">! EVIL - unreadable (mix upper/lower-case letters)</label> <label for="mix_letter">! EVIL - unreadable (mix upper/lower-case letters)</label>
</div> </div>
<div>
End of line:
<input type="text" id="cust_eol" size="8" onKeyUp="counterDecode('cust_eol', 'eol_s')" value="\r\n" /> (
<span id="eol_s">one \r & one \n</span>)
</div>
<input type="button" class="btn" onclick="f()" value="start" /> <input type="button" class="btn" onclick="f()" value="start" />
<span class="show"> <span class="show">
<input type="button" class="btn " id="selectAll" value="Select All" onclick="selectText(document.getElementById('vhdl'))" /> <input type="button" class="btn " id="selectAll" value="Select All" onclick="selectText(document.getElementById('vhdl'))" />
@ -421,12 +421,74 @@
<script src="VHDLFormatter.js"></script> <script src="VHDLFormatter.js"></script>
<script src="descriptiveCounter.js"></script> <script src="descriptiveCounter.js"></script>
<script> <script>
let global_endOfLine = navigator.platform === 'Win32' ? '\\r\\n' : '\\n';
document.getElementById("cust_eol").value = global_endOfLine;
const localStorageSettingKey = "settings";
const localStorageNoFormatKey = "noFormat";
function onLoad() {
let global_endOfLine = navigator.platform === 'Win32' ? '\\r\\n' : '\\n';
document.getElementById("cust_eol").value = global_endOfLine;
var setting = loadSetting();
if (setting == null) {
return;
}
var beautifierSettings = setting.setting;
document.getElementById("remove_comments").checked = beautifierSettings.RemoveComments;
document.getElementById("remove_lines").checked = setting.removeLines;
document.getElementById("remove_report").checked = beautifierSettings.RemoveAsserts;
document.getElementById("check_alias").checked = beautifierSettings.CheckAlias;
var signAlignKeywords = beautifierSettings.SignAlignKeyWords;
if (signAlignKeywords != null && signAlignKeywords.length > 0) {
document.getElementById("sign_align_port").checked = signAlignKeywords.indexOf("PORT") >= 0;
document.getElementById("sign_align_function").checked = signAlignKeywords.indexOf("FUNCTION") >= 0;
document.getElementById("sign_align_procedure").checked = signAlignKeywords.indexOf("PROCEDURE") >= 0;
document.getElementById("sign_align_generic").checked = signAlignKeywords.indexOf("GENERIC") >= 0;
}
document.getElementById("sign_align_all").checked = beautifierSettings.SignAlignAll;
var newLineSettings = beautifierSettings.NewLineSettings;
var newLineAfter = newLineSettings.newLineAfter;
var noNewLineAfter = newLineSettings.noNewLineAfter;
document.getElementById("new_line_after_port").elements.namedItem("new_line_after_portcase").value = decodeNewLineSetting(newLineAfter, noNewLineAfter, "port");
document.getElementById("new_line_after_then").elements.namedItem("new_line_after_thencase").value = decodeNewLineSetting(newLineAfter, noNewLineAfter, "then");
document.getElementById("new_line_after_semicolon").elements.namedItem("new_line_after_semicoloncase").value = decodeNewLineSetting(newLineAfter, noNewLineAfter, ";");
document.getElementById("new_line_after_else").elements.namedItem("new_line_after_elsecase").value = decodeNewLineSetting(newLineAfter, noNewLineAfter, "else");
document.getElementById("new_line_after_generic").elements.namedItem("new_line_after_genericcase").value = decodeNewLineSetting(newLineAfter, noNewLineAfter, "generic");
document.getElementById("compress").checked = setting.compress;
var indentation = beautifierSettings.Indentation;
document.getElementById("use_space").checked = indentation != "\t";
document.getElementById("customise_indentation").value = indentation;
document.getElementById("keyword").elements.namedItem("keywordcase").value = beautifierSettings.KeywordCase;
document.getElementById("mix_letter").checked = setting.mixLetter;
var eof = beautifierSettings.EndOfLine
eof = eof.replace(/\r/g, "\\r");
eof = eof.replace(/\n/g, "\\n");
eof = eof.replace(/\t/g, "\\t");
document.getElementById("cust_eol").value = eof;
var noFormatBool = loadNoFormatSetting();
if (noFormatBool) {
document.getElementById("no_format").checked = true;
noFormat();
}
counterDecode('customise_indentation', 'indent_s');
counterDecode('cust_eol', 'eol_s');
}
function decodeNewLineSetting(hasNewLine, noNewLine, str) {
if (hasNewLine.indexOf(str) >= 0) {
return "NewLine";
}
if (noNewLine.indexOf(str) >= 0) {
return "NoNewLine";
}
return "None";
}
onLoad();
function f() { function f() {
var input = document.getElementById("in").value; var input = document.getElementById("in").value;
var no_format = document.getElementById("no_format").checked; var no_format = document.getElementById("no_format").checked;
saveNoFormatSetting(no_format);
if (no_format) { if (no_format) {
document.getElementById("vhdl").innerHTML = input; document.getElementById("vhdl").innerHTML = input;
document.querySelector(".show").style.display = "inline-block"; document.querySelector(".show").style.display = "inline-block";
@ -449,7 +511,7 @@
var new_line_after_generic = document.getElementById("new_line_after_generic").elements.namedItem("new_line_after_genericcase").value; var new_line_after_generic = document.getElementById("new_line_after_generic").elements.namedItem("new_line_after_genericcase").value;
var use_space = document.getElementById("use_space").checked; var use_space = document.getElementById("use_space").checked;
var compress = document.getElementById("compress").checked; var compress = document.getElementById("compress").checked;
var cust_indent = document.getElementById("cust_indent").value;
var cust_indent = document.getElementById("customise_indentation").value;
var keywordcase = document.getElementById("keyword").elements.namedItem("keywordcase").value; var keywordcase = document.getElementById("keyword").elements.namedItem("keywordcase").value;
var mix_letter = document.getElementById("mix_letter").checked; var mix_letter = document.getElementById("mix_letter").checked;
var endOfLine = document.getElementById("cust_eol").value; var endOfLine = document.getElementById("cust_eol").value;
@ -498,6 +560,9 @@
endOfLine); endOfLine);
beautifierSettings.SignAlignKeyWords = signAlignKeywords; beautifierSettings.SignAlignKeyWords = signAlignKeywords;
vhdlSettings = new VhdlSettings(beautifierSettings, remove_lines, compress, mix_letter);
saveSetting(vhdlSettings);
input = beautify(input, beautifierSettings); input = beautify(input, beautifierSettings);
if (remove_lines) { if (remove_lines) {
@ -516,6 +581,39 @@
document.querySelector(".show").style.display = "inline-block"; document.querySelector(".show").style.display = "inline-block";
hljs.highlightBlock(document.getElementById("vhdl")); hljs.highlightBlock(document.getElementById("vhdl"));
} }
function saveSetting(setting) {
var json = JSON.stringify(setting);
json = json.replace(/\r/g, "\\r");
json = json.replace(/\n/g, "\\n");
json = json.replace(/\t/g, "\\t");
localStorage.setItem(localStorageSettingKey, json);
}
function loadSetting() {
var json = localStorage.getItem(localStorageSettingKey);
if (json == null) {
return null;
}
return JSON.parse(json);
}
function saveNoFormatSetting(no_format) {
localStorage.setItem(localStorageNoFormatKey, no_format);
}
function loadNoFormatSetting() {
return JSON.parse(localStorage.getItem(localStorageNoFormatKey));
}
class VhdlSettings {
constructor(setting, removeLines, compress, mixLetter) {
this.setting = setting;
this.removeLines = removeLines;
this.compress = compress;
this.mixLetter = mixLetter;
}
}
</script> </script>
</body> </body>

Loading…
Cancel
Save