分类 未分类 下的文章

遥遥归途逢国庆,
工业限电停灯笼。
暮光长照红旗静,
思心念家急车行。
寅睡难眠母窸窣,
辰闹儿女父叹息。
浪里归湾湾不静,
树欲停而风不停。

七十二年又华诞,
甲子地支各一轮。
茹苦含辛终渐老,
忠孝未尽愧吾心。
碌碌人生是所愿,
空空苟活非所殷。
平平淡淡侬常在,
来年新月复照人。

eletron 12版本以后默认开启了上下文隔离

webPreferences: {
      contextIsolation: true,
}

上下文隔离后, 内存变成了不一样的区域, 通过桥接函数contextBridge.exposeInMainWorld从preload转移过去的都是复制的内容, 桥接过去的obj也是复制的, 在render中修改并不会影响preload. 甚至ipcRender也不能直接桥接过去, .on会丢失.
可是renderer中最重要的就是ipc消息交互了. ipcRenderer.on用不了要如何监听ipcMain发过来的消息?
Eletron官方文档中居然都没有写如何桥接.on,只写了.send.invoke
参考这个回答吧: https://stackoverflow.com/questions/59993468/electron-contextbridge
两个人给出了两种方式:都是preload.js
第一种:

const {
    contextBridge,
    ipcRenderer
} = require("electron");

// Expose protected methods that allow the renderer process to use
// the ipcRenderer without exposing the entire object
contextBridge.exposeInMainWorld(
    "api", {
        send: (channel, data) => {
            // whitelist channels
            let validChannels = ["toMain"];
            if (validChannels.includes(channel)) {
                ipcRenderer.send(channel, data);
            }
        },
        receive: (channel, func) => {
            let validChannels = ["fromMain"];
            if (validChannels.includes(channel)) {
                // Deliberately strip event as it includes `sender` 
                ipcRenderer.on(channel, (event, ...args) => func(...args));
            }
        }
    }
);

第二种:

const { ipcRenderer, contextBridge } = require('electron')

const validChannels = ["toMain", "myRenderChannel"];

contextBridge.exposeInMainWorld(
  "api", {
    send: (channel, data) => {
        if (validChannels.includes(channel)) {
            ipcRenderer.send(channel, data);
        }
    },
    on: (channel, callback) => {
      if (validChannels.includes(channel)) {
        // Filtering the event param from ipcRenderer
        const newCallback = (_, data) => callback(data);
        ipcRenderer.on(channel, newCallback);
      }
    },
    once: (channel, callback) => { 
      if (validChannels.includes(channel)) {
        const newCallback = (_, data) => callback(data);
        ipcRenderer.once(channel, newCallback);
      }
    },
    removeListener: (channel, callback) => {
      if (validChannels.includes(channel)) {
        ipcRenderer.removeListener(channel, callback);
      }
    },
    removeAllListeners: (channel) => {
      if (validChannels.includes(channel)) {
        ipcRenderer.removeAllListeners(channel)
      }
    },
  }
);

选择global版本

<script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.0-beta.7/vue.global.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.0-beta.7/vue.global.min.js"></script>

文档准备好后再运行脚本

var ready = function ( fn ) {

  // Sanity check
  if ( typeof fn !== 'function' ) return;

  // If document is already loaded, run method
  if ( document.readyState === 'complete'  ) {
      return fn();
  }

  // Otherwise, wait until document is loaded
  document.addEventListener( 'DOMContentLoaded', fn, false );

};

防止看到花括号

    <div id="app" class="app" v-cloak>{{counter}}</div>
[v-cloak]{
  display: none!important;
}

https://www.bilibili.com/read/cv6183523/

做法:

  1. 切换到TechDraw工具组
  2. 点击最左边的插入默认页, 会插入一个新的2D绘图页. 并且视图Tab页和组合浏览器->模型中会增加一个Page
  3. 点击回3D视图页面, 选择要插入2D图纸的零部件,并且将视图角度旋转到需要表现的角度;
  4. 点击插入视图,将插入2D视图到2D图纸.
  5. 刚插入的可能很丑.点击选中插入的视图, 修改左侧组合浏览器中的数据属性, 将Coarse View设置为True, 选择Rotation旋转调整角度, 选择数据属性, 将Line Width设置为0.1mm.
  6. 在2D视图上点击右键选择导出为SVG, 保存即可.

Windows上安装TortoiseGit后,已经commit的文件会打, 未加入版本管理的文件会打?, 有修改的文件或者文件夹会打!, 刚刚加入文件管理,但还没有commit的会打+.
如果对项目进行commit时, tortoiseGit发现不了任何的新的修改,然而项目目录上就是有个!, 跟着!一路进入会找到若干个文件上打着?,但这些文件明明已经commit并且也没有任何修改,这时候一般是这几个文件的文件名大小写改变导致的.
登录git的WEB服务器端查看这几个文件名与本地的异同, 将本地文件名大小写改为与服务器一致就可以解决,文件将恢复状态.

jekyll本身是预处理成静态页面,所以是不支持的。如果还是只用静态页面服务器的话,要支持只能从js上想办法。

JS获得GET参数

location.search可以获取get参数, 如?b=qq&c=dd,然后将其转化为json对象,我用的是字符串替换+JSON.parse

let urlParams = JSON.parse('{"'+location.search.substring(1).replace(/=/g,'":"').replace(/&/g,'","')+'"}')

对单个DOM元素在JS中修改

给DOM元素加id,再通过js修改即可。

  document.getElementById('name').innerText = someNewName

按GET参数不同显示不同的post

可以先在css中设置class,属性是display:none将元素隐藏,然后将所有的post按打上不同的class标记,再在js中遍历post的元素,将需要显示的class标记删除。
css:

.qq,.tr{
display:none;
}

预处理前的liquid代码

<li class="{{post.b}}"> ....</li>

js代码

    var all = document.getElementsByClassName(urlParams.b);
    console.log(all.length)
    //这儿删除了 i++, 因为 每次使用classList.remove, 都会让当前的all[i]从all的数组中删除, 数组会不断变短直至为0
    for (var i = 0; i < all.length;) { 
      all[i].classList.remove(urlParams.b)
    }

批量修改class颜色

可以通过css变量
参考:https://stackoverflow.com/questions/9436123/javascript-changing-a-class-style/65471649

:root {
    --some-color: red;
}

.someClass {
    color: var(--some-color);
}

Then you can change the variable's value in Javascript with

document.documentElement.style.setProperty('--some-color', '(random color)');

纹饰 图案 寓意
缠枝纹 俗称“缠枝花”,又名“万寿藤”。因其结构连绵不断,故又具“生生不息”之意,寓意吉庆。
莲瓣纹 莲瓣纹是佛教推崇的纹饰,莲花代表普度众生。抽象起来像是花括号
云纹 云纹是最为常见的传统纹样,象征着高升和如意,依据形态特征可分为单岐云、双岐云、三岐云、勾云纹、朵云纹、云头纹、云水纹、流云纹、三叉云等
云雷纹 商周时期,云纹多与雷纹共同被提起,被视为是云纹早期形态
回纹 是由陶器和青铜器上的雷纹衍化而来的几何纹样。回纹图案寓意吉祥富贵,所以民间称连续的回纹为“富贵不断头”
弦纹 弦纹是古代器物上最简单的传统装饰纹样,在青铜器上呈现为凸起的横线条。细弦纹像一条细长的带子平缚于陶器之上,细长、凸起;粗弦纹较宽,纹中间呈凹槽状,很像板瓦,因此又被称为“瓦纹”。另有作人字形的弦纹,称为“人字纹”或“人字弦纹”。
席纹 《中国陶瓷史》对其成因有解释说,它是制作陶坯时坯下所垫席类器物留下的印痕。
连珠纹 连珠纹又称“联珠纹”、“连珠”、“圈带纹”、“花蕊纹”,由一串彼此相连的圆圈或椭圆组成
漩涡纹 主流是认为起源于自然界的水涡,或者是源于对蛇形图腾的崇拜。象征自然和谐。寓意着太阳起落,四季划分
乳钉纹 最早出现在祭祀女性先人的祭器之上,感怀生命起源,表示对母亲的敬仰和怀念。而且钉谐音“丁”,故而也有祈求子孙满堂、人丁兴旺的寓意。战汉玉璧最常装饰乳钉纹,因为玉璧是“天”的象征,所以玉璧上的乳钉纹通常代表天上的星星。
条纹 又称“条形纹”、“线纹”,是一种最简单、最实用的传统装饰纹样。
曲折纹 又称“曲尺纹”、“波折纹”、“三角折线纹”,如同水波纹,猜测也可能是山的象形。规律的排布还给人一种生动活泼、刚强有力的秩序美。

其他参考文献
传统窗格图案几何纹饰及其艺术特征