思源笔记折腾记录 - 超链接菜单自定义 - 复制为链接卡片

本贴最后更新于 574 天前,其中的信息可能已经时移世改

需要用到的还是自定义菜单模块:

import 自定义菜单 from "https://esm.sh/siyuan-noob/customMenu/index.js"

还是那个比较复杂的写入剪贴版的函数,其实我也没看懂,直接抄的思源的源码

let writeText = async (text) => {
    let range;
    if (getSelection().rangeCount > 0) {
        range = getSelection().getRangeAt(0).cloneRange();
    }
    try {
        // navigator.clipboard.writeText 抛出异常不进入 catch,这里需要先处理移动端复制
        if ("android" === window.siyuan.config.system.container && window.JSAndroid) {
            window.JSAndroid.writeClipboard(text);
            return;
        }
        if ("ios" === window.siyuan.config.system.container && window.webkit?.messageHandlers) {
            window.webkit.messageHandlers.setClipboard.postMessage(text);
            return;
        }

        navigator.clipboard.writeText(text);
    } catch (e) {
        if (window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers) {
            window.webkit.messageHandlers.setClipboard.postMessage(text);
        } else if (window.siyuan.config.system.container === "android" && window.JSAndroid) {
            window.JSAndroid.writeClipboard(text);
        } else {
            const textElement = document.createElement("textarea");
            textElement.value = text;
            textElement.style.position = "fixed";  //avoid scrolling to bottom
            document.body.appendChild(textElement);
            textElement.focus();
            textElement.select();
            document.execCommand("copy");
            document.body.removeChild(textElement);
            if (range) {
                focusByRange(range);
            }
        }
    }
}

附赠从 stardust 那里偷来的一个新卡片样式:

pink-room 改动概念图 - 链滴 (ld246.com)

class linkCardStardust extends  HTMLElement{
    constructor() {
        super();
          let shawdow = this.attachShadow({ mode: "open" });
          shawdow.innerHTML = this.render();
      
      }
      render() {
        return `
        <div>
    <style>
    .link-card {
        height: 100px;
        width: auto;
        background-color:${this.getAttribute('bgColor')||'#effffe'} ;
        background-image:${this.getAttribute('bgImg')};
        display: flex;
        box-shadow: 0px 0px 5px 1px #0000004d;
        border-radius: 5px;
        overflow: hidden;
        color: ${this.getAttribute('color')||'#259494'} ;
    }
    .link-card:hover{
        scale:102%
    }
    .icon{
        height: auto;
        width: 94px;
        background-color:${this.getAttribute('imgColor')||'#ff7777'} ;
        background-image: url(${this.getAttribute('img')}); /* 括号内填入复制粘贴到思源后的图片的相对路径,可以右键思源内的图片来复制 */
        background-size:cover;
        margin:3px;
        border-radius:2px;
    }
    .text-content{
        width: auto;
        margin: 5px 10px 5px 10px;
    }
    h2{
     margin: 0px;
     padding: 0px;   
    }
    p{
        margin: 0px;
        padding: 0px;
    }
    </style>
    <div>
        <div class="link-card" onclick="window.location.href='${this.getAttribute('href')}'"><!-- 单双引号内填入思源的块超链接 -->
            <div class="icon">
           
            </div>
            <div class="text-content">
                <h2>${this.getAttribute('title')}</h2>
                <p><slot></slot></p>
            </div>
        </div>
    </div>
    </body>
    </div>
      
      
        `
      }
}
try{
    customElements.define("link-card-stardust", linkCardStardust);
}catch(e){
}

然后写入到自定义链接菜单里面去:

自定义菜单.超链接菜单.注册自定义菜单项({
    id: "复制链接卡片",
    图标:"#iconCopy",
    文字:"复制为链接卡片",

}).注册自定义子菜单项(
    (菜单项) => { return 菜单项.id == "复制链接卡片" },
    {
        id:'复制为SD卡片',
        文字:`复制为starDust卡片`,
        图标:'#iconCopy',
        点击回调函数:()=>{
            let  当前元素 = 自定义菜单.超链接菜单.菜单状态.链接元素
            writeText(`<div><link-card-stardust href='${当前元素.dataset.href}' title='${当前元素.dataset.title}'>${当前元素.innerText}</link-card-stardust></div>`)
            window.siyuan.menus.menu.remove()
        }
    }
).注册自定义子菜单项(
    (菜单项) => { return 菜单项.id == "复制链接卡片" },
    {
        id:'复制为CC卡片',
        文字:`复制为简单卡片`,
        图标:'#iconCopy',
        点击回调函数:()=>{
            let  当前元素 = 自定义菜单.超链接菜单.菜单状态.链接元素
            writeText(`<div><link-card href='${当前元素.dataset.href}' title='${当前元素.dataset.title}'>${当前元素.innerText}</link-card></div>`)
            window.siyuan.menus.menu.remove()
        }
    }
)

具体效果就懒得录屏了,自己试试吧。

stardust 卡片也可以自己在 html 块里面手写:

<div>
<link-card-stardust 
href='https://ld246.com/article/1640266171309' 
title='链接生活 分享点滴'
img='https://ld246.com/images/faviconH-dark.png'
imgColor='transpanret'
>用户社区汇总</link-card-stardust>
</div>

渲染出来长这样:

image


已知的问题:

我并没完成网页图标和标题的在线获取,有兴趣的可以结合【分享】一个制作超链接卡片的小工具 - 链滴 (ld246.com)自己玩一下


水完收工,如果这玩意对你有用可以去爱发电给我买杯咖啡哒

leolee9086 正在创作一些简单的技术教程和小工具,以及设计方面内容 | 爱发电 (afdian.net)

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22382 引用 • 89603 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 嗯 这里是应该补充一下 思源的附件管理是会清理未引用的附件 在线图片不会被清除所以问题不大 如果要使用本地图片的话,那就需要把图片放在思源的附件之外的位置。

    我一般是放在/data/snnipets 文件夹下面了。

    其实也还可以放到挂件目录,这里和代码片段目录都能通过链接访问也不会被清除。

    这两个目录都会同步,所以我各端都要用到的静态资源又不希望思源的附件清理处理的都会放到那个里面

  • 其他回帖
  • StarDustSheep

    此种方法插入的图片会被思源视为未引用文档清除掉,应该改进一下图片的插入

    1 回复

推荐标签 标签

  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 5 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖 • 1 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 724 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 3 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 511 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    209 引用 • 358 回帖 • 1 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    169 引用 • 506 回帖 • 1 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 764 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 63 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 72 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 454 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1348 回帖
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 629 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖 • 3 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 673 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    27 引用 • 225 回帖 • 169 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 62 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 1 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖 • 1 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    133 引用 • 189 回帖
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 2 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 699 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 137 关注
  • 创业

    你比 99% 的人都优秀么?

    84 引用 • 1399 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 2 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 618 关注