Dev: Improve line break display

This commit is contained in:
surunzi
2018-02-16 17:39:19 +08:00
parent eb923bab37
commit 8e79b97938
6 changed files with 167 additions and 46 deletions

View File

@@ -1083,6 +1083,21 @@ Escapes a string for insertion into HTML, replacing &, <, >, ", `, and ' charact
escape('You & Me'); -> // -> 'You &amp; Me'
```
## escapeJsStr
Escape string to be a valid JavaScript string literal between quotes.
http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4
|Name |Type |Desc |
|------|------|----------------|
|str |string|String to escape|
|return|string|Escaped string |
```javascript
escapeJsStr('\"\n'); // -> '\\"\\\\n'
```
## escapeJsonStr
Escape json string.

View File

@@ -1,9 +1,9 @@
/* Escape json string.
*/
_('escapeJsStr');
function exports(str)
{
return str.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\f|\n|\r|\t/g, '');
return escapeJsStr(str).replace(/\\'/g, '\'');
}

View File

@@ -258,4 +258,4 @@ function objToArr(val)
const LIGHTER_KEY = ['__proto__'];
let encode = str => escape(toStr(str));
let encode = str => escape(toStr(str)).replace(/\n/g, '↵').replace(/\f|\r|\t/g, '');

View File

@@ -39,7 +39,7 @@ export default function getAbstract(obj, {
strWrapper = '<span style="color: #183691;">',
boolWrapper = '<span style="color: #0086b3;">',
specialWrapper = '<span style="color: #707d8b;">',
strEscape = str => escape(str),
strEscape = str => escape(str).replace(/\\n/g, '↵').replace(/\\f|\\r|\\t/g, '').replace(/\\/g, ''),
wrapperEnd = '</span>';
let wrapKey = key => keyWrapper + strEscape(key) + wrapperEnd,
@@ -52,8 +52,6 @@ export default function getAbstract(obj, {
{
str = toStr(str);
str = str.replace(/\\/g, '');
if (contain(SPECIAL_VAL, str) || startWith(str, 'Array['))
{
return specialWrapper + strEscape(str) + wrapperEnd;

View File

@@ -177,6 +177,90 @@ export var endWith = _.endWith = (function ()
return exports;
})();
/* ------------------------------ toStr ------------------------------ */
export var toStr = _.toStr = (function ()
{
/* Convert value to a string.
*
* |Name |Type |Desc |
* |------|------|----------------|
* |val |* |Value to convert|
* |return|string|Resulted string |
*
* ```javascript
* toStr(null); // -> ''
* toStr(1); // -> '1'
* toStr(false); // -> 'false'
* toStr([1, 2, 3]); // -> '1,2,3'
* ```
*/
/* module
* env: all
* test: all
*/
function exports(val)
{
return val == null ? '' : val.toString();
}
return exports;
})();
/* ------------------------------ escapeJsStr ------------------------------ */
export var escapeJsStr = _.escapeJsStr = (function ()
{
/* Escape string to be a valid JavaScript string literal between quotes.
*
* http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4
*
* |Name |Type |Desc |
* |------|------|----------------|
* |str |string|String to escape|
* |return|string|Escaped string |
*
* ```javascript
* escapeJsStr('\"\n'); // -> '\\"\\\\n'
* ```
*/
/* module
* env: all
* test: all
*/
/* dependencies
* toStr
*/
function exports(str)
{
return toStr(str).replace(regEscapeChars, function (char)
{
switch (char)
{
case '"':
case '\'':
case '\\':
return '\\' + char;
case '\n': return '\\n';
case '\r': return '\\r';
// Line separator
case '\u2028': return '\\u2028';
// Paragraph separator
case '\u2029': return '\\u2029';
}
});
}
var regEscapeChars = /["'\\\n\r\u2028\u2029]/g;
return exports;
})();
/* ------------------------------ escapeJsonStr ------------------------------ */
export var escapeJsonStr = _.escapeJsonStr = (function ()
@@ -184,11 +268,13 @@ export var escapeJsonStr = _.escapeJsonStr = (function ()
/* Escape json string.
*/
/* dependencies
* escapeJsStr
*/
function exports(str)
{
return str.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\f|\n|\r|\t/g, '');
return escapeJsStr(str).replace(/\\'/g, '\'');
}
return exports;
@@ -369,7 +455,7 @@ export var isArr = _.isArr = (function (exports)
*
* |Name |Type |Desc |
* |------|-------|----------------------------------|
* |val |* |The value to check |
* |val |* |Value to check |
* |return|boolean|True if value is an `Array` object|
*
* ```javascript
@@ -1087,38 +1173,6 @@ export var filter = _.filter = (function ()
return exports;
})();
/* ------------------------------ toStr ------------------------------ */
export var toStr = _.toStr = (function ()
{
/* Convert value to a string.
*
* |Name |Type |Desc |
* |------|------|----------------|
* |val |* |Value to convert|
* |return|string|Resulted string |
*
* ```javascript
* toStr(null); // -> ''
* toStr(1); // -> '1'
* toStr(false); // -> 'false'
* toStr([1, 2, 3]); // -> '1,2,3'
* ```
*/
/* module
* env: all
* test: all
*/
function exports(val)
{
return val == null ? '' : val.toString();
}
return exports;
})();
/* ------------------------------ uniqId ------------------------------ */
export var uniqId = _.uniqId = (function ()

View File

@@ -976,6 +976,58 @@ export var escape = _.escape = (function ()
return exports;
})();
/* ------------------------------ escapeJsStr ------------------------------ */
export var escapeJsStr = _.escapeJsStr = (function ()
{
/* Escape string to be a valid JavaScript string literal between quotes.
*
* http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4
*
* |Name |Type |Desc |
* |------|------|----------------|
* |str |string|String to escape|
* |return|string|Escaped string |
*
* ```javascript
* escapeJsStr('\"\n'); // -> '\\"\\\\n'
* ```
*/
/* module
* env: all
* test: all
*/
/* dependencies
* toStr
*/
function exports(str)
{
return toStr(str).replace(regEscapeChars, function (char)
{
switch (char)
{
case '"':
case '\'':
case '\\':
return '\\' + char;
case '\n': return '\\n';
case '\r': return '\\r';
// Line separator
case '\u2028': return '\\u2028';
// Paragraph separator
case '\u2029': return '\\u2029';
}
});
}
var regEscapeChars = /["'\\\n\r\u2028\u2029]/g;
return exports;
})();
/* ------------------------------ escapeJsonStr ------------------------------ */
export var escapeJsonStr = _.escapeJsonStr = (function ()
@@ -983,11 +1035,13 @@ export var escapeJsonStr = _.escapeJsonStr = (function ()
/* Escape json string.
*/
/* dependencies
* escapeJsStr
*/
function exports(str)
{
return str.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\f|\n|\r|\t/g, '');
return escapeJsStr(str).replace(/\\'/g, '\'');
}
return exports;