图比拟是 GitHub Desktop 的中心功用. 它驱动你分支的交互,显示你的修改对根分支的影响。
非常多庞杂的使用顺序用户界面都做得很易用。以动画的方法说明提交,同步,兼并的后果。
为 OS X 和 Windows 供给自力的代码库和设计,我们晓得同享代码是不成或缺的。像图象如许庞杂的处置,完成两次将是一个很大的担负。
跨平台代码对我们来讲不是全新的:举例来讲,代码基于git & libgit2。同享用户界面尊敬了每一个平台的分歧方法。
侥幸地是,在 Electron 使用中作为一个可重用的 web 组件,比对图曾经被原型化。我们晓得我们可以在 OS X 主机上完成一个当地的 web 视图,而且在 Windows 上也供给了支撑。
这里,我们会如许做。
一切的 GitHub 桌面完成,作为 submodule,都是参考图象比拟。这为图象比拟和其辅佐带来了完好的 HTML/CoffeeScript/SASS 的起源,就像调试和树立剧本。
这些中的大大多数关于运转使用时不太需要的,因而要树立剧本,把起源编译成使用中嵌入的可分派的 HTML/JavaScript/CSS 文件。
在 OS X 系统中,我们用苹果的 WebView 在 UI 中区整合图象比拟。在 Windows 系统中中,我们发明在 .NET WebBrowser 把持中的初始探究是不成运转的,所以我们在此中嵌入 CefSharp 并运用它的ChromiumWebBrowser(Chromium 收集阅读器)。当这些令我们的文件巨细增加时,WebView 和衍生自 Webkit 内核的 ChromiumWebBrowser 能简化开发和调试图象比拟的变卦。普通状况下,在 OS X 系统下实行图象比拟的开发者不用担忧这些使用可否在 Windows 下运转,反之亦然。
我们必需思索到在全平台上的图象比拟 API,但是,主要的更改必需被整合在使用的遍地。主要更改是后期会商的后果,这是一个问题,一是表示在拉取式恳求中的调出,二是确保熟习对其他曾经具有时机实行评论的平台。
我们成心识地把图象比拟 API 把持得狭隘和专注。其综合流程以下:
提取流动的和作为根底的分支。
使用恳求图象比拟描画出比拟。
图象比拟恳求它的分支代表(其使用)来在每分支中实行提交的批处置。
使用经过提取提交并将它们移出图象比拟。
反复步调 3 和 4 直到图象比拟填充了视图的宽度(或略微超越一点填充空间),又或许是到达了分支点(分支会聚的地方),标明使用发送了 0 条提交。
假如图象比拟曾经不克不及抵达分支点,在转动和重设左边尺寸来展示更多的图象的状况下,反复步调3到步调5。
图象比拟仍会呈现单分支,或许拉取式恳求。这几多会带来分歧的影响,但全体流程仍与本来的很类似。
使用需求支撑以下交互:
当新的提交呈现时,不管是同步仍是提交,使用都要把它们引入图象比拟。
当用户的鼠标指针颠末或选择了提交图象比拟,和按下了按钮,图象比拟会告诉其交互代表(使用)。
按钮的举措履行凡是应当是异步的,以便于图象比拟可以提醒阿谁使用正在运转中。使用可以号令图象比拟提醒甚么信息,和甚么时分中止提醒。
使用可以改动按钮的功用,比方,当分支曾经远程宣布时,把“宣布”按钮酿成“同步”按钮。
自从一切的使用必需履行本身的流程,它们也同享四周大略的架构,这包含了以下:
当有号令存在时(比方,用户作出了提交号令),盘算代表图象形态的值。
别离延续形态。
经过讯问图象比拟来履行一些举措,说明其分歧的地方。例如,假如两个形态属于了分歧的分支,使用会讯问图象比拟去描画新的比拟(或许分支,又或许是拉取式恳求。假如他们是属于统一个分支,但跟着提交号令而变更,使用就不会去讯问图象比拟,而是去递增地拔出新的提交。
固然全体流程和架构是同享的,但实在现常常是纷歧样的。比方,固然一切平台都是用 WebKit 阅读器中心,但各自的桥接 API 是很纷歧样的。
在 OS X 平台上,JavaScript 中心的 API 答应我在 Object-C,Swift 和 JavaScript 之间通报恣意的工具,函数和数组。当地代码可以在 JavaScript 工具中挪用办法,而 JavaScript 代码也能够在当地工具中挪用办法,不需求任何特别的把持手腕。我们也能够定义协议去指定工具的某个属性来被桥接。
CefSharp,在另外一方面,没有桥接函数的数组。JavaScript 工具可以挪用当地工具的办法,但不克不及挪用当地工具的属性。当地工具不克不及挪用 JavaScript 工具的办法;作为替换,你可以拜访 ChromeWebBrowser 去评价 JavaScript 起源的字符串。由于图象比拟具有宏大的异步性,需求收受接管和数组,这招致在构建时,一系列 JavaScript 的垫片会进入图象比拟。
在加载中,shims 是比拟图片使用的代表。当比拟图形的请求提交时,它会经过一个回调将提交的文件回传。Shims 将回传值存入一个专用表格中取得一个密钥,挪用使用并将密钥通报。当使用顺序取得了恳求后,它会挪用回传值,并通报密钥和一组恳求数组。
shims.getCommitsBefore = function (name, sha, callback) { callbacks[key(name, sha)] = callback; window.native.getCommitsBefore(name, sha); }
由于 CefSharp 不克不及通报,这需求将顺序模子序列化,提交恳求到 JSON 的比拟图。与 OS X 的过程比拟(恳求的数组可以被间接通报),它稍稍显得不便利,但它有一个优势:比拟图和使用顺序互相隔断,不受希冀形态的改动而影响。
Browser.RunJsAsync("shims.didGetCommitsBefore(" + ToJson(name) + ", " + ToJson(sha) + ", " + ToJson(commits) + ")");
最初,使用挪用到 shims,通报 commits 的序列号数组,shims 把 commits 提交到比拟图。
shims.didGetCommitsBefore = function (name, sha, commits) { callbacks[key(name, sha)](commits); delete callbacks[key(name, sha)]; }
我们同时运用 CSS shims 来调剂比拟图的外观来适应主机平台的外观和觉得。例如,在 Windows 上,按钮需求一个立体外观,可是在 OS X 上,需求有细微的梯度。异样,Windows 的文本是 Segoe UI,OS X 的文本是 Helvetica Neue。这可以协助我们确保在分歧平台之间的同享效应不会是一个最小公分母体验。
除对比图,教程,和很多同享的系统构造,大大多数的完成在两个平台上依然是分歧的。或许我们所做的掩盖 Mac 版本 GitHub 和 Windows 版本 GitHub 的桌面顺序迭代相对全体重写是有严重益处的方法。这反过去又使我们坚持在 GitHub 桌面上的更新,不至疏散我们过量的留意力。
我们在这里的迭代办法,是我们Start向前迭代。有非常多对比图,让我们有更多工具在分歧的平台间分享。向1.1致敬!
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务