Skip to content
This repository has been archived by the owner on Jan 27, 2021. It is now read-only.

Commit

Permalink
style: remove magic numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
xiazeyu committed Feb 14, 2018
1 parent 6668cd4 commit 5e39c6a
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 86 deletions.
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ module.exports = {
'no-magic-numbers': [
'warn',
{
'ignore': [0, 1, 2, 3, 4],
'ignore': [0],
},
],
'no-multi-spaces': [
Expand Down
105 changes: 52 additions & 53 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,76 +39,75 @@ let config = _.defaultsDeep({}, hexo.config.live2d, hexo.theme.config.live2d, de
function getScriptURL (scriptFrom) {
switch (scriptFrom) {
case 'local': {
// Is local
// Use local(1)
// Is local(1)
// Use local
const scriptGenerators = buildGeneratorsFromManifest(manifest, path.dirname(mainfestPath), onSiteJsPath);
const useHash = getFileMD5(path.resolve(path.dirname(mainfestPath), coreScriptName));
generators.push(...scriptGenerators);
return `${url.resolve(onSiteJsPath, coreScriptName)}?${useHash}`;
}
case 'jsdelivr':
// Is jsdelivr online CDN
// Use jsdelivr(2)
// Is jsdelivr online CDN(2)
// Use jsdelivr
return `https://cdn.jsdelivr.net/npm/live2d-widget@${coreJsDepVer}/lib/${coreScriptName}`;
case 'unpkg':
// Is unpkg online CDN
// Use unpkg(3)
// Is unpkg online CDN(3)
// Use unpkg
return `https://unpkg.com/live2d-widget@${coreJsDepVer}/lib/${coreScriptName}`;
default:
// Is custom
// Use custom(4)
// Is custom(4)
// Use custom
return scriptFrom;
}
}

if (config.enable) {
_.unset(config, 'enable');
if (config.model.use) {
let modelPath;
let type;
const modelInHexoBaseDir = [
path.resolve(hexo.base_dir, './live2d_models/', config.model.use),
path.resolve(hexo.base_dir, config.model.use),
]
.reduce((p, value, index) => {
if (!p && fs.existsSync(value)) {
type = index + 2;
return value;
}
return p;
}, undefined);
if(type === undefined) {
if(getNodeModulePath(config.model.use) !== '') {
type = 1;
modelPath = getNodeModulePath(config.model.use);
if(config.model.use) {
let modelJsonUrl;
let tryPath = path.resolve(hexo.base_dir, './live2d_models/', config.model.use);
if(fs.existsSync(tryPath)) {
// Is in live2d_models(2)
// LoadModelFrom
const {
modelGenerators,
modelJsonUrl: pkgModelJsonUrl,
} = loadModelFrom(tryPath, onSiteModelPath);
modelJsonUrl = pkgModelJsonUrl;
generators.push(...modelGenerators);
console.log(`${colors.green('hexo-helper-live2d'.toUpperCase())}: Loaded model from live2d_models folder(2), '${url.pathname(modelJsonUrl)}' from '${tryPath}'`);
}else{
tryPath = path.resolve(hexo.base_dir, config.model.use);
if(fs.existsSync(tryPath)) {
// Is in hexo base releated path(3)
// LoadModelFrom
const {
modelGenerators,
modelJsonUrl: pkgModelJsonUrl,
} = loadModelFrom(tryPath, onSiteModelPath);
modelJsonUrl = pkgModelJsonUrl;
generators.push(...modelGenerators);
console.log(`${colors.green('hexo-helper-live2d'.toUpperCase())}: Loaded model from hexo base releated path(3), '${url.pathname(modelJsonUrl)}' from '${tryPath}'`);
}else if(getNodeModulePath(config.model.use) !== '') {
// Is npm-module(1)
// Convert path to assets folder
// LoadModelFrom
const packageJsonPath = path.resolve(getNodeModulePath(config.model.use), 'package.json');
const packageJsonObj = require(packageJsonPath); // eslint-disable-line global-require
const assetsDir = path.resolve(packageJsonPath, './assets/');
const {
modelGenerators,
modelJsonUrl: pkgModelJsonUrl,
} = loadModelFrom(assetsDir, onSiteModelPath);
modelJsonUrl = pkgModelJsonUrl;
generators.push(...modelGenerators);
console.log(`${colors.green('hexo-helper-live2d'.toUpperCase())}: Loaded model from npm-module(1), ${packageJsonObj.name}@${packageJsonObj.version} from '${assetsDir}'`);
}else{
type = 4;
modelPath = config.model.use;
// Is custom(4)
// Use custom
modelJsonUrl = config.model.use;
console.log(`${colors.green('hexo-helper-live2d'.toUpperCase())}: Loaded Model from custom(4), at '${modelJsonUrl}'`);
}
}else{
modelPath = modelInHexoBaseDir;
}
const {
modelGenerators,
modelJsonUrl,
packageJsonObj,
} = loadModelFrom(modelPath, onSiteModelPath, type);
generators.push(...modelGenerators);
config = _.set(config, 'model.jsonPath', modelJsonUrl);
switch(type) {
case 1:
console.log(`${colors.green('hexo-helper-live2d'.toUpperCase())}: Loaded model from npm-module(1), ${packageJsonObj.name}@${packageJsonObj.version} from '${modelPath}'`);
break;
case 2:
console.log(`${colors.green('hexo-helper-live2d'.toUpperCase())}: Loaded model from live2d_models folder(2), '${url.pathname(modelJsonUrl)}' from '${modelPath}'`);
break;
case 3:
console.log(`${colors.green('hexo-helper-live2d'.toUpperCase())}: Loaded model from hexo base folder(3), '${url.pathname(modelJsonUrl)}' from '${modelPath}'`);
break;
case 4:
console.log(`${colors.green('hexo-helper-live2d'.toUpperCase())}: Loaded Model from online(4), at '${modelJsonUrl}'`);
break;
// No default
}
}

Expand All @@ -126,7 +125,7 @@ if (config.enable) {
// https://github.com/Troy-Yang/hexo-lazyload-image/blob/master/lib/addscripts.js
hexo.extend.filter.register('after_render:html', function HTMLInjector (htmlContent) {
const scriptFrom = config.scriptFrom;
_.unset(config, 'scriptFrom');
config = _.unset(config, 'scriptFrom');
const scriptToInject = `L2Dwidget.init(${JSON.stringify(config)});`;
const contentToInject = `<script src="${getScriptURL(scriptFrom)}"></script><script>${scriptToInject}</script>`;
if (/<\/body>/gi.test(htmlContent)) {
Expand Down
47 changes: 15 additions & 32 deletions lib/loadModelFrom.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,48 +9,31 @@ const path = require('path');
const url = require('url');

/**
* @typedef {Object} PackageInfo
* @property {Array} modelGenerators The generator-use-array for Hexo
* @property {String} modelJsonUrl The model.json file path
* @property {Object or Undefined} packageJsonObj The object of provied packageinfo(if don't have, undefined)
* @typedef {Object} ModelPackageInfo
* @property {Array} modelGenerators The generator-use-array for Hexo
* @property {String} modelJsonUrl The model.json file path
*/

/**
* Resolve model packages according to provided infos
* @param {String} modelPaths Search paths for the model folder
* @param {String} assetsDir The path of model
* @param {String} rootUrl The target path(need to be relative)
* @return {PackageInfo} The package info resolved
* @return {ModelPackageInfo} The package info resolved
*/

module.exports = function loadModelFrom (modelPaths, rootUrl, type) {
const packageJsonPath = path.resolve(modelPaths, 'package.json');
let assetsDir;
let modelGenerators;
let modelJsonUrl;
let packageJsonObj;
if(type === 1) {
packageJsonObj = require(packageJsonPath); // eslint-disable-line
assetsDir = path.resolve(modelPaths, './assets/'); // Convert 1 to 2.5
}else if(type === 4) {
modelJsonUrl = modelPaths;
}else{
assetsDir = modelPaths;
}
if(type !== 4) {
const modelFiles = listFiles(assetsDir);
modelGenerators = modelFiles.map((file) =>
buildGenerator(file, url.resolve(rootUrl, path.relative(assetsDir, file))));
modelJsonUrl = modelGenerators.reduce((p, generator) => {
if (!p && generator.path.endsWith('.model.json')) {
return generator.path;
}
return p;
}, undefined); // 1, 2, 3 Done.
}
module.exports = function loadModelFrom (assetsDir, rootUrl) {
const modelFiles = listFiles(assetsDir);
const modelGenerators = modelFiles.map((file) =>
buildGenerator(file, url.resolve(rootUrl, path.relative(assetsDir, file))));
const modelJsonUrl = modelGenerators.reduce((p, generator) => {
if (!p && generator.path.endsWith('.model.json')) {
return generator.path;
}
return p;
}, undefined);

return {
modelGenerators,
modelJsonUrl,
packageJsonObj,
};
};

0 comments on commit 5e39c6a

Please sign in to comment.