Skip to content

Commit 50e771e

Browse files
committed
bump: 3.7.0
1 parent 2d73285 commit 50e771e

File tree

3 files changed

+83
-14
lines changed

3 files changed

+83
-14
lines changed

Diff for: CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1+
12
# Changelog
23

4+
## 3.7.0 / 2017-05-16
5+
6+
* feat: add externalLinkTarget, close #149
7+
* feat: add **{docsify-updated<span>}</span>**, close #158
8+
39
## 3.6.6 / 2017-05-06
410

511
* feat: support query string for the search, likes `https://docsify.js.org/#/?s=navbar`, fixed ([#156](https://github.com/QingWei-Li/docsify/issues/156)

Diff for: lib/docsify.js

+75-12
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ var config = merge({
7777
executeScript: null,
7878
noEmoji: false,
7979
ga: '',
80-
mergeNavbar: false
80+
mergeNavbar: false,
81+
formatUpdated: '',
82+
externalLinkTarget: '_blank'
8183
}, window.$docsify);
8284

8385
var script = document.currentScript ||
@@ -629,9 +631,10 @@ function get (url, hasBar) {
629631
var on = function () {
630632
xhr.addEventListener.apply(xhr, arguments);
631633
};
634+
var cached$$1 = cache[url];
632635

633-
if (cache[url]) {
634-
return { then: function (cb) { return cb(cache[url]); }, abort: noop }
636+
if (cached$$1) {
637+
return { then: function (cb) { return cb(cached$$1.content, cached$$1.opt); }, abort: noop }
635638
}
636639

637640
xhr.open('GET', url);
@@ -660,8 +663,14 @@ function get (url, hasBar) {
660663
if (target.status >= 400) {
661664
error(target);
662665
} else {
663-
cache[url] = target.response;
664-
success(target.response);
666+
var result = cache[url] = {
667+
content: target.response,
668+
opt: {
669+
updatedAt: xhr.getResponseHeader('last-modified')
670+
}
671+
};
672+
673+
success(result.content, result.opt);
665674
}
666675
});
667676
},
@@ -2959,6 +2968,7 @@ function emojify (text) {
29592968
var markdownCompiler = marked;
29602969
var contentBase = '';
29612970
var currentPath = '';
2971+
var linkTarget = '_blank';
29622972
var renderer = new marked.Renderer();
29632973
var cacheTree = {};
29642974
var toc = [];
@@ -2980,11 +2990,13 @@ var markdown = cached(function (text) {
29802990

29812991
markdown.renderer = renderer;
29822992

2983-
markdown.init = function (config, base) {
2993+
markdown.init = function (config, ref) {
29842994
if ( config === void 0 ) config = {};
2985-
if ( base === void 0 ) base = window.location.pathname;
2995+
var base = ref.base; if ( base === void 0 ) base = window.location.pathname;
2996+
var externalLinkTarget = ref.externalLinkTarget;
29862997

29872998
contentBase = getBasePath(base);
2999+
linkTarget = externalLinkTarget || linkTarget;
29883000

29893001
if (isFn(config)) {
29903002
markdownCompiler = config(marked, renderer);
@@ -3037,7 +3049,7 @@ renderer.link = function (href, title, text) {
30373049
if (!/:|(\/{2})/.test(href)) {
30383050
href = toURL(href, null, currentPath);
30393051
} else {
3040-
blank = ' target="_blank"';
3052+
blank = " target=\"" + linkTarget + "\"";
30413053
}
30423054
if (title) {
30433055
title = " title=\"" + title + "\"";
@@ -3118,6 +3130,45 @@ var render = Object.freeze({
31183130
cover: cover$1
31193131
});
31203132

3133+
var RGX = /([^{]*?)\w(?=\})/g;
3134+
3135+
var dict = {
3136+
YYYY: 'getFullYear',
3137+
YY: 'getYear',
3138+
MM: function (d) {
3139+
return d.getMonth() + 1;
3140+
},
3141+
DD: 'getDate',
3142+
HH: 'getHours',
3143+
mm: 'getMinutes',
3144+
ss: 'getSeconds'
3145+
};
3146+
3147+
var tinydate = function (str) {
3148+
var parts=[], offset=0;
3149+
str.replace(RGX, function (key, _, idx) {
3150+
// save preceding string
3151+
parts.push(str.substring(offset, idx - 1));
3152+
offset = idx += key.length + 1;
3153+
// save function
3154+
parts.push(function(d){
3155+
return ('00' + (typeof dict[key]==='string' ? d[dict[key]]() : dict[key](d))).slice(-key.length);
3156+
});
3157+
});
3158+
3159+
if (offset !== str.length) {
3160+
parts.push(str.substring(offset));
3161+
}
3162+
3163+
return function (arg) {
3164+
var out='', i=0, d=arg||new Date();
3165+
for (; i<parts.length; i++) {
3166+
out += (typeof parts[i]==='string') ? parts[i] : parts[i](d);
3167+
}
3168+
return out;
3169+
};
3170+
};
3171+
31213172
function executeScript () {
31223173
var script = findAll('.markdown-section>script')
31233174
.filter(function (s) { return !/template/.test(s.type); })[0];
@@ -3130,6 +3181,16 @@ function executeScript () {
31303181
}, 0);
31313182
}
31323183

3184+
function formatUpdated (html, updated, fn) {
3185+
updated = typeof fn === 'function'
3186+
? fn(updated)
3187+
: typeof fn === 'string'
3188+
? tinydate(fn)(new Date(updated))
3189+
: updated;
3190+
3191+
return html.replace(/{docsify-updated}/g, updated)
3192+
}
3193+
31333194
function renderMain (html) {
31343195
if (!html) {
31353196
// TODO: Custom 404 page
@@ -3210,11 +3271,13 @@ function renderMixin (proto) {
32103271
getAndActive('nav');
32113272
};
32123273

3213-
proto._renderMain = function (text) {
3274+
proto._renderMain = function (text, opt) {
32143275
var this$1 = this;
32153276

32163277
callHook(this, 'beforeEach', text, function (result) {
32173278
var html = this$1.isHTML ? result : markdown(result);
3279+
html = formatUpdated(html, opt.updatedAt, this$1.config.formatUpdated);
3280+
32183281
callHook(this$1, 'afterEach', html, function (text) { return renderMain.call(this$1, text); });
32193282
});
32203283
};
@@ -3262,7 +3325,7 @@ function initRender (vm) {
32623325
var config = vm.config;
32633326

32643327
// Init markdown compiler
3265-
markdown.init(config.markdown, config.basePath);
3328+
markdown.init(config.markdown, config);
32663329

32673330
var id = config.el || '#app';
32683331
var navEl = find('nav') || create('nav');
@@ -3406,8 +3469,8 @@ function fetchMixin (proto) {
34063469
this.isHTML = /\.html$/g.test(path);
34073470

34083471
// Load main content
3409-
last.then(function (text) {
3410-
this$1._renderMain(text);
3472+
last.then(function (text, opt) {
3473+
this$1._renderMain(text, opt);
34113474
if (!loadSidebar) { return cb() }
34123475

34133476
var fn = function (result) { this$1._renderSidebar(result); cb(); };

0 commit comments

Comments
 (0)