mirror of
https://github.com/liriliri/eruda.git
synced 2026-03-20 09:38:37 +08:00
fix(console): url recognition
This commit is contained in:
@@ -1239,10 +1239,6 @@ Escape special chars to be used as literals in RegExp constructors.
|
|||||||
escapeRegExp('[licia]'); // -> '\\[licia\\]'
|
escapeRegExp('[licia]'); // -> '\\[licia\\]'
|
||||||
```
|
```
|
||||||
|
|
||||||
## evalCss
|
|
||||||
|
|
||||||
Eval css.
|
|
||||||
|
|
||||||
## extend
|
## extend
|
||||||
|
|
||||||
Copy all of the properties in the source objects over to the destination object.
|
Copy all of the properties in the source objects over to the destination object.
|
||||||
@@ -1271,6 +1267,20 @@ Like extend, but only copies own properties over to the destination object.
|
|||||||
extendOwn({name: 'RedHood'}, {age: 24}); // -> {name: 'RedHood', age: 24}
|
extendOwn({name: 'RedHood'}, {age: 24}); // -> {name: 'RedHood', age: 24}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## extractUrls
|
||||||
|
|
||||||
|
Extract urls from plain text.
|
||||||
|
|
||||||
|
|Name |Type |Desc |
|
||||||
|
|------|------|---------------|
|
||||||
|
|str |string|Text to extract|
|
||||||
|
|return|array |Url list |
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const str = '[Official site: http://eustia.liriliri.io](http://eustia.liriliri.io)';
|
||||||
|
extractUrls(str); // -> ['http://eustia.liriliri.io']
|
||||||
|
```
|
||||||
|
|
||||||
## fileSize
|
## fileSize
|
||||||
|
|
||||||
Turn bytes into human readable file size.
|
Turn bytes into human readable file size.
|
||||||
@@ -1837,6 +1847,24 @@ Get the last element of array.
|
|||||||
last([1, 2]); // -> 2
|
last([1, 2]); // -> 2
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## linkify
|
||||||
|
|
||||||
|
Hyperlink urls in a string.
|
||||||
|
|
||||||
|
|Name |Type |Desc |
|
||||||
|
|-----------|--------|-------------------------|
|
||||||
|
|str |string |String to hyperlink |
|
||||||
|
|[hyperlink]|function|Function to hyperlink url|
|
||||||
|
|return |string |Result string |
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const str = 'Official site: http://eustia.liriliri.io'
|
||||||
|
linkify(str); // -> 'Official site: <a href="http://eustia.liriliri.io">http://eustia.liriliri.io</a>'
|
||||||
|
linkify(str, function (url) {
|
||||||
|
return '<a href="' + url + '" target="_blank">' + url + '</a>';
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
## loadJs
|
## loadJs
|
||||||
|
|
||||||
Inject script tag into page with given src value.
|
Inject script tag into page with given src value.
|
||||||
@@ -2532,23 +2560,6 @@ trim('_abc_', '_'); // -> 'abc'
|
|||||||
trim('_abc_', ['a', 'c', '_']); // -> 'b'
|
trim('_abc_', ['a', 'c', '_']); // -> 'b'
|
||||||
```
|
```
|
||||||
|
|
||||||
## tryIt
|
|
||||||
|
|
||||||
Run function in a try catch.
|
|
||||||
|
|
||||||
|Name|Type |Desc |
|
|
||||||
|----|--------|---------------------|
|
|
||||||
|fn |function|Function to try catch|
|
|
||||||
|[cb]|function|Callback |
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
tryIt(function () {
|
|
||||||
// Do something that might cause an error.
|
|
||||||
}, function (err, result) {
|
|
||||||
if (err) console.log(err);
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## type
|
## type
|
||||||
|
|
||||||
Determine the internal JavaScript [[Class]] of an object.
|
Determine the internal JavaScript [[Class]] of an object.
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ import {
|
|||||||
$,
|
$,
|
||||||
Emitter,
|
Emitter,
|
||||||
stringifyAll,
|
stringifyAll,
|
||||||
nextTick
|
nextTick,
|
||||||
|
linkify
|
||||||
} from '../lib/util'
|
} from '../lib/util'
|
||||||
import evalCss from '../lib/evalCss'
|
import evalCss from '../lib/evalCss'
|
||||||
|
|
||||||
@@ -305,13 +306,18 @@ export default class Log extends Emitter {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type !== 'error') msg = recognizeUrl(msg)
|
|
||||||
msg = render({ msg, type, icon, id, displayHeader, time, from, group })
|
|
||||||
|
|
||||||
if (!this._needSrc() || !Log.lazyEvaluation) {
|
if (!this._needSrc() || !Log.lazyEvaluation) {
|
||||||
delete this.args
|
delete this.args
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only linkify for simple types
|
||||||
|
if (type !== 'error' && !this.args) {
|
||||||
|
msg = linkify(msg, url => {
|
||||||
|
return `<a href="${url}" target="_blank">${url}</a>`
|
||||||
|
})
|
||||||
|
}
|
||||||
|
msg = render({ msg, type, icon, id, displayHeader, time, from, group })
|
||||||
|
|
||||||
this._$el.addClass('eruda-log-container').html(msg)
|
this._$el.addClass('eruda-log-container').html(msg)
|
||||||
this._$content = this._$el.find('.eruda-log-content')
|
this._$content = this._$el.find('.eruda-log-content')
|
||||||
this._content = this._$content.get(0)
|
this._content = this._$content.get(0)
|
||||||
@@ -556,11 +562,6 @@ function formatEl(val) {
|
|||||||
)}</pre>`
|
)}</pre>`
|
||||||
}
|
}
|
||||||
|
|
||||||
const regUrl = /((?:https?|ftp):\/\/[-A-Z0-9+\u0026\u2019@#/%?=()~_|!:,.;]*[-A-Z0-9+\u0026@#/%=~()_|])/gi
|
|
||||||
|
|
||||||
const recognizeUrl = str =>
|
|
||||||
str.replace(regUrl, '<a href="$1" target="_blank">$1</a>')
|
|
||||||
|
|
||||||
function getFrom() {
|
function getFrom() {
|
||||||
const e = new Error()
|
const e = new Error()
|
||||||
let ret = ''
|
let ret = ''
|
||||||
|
|||||||
150
src/lib/util.js
150
src/lib/util.js
@@ -1321,33 +1321,6 @@ export var escapeRegExp = _.escapeRegExp = (function (exports) {
|
|||||||
return exports;
|
return exports;
|
||||||
})({});
|
})({});
|
||||||
|
|
||||||
/* ------------------------------ evalCss ------------------------------ */
|
|
||||||
|
|
||||||
export var evalCss = _.evalCss = (function (exports) {
|
|
||||||
/* Load css into page.
|
|
||||||
*
|
|
||||||
* |Name|Type |Desc |
|
|
||||||
* |----|------|--------|
|
|
||||||
* |css |string|Css code|
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* example
|
|
||||||
* evalCss('body{background:#08c}');
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* typescript
|
|
||||||
* export declare function evalCss(css: string): void;
|
|
||||||
*/
|
|
||||||
exports = function(css) {
|
|
||||||
var style = document.createElement('style');
|
|
||||||
style.textContent = css;
|
|
||||||
style.type = 'text/css';
|
|
||||||
document.head.appendChild(style);
|
|
||||||
};
|
|
||||||
|
|
||||||
return exports;
|
|
||||||
})({});
|
|
||||||
|
|
||||||
/* ------------------------------ fileSize ------------------------------ */
|
/* ------------------------------ fileSize ------------------------------ */
|
||||||
|
|
||||||
export var fileSize = _.fileSize = (function (exports) {
|
export var fileSize = _.fileSize = (function (exports) {
|
||||||
@@ -7197,6 +7170,88 @@ export var trim = _.trim = (function (exports) {
|
|||||||
return exports;
|
return exports;
|
||||||
})({});
|
})({});
|
||||||
|
|
||||||
|
/* ------------------------------ extractUrls ------------------------------ */
|
||||||
|
|
||||||
|
export var extractUrls = _.extractUrls = (function (exports) {
|
||||||
|
/* Extract urls from plain text.
|
||||||
|
*
|
||||||
|
* |Name |Type |Desc |
|
||||||
|
* |------|------|---------------|
|
||||||
|
* |str |string|Text to extract|
|
||||||
|
* |return|array |Url list |
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* example
|
||||||
|
* const str = '[Official site: http://eustia.liriliri.io](http://eustia.liriliri.io)';
|
||||||
|
* extractUrls(str); // -> ['http://eustia.liriliri.io']
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* typescript
|
||||||
|
* export declare function extractUrls(str: string): string[];
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* dependencies
|
||||||
|
* unique trim map toArr
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports = function(str) {
|
||||||
|
var urlList = toArr(str.match(regUrl));
|
||||||
|
return unique(
|
||||||
|
map(urlList, function(url) {
|
||||||
|
return trim(url);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
var regUrl = /((https?)|(ftp)):\/\/[\w.]+[^ \f\n\r\t\v"\\<>[\]\u2100-\uFFFF(),]*/gi;
|
||||||
|
|
||||||
|
return exports;
|
||||||
|
})({});
|
||||||
|
|
||||||
|
/* ------------------------------ linkify ------------------------------ */
|
||||||
|
|
||||||
|
export var linkify = _.linkify = (function (exports) {
|
||||||
|
/* Hyperlink urls in a string.
|
||||||
|
*
|
||||||
|
* |Name |Type |Desc |
|
||||||
|
* |-----------|--------|-------------------------|
|
||||||
|
* |str |string |String to hyperlink |
|
||||||
|
* |[hyperlink]|function|Function to hyperlink url|
|
||||||
|
* |return |string |Result string |
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* example
|
||||||
|
* const str = 'Official site: http://eustia.liriliri.io'
|
||||||
|
* linkify(str); // -> 'Official site: <a href="http://eustia.liriliri.io">http://eustia.liriliri.io</a>'
|
||||||
|
* linkify(str, function (url) {
|
||||||
|
* return '<a href="' + url + '" target="_blank">' + url + '</a>';
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* typescript
|
||||||
|
* export declare function linkify(str: string, hyperlink?: Function): string;
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* dependencies
|
||||||
|
* extractUrls each escapeRegExp
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports = function(str, hyperlink) {
|
||||||
|
hyperlink = hyperlink || defHyperlink;
|
||||||
|
var urlList = extractUrls(str);
|
||||||
|
each(urlList, function(url) {
|
||||||
|
str = str.replace(new RegExp(escapeRegExp(url), 'g'), hyperlink);
|
||||||
|
});
|
||||||
|
return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
function defHyperlink(url) {
|
||||||
|
return '<a href="' + url + '">' + url + '</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
return exports;
|
||||||
|
})({});
|
||||||
|
|
||||||
/* ------------------------------ query ------------------------------ */
|
/* ------------------------------ query ------------------------------ */
|
||||||
|
|
||||||
export var query = _.query = (function (exports) {
|
export var query = _.query = (function (exports) {
|
||||||
@@ -8253,47 +8308,6 @@ export var throttle = _.throttle = (function (exports) {
|
|||||||
return exports;
|
return exports;
|
||||||
})({});
|
})({});
|
||||||
|
|
||||||
/* ------------------------------ tryIt ------------------------------ */
|
|
||||||
|
|
||||||
export var tryIt = _.tryIt = (function (exports) {
|
|
||||||
/* Run function in a try catch.
|
|
||||||
*
|
|
||||||
* |Name|Type |Desc |
|
|
||||||
* |----|--------|---------------------|
|
|
||||||
* |fn |function|Function to try catch|
|
|
||||||
* |[cb]|function|Callback |
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* example
|
|
||||||
* tryIt(function () {
|
|
||||||
* // Do something that might cause an error.
|
|
||||||
* }, function (err, result) {
|
|
||||||
* if (err) console.log(err);
|
|
||||||
* });
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* typescript
|
|
||||||
* export declare function tryIt(fn: Function, cb?: Function): void;
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* dependencies
|
|
||||||
* noop
|
|
||||||
*/
|
|
||||||
|
|
||||||
exports = function(fn, cb) {
|
|
||||||
cb = cb || noop;
|
|
||||||
|
|
||||||
try {
|
|
||||||
cb(null, fn());
|
|
||||||
} catch (e) {
|
|
||||||
cb(e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return exports;
|
|
||||||
})({});
|
|
||||||
|
|
||||||
/* ------------------------------ uncaught ------------------------------ */
|
/* ------------------------------ uncaught ------------------------------ */
|
||||||
|
|
||||||
export var uncaught = _.uncaught = (function (exports) {
|
export var uncaught = _.uncaught = (function (exports) {
|
||||||
|
|||||||
Reference in New Issue
Block a user