JavaScript 全局修改代码修饰器 CSS 网站添加 prettify 代码高亮教程

  不同主题高亮不统一问题

本站由于之前曾用不同编辑器插件编辑文章,因此代码高亮区域的 CSS 都点不同,不同主题之间对 <pre> 标签的处理也都不一样,造成每个主题都有不同的代码高亮形式。之前我的解决方法是改插件的 CSS 实现 CSS 内容统一,但这样面临两个问题:

  1. JavaScript 全局修改代码修饰器 CSS 网站添加 prettify 代码高亮教程

    操作麻烦 需要手动修改 CSS 源文件

  2. 破坏插件 CSS 当插件更新时会修改可能会被覆盖恢复

     感叹之前想得太麻烦,其实很简单解决这个问题,首先引入相关 js、css 代码(没有可在商店下载):

<link rel="stylesheet" type="text/css" href="/zb_users/plugin/FY_Prettify/prettify.css" />     
<script src="/zb_users/plugin/FY_Prettify/prettify.js"></script>

然后通过 js 遍历标签节点强制更改 pre 标签为指定样式:

    <script type="application/javascript">
		var tags= document.getElementsByTagName("pre");
		for (let s of tags) {s.setAttribute("class","fy-prettyprint linenums");
		}
	</script>

最后将这段代码放在主题设置的统计代码中即可,即以下:

代码高亮代码

<link rel="stylesheet" type="text/css" href="/zb_users/plugin/FY_Prettify/prettify.css" />     
<script src="/zb_users/plugin/FY_Prettify/prettify.js"></script>
<script type="application/JavaScript">
	var tags= document.getElementsByTagName("pre");
	for (let s of tags) {s.setAttribute("class","fy-prettyprint linenums");
	}
	prettyPrint();
</script>

其中本站已在 prettify.js 中调用了 prettyPrint()方法,因此可以删除 prettyPrint()避免重复调用。但是鄙人发现调用后还是没效果,发现可能是 jq 版本造成的错误,原错误代码:

/* 初始化 prettyPrint*/
jQuery(window).load(function(){    jQuery("pre").addClass("prettyprint");
     prettyPrint();})

改成下列即可

/* 初始化 prettyPrint*/
$(window).on('load',function(){    jQuery("pre").addClass("prettyprint");
     prettyPrint();})

代码复制功能

代码复制引用相关 js 即可。Z-Blog 用户可在应用商店搜索“复制代码”

<script src="/zb_users/plugin/copycode/clipboard.min.js"></script>
<script src="/zb_users/plugin/copycode/copycode.js" type="text/javascript" /></script>

将如下代码放在网站任意共通页面中即可。

文章页面编辑功能

给每篇文章页面添加编辑功能,很简单,在文章显示页的 PHP 主题模板文件中添加:

<span>{if $user.ID>0}<i class="fi fi-edit"></i><a href="{$host}zb_system/cmd.php?act=ArticleEdt&id={$article.ID}" rel="nofollow">Edit &nbsp;</a>{/if}</span>

当然最简单是将上述封装成 js 文件直接引用就行,可以省去修改 PHP 模板的困扰,也减少代码侵入:

var tags = document.getElementsByTagName("pre");
for (let s of tags) {s.setAttribute("class", "fy-prettyprint linenums");
}
function getCookie(cookieName) {
	var cookieValue = "";
	if (document.cookie && document.cookie != '') {var cookies = document.cookie.split(';');
		for (var i = 0; i < cookies.length; i++) {var cookie = cookies[i];
			if (cookie.substring(0, cookieName.length + 2).trim() == cookieName.trim() + "=") {cookieValue = cookie.substring(cookieName.length + 2, cookie.length);
				break;
			}
		}
	}
	return cookieValue;
}
if (getCookie('username')) {
	var pathName = window.location.pathname;
	if (pathName.indexOf('post/') > -1) {
		var endNum = pathName.length - 5;
		var articleNo = pathName.substring(6, endNum);
		if (!$('.article-info .fr .edits').html()) {
			var editStr =
				'<span><i class="fi fi-edit"></i> <a href="/zb_system/cmd.php?act=ArticleEdt&id='+articleNo+'"rel="nofollow">Edit &nbsp;</a></span> ';
			$('.article-info .fr').prepend(editStr);
		}
	}
}

以上代码思路也很简单,判断当前 cookie 中是否有用户名字段,有就在页面指定位置添加编辑按钮,这里编辑按钮的 articleNo 是根据当前页面 Url 来的,你的页面伪静态策略可能不一样,因此根据实际需求修改吧,关于编辑框插入位置的 css 选择器也根据实际情况进行修改即可。

目录
  • 不同主题高亮不统一问题
    • 代码高亮代码
  • 代码复制功能
  • 文章页面编辑功能
  • 目录
  • 不同主题高亮不统一问题
    • 代码高亮代码
  • 代码复制功能
  • 文章页面编辑功能
  • 手机扫描二维码访问

    本文标题:《JavaScript 全局修改代码修饰器 CSS 网站添加 prettify 代码高亮教程》作者:极四维博客
    原文链接:https://cway.top/post/570.html
    特别注明外均为原创,转载请注明。

    分享到微信

    扫描二维码

    可在微信查看或分享至朋友圈。

    相关文章

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    «    2024年10月    »
    123456
    78910111213
    14151617181920
    21222324252627
    28293031

    搜索

    控制面板

    您好,欢迎到访网站!
      查看权限

    最新留言

    文章归档

    • 订阅本站的 RSS 2.0 新闻聚合