Skip to content

Commit

Permalink
feat: bind hexo context to helper function callback (#5555)
Browse files Browse the repository at this point in the history
Co-authored-by: Uiolee <[email protected]>
  • Loading branch information
dimaslanjaka and uiolee authored Dec 11, 2024
1 parent 492debf commit ebe92ba
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 9 deletions.
43 changes: 40 additions & 3 deletions lib/extend/helper.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,49 @@
import Hexo from '../hexo';
import { PageSchema } from '../types';
import * as hutil from 'hexo-util';

interface HexoContext extends Hexo {
// get current page information
// https://github.com/dimaslanjaka/hexo-renderers/blob/147340f6d03a8d3103e9589ddf86778ed7f9019b/src/helper/related-posts.ts#L106-L113
page?: PageSchema;

// hexo-util shims
url_for: typeof hutil.url_for;
full_url_for: typeof hutil.full_url_for;
relative_url: typeof hutil.relative_url;
slugize: typeof hutil.slugize;
escapeDiacritic: typeof hutil.escapeDiacritic;
escapeHTML: typeof hutil.escapeHTML;
unescapeHTML: typeof hutil.unescapeHTML;
encodeURL: typeof hutil.encodeURL;
decodeURL: typeof hutil.decodeURL;
escapeRegExp: typeof hutil.escapeRegExp;
stripHTML: typeof hutil.stripHTML;
stripIndent: typeof hutil.stripIndent;
hash: typeof hutil.hash;
createSha1Hash: typeof hutil.createSha1Hash;
highlight: typeof hutil.highlight;
prismHighlight: typeof hutil.prismHighlight;
tocObj: typeof hutil.tocObj;
wordWrap: typeof hutil.wordWrap;
prettyUrls: typeof hutil.prettyUrls;
isExternalLink: typeof hutil.isExternalLink;
gravatar: typeof hutil.gravatar;
htmlTag: typeof hutil.htmlTag;
truncate: typeof hutil.truncate;
spawn: typeof hutil.spawn;
camelCaseKeys: typeof hutil.camelCaseKeys;
deepMerge: typeof hutil.deepMerge;
}

interface StoreFunction {
(...args: any[]): string;
(this: HexoContext, ...args: any[]): any;
}

interface Store {
[key: string]: StoreFunction
[key: string]: StoreFunction;
}


class Helper {
public store: Store;

Expand Down
10 changes: 5 additions & 5 deletions lib/extend/processor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ import { Pattern } from 'hexo-util';
import type File from '../box/file';

interface StoreFunction {
(file: File): any
(file: File | string): any;
}

type Store = {
pattern: Pattern;
process: StoreFunction
}[];
pattern: Pattern;
process: StoreFunction;
}[];

type patternType = Exclude<ConstructorParameters<typeof Pattern>[0], ((str: string) => string)>;
type patternType = Exclude<ConstructorParameters<typeof Pattern>[0], (str: string) => string>;
class Processor {
public store: Store;

Expand Down
2 changes: 1 addition & 1 deletion lib/plugins/filter/template_locals/i18n.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ function i18nLocalsFilter(this: Hexo, locals: LocalsType): void {
const pattern = new Pattern(`${i18nDir}/*path`);
const data = pattern.match(locals.path);

if (data && data.lang && i18nLanguages.includes(data.lang)) {
if (data && 'lang' in data && i18nLanguages.includes(data.lang)) {
lang = data.lang;
page.canonical_path = data.path;
} else {
Expand Down

0 comments on commit ebe92ba

Please sign in to comment.