@@ -77,7 +77,9 @@ var config = merge({
77
77
executeScript : null ,
78
78
noEmoji : false ,
79
79
ga : '' ,
80
- mergeNavbar : false
80
+ mergeNavbar : false ,
81
+ formatUpdated : '' ,
82
+ externalLinkTarget : '_blank'
81
83
} , window . $docsify ) ;
82
84
83
85
var script = document . currentScript ||
@@ -629,9 +631,10 @@ function get (url, hasBar) {
629
631
var on = function ( ) {
630
632
xhr . addEventListener . apply ( xhr , arguments ) ;
631
633
} ;
634
+ var cached$$1 = cache [ url ] ;
632
635
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 }
635
638
}
636
639
637
640
xhr . open ( 'GET' , url ) ;
@@ -660,8 +663,14 @@ function get (url, hasBar) {
660
663
if ( target . status >= 400 ) {
661
664
error ( target ) ;
662
665
} 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 ) ;
665
674
}
666
675
} ) ;
667
676
} ,
@@ -2959,6 +2968,7 @@ function emojify (text) {
2959
2968
var markdownCompiler = marked ;
2960
2969
var contentBase = '' ;
2961
2970
var currentPath = '' ;
2971
+ var linkTarget = '_blank' ;
2962
2972
var renderer = new marked . Renderer ( ) ;
2963
2973
var cacheTree = { } ;
2964
2974
var toc = [ ] ;
@@ -2980,11 +2990,13 @@ var markdown = cached(function (text) {
2980
2990
2981
2991
markdown . renderer = renderer ;
2982
2992
2983
- markdown . init = function ( config , base ) {
2993
+ markdown . init = function ( config , ref ) {
2984
2994
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 ;
2986
2997
2987
2998
contentBase = getBasePath ( base ) ;
2999
+ linkTarget = externalLinkTarget || linkTarget ;
2988
3000
2989
3001
if ( isFn ( config ) ) {
2990
3002
markdownCompiler = config ( marked , renderer ) ;
@@ -3037,7 +3049,7 @@ renderer.link = function (href, title, text) {
3037
3049
if ( ! / : | ( \/ { 2 } ) / . test ( href ) ) {
3038
3050
href = toURL ( href , null , currentPath ) ;
3039
3051
} else {
3040
- blank = ' target="_blank"' ;
3052
+ blank = " target=\"" + linkTarget + "\"" ;
3041
3053
}
3042
3054
if ( title ) {
3043
3055
title = " title=\"" + title + "\"" ;
@@ -3118,6 +3130,45 @@ var render = Object.freeze({
3118
3130
cover : cover$1
3119
3131
} ) ;
3120
3132
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
+
3121
3172
function executeScript ( ) {
3122
3173
var script = findAll ( '.markdown-section>script' )
3123
3174
. filter ( function ( s ) { return ! / t e m p l a t e / . test ( s . type ) ; } ) [ 0 ] ;
@@ -3130,6 +3181,16 @@ function executeScript () {
3130
3181
} , 0 ) ;
3131
3182
}
3132
3183
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 ( / { d o c s i f y - u p d a t e d } / g, updated )
3192
+ }
3193
+
3133
3194
function renderMain ( html ) {
3134
3195
if ( ! html ) {
3135
3196
// TODO: Custom 404 page
@@ -3210,11 +3271,13 @@ function renderMixin (proto) {
3210
3271
getAndActive ( 'nav' ) ;
3211
3272
} ;
3212
3273
3213
- proto . _renderMain = function ( text ) {
3274
+ proto . _renderMain = function ( text , opt ) {
3214
3275
var this$1 = this ;
3215
3276
3216
3277
callHook ( this , 'beforeEach' , text , function ( result ) {
3217
3278
var html = this$1 . isHTML ? result : markdown ( result ) ;
3279
+ html = formatUpdated ( html , opt . updatedAt , this$1 . config . formatUpdated ) ;
3280
+
3218
3281
callHook ( this$1 , 'afterEach' , html , function ( text ) { return renderMain . call ( this$1 , text ) ; } ) ;
3219
3282
} ) ;
3220
3283
} ;
@@ -3262,7 +3325,7 @@ function initRender (vm) {
3262
3325
var config = vm . config ;
3263
3326
3264
3327
// Init markdown compiler
3265
- markdown . init ( config . markdown , config . basePath ) ;
3328
+ markdown . init ( config . markdown , config ) ;
3266
3329
3267
3330
var id = config . el || '#app' ;
3268
3331
var navEl = find ( 'nav' ) || create ( 'nav' ) ;
@@ -3406,8 +3469,8 @@ function fetchMixin (proto) {
3406
3469
this . isHTML = / \. h t m l $ / g. test ( path ) ;
3407
3470
3408
3471
// 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 ) ;
3411
3474
if ( ! loadSidebar ) { return cb ( ) }
3412
3475
3413
3476
var fn = function ( result ) { this$1 . _renderSidebar ( result ) ; cb ( ) ; } ;
0 commit comments