From 4000bd0bfa192f57bfe1c89ee1c06a63faa2175c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E4=B8=96=E6=98=8C?= Date: Thu, 7 Jun 2018 21:49:00 +0800 Subject: [PATCH 1/3] Update index.js transform all resource when post_asset_folder = true --- index.js | 119 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 73 insertions(+), 46 deletions(-) diff --git a/index.js b/index.js index 59da07d..0a0ce74 100644 --- a/index.js +++ b/index.js @@ -3,55 +3,82 @@ var cheerio = require('cheerio'); // http://stackoverflow.com/questions/14480345/how-to-get-the-nth-occurrence-in-a-string function getPosition(str, m, i) { - return str.split(m, i).join(m).length; + return str.split(m, i).join(m).length; } -hexo.extend.filter.register('after_post_render', function(data){ - var config = hexo.config; - if(config.post_asset_folder){ - var link = data.permalink; - var beginPos = getPosition(link, '/', 3) + 1; - // In hexo 3.1.1, the permalink of "about" page is like ".../about/index.html". - var endPos = link.lastIndexOf('/') + 1; - link = link.substring(beginPos, endPos); +hexo.extend.filter.register('after_post_render', function (data) { + var config = hexo.config; + if (config.post_asset_folder) { + var link = data.permalink; + var beginPos = getPosition(link, '/', 3) + 1; + // In hexo 3.1.1, the permalink of "about" page is like ".../about/index.html". + var endPos = link.lastIndexOf('/') + 1; + link = link.substring(beginPos, endPos); - var toprocess = ['excerpt', 'more', 'content']; - for(var i = 0; i < toprocess.length; i++){ - var key = toprocess[i]; - - var $ = cheerio.load(data[key], { - ignoreWhitespace: false, - xmlMode: false, - lowerCaseTags: false, - decodeEntities: false - }); + var toprocess = ['excerpt', 'more', 'content']; + + for (var i = 0; i < toprocess.length; i++) { + var key = toprocess[i]; - $('img').each(function(){ - if ($(this).attr('src')){ - // For windows style path, we replace '\' to '/'. - var src = $(this).attr('src').replace('\\', '/'); - if(!/http[s]*.*|\/\/.*/.test(src) && - !/^\s*\//.test(src)) { - // For "about" page, the first part of "src" can't be removed. - // In addition, to support multi-level local directory. - var linkArray = link.split('/').filter(function(elem){ - return elem != ''; - }); - var srcArray = src.split('/').filter(function(elem){ - return elem != '' && elem != '.'; - }); - if(srcArray.length > 1) - srcArray.shift(); - src = srcArray.join('/'); - $(this).attr('src', config.root + link + src); - console.info&&console.info("update link as:-->"+config.root + link + src); - } - }else{ - console.info&&console.info("no src attr, skipped..."); - console.info&&console.info($(this)); + var $ = cheerio.load(data[key], { + ignoreWhitespace: false, + xmlMode: false, + lowerCaseTags: false, + decodeEntities: false + }); + + $('img').each(function () { + if ($(this).attr('src')) { + // For windows style path, we replace '\' to '/'. + var src = $(this).attr('src').replace('\\', '/'); + if (!/http[s]*.*|\/\/.*/.test(src) && + !/^\s*\//.test(src)) { + // For "about" page, the first part of "src" can't be removed. + // In addition, to support multi-level local directory. + var linkArray = link.split('/').filter(function (elem) { + return elem != ''; + }); + var srcArray = src.split('/').filter(function (elem) { + return elem != '' && elem != '.'; + }); + if (srcArray.length > 1) + srcArray.shift(); + src = srcArray.join('/'); + $(this).attr('src', config.root + link + src); + console.info && console.info("update image link "+src+" --> " + config.root + link + src); + } + } else { + console.info && console.info("no image source, skipped..."); + // console.info && console.info($(this)); + } + }); + + $('a').each(function () { + if ($(this).attr('href')) { + // For windows style path, we replace '\' to '/'. + var src = $(this).attr('href').replace('\\', '/'); + if (!/http[s]*.*|\/\/.*/.test(src) && + !/^\s*\//.test(src) && !/^\#/.test(src)) { + // For "about" page, the first part of "src" can't be removed. + // In addition, to support multi-level local directory. + var linkArray = link.split('/').filter(function (elem) { + return elem != ''; + }); + var srcArray = src.split('/').filter(function (elem) { + return elem != '' && elem != '.'; + }); + if (srcArray.length > 1) + srcArray.shift(); + src = srcArray.join('/'); + $(this).attr('href', config.root + link + src); + console.info && console.info("update link "+src+" --> " + config.root + link + src); + } + } else { + console.info && console.info("no href, skipped..."); + // console.info && console.info($(this)); + } + }); + data[key] = $.html(); } - }); - data[key] = $.html(); - } - } + } }); From a15838e1ac19cce38ad8a535d0566125d98634d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E4=B8=96=E6=98=8C?= Date: Wed, 4 Jul 2018 19:41:31 +0800 Subject: [PATCH 2/3] Update index.js change logic --- index.js | 73 ++++++++++++++++++++++---------------------------------- 1 file changed, 28 insertions(+), 45 deletions(-) diff --git a/index.js b/index.js index 0a0ce74..c9b01e3 100644 --- a/index.js +++ b/index.js @@ -11,71 +11,54 @@ hexo.extend.filter.register('after_post_render', function (data) { if (config.post_asset_folder) { var link = data.permalink; var beginPos = getPosition(link, '/', 3) + 1; - // In hexo 3.1.1, the permalink of "about" page is like ".../about/index.html". var endPos = link.lastIndexOf('/') + 1; link = link.substring(beginPos, endPos); - var toprocess = ['excerpt', 'more', 'content']; - for (var i = 0; i < toprocess.length; i++) { var key = toprocess[i]; - var $ = cheerio.load(data[key], { ignoreWhitespace: false, xmlMode: false, lowerCaseTags: false, decodeEntities: false }); - + var prefix = data['source'].replace(/(.+\/)?([^\/]+)\.md$/, '$2'); + var get_assets = assets => { + var paths = assets.split('/').filter(elem => elem != '' && elem != '.'); + if (paths.length >= 2) { + if (paths[0] == prefix) { + paths.shift(); + return paths.join('/'); + } + } + return false; + } $('img').each(function () { if ($(this).attr('src')) { - // For windows style path, we replace '\' to '/'. - var src = $(this).attr('src').replace('\\', '/'); - if (!/http[s]*.*|\/\/.*/.test(src) && - !/^\s*\//.test(src)) { - // For "about" page, the first part of "src" can't be removed. - // In addition, to support multi-level local directory. - var linkArray = link.split('/').filter(function (elem) { - return elem != ''; - }); - var srcArray = src.split('/').filter(function (elem) { - return elem != '' && elem != '.'; - }); - if (srcArray.length > 1) - srcArray.shift(); - src = srcArray.join('/'); - $(this).attr('src', config.root + link + src); - console.info && console.info("update image link "+src+" --> " + config.root + link + src); + var attr = 'src'; + if ($(this).attr('data-src')) { + attr = 'data-src'; + } + var src = $(this).attr(attr).replace('\\', '/'); + if (!/https?\:\/\//.test(src) && !/^\#/.test(src)) { + var dest = get_assets(src); + if (dest) { + $(this).attr(attr, dest); + // console.info && console.info('image src ' + src + " --> " + dest); + } } - } else { - console.info && console.info("no image source, skipped..."); - // console.info && console.info($(this)); } }); - $('a').each(function () { if ($(this).attr('href')) { - // For windows style path, we replace '\' to '/'. var src = $(this).attr('href').replace('\\', '/'); - if (!/http[s]*.*|\/\/.*/.test(src) && - !/^\s*\//.test(src) && !/^\#/.test(src)) { - // For "about" page, the first part of "src" can't be removed. - // In addition, to support multi-level local directory. - var linkArray = link.split('/').filter(function (elem) { - return elem != ''; - }); - var srcArray = src.split('/').filter(function (elem) { - return elem != '' && elem != '.'; - }); - if (srcArray.length > 1) - srcArray.shift(); - src = srcArray.join('/'); - $(this).attr('href', config.root + link + src); - console.info && console.info("update link "+src+" --> " + config.root + link + src); + if (!/https?\:\/\//.test(src) && !/^\#/.test(src)) { + var dest = get_assets(src); + if (dest) { + $(this).attr('href', dest); + // console.info && console.info('link href ' + src + " --> " + dest); + } } - } else { - console.info && console.info("no href, skipped..."); - // console.info && console.info($(this)); } }); data[key] = $.html(); From add730476f88a5d6587de220297a2fee0fa7f5f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E4=B8=96=E6=98=8C?= Date: Wed, 4 Jul 2018 19:44:55 +0800 Subject: [PATCH 3/3] Update index.js --- index.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/index.js b/index.js index c9b01e3..c26fa7d 100644 --- a/index.js +++ b/index.js @@ -1,15 +1,10 @@ 'use strict'; var cheerio = require('cheerio'); - -// http://stackoverflow.com/questions/14480345/how-to-get-the-nth-occurrence-in-a-string -function getPosition(str, m, i) { - return str.split(m, i).join(m).length; -} - hexo.extend.filter.register('after_post_render', function (data) { var config = hexo.config; if (config.post_asset_folder) { var link = data.permalink; + var getPosition = (str, m, i)=> str.split(m, i).join(m).length; var beginPos = getPosition(link, '/', 3) + 1; var endPos = link.lastIndexOf('/') + 1; link = link.substring(beginPos, endPos);