在etherpad中更改颜色而不是文本的背景颜色

时间:2016-11-11 14:42:34

标签: etherpad

我正在尝试为" 作者颜色"找到解决方案。在etherpad。从未使用过etherpad的人,请忽略这个问题,因为他们不会理解。

通常"作者颜色"是作为文本的背景颜色提供的颜色,它可以在初始化填充时作为参数给出。它有助于识别谁在垫中写了什么。

我希望所有文字都有白色背景,并根据用户更改文字颜色而不是背景颜色。因此,如果我在初始化垫时提供红色,我希望在垫中使用红色写入而不是红色背景和白色书写垫(像往常一样)。

请不要暂停此问题,因为我没有提供与此问题相关的任何特定代码。在评论中提问,我会清除任何不可理解的内容。

谢谢,

1 个答案:

答案 0 :(得分:1)

首先,感谢大家在Post上没有阻止或提出这个问题,因为没有提供任何代码。

当我决定再次尝试自己时,我正准备将这个问题放在这个问题上,而且经过很多努力我已经解决了这个问题。虽然,它帮助我更好地理解了etherpad。

我想列出两个与etherpad相关的重要链接:

  1. https://github.com/ether/etherpad-lite/wiki
  2. 关于src - https://github.com/ether/etherpad-lite/wiki/Introduction-to-the-source
  3. 如果您正在尝试了解etherpad或想要自己做一些修改,它们可能非常重要。

    所以这就是你如何做到的:

    src/static/js/ace2_inner.js中,转到setAuthorStyle功能并替换:

            // author color
            authorStyle.backgroundColor = bgcolor;
            parentAuthorStyle.backgroundColor = bgcolor;
    
            // text contrast
            if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.5)
            {
              authorStyle.color = '#ffffff';
              parentAuthorStyle.color = '#ffffff';
            }else{
              authorStyle.color = null;
              parentAuthorStyle.color = null;
            }
    
            // anchor text contrast
            if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.55)
            {
              anchorStyle.color = colorutils.triple2css(colorutils.complementary(colorutils.css2triple(bgcolor)));
            }else{
              anchorStyle.color = null;
            }
    

    使用:

    authorStyle.backgroundColor = '#ffffff';
    parentAuthorStyle.backgroundColor = '#ffffff';
    
    authorStyle.color = bgcolor;
    parentAuthorStyle.color = bgcolor;
    

    并评论出来:

    if ((typeof info.fade) == "number")
    {
      bgcolor = fadeColor(bgcolor, info.fade);
    }
    

    Ofcource不要忘记按bin/run.sh重新启动进程以进行更改。

    有兴趣了解它如何运作的人可以继续阅读。

    因此,etherpad接收在src/static/js/pad.js中初始化了etherpad的参数,所以如果你已经定义了'userColor',那么当你初始化了pad时,它将进入globalUserColor所提到的文件。

    然后此变量globalUserColor在同一文件中填充pad.myUserInfo.colorId

    现在在collab_client.js中,此colorId存储在功能cssColor中的tellAceAuthorInfo中,并且通过提供参数editor.setAuthorInfo来调用bgcolor: cssColor

    现在setAuthorInfo中存在此函数src/static/js/ace2_inner.js,它调用我们进行更改的其他本机函数(同一文件)setAuthorStyle

    我所做的是使用提供的变量bgcolor而不是更改背景颜色,而userColor实际上包含authorStyle.backgroundColor = bgcolor; parentAuthorStyle.backgroundColor = bgcolor;

    backgroundColor

    我将bgcolor更改为白色(#ffffff),将文字颜色更改为authorStyle.backgroundColor = '#ffffff'; parentAuthorStyle.backgroundColor = '#ffffff'; authorStyle.color = bgcolor; parentAuthorStyle.color = bgcolor;

             // text contrast
             if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.5)
             {
               authorStyle.color = '#ffffff';
               parentAuthorStyle.color = '#ffffff';
             }else{
               authorStyle.color = null;
               parentAuthorStyle.color = null;
             }
    
            // anchor text contrast
             if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.55)
             {
               anchorStyle.color = colorutils.triple2css(colorutils.complementary(colorutils.css2triple(bgcolor)));
             }else{
               anchorStyle.color = null;
             }
    

    我也删除了:

    userColor

    因为,这些线条根据背景选择的颜色设置文本颜色的对比度。但是我已经将背景设置为白色并将文本颜色设置为给定 if ((typeof info.fade) == "number") { bgcolor = fadeColor(bgcolor, info.fade); } ,因此我不再需要对比度功能。

    最终我也评论道:

    CustomUser.beforeRemote('login', function(ctx, unused, next) {
        UserService.externalLogin(ctx.args.credentials.username ,ctx.args.credentials.password).then(function(response){
          //Go to user.login
          if(response.authorized){
            next();
          }
        });
      });
    

    因为当用户不在线时文本会消失,至少对我来说它确实如此。

    就是这样。 我希望它能帮助想要和我一样想要相同功能的人。