本文记录了如何在 MediaWiki 中插入 GitHub Gist 代码片段。
首先编写一个 MediaWiki 扩展,文件命名为 gists.php
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| <?php
$wgExtensionCredits['gists'][] = array( 'path' => __FILE__, 'name' => 'Gists', 'author' => '若非', 'url' => '', 'description' => '在你的 MediaWiki 中插入 GitHub Gist 代码片段。', 'version' => 1.0 );
$wgHooks['ParserFirstCallInit'][] = 'mvGists';
function mvGists( Parser $parser ) { $parser->setHook( 'gist', 'mvGistRender' ); return true; }
function mvGistRender( $input, array $args, Parser $parser, PPFrame $frame ) { if( !empty( $args['files'] ) ) { $files = explode( ' ', $args['files'] ); } elseif( !empty( $args['file'] ) ) { $files = array( $args['file'] ); } else { $files = array( '' ); }
if( !ctype_xdigit( $input ) ) { return '!!! Invalid gist number'; } else { $gistId = trim( $input ); $output = ''; foreach( $files as $file ) { $output .= Html::linkedScript( "https://gist.icoder.workers.dev/{$input}.js?file={$file}" ); } return $output; } }
|
创建完成后,将该扩展文件放到 MediaWiki 站点根目录的 extensions/gists/
目录下。
在中国大陆无法访问 https://gist.github.com/(点我试一下你能访问吗?),借助 Cloudflare 可以将其转发到其他域名下,这样就可以访问 https://gist.github.com/ 了。
创建 Worker
在 Cloudflare 中创建一个 worker,内容如下:
1 2 3 4
| addEventListener("fetch", (event) => { const url = event.request.url.split("https://gist.icoder.workers.dev/")[1]; return event.respondWith(fetch(`https://gist.github.com/${url}`)); });
|
代码中第 2 行是 Cloudflare 提供的 worker.dev 路由,部署后通过该地址即可访问 Github Gist 中的代码片段。不要开启你本地的 vpn,访问一下这个地址试一下:https://gist.icoder.workers.dev/smpower/4814c681a44629f43b2f8455c436f669。通过这个地址打开的页面就包含了上面的两个代码片段。
启用 gists 扩展
在 MediaWiki 的配置文件 LocalSettings.php
中启用该扩展:
1 2
| require_once "$IP/extensions/gists/gists.php";
|