2022.05.18:近日人肉跑路国外打工,进度尚未完成
新系统基于NodeJS+MongoDB开发,目前仍在测试阶段
网站迁移至狗云香港VPS
www.dogyun.com
感谢德克大老板赞助!
2022-01-17
初始化contentEditable,强制BR换行,禁止图片换行
可视化编辑器弃坑了,复制粘贴格式化太难搞,把当前进度记录一下。
function editor_inital(id){
document.getElementById(id).contentEditable=true;
//强制换行使用BR
document.addEventListener('keydown',function(e){
if(e.key!='Enter'){return;};
e.preventDefault();
let s=window.getSelection(),c=document.createRange(),n=document.createElement('BR');
s.getRangeAt(0).deleteContents();s.getRangeAt(0).insertNode(n);
s.removeAllRanges();c.setStartAfter(n);s.addRange(c);
});
//让图片换不了行
new MutationObserver(function(rec){
for(let key in rec){
if(rec[key].nextSibling && rec[key].nextSibling.tagName=='IMG' && rec[key].nextSibling.previousSibling && rec[key].nextSibling.previousSibling.tagName!='BR'){rec[key].nextSibling.insertAdjacentHTML('beforebegin','<br />');}
else if(rec[key].previousSibling && rec[key].previousSibling.tagName=='IMG' && rec[key].previousSibling.nextSibling && rec[key].previousSibling.nextSibling.tagName!='BR'){rec[key].previousSibling.insertAdjacentHTML('afterend','<br />');}
else if(rec[key].addedNodes.length){for(let obj of rec[key].addedNodes){if(obj.tagName=='IMG' && obj.previousSibling && obj.previousSibling.tagName!='BR'){obj.insertAdjacentHTML('beforebegin','<br />');};if(obj.tagName=='IMG' && obj.nextSibling && obj.nextSibling.tagName!='BR'){obj.insertAdjacentHTML('afterend','<br />');};};};
};
}).observe(document.getElementById('editor'),{characterData:true,childList:true,subtree:true});
};
2021-12-14
2021年7月10日,秋空博客诈尸。
采用全新框架Astro,目前显然还在施工……
各位久等了,欢迎回家!
2021-07-10
contenteditable元素内html标签的编辑问题处理
这套网站系统基本已经报废,最近在写新的。有个想法就是做出一套极简的模块化编辑器,可以在文字中间插入图片、音频、视频等元素,而不是像现在这样文字和附件分离。
我理想的状态是“没有后台”,内容直接在前台就可以编辑...
2020-12-12
Xiuno论坛关闭
早就在意料之中的事了,上篇文章写的就是Xiuno论坛,社区氛围恶劣到无法直视,能坚持这么多年已经是个奇迹。
国内这种环境真的不适合搞开源,有些人先不说懂不懂得感恩,能不给作者添乱就已经烧高香了。
这篇文章依然是直接从数据库加的,新系统快有了...
2020-07-12
回国不到一周就和家里闹翻了,当晚就搭上了前往上海的火车。
正式成为沪漂,生活费以后还要想办法解决一下,先从学习素描技法开始。
老师表示从来没见过我这么差的学生,并对当今高等教育产生了怀疑,我深有同感。
2019-09-20
回国了,博客除草
加载速度跟屎一样,这两天把CDN给换了。换了几家都不理想,发现主要是带宽太小,图片加载慢。最后直接裸奔了,虽说延迟高点,好歹服务器是G口的,图片加载速度有保障。程序更新也即将进行,拖了两年的活准备开工。
准备搞文艺,就要会装逼。这几天准备...
2019-09-09
重要决定:停止资源收集,回归博客创作
可以预感到将来一段时间,本站会流失99%的访问量,从日IP过万到几位好友路过。
发出这个公告很艰难,但心中却有种如释重负的感觉。回归博客原因有几个:
1. 前一阵福利姬事件闹得沸沸扬扬,让我感觉这个圈子很恶心,不想再看了。
...
2019-08-27
Cloudflare Workers 跳转当前请求到https
在fetch监听开头加入一行:
if(event.request.headers.get('x-forwarded-proto')=='http'){event.respondWith(Response.redirect(event.request.url.replace(/^http/,'https'),301));return;};
...
2019-08-25
回国倒计时
还有十几天就要回国了,在英国这两年时光过得太快,学业也忙,甚至连照片都没空整理,就匆匆忙忙地接近尾声了。要说不舍当然是有一些,虽然这个城市不大,但很悠闲、宜居,也认识了不少热情好客的老师、店铺老板。回头有机会把去过的地方整理下发出来,顺便...
2019-08-24
2019-08-23
JS异步执行函数更简单的方法
直接在 function() 前加 async 变为:
async function(){};
这样即可在函数内随意调用:
await fetch();
上一帖白费半天劲了,真该仔细看看说明文档……
不过也可以作为一个小技巧在函数外的地方使用。
2019-08-17
JS薛定谔地执行fetch再执行后续函数的方法
我利用ES6新特性里的fetch特性获取某个页面的内容,类似于:
fetch('abc.html').then(result=>{console.log('fuck');});
console.log('you');
这两行代码执行后控制台的输出是:
you
fuck
因...
2019-08-17
JS移动DIV节点出现错乱
用getElementsByClassName获取了几个同类的DIV节点,然后用insertBefore移动到某个位置,结果出现了错乱。
经检查发现了原因,每次移动后由getElementsByClassName赋值的变量都需要重新扫描页面节点,当我某个节点移动后,该赋值变量扫出的元素已...
2019-08-16
PHP从数组中取出多个不连贯值
先创建一个空数组,然后用array_splice从原数组取出指定值,并用空数值替换以保持原数组连贯性。
<?php
$arr=array(0=>'a',1=>'b',2=>'c',3=>'d');
$add=array();
$add[]=array_sp...
2019-08-12
JS按两次回车触发事件
想做一个功能就是按一次回车是普通换行,在空行再按回车触发事件,代码如下:
<textarea name="text" onkeydown="check(this);">测试文本</textarea>
<script>
function check(that){
if(window.event.key=...
2019-08-12
2019-08-10
新系统缩略图统一采用webp
现在服务器把图片压缩为有损webp效率已经很高,完全可以替代现有的jpg缩略图了。
IOS目前不兼容这格式,那就在前端进行检测,直接调用libwebpjs进行转换。
2019-08-01
Nginx的map
遇到一个问题,我想在nginx中提取文件所在路径,例如:
https://abc.com/file/123/a.txt
Nginx预置变量只有 /file/123/a.txt ,我需要用 map 进行函数映射。
这玩意在网上基本找不到,特别是涉及映射函数式的写法。从鬼佬论坛扒了个例子:
map $uri $capture...
2019-08-01
PHP模块化编辑器编码/解码函数
我使用<!-- -->将文本进行了包裹,把整段文本直接输出到前端,再由JS进行解码。
这样既不影响文章被搜索引擎收录,又可以缓解服务器压力。
PHP后端编码解码函数:
<?php
function text_encode($arr){
$txt='';
$last=n...
2019-07-30