fix(cdn): patch cdn.js to make jsdelivr and unpkg work

pull/351/head
ppoffice 2018-10-27 12:16:23 -04:00
parent 41f06e3d14
commit d1bd500a14
8 changed files with 42 additions and 22 deletions

View File

@ -48,7 +48,7 @@ Share plugins
- [AddThis](http://ppoffice.github.io/hexo-theme-icarus/Plugins/Share/addthis-share-plugin/)
- [AddToAny](http://ppoffice.github.io/hexo-theme-icarus/Plugins/Share/addtoany-share-plugin/)
- [Baidu Share](http://ppoffice.github.io/hexo-theme-icarus/Plugins/Share/baidu-share-plugin/)
- [Share.js](http://ppoffice.github.io/hexo-theme-icarus/Plugins/Share/sharejs-share-plugin/)
- [Share.js](http://ppoffice.github.io/hexo-theme-icarus/Plugins/Share/share-js-share-plugin/)
- [ShareThis](http://ppoffice.github.io/hexo-theme-icarus/Plugins/Share/sharethis-share-plugin/)
Other plugins

View File

@ -9,36 +9,56 @@
const cdn_providers = {
cdnjs: 'https://cdnjs.cloudflare.com/ajax/libs/${ package }/${ version }/${ filename }',
jsdelivr: 'https://cdn.jsdelivr.net/npm/${ package }@${ version }/${ filename }',
jsdelivr_github: 'https://cdn.jsdelivr.net/gh/user/${ package }@${ version }/${ filename }',
unpkg: 'https://unpkg.com/${ package }@${ version }/${ filename }'
};
const font_providers = {
google: 'https://fonts.googleapis.com/css?family=${ fontname }'
google: 'https://fonts.googleapis.com/${ type }?family=${ fontname }'
};
const icon_providers = {
fontawesome: 'https://use.fontawesome.com/releases/v5.4.1/css/all.css',
material: 'https://fonts.googleapis.com/icon?family=Material+Icons'
fontawesome: 'https://use.fontawesome.com/releases/v5.4.1/css/all.css'
};
module.exports = function (hexo) {
hexo.extend.helper.register('cdn', function (package, version, filename) {
hexo.extend.helper.register('cdn', function (_package, version, filename) {
let provider = hexo.extend.helper.get('get_config').bind(this)('providers.cdn');
// cdn.js does not follow a GitHub npm style like jsdeliver and unpkg do. Patch it!
if (provider === 'cdnjs' || provider.startsWith('[cdnjs]')) {
if (provider.startsWith('[cdnjs]')) {
provider = provider.substr(7);
}
if (filename.startsWith('dist/')) {
filename = filename.substr(5);
}
if (_package === 'moment') {
_package = 'moment.js';
filename = filename.startsWith('min/') ? filename.substr(4) : filename;
}
if (_package === 'outdatedbrowser') {
_package = 'outdated-browser';
filename = filename.startsWith('outdatedbrowser/') ? filename.substr(16) : filename;
}
if (_package === 'highlight.js') {
filename = filename.endsWith('.css') && filename.indexOf('.min.') === -1 ?
filename.substr(0, filename.length - 4) + '.min.css' : filename;
}
}
if (provider !== null && cdn_providers.hasOwnProperty(provider)) {
provider = cdn_providers[provider];
}
return provider.replace(/\${\s*package\s*}/gi, package)
return provider.replace(/\${\s*package\s*}/gi, _package)
.replace(/\${\s*version\s*}/gi, version)
.replace(/\${\s*filename\s*}/gi, filename);
});
hexo.extend.helper.register('fontcdn', function (fontName) {
hexo.extend.helper.register('fontcdn', function (fontName, type = 'css') {
let provider = hexo.extend.helper.get('get_config').bind(this)('providers.fontcdn');
if (provider !== null && font_providers.hasOwnProperty(provider)) {
provider = font_providers[provider];
}
return provider.replace(/\${\s*fontname\s*}/gi, fontName);
return provider.replace(/\${\s*fontname\s*}/gi, fontName)
.replace(/\${\s*type\s*}/gi, type);
});
hexo.extend.helper.register('iconcdn', function (provider = null) {

View File

@ -6,7 +6,7 @@ module.exports = {
cdn: {
[type]: 'string',
[doc]: 'Name or URL of the JavaScript and/or stylesheet CDN provider',
[defaultValue]: 'cdnjs'
[defaultValue]: 'jsdelivr'
},
fontcdn: {
[type]: 'string',

View File

@ -23,9 +23,9 @@
<%- css(cdn('bulma', '0.7.2', 'css/bulma.css')) %>
<%- css(iconcdn()) %>
<%- css(iconcdn('material')) %>
<%- css(fontcdn('Material+Icons', 'icon')) %>
<%- css(fontcdn('Ubuntu:400,600|Source+Code+Pro')) %>
<%- css(cdn('highlight.js', '9.12.0', 'styles/' + get_config('article.highlight') + '.min.css')) %>
<%- css(cdn('highlight.js', '9.12.0', 'styles/' + get_config('article.highlight') + '.css')) %>
<%- css('css/style') %>
<% if (has_config('plugins')) { %>

View File

@ -1,5 +1,5 @@
<%- js(cdn('jquery', '3.3.1', 'jquery.min.js')) %>
<%- js(cdn('moment.js', '2.22.2', 'moment-with-locales.min.js')) %>
<%- js(cdn('jquery', '3.3.1', 'dist/jquery.min.js')) %>
<%- js(cdn('moment', '2.22.2', 'min/moment-with-locales.min.js')) %>
<script>moment.locale("<%= get_config('language', 'en') %>");</script>
<% if (has_config('plugins')) { %>

View File

@ -1,10 +1,10 @@
<% if (plugin !== false) { %>
<% if (head) { %>
<%- css(cdn('lightgallery', '1.6.8', 'css/lightgallery.min.css')) %>
<%- css(cdn('justifiedGallery', '3.7.0', 'css/justifiedGallery.min.css')) %>
<%- css(cdn('lightgallery', '1.6.8', 'dist/css/lightgallery.min.css')) %>
<%- css(cdn('justifiedGallery', '3.7.0', 'dist/css/justifiedGallery.min.css')) %>
<% } else { %>
<%- js(cdn('lightgallery', '1.6.8', 'js/lightgallery-all.min.js')) %>
<%- js(cdn('justifiedGallery', '3.7.0', 'js/jquery.justifiedGallery.min.js')) %>
<%- js(cdn('lightgallery', '1.6.8', 'dist/js/lightgallery.min.js')) %>
<%- js(cdn('justifiedGallery', '3.7.0', 'dist/js/jquery.justifiedGallery.min.js')) %>
<script>
(function ($) {
$(document).ready(function () {

View File

@ -1,13 +1,13 @@
<% if (plugin !== false) { %>
<% if (head) { %>
<%- css(cdn('outdated-browser', '1.1.5', 'outdatedbrowser.min.css')) %>
<%- css(cdn('outdatedbrowser', '1.1.5', 'outdatedbrowser/outdatedbrowser.min.css')) %>
<% } else { %>
<div id="outdated">
<h6>Your browser is out-of-date!</h6>
<p>Update your browser to view this website correctly. <a id="btnUpdateBrowser" href="http://outdatedbrowser.com/">Update my browser now </a></p>
<p class="last"><a href="#" id="btnCloseUpdateBrowser" title="Close">&times;</a></p>
</div>
<%- js(cdn('outdated-browser', '1.1.5', 'outdatedbrowser.min.js')) %>
<%- js(cdn('outdatedbrowser', '1.1.5', 'outdatedbrowser/outdatedbrowser.min.js')) %>
<script>
$(document).ready(function () {
// plugin function, place inside DOM ready function

View File

@ -1,3 +1,3 @@
<div class="social-share"></div>
<%- css(cdn('social-share.js', '1.0.16', 'css/share.min.css')) %>
<%- js(cdn('social-share.js', '1.0.16', 'js/social-share.min.js')) %>
<%- css(cdn('social-share.js', '1.0.16', 'dist/css/share.min.css')) %>
<%- js(cdn('social-share.js', '1.0.16', 'dist/js/social-share.min.js')) %>