Monaco Editor系列(十一)集成 Gitlab 中的主题让monaco更炫酷!

前情提要:上一章学习了 `createContextKey` 创建*响应式变量*。在 monaco 中,很多明明用起来是表示条件判断的,但是文档却告诉我们这玩意儿要是字符串类型,此时就很有可能是需要使用`createContextKey`方法来创建一个 *响应式变量* 。这个方法接收两个参数,第一个参数是变量的 key,也就是我们要提供的参数;第二个参数是变量的默认值,可以是任何类型。我们提供参数的时候,提供变量的 key 就可以,这个变量变化的时候,依赖变量的参数就会自动发生变化。 这一章来探索非常有意思的功能,monaco 给我们提供了几个内置的主题,但是有那么一丢丢少,这一章我们来探索一下怎么把 Gitlab 提供的主题,应用到 monaco 中,让我们的 monaco editor更有个性🦚🦚🦚🦚🦚 在 Gitlab 里面我们可以看到它提供的几种主题 ![**在这里插入图片描述**](https://i-blog.csdnimg.cn/direct/20eddbd58348491dae2c3fb512e858ac.png) 首先我们要获取 Gitlab 中定义主题的源码 在 Github 网站中,搜索 Gitlab 项目,然后搜一下 theme 关键词,就可以看到啦 [themes](https://github.com/gitlabhq/gitlabhq/tree/master/app/assets/javascripts/ide/lib/themes) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b781b3bbdd6f477289ebfcc174d0b4f7.png) 将这个文件夹拿过来(拿来主义)放到我们的项目里面,其中的 index.js 就不需要了 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/38107e5856024b2d88331999178bd5cd.png)

里面的定义使用的是 esm 模式,我们引入要使用 commonjs 模式,把文件里的内容从 export 改成 const 定义的形式
在这里插入图片描述
然后在 html 里面引入这些文件

<script data-inline="yes-please" src="./themes/white.js"></script>
<script data-inline="yes-please" src="./themes/dark.js"></script>
<script data-inline="yes-please" src="./themes/none.js"></script>
<script data-inline="yes-please" src="./themes/monokai.js"></script>
<script data-inline="yes-please" src="./themes/solarized-dark.js"></script>
<script data-inline="yes-please" src="./themes/solarized_light.js"></script>
<script data-inline="yes-please" src="./study/article11.js"></script>

article11.js里面是我们创建编辑器的代码,以及定义主题的代码。顺便给UI中增加几个按钮吧,用来切换主题

require(['vs/editor/editor.main'], function() {
  const container = document.getElementById('container')
  const editor = monaco.editor.create(container,{
    value: 'function a() {\n\tconsole.log(1)\n}',
    language: 'javascript',
  })
  monaco.editor.defineTheme('dark', dark)
  monaco.editor.defineTheme('monokai', monokai)
  monaco.editor.defineTheme('vs', none)
  monaco.editor.defineTheme('solarizedDark', solarizedDark)
  monaco.editor.defineTheme('solarizedLight', solarizedLight)
  monaco.editor.defineTheme('white', white)

  // 增加按钮组设置主题
  const themes = ['dark','monokai','none','solarizedDark','solarizedLight', 'white']

  themes.forEach(theme => {
    const btn = document.createElement('button')
    btn.innerText = theme
    container.parentNode.insertBefore(btn, container)
    btn.addEventListener('click', () => {
      monaco.editor.setTheme(theme)
    })
  })
})

效果:
在这里插入图片描述
真的超有趣呢!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值