zoukankan      html  css  js  c++  java
  • woktile中弹窗全屏化插件

    0. 话说

    作为一名半步入管理的程序老猿,使用了多年的项目管理工具是集成的 Redmine[1],虽然用的不是很精深,但对于经常使用的一般功能,都已习惯了,现在的团队中使用 Worktile[2],迁移嘛就多少有点学习成本,这都没啥,但它的弹窗必须吐槽,实在不便。
    (以上两管理工具简介就不多说了,想了解的,见文末脚注已附链接地址)

    锤子在手,钉子到处都有

    --码路工人

    于是,为了方便大家,也顺便方便自己,做了一个极为简单的 Chrome 插件,顺手解决了这个弹出难用的问题。

    1. 简介

    本插件为 Chrome 浏览器插件,使用本插件能够将 worktile 中的弹窗变为全屏显示。

    2. 开发背景

    虽然很少使用 worktile ,但还是忍受不了:太难用了
    改变不了要使用它的现状,那就改变一下它吧~

    2.1 解决痛点:

    • 弹窗尺寸小,内容展示不足
      大部分时候 bug 都是贴几张图,弹窗里缩放了,需要点开放大了看
      而关闭图片时,很容易造成连 bug 内容弹窗都被关掉

    • 点弹窗外部,会不小心关闭弹窗
      当有在编辑评论时,关闭后编辑的内容就消失掉了,体验非常糟糕

    2.2 原理:

    • 写几个样式,使 worktile 中的弹窗全屏化
    • 通过制作 Chrome 浏览器插件给 worktile 网站插入自己想要的样式

    3. 使用

    3.1 加载插件

    image.png
    根据上图指示打开扩展程序页面,或者直接在 chrome 地址栏输入:

    chrome://extensions/


    点击【加载已解压的扩展程序】按钮,选择扩展程序目录文件夹,即下图中的:

    worktile-fullscreen-crx

    image.png

    加载出来之后如下图:
    image.png

    不用的话可以点【移除】,也可以点开关,关闭即可停用。

    3.2 使用效果

    未使用插件前,原页面是这样的:

    • 通知弹窗
      image.png

    使用插件后:

    弹窗变全屏
    仍可用 ESC 键关闭

    • 通知弹窗 image.png

    包括以下的大部分弹窗都会被改全屏:

    • 通知弹窗
    • 通知弹窗内的任务通知弹窗
    • 通知弹窗内的提测通知弹窗
    • 任务页面内的所有弹窗

    如果还有漏掉的场景,可自行修改

    4. 源码

    Gitee 地址:
    worktile-fullscreen-crx[3]

    源码实现非常简单,顺便简单介绍 Chrome 扩展程序(即浏览器插件)的基本知识。

    实现过程

    • 两个文件
      • 配置文件:manifest.json (固定命名)
      • 脚本文件:xxx.js (随意命名)
    • 目录结构
      |——worktile-fullscreen-crx
         |——js
         |  |——inject.js
         |——manifest.json
    • 文件内容

    manifest.json

    {
      "name""FullscreenWorktileDialog",
      "manifest_version"2,
      "version""1.0",
      "description""Make dialogs in worktile full-screen, for easier using.",
      "page_action":{},
      "permissions": [
        "tabs"
      ],
      "content_scripts": [
       {
          "matches": ["https://ptxd.worktile.com/*"],
          "js": ["js/inject.js"],
          "run_at":"document_end"
       }
      ]
    }

    简要解释下,

    • manifest_version: 固定 2
    • content_scripts: 插入到页面里执行的脚本配置
      • matches:正则匹配地址栏里的 url
      • js:要插入的 js 文件
      • run_at:实行时机(例子中为文档加载完成后)

    inject.js

    ;(function ({
      'use strict'

      const overrideStyle = `
        .modal-dialog {
            margin: 0;
        }
        .modal-content,
        .dialog-overlay-pane {
             100vw !important;
            min-height: 100vh !important;
        }
        .modal-detail-wrap {
            height: 100vh;
        }
      `

      const styleSheet = document.createElement('style');
      styleSheet.innerHTML = overrideStyle;
      document.head.appendChild(styleSheet);
    })();

    简单几句入门级代码,即可实现想要的效果。

    这应该是最简单一个浏览器插件了。
    使用过浏览器插件的人应该不在少数,程序员做开发也是经常用到插件工具,其实稍微了解一下 Chrome 插件开发,即可做个小工具满足日常生活中小需求,提升工作生活幸福感。

    前一阵子,不刚就有一个抢茅台的插件火爆网络了嘛。

    回到本文开头关于锤子的谚语,
    原意是说学习掌握某项技能后,总想着使用套用,我把它曲解一下:

    如果手上没有锤子(知识、技能、工具),当你遇到钉子(问题、需求)就会手足无措毫无办法; 如果手上有锤子钳子扳手卡钳螺丝刀等一整套完备的工具箱,那遇到什么样的问题,总能够迎刃而解。 知识储备量足够大,视野够开阔,解决问题的思路办法才能足够多。

    所以,

    多学习,勿自满,
    保持空杯心态,学习使你快乐

    别一个人闷头学,有时候,多交流下,相互学习不错的。

    5. 末笔

    虽然,这个简单的连玩具也算不上,我还是整理出这篇短文,也许就对某个读者在工作学习生活上有一丁点的启发呢。

    鄙人不才没有太大的能力,还没有做出过产品级的个人项目,早年还造过一个个人用的插件,略微提一下献个丑。

    • 背景:
      内人去到一家小微公司,有一个系统,工作过程中需要用它查找一些历史数据复用,然后登记在新记录中(参考?)
      可能用的某云最便宜的套餐,查询极慢,最卡的时候翻页甚至等10几秒
      这样就会有一部分体力活非常耗费时间效率低下
      其实很明显,他们没有源码,只是用还没人维护,如果有源码在工程里很容易实现根本不需要费劲做插件

    • 目标:
      目标就是解放双手,让耗时费力的体力活自动化。
      当时考虑过两个方向:通过测试工具(就是那种可以记录页面操作,自动化执行的),或者写浏览器插件,从实际角度触发选择了后者。

    • 算是一点难点吧:

      • 针对每一页的数据做检索和提取
      • 翻页中需要确保已正常加载的时点(每次翻页到加载完都要正确的监测到再继续任务,否则就出错了)
      • 定位页内元素困难(框架生成的代码,基本没有id,类名都是加的数字顺序号不一定多少,需要找到相对稳定可靠的元素路径)
      • 提交数据的时候,模拟点击事件没有作用(手动操作看起来点的那个元素,就模拟它click了,实际上并不能执行相关函数,而且只能通过触发框架里的函数来实现,而插件的脚本js因安全隔离并不能直接访问页面里的变量及函数,作用域并不打通 => 通过给页面里注入js来实现了内部调用解决了问题)

    多年前写的了,大概也就记得这些,晚上熬夜写的,用上后内人省下的时间可以在家看娃,嗨皮。直到那套老旧系统退役,服务了两三年,超值了。

    我是码路工人,锤过之后,看到钉子,就还想锤。


    --END--
    关 于

    码路工人:

    中年程序猿,原产地民办三本外语系,多年开发经验,曾就职于某日资外企,负责过桌面端与Web前后端开发,后在国内半互联网公司搞前端。
    码路工人公众号原创作者。

    码路工人公众号
    码路工人公众号

    参考资料

    [1]

    Redmine: 开源的、基于Web的项目管理和缺陷跟踪工具,http://www.redmine.org.cn/

    [2]

    Worktile: 企业协作办公平台,https://worktile.com/

    [3]

    worktile-fullscreen-crx: https://gitee.com/coder-monkey/worktile-fullscreen-crx.git

    欢迎交流斧正点赞转发
  • 相关阅读:
    函数功能
    Vue + Element UI 实现权限管理系统 前端篇(十六):系统备份还原
    Vue + Element UI 实现权限管理系统 前端篇(四):优化登录流程
    Vue + Element UI 实现权限管理系统 前端篇(五):国际化实现
    Vue + Element UI 实现权限管理系统 前端篇(一):搭建开发环境
    Vue + Element UI 实现权限管理系统 前端篇(三):工具模块封装
    Vue + Element UI 实现权限管理系统 前端篇(二):Vue + Element 案例
    小程序 web-view
    ffmpeg 给图片添加水印
    给右键菜单添加 cmd
  • 原文地址:https://www.cnblogs.com/CoderMonkie/p/worktile-fullscreen-dialog.html
Copyright © 2011-2022 走看看