wordpress优化之结合prism.js为编辑器自定义按钮转化代码
原文链接 http://ymblog.net/2016/07/24/wordpress-prism/
继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插件更少,到目前为止,博客插件有多说,Crayon Syntax Highlighter代码高亮插件,super cache缓存插件,百度sitemap。在没有缓存的情况下,首页dom初识加载完成(不是document加载完成)的时间为5-6s左右,有缓存的情况下大概为2s左右,觉得慢了,查看源码,发现在首页代码高亮插件的代码也会加载,还有jquery的引入,因为自己已经额外引用了百度jquery的CDN,所以觉得完全没必要,想着怎么换掉。
查了下资料,牛逼的人们总是啥都会整出来,看到Prism.js,处理一下只需要引用50KB不到的js,而且不依赖jquery,非常nice,使用prism.js的具体过程请看这篇文章:wordpress无插件实现sublime代码高亮显示
用过的同学就会发现,尼玛即使那样做了,在后台编辑文章时的体验特差啊啊啊,心灰意冷!因为要在文本模式下插入指定的代码,再切换回可视化,而这样切换,光标及可编辑的位置就变得模糊而不可调整,简直了,而且添加的代码还要将标签转义才能够正常显示。巨坑!
后来动动脑子想到,自己手动写个转化工具网页不也是可以?于是就开始着手了。
实现的目的只想把代码拷进去,点一下按钮,再点一下复制就可以去粘贴代码到编辑器 了
于是结构看起来是这样的:
<div class="box">
<div class="h">
选择语言:<select id="lang"></select>
<a href="javascript:;" id="copy">复制代码</a>
<a href="javascript:;" id="render">转化</a>
</div> <textarea id="code" placeholder="粘贴源代码"></textarea>
<textarea id="box" placeholder="复制生成后的代码"></textarea>
</div>
关于语言选择当然不能写死,万一以后要增加呢,所以我们定义数组动态添加:
var la = ["html", "js", "css", "php", "java", "jsx", "git", "nginx", "yaml", "scss", "sass", "c", "c++", "CoffeeScript", "go", "jade", "sql", "json", "less", "python"];
for (var i =0; i < la.length; i++) {
str = document.createElement("option");
str.value = la[i]
str.innerHTML = la[i];
lang.appendChild(str);
}
当点击转化时,转义html标签为实体后,首位添加上prism插件必须的pre标签和行号:
render.addEventListener("click", function () {
var content = code.value;
content = content.replace(/</g, "<").replace(/>/g, ">");
str = '<pre class="line-numbers"><code class="language-'+ lang.value +'">\n';
str += content;
str += "\n</code></pre>";
box.value = str;
}, false);
然后是点击复制就将目标代码复制到剪切板:
copy.addEventListener("click", function () {
box.select();
document.execCommand("Copy");
});;
就这样完成,但是还是有个小坑,我在写的时候发现了,要粘贴代码的时候需要手动切换到文本模式,粘贴完代码后还得切换到可视化,就这个巨坑,而且代码样式不能预览,不过比之前好多了,为了不用那么冗余的插件,为此也算是值了。完工后的界面是这样子的。请戳链接:demo,转载请注明连接。

那么问题又来了,我不可能每次手动输入这个地址吧,多麻烦?我想要在后台写文章的时候添加一个按钮跳转到我自定义的这个页面,万能的网友总是一如既往的牛逼,有2中解决办法:
- 在后台左侧界面添加自定义菜单
- 在编辑器界面添加按钮跳转
很显然,我会先择后者 ,它们看起来分别是这样的:


两者的实现方式分别为:
// my_add_pages() 为 'admin_menu' 钩子的回调函数
function my_add_pages() {
// 第一个参数'Help page'为菜单名称,第二个参数'使用帮助'为菜单标题
// 'manage_options' 参数为用户权限
// 'my_toplevel_page' 参数用于调用my_toplevel_page()函数,来显示菜单内容
add_menu_page('Help page', '使用帮助', 'manage_options', __FILE__, 'my_toplevel_page');
} // my_toplevel_page() 用于显示菜单的内容,填写菜单页面的HTML代码即可
function my_toplevel_page() {
echo '
这里填菜单页面的HTML代码
'; // 如以下示例代码。 wrap 类是WordPress构建好的css类,可以在你的HTML代码中使用
/*
echo '
<div class="wrap">
<h2>使用帮助</h2>
<p>这里是使用帮助,通过阅读本文你将了解本程序的使用!有事请<a href="#">与我联系</a></p>
</div>
';
*/
} // 通过add_action来自动调用my_add_pages函数
add_action('admin_menu', 'my_add_pages');
这段代码的参考文章是:WordPress后台添加侧边栏菜单。后者的实现方式是:
add_action('media_buttons', 'add_my_media_button');
function add_my_media_button() {
echo '<a href="#" id="insert-my-media" class="button">Add my media</a>';
}
这段代码参考的是:如何给wordpress的编辑器添加一个自定义按钮,并且实现插入功能。
这样点击添加代码块,就会跳转到自定义的转化代码的html页面。
wordpress优化之结合prism.js为编辑器自定义按钮转化代码的更多相关文章
- 【翻译】如何在AJAX生成的内容中再次运行Prism.js
一.前言 最近用一个十分轻量级的网页代码高亮Js库,应用到项目中发现了一个问题,对于静态的已经写好的代码,Prism的高亮插件是没有问题的,但是通过Ajax异步获取数据并修改DOM时发现,Prism高 ...
- 基于 Angularjs&Node.js 云编辑器架构设计及开发实践
基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...
- js 语法高亮插件之 Prism.js
之前也介绍过几款语法高亮插件<为博客园选择一个小巧霸气的语法高亮插件>以及关于他们的综合性能<再议 语法高亮插件的选择>.今天在小影志博客看到<使用 Prism.js 实 ...
- prism.js使页面代码变得漂亮
第一次接触prism.js,并把它用到了园子里. 装逼如风,常伴吾身.有了如此利器,从此院子里我的代码是"最"漂亮的! 身为程序员深刻体会代码高亮在生产过程中是多么的重要.以下便是 ...
- wordpress优化:Gravatar头像被墙及解决方案
网站缓存现象: 打开网站是左下角出现0.gravatar.com.1.gravatar.com或2.gravatar.com字样,网站一直处于缓存状态,迟迟未能打开.很多人都会缺乏耐心地等待一个网页的 ...
- prism.js——让网页中的代码更好看
粗放的代码展示 有时候,网页中会插入代码.直接把代码放入<pre></pre>标签和<code></code>标签里,也算是可以在页面中显示出来. 比如 ...
- 富文本编辑器嵌入指定html代码
先把内容放入一个input中 <input id="detail" type="hidden" value="${sysCarousel.det ...
- UEditor富文本WEB编辑器自定义默认值设置方法
1.在使用UEditor编辑器编写内容时你会发现,当输入的内容较多时,编辑框的边框高度也会自动增加,若希望输入内容较多时以拉框滚动的效果. 方法:找到Ueditor文件根目录下的ueditor.con ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 代码分层
视频地址:https://www.cctalk.com/v/15114923889408 文章 在前面几节中,我们已经实现了项目中的几个常见操作:启动服务器.路由中间件.Get 和 Post 形式的请 ...
随机推荐
- URL安全的Base64编码
Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...
- JAVA语言中的修饰符
JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...
- NET Core-TagHelper实现分页标签
这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...
- 利用Node.js的Net模块实现一个命令行多人聊天室
1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...
- vue.js学习笔记
有了孩子之后,元旦就哪也去不了了(孩子太小),刚好利用一些时间,来公司充充电补补课,学习学习新技术,在这里做一个整理和总结.(选择的东西,既然热爱就把他做好吧!). 下来进入咱们的学习环节: 一.从H ...
- 来吧,HTML5之一些注意事项
1.说什么是HTML HTML是一种超文本标记语言(Hyper Text Markup Language), 标记语言是一套标记标签(markup tag),用来描述网页的非编程语言. 2.标签特性: ...
- ASP.NET Core 中文文档目录
翻译计划 五月中旬 .NET Core RC2 如期发布,我们遂决定翻译 ASP.NET Core 文档.我们在 何镇汐先生. 悲梦先生. 张仁建先生和 雷欧纳德先生的群中发布了翻译计划招募信息,并召 ...
- bzoj1079--记忆化搜索
题目大意:有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得 ...
- (转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
原文地址: http://www.cnblogs.com/lyhabc/p/4682986.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建Alwa ...
- Winserver2012下mysql 5.7解压版(zip)配置安装
一.安装 下载mysqlzip版本mysql不需要运行可执行文件,解压即可,下载zip版本mysqlmsi版本mysql双击文件即可安装,相对简单,本文不介绍此版本安装 配置环境变量打开环境变量配置页 ...