原文链接 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中解决办法:

  1. 在后台左侧界面添加自定义菜单
  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页面。

原文链接 http://ymblog.net/2016/07/24/wordpress-prism/

wordpress优化之结合prism.js为编辑器自定义按钮转化代码的更多相关文章

  1. 【翻译】如何在AJAX生成的内容中再次运行Prism.js

    一.前言 最近用一个十分轻量级的网页代码高亮Js库,应用到项目中发现了一个问题,对于静态的已经写好的代码,Prism的高亮插件是没有问题的,但是通过Ajax异步获取数据并修改DOM时发现,Prism高 ...

  2. 基于 Angularjs&Node.js 云编辑器架构设计及开发实践

    基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...

  3. js 语法高亮插件之 Prism.js

    之前也介绍过几款语法高亮插件<为博客园选择一个小巧霸气的语法高亮插件>以及关于他们的综合性能<再议 语法高亮插件的选择>.今天在小影志博客看到<使用 Prism.js 实 ...

  4. prism.js使页面代码变得漂亮

    第一次接触prism.js,并把它用到了园子里. 装逼如风,常伴吾身.有了如此利器,从此院子里我的代码是"最"漂亮的! 身为程序员深刻体会代码高亮在生产过程中是多么的重要.以下便是 ...

  5. wordpress优化:Gravatar头像被墙及解决方案

    网站缓存现象: 打开网站是左下角出现0.gravatar.com.1.gravatar.com或2.gravatar.com字样,网站一直处于缓存状态,迟迟未能打开.很多人都会缺乏耐心地等待一个网页的 ...

  6. prism.js——让网页中的代码更好看

    粗放的代码展示 有时候,网页中会插入代码.直接把代码放入<pre></pre>标签和<code></code>标签里,也算是可以在页面中显示出来. 比如 ...

  7. 富文本编辑器嵌入指定html代码

    先把内容放入一个input中 <input id="detail" type="hidden" value="${sysCarousel.det ...

  8. UEditor富文本WEB编辑器自定义默认值设置方法

    1.在使用UEditor编辑器编写内容时你会发现,当输入的内容较多时,编辑框的边框高度也会自动增加,若希望输入内容较多时以拉框滚动的效果. 方法:找到Ueditor文件根目录下的ueditor.con ...

  9. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 代码分层

    视频地址:https://www.cctalk.com/v/15114923889408 文章 在前面几节中,我们已经实现了项目中的几个常见操作:启动服务器.路由中间件.Get 和 Post 形式的请 ...

随机推荐

  1. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  2. Windows 7上执行Cake 报错原因是Powershell 版本问题

    在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...

  3. 领域驱动和MVVM应用于UWP开发的一些思考

    领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单

    系列目录 引言 1.如果不借用Senparc.Weixin SDK自定义菜单,编码起来,工作量是非常之大 2.但是借助SDK似乎一切都是简单得不要不要的 3.自定义菜单无需要建立数据库表 4.自定义菜 ...

  5. DOM、BOM 操作超级集合

    本章内容: 定义 节点类型 节点关系 选择器 样式操作方法style 表格操作方法 表单操作方法 元素节点ELEMENT 属性节点attributes 文本节点TEXT 文档节点 Document 位 ...

  6. 拼图小游戏之计算后样式与CSS动画的冲突

    先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...

  7. golang struct扩展函数参数命名警告

    今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...

  8. UVa 122 Trees on the level

    题目的意思: 输入很多个节点,包括路径和数值,但是不一定这些全部可以构成一棵树,问题就是判断所给的能否构成一棵树,且没有多余. 网上其他大神已经给出了题目意思:比如我一直很喜欢的小白菜又菜的博客 说一 ...

  9. 茂名石化BPM应用实践 ——业务协同及服务共享平台建设和应用

    一.茂名石化简介 茂名石化隶属于中国石油化工集团公司,创建于1955年,是国家"一五"期间156项重点项目之一.经过50多年的发展,茂名石化已成为我国生产规模最大的炼油化工企业之一 ...

  10. x01.os.22: ubuntu 常用设置

    新组装了个 64 位电脑,i5 CPU,进入 ubuntu 后,又是一通搜索设置,整理如下,以备后用. 安装 .dep 包 sudo dpkg -i [filename.dep] 在 ubuntu 中 ...