Created repair button in text mode

This commit is contained in:
jos 2017-11-14 21:40:08 +01:00
parent cba5659e78
commit a958e229f9
4 changed files with 48 additions and 14 deletions

View File

@ -9,7 +9,8 @@ https://github.com/josdejong/jsoneditor
- Implemented a status bar showing cursor location. - Implemented a status bar showing cursor location.
Thanks @meirotstein. Thanks @meirotstein.
- Implemented repairing JSON objects containing left and right single - Implemented repairing JSON objects containing left and right single
and double quotes (which you get when typing a JSON object in Word). and double quotes (which you get when typing a JSON object in Word)
in `text` and `code` mode.
## 2017-09-16, version 5.9.6 ## 2017-09-16, version 5.9.6

View File

@ -11,7 +11,7 @@
height="144" height="144"
id="svg4136" id="svg4136"
version="1.1" version="1.1"
inkscape:version="0.91 r" inkscape:version="0.91 r13725"
sodipodi:docname="jsoneditor-icons.svg"> sodipodi:docname="jsoneditor-icons.svg">
<title <title
id="title6512">JSON Editor Icons</title> id="title6512">JSON Editor Icons</title>
@ -39,12 +39,12 @@
inkscape:pageopacity="0" inkscape:pageopacity="0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:window-width="1920" inkscape:window-width="1920"
inkscape:window-height="1028" inkscape:window-height="1027"
id="namedview4144" id="namedview4144"
showgrid="true" showgrid="true"
inkscape:zoom="4" inkscape:zoom="4"
inkscape:cx="97.217248" inkscape:cx="74.167308"
inkscape:cy="59.950227" inkscape:cy="53.488549"
inkscape:window-x="0" inkscape:window-x="0"
inkscape:window-y="0" inkscape:window-y="0"
inkscape:window-maximized="1" inkscape:window-maximized="1"
@ -710,49 +710,49 @@
width="15.99999" width="15.99999"
y="101" y="101"
x="76.000008" x="76.000008"
style="fill:#ffffff;fill-opacity:0.80000007;stroke:none;stroke-width:0" /> style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect <rect
id="rect4761-0" id="rect4761-0"
height="1.9999945" height="1.9999945"
width="15.99999" width="15.99999"
y="105" y="105"
x="76.000008" x="76.000008"
style="fill:#ffffff;fill-opacity:0.80000007;stroke:none;stroke-width:0" /> style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect <rect
id="rect4761-7" id="rect4761-7"
height="1.9999945" height="1.9999945"
width="9" width="9"
y="109" y="109"
x="76.000008" x="76.000008"
style="fill:#ffffff;fill-opacity:0.80000007;stroke:none;stroke-width:0" /> style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect <rect
id="rect4761-1-1" id="rect4761-1-1"
height="1.9999945" height="1.9999945"
width="12" width="12"
y="125" y="125"
x="76.000008" x="76.000008"
style="fill:#ffffff;fill-opacity:0.80000007;stroke:none;stroke-width:0" /> style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect <rect
id="rect4761-1-1-4" id="rect4761-1-1-4"
height="1.9999945" height="1.9999945"
width="10" width="10"
y="137" y="137"
x="76.000008" x="76.000008"
style="fill:#ffffff;fill-opacity:0.80000007;stroke:none;stroke-width:0" /> style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect <rect
id="rect4761-1-1-4-4" id="rect4761-1-1-4-4"
height="1.9999945" height="1.9999945"
width="10" width="10"
y="129" y="129"
x="82" x="82"
style="fill:#ffffff;fill-opacity:0.80000007;stroke:none;stroke-width:0" /> style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect <rect
id="rect4761-1-1-4-4-3" id="rect4761-1-1-4-4-3"
height="1.9999945" height="1.9999945"
width="9" width="9"
y="133" y="133"
x="82" x="82"
style="fill:#ffffff;fill-opacity:0.80000007;stroke:none;stroke-width:0" /> style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<path <path
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.8;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.8;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
@ -890,4 +890,9 @@
id="path4300-6" id="path4300-6"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" /> sodipodi:nodetypes="cccc" />
<path
style="fill:#ffffff;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:0.80000001;fill-opacity:0.80000001"
d="m 99,113 3,3 7,-7 3,0 2,-1 1,-2 0,-3 -3,3 -3,-3 3,-3 -3,0 -2,1 -1,2 0,3 z"
id="path4268"
inkscape:connector-curvature="0" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -71,6 +71,9 @@ div.jsoneditor-menu > button.jsoneditor-compact {
div.jsoneditor-menu > button.jsoneditor-format { div.jsoneditor-menu > button.jsoneditor-format {
background-position: -72px -120px; background-position: -72px -120px;
} }
div.jsoneditor-menu > button.jsoneditor-repair {
background-position: -96px -96px;
}
div.jsoneditor-menu > div.jsoneditor-modes { div.jsoneditor-menu > div.jsoneditor-modes {
display: inline-block; display: inline-block;

View File

@ -136,6 +136,22 @@ textmode.create = function (container, options) {
} }
}; };
// create repair button
var buttonRepair = document.createElement('button');
buttonRepair.type = 'button';
buttonRepair.className = 'jsoneditor-repair';
buttonRepair.title = 'Repair JSON data: fix quotes and escape characters, remove comments and JSONP notation.';
this.menu.appendChild(buttonRepair);
buttonRepair.onclick = function () {
try {
me.repair();
me._onChange();
}
catch (err) {
me._onError(err);
}
};
// create mode box // create mode box
if (this.options && this.options.modes && this.options.modes.length) { if (this.options && this.options.modes && this.options.modes.length) {
this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) { this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {
@ -414,7 +430,7 @@ textmode.destroy = function () {
}; };
/** /**
* Compact the code in the formatter * Compact the code in the text editor
*/ */
textmode.compact = function () { textmode.compact = function () {
var json = this.get(); var json = this.get();
@ -423,7 +439,7 @@ textmode.compact = function () {
}; };
/** /**
* Format the code in the formatter * Format the code in the text editor
*/ */
textmode.format = function () { textmode.format = function () {
var json = this.get(); var json = this.get();
@ -431,6 +447,15 @@ textmode.format = function () {
this.setText(text); this.setText(text);
}; };
/**
* Repair the code in the text editor
*/
textmode.repair = function () {
var text = this.getText();
var sanitizedText = util.sanitize(text);
this.setText(sanitizedText);
};
/** /**
* Set focus to the formatter * Set focus to the formatter
*/ */