262 lines
18 KiB
HTML
262 lines
18 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN" data-page-node-id="nRvVfOmQzU2twwSAvqUwfl">
|
||
<head data-page-node-id="BuWdwjwKPwwSCpow9JSC3n">
|
||
<meta charset="utf-8" data-page-node-id="tfHCUSqYqPzGPxp06Gd1tM">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" data-page-node-id="jb078uU5LM9D2ifPdaUWAq">
|
||
<title>Git Sync 控制台</title>
|
||
<link rel="stylesheet" href="/style.css" data-page-node-id="ORLXZi9XzxrEfwCcuWSocY">
|
||
<!-- CodeMirror(本地 vendor,离线可用;浅色/深色主题均按类名隔离,可同时加载) -->
|
||
<link rel="stylesheet" href="/vendor/cm/codemirror.min.css" data-page-node-id="DEsUZn7j7yjeQYLdcwspqH">
|
||
<link rel="stylesheet" href="/vendor/cm/eclipse.css" data-page-node-id="MaPxkDtHnCAcvhei4GQ7iw">
|
||
<link rel="stylesheet" href="/vendor/cm/material-darker.css" data-page-node-id="ChKgT48SiWzjCMcWsGLrje">
|
||
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/chart.umd.min.js"></script>
|
||
</head>
|
||
<body data-page-node-id="pZxw2WnQAZycSEktQenh8f">
|
||
<header data-page-node-id="XYY4eaCzyeDqRPq55yjUTY">
|
||
<div class="brand" data-page-node-id="xYRyIDur3LHCyDOfcx2CSX"><span class="brand-dot" data-page-node-id="GP41MDt2LXjJaYhsp8InyW"></span>Git Sync 控制台</div>
|
||
<div class="header-actions" data-page-node-id="XruBG1DkVAqNNsyOl4J41n">
|
||
<span id="conn" class="conn" data-page-node-id="aGv9c7D5e6Izpi92PjfxBz">连接中…</span>
|
||
<button class="btn btn-icon" id="btn-theme" title="切换深色 / 浅色模式" data-page-node-id="AP0nSHePHnQDDMylbBKMkA">🌙</button>
|
||
<button class="btn" id="btn-start-all" title="启动所有仓库的自动同步" data-page-node-id="QThBRVKpwwHv4WTWoGl0XA">全部启动</button>
|
||
<button class="btn" id="btn-stop-all" title="暂停所有仓库的自动同步" data-page-node-id="skWzYCenmPbVdRXS3TNxMK">全部暂停</button>
|
||
<button class="btn" id="btn-sync-all" data-page-node-id="6ag20ptiBl3F5MUA22HF68">全部同步</button>
|
||
<button class="btn btn-primary" id="btn-new" data-page-node-id="c0DooX9PlqcLzk8PGhoZR3">+ 新建配置</button>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="layout" data-page-node-id="9QmwKKoxuxwUQhg1t97g3S">
|
||
<section class="main-col" data-page-node-id="sKKLeDH2PGoGGIHbEhFid9">
|
||
<div id="grid" class="grid" data-page-node-id="xoQF8aiwcrnknxwxd80TI1"></div>
|
||
<div id="empty" class="empty" hidden data-page-node-id="C97b1VODLutQfNM13MXmAQ">
|
||
<p data-page-node-id="5nTKGjtKBDEFtovt25xVkQ">还没有任何仓库配置。</p>
|
||
<button class="btn btn-primary" id="btn-empty-new" data-page-node-id="SOs5r2CqrkMlyKyIZCGjkc">创建第一个配置</button>
|
||
</div>
|
||
</section>
|
||
<aside id="live" class="live" data-page-node-id="sgJJOcfDk9vPJs2DHcddtg">
|
||
<div class="live-head" data-page-node-id="znZimXC9iQsawFUMoA0lCu">
|
||
<h2 data-page-node-id="nGI3EfHmGzvRvuwP0oie2v">实时活动</h2>
|
||
<span id="live-conn" class="conn" data-page-node-id="Kg4dQkALsqywtSpd37Zz3B">连接中…</span>
|
||
<button class="btn btn-sm" id="btn-live-clear" title="清空本面板" data-page-node-id="KmUck5XGik1k7kP9zyfV2B">清空</button>
|
||
</div>
|
||
<div class="live-hint" data-page-node-id="camBOmhyguvcYnuUJmA2E7">所有仓库的同步(手动与自动)实时显示在此,无需点进详情</div>
|
||
<div id="live-log" class="live-log" data-page-node-id="VBl8S1HvgHrCW0882nIFt2"></div>
|
||
</aside>
|
||
</main>
|
||
|
||
<div id="modal" class="modal" hidden data-page-node-id="txBcrv6ZrmZhFBqb699zeN">
|
||
<div class="modal-box" data-page-node-id="KdrABdnmnNUg8UQdCa7Nqv">
|
||
<div class="modal-head" data-page-node-id="QdJ8BjaSvq7DxthECgP16z">
|
||
<h2 id="m-title" data-page-node-id="5kDCaJqI0QPGtb0QllYLBm">详情</h2>
|
||
<button class="btn-icon" id="m-close" title="关闭" data-page-node-id="cEUcru162HY4bHMBMNTEfI">✕</button>
|
||
</div>
|
||
<div class="tabs" id="m-tabs" data-page-node-id="CuT5FO4bado4BoZKGRXLGA">
|
||
<button data-tab="log" class="tab active" data-page-node-id="UirzBTtYe9llMyNeM4Q7cS">日志</button>
|
||
<button data-tab="history" class="tab" data-page-node-id="CPGPmAmMmERkIKBuv5Dw20">历史</button>
|
||
<button data-tab="diff" class="tab" data-page-node-id="hxChwjabjboAjspxC9VQyT">差异</button>
|
||
<button data-tab="file" class="tab" data-page-node-id="TotQXXPG6HhUSfeSm8XHz2">文件</button>
|
||
<button data-tab="conflict" class="tab" data-page-node-id="ujZu5YIEdpocOLfXLYhPv8">冲突</button>
|
||
<button data-tab="stats" class="tab" data-page-node-id="iIUiptYinU7iEa6VFcmceV">统计</button>
|
||
<button data-tab="config" class="tab" data-page-node-id="LRRFTfdian98kzNy3ca7U3">配置</button>
|
||
</div>
|
||
<div class="tab-body" data-page-node-id="BrgjnFG38oxkdJfBGHBRIX">
|
||
<div id="tab-log" class="tab-pane" data-page-node-id="LeZ5xD39VJIgWzOgMDLmji">
|
||
<div class="log-tools" data-page-node-id="VeZ2yA8bXiB5QkTnVxho88">
|
||
<label data-page-node-id="mu1MsfnHFce2PblMBUHuBz">级别
|
||
<select id="log-level" data-page-node-id="qRmCfGUzlRUbqzPfRd3GMb">
|
||
<option value="all" data-page-node-id="MBqUhLyyEFwF5KlLC2KzZq">全部</option>
|
||
<option value="error" data-page-node-id="PAJzGYoj7CRpKDjFKGgRF9">仅错误</option>
|
||
<option value="warn" data-page-node-id="m58wjzleIydsdSo49RQDUn">仅警告</option>
|
||
<option value="info" data-page-node-id="AGIjFdNqVxkFMzLjdbM76q">仅信息</option>
|
||
</select>
|
||
</label>
|
||
<input id="log-search" class="log-search" placeholder="搜索日志内容(关键词)" data-page-node-id="diPbIGZMP5CvkxPAGMsEnR">
|
||
<button class="btn btn-sm" id="btn-log-clear" title="清除过滤条件" data-page-node-id="WTCY4f4B9KEUbcx59P7S1K">清除</button>
|
||
</div>
|
||
<pre id="logbox" class="logbox" data-page-node-id="xXJ1Cc3SnDycFy75rRr8FY">加载中…</pre>
|
||
</div>
|
||
<div id="tab-history" class="tab-pane" hidden data-page-node-id="StRYtav5tS7RxMlmHkgMSV">
|
||
<div id="commit-list" class="commit-list" data-page-node-id="vLBDjSJ9KvjCVXYgjXFluN">加载中…</div>
|
||
</div>
|
||
<div id="tab-diff" class="tab-pane" hidden data-page-node-id="8ZEuDbkKtSFB1H2vNCD76h">
|
||
<div class="diff-head" data-page-node-id="pXqbBCb7m3PfpYSKGgGBJX">
|
||
<label data-page-node-id="9logygXL6fEhQpwTrZDwHR">范围
|
||
<select id="f-diff-scope" data-page-node-id="tjqhjYveDmQDIx4B9g1B58">
|
||
<option value="working" data-page-node-id="hmF9tmY9YCefzG7ppCmi7K">工作区(未暂存)</option>
|
||
<option value="staged" data-page-node-id="O5a6sN0qQaMZQPE6tGLqhU">暂存区</option>
|
||
<option value="all" data-page-node-id="xCr8XjV5khXje91R7F0axX">全部(含已提交未推送)</option>
|
||
<option value="remote" data-page-node-id="YWBratpqmpHwx7GuFLa2cC">与远程对比</option>
|
||
</select>
|
||
</label>
|
||
<label data-page-node-id="HM7TUuaIIeWw55c6H6p8et">视图
|
||
<select id="f-diff-view" data-page-node-id="pPFl4XiZHHV6OW02F6izDl">
|
||
<option value="unified" data-page-node-id="UBjVfLe9r8IoW6n4Br722d">统一</option>
|
||
<option value="split" data-page-node-id="52oaT6kkwDaWCwPJgQesYV">并排</option>
|
||
</select>
|
||
</label>
|
||
<label class="check-inline" title="按单词而非整行显示改动" data-page-node-id="Tn8hpGEewmZoD4cEfS4KUV"><input type="checkbox" id="f-diff-word" data-page-node-id="lxIM4byqutKFfAsBwujha6"> 词级</label>
|
||
<button class="btn btn-sm" id="btn-diff-refresh" data-page-node-id="3nrxtZxQJZHYXHAE7NR1Qq">刷新</button>
|
||
<button class="btn btn-sm" id="btn-diff-copy" data-page-node-id="oNXn145DgiaPDu4Aw4mOxG">复制</button>
|
||
<button class="btn btn-sm" id="btn-diff-download" data-page-node-id="ibtJzrmQVfhLYTIWAdCeqI">下载 .patch</button>
|
||
<span id="diff-filter" class="diff-filter" hidden data-page-node-id="XcHdGYotv6fgDrzsjgMerW"></span>
|
||
</div>
|
||
<div id="diff-stat" class="diff-stat" data-page-node-id="2hoANSTC9oMHaGMrEQ4HIl"></div>
|
||
<pre id="diffbox" class="diffbox" data-page-node-id="19VEbYBBwIIk0rsVl1M5FX">加载中…</pre>
|
||
</div>
|
||
<div id="tab-file" class="tab-pane" hidden data-page-node-id="kAFseOkCuTSGBdvb4EmQZd">
|
||
<div class="file-head" data-page-node-id="UjmP651Cok2T5VcpTyNEEA">
|
||
<button class="btn btn-sm" id="btn-file-refresh" data-page-node-id="RF7EO9SpUEx62Gxu2GDfnJ">刷新文件列表</button>
|
||
<button class="btn btn-sm" id="btn-file-diff" title="只看当前文件的差异" data-page-node-id="4EiZjZ2rCfX5ZqD5ACDd7U">对比此文件</button>
|
||
<span id="file-current" class="file-current" data-page-node-id="Y29ei6OnYN1W2AWCe6Jueg"></span>
|
||
<span id="file-draft" class="file-draft" hidden data-page-node-id="gQRdJvI800DgkQ6h6trjuL"></span>
|
||
</div>
|
||
<div class="file-body" data-page-node-id="RXmkN5Ep4iegYWG3iWBiON">
|
||
<div id="file-list" class="file-list" data-page-node-id="F75SFyDQShim9rZFPnjuJC">加载中…</div>
|
||
<div class="file-edit-col" data-page-node-id="xh1qou2SVboDfvKTLcXFEA">
|
||
<textarea id="file-editor" class="file-editor" placeholder="选择左侧文件进行编辑(Ctrl/Cmd + S 保存)" spellcheck="false"></textarea>
|
||
<div class="file-actions" data-page-node-id="GAMAnkYKeMi93EVEx8eYOn">
|
||
<input id="file-msg" class="file-msg" placeholder="提交说明(可选)" data-page-node-id="aS2jRAr1kAkqElk1T4Cldz">
|
||
<button class="btn btn-sm" id="btn-file-save" data-page-node-id="gaVGyD6YkFFElkXJFBtLk5">保存</button>
|
||
<button class="btn btn-sm btn-primary" id="btn-file-commit" data-page-node-id="1VDju8pdiboyM0zBgwff21">保存并提交</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="tab-conflict" class="tab-pane" hidden data-page-node-id="EFoL9Iv3JY4DBXK2ovqVl3">
|
||
<div class="manual-actions" data-page-node-id="OSsThrKzK22Q1tIcZ0a2bu">
|
||
<button class="btn btn-sm" id="btn-fetch" data-page-node-id="JEWw9Jx1x6PWh5EzLd7Bp9">获取</button>
|
||
<button class="btn btn-sm" id="btn-pull" data-page-node-id="D3F7c7ZkTj2GaQqrBtshfW">拉取</button>
|
||
<button class="btn btn-sm" id="btn-push" data-page-node-id="qTA9vsiTSuWz4dwilu7Prf">推送</button>
|
||
</div>
|
||
<div class="conflict-actions" id="pull-conflict-actions" data-page-node-id="u1mYEBVApFghZDqR2RFg7V">
|
||
<button class="btn btn-sm btn-danger" id="btn-abort" data-page-node-id="iFRU44FOA3NXieww4PmbAR">放弃合并</button>
|
||
<button class="btn btn-sm btn-primary" id="btn-resolved" data-page-node-id="C4SMNurpXaOJ8jByGjS2zg">我已在本地解决,继续</button>
|
||
</div>
|
||
<div class="conflict-actions" id="push-conflict-actions" hidden data-page-node-id="C2kukXRbyT5HAgGznQBEOF">
|
||
<span class="hint" id="push-conflict-hint" data-page-node-id="meqqutN8Y8BlHoIUOsDuc3"></span>
|
||
<button class="btn btn-sm btn-danger" id="btn-force-push" data-page-node-id="20FtTVRLlB3HrObTPUgS7I">强制推送(--force-with-lease)</button>
|
||
<button class="btn btn-sm" id="btn-abort-push" data-page-node-id="kr5vGtshzwTYewuRpjenau">放弃强制推送</button>
|
||
</div>
|
||
<div id="conflict-list" data-page-node-id="5cossjGefHTRs2BQmv7ZiE"></div>
|
||
</div>
|
||
<div id="tab-stats" class="tab-pane" hidden data-page-node-id="AmEsRLuCU7oz0ILjoFOSan">
|
||
<div id="stat-summary" class="stat-summary" data-page-node-id="B3x3zXCqPMHxf9Sbo22JsT"></div>
|
||
<canvas id="stat-chart" height="120" data-page-node-id="IzH3GbmZh2ogX04vsMxXz5"></canvas>
|
||
</div>
|
||
<div id="tab-config" class="tab-pane" hidden data-page-node-id="Q0lO9KCy3xEzAkMXn5oQoc">
|
||
<form id="cfg-form" autocomplete="off" data-page-node-id="02yHvyuCTFoEYiXQz2Dvv5">
|
||
<div class="form-grid" data-page-node-id="SXw7lpnaPt4PKbbHGpCIJT">
|
||
<label data-page-node-id="qyzGnJE1Gt2AFnpJFtmmWe">配置名称
|
||
<input name="name" id="f-name" required pattern="[A-Za-z0-9_\-]+" title="仅字母、数字、下划线、连字符" data-page-node-id="NF2A817ZBdsM4puREMglkE">
|
||
</label>
|
||
<label data-page-node-id="QC3jvGyY6uBpIUe0dtLRyy">分支
|
||
<input name="branch" id="f-branch" value="main" data-page-node-id="uIDYoqF9rtqJ0kqijuojOd">
|
||
</label>
|
||
<label class="full" data-page-node-id="AEwFVqzONKMsh1CjmIWTfB">仓库路径
|
||
<input name="repo_path" id="f-path" placeholder="C:\path\to\repo 或 /c/path/to/repo" required data-page-node-id="V8Tqs5XjcAN6ezkffD7A0A">
|
||
</label>
|
||
<label class="full" data-page-node-id="SZ5RWmnnD0vgIfUoyNcCAP">远程仓库(每行一个,格式 名称=URL)
|
||
<textarea name="remotes" id="f-remotes" rows="3" placeholder="origin=https://github.com/user/repo.git"></textarea>
|
||
</label>
|
||
<label data-page-node-id="QUBANIDAtqHXOLlp2iHfUw">操作模式
|
||
<select name="mode" id="f-mode" data-page-node-id="PYGTzl4KFnOy5QLTnl9bil">
|
||
<option value="both" data-page-node-id="4uWdIiNUcKH1klnQC7Yyfk">both(拉取并推送)</option>
|
||
<option value="push" data-page-node-id="Fx5PMaVHG9UGFzmyKtNoVC">push(仅推送)</option>
|
||
<option value="pull" data-page-node-id="g0oRcyHrhBbgOpG3htuVkZ">pull(仅拉取)</option>
|
||
</select>
|
||
</label>
|
||
<label data-page-node-id="SR3Eyg3vhv2DEOD4ux6HbU">检查间隔(秒)
|
||
<input name="interval" id="f-interval" type="number" min="5" value="60" data-page-node-id="t4WQ8TOUFADFvrxWDqDLOO">
|
||
</label>
|
||
<label data-page-node-id="pVjnoOnEBz06wQUDFuGnSG">认证方式
|
||
<select name="auth_method" id="f-auth" data-page-node-id="fsjBIeHacR0Y68FPjYrlIE">
|
||
<option value="ssh" data-page-node-id="D1rhiol1YcEJjSQptztATh">SSH</option>
|
||
<option value="https" data-page-node-id="SC5nYAdz2JBiHIks7TFSaN">HTTPS(支持重试)</option>
|
||
</select>
|
||
</label>
|
||
<label data-page-node-id="HzJHn4COhFnLGwn6aIiBKP">冲突策略
|
||
<select name="conflict_strategy" id="f-conflict" data-page-node-id="tJK7z7t0ojAK0xkHaM80nd">
|
||
<option value="merge" data-page-node-id="BdiprVQi0oHS9aTDD4LQ2l">merge(冲突后等待人工解决)</option>
|
||
<option value="rebase" data-page-node-id="jCngOAxfELckp4A3mrk1qI">rebase(变基)</option>
|
||
<option value="abort" data-page-node-id="aGj68eybADJcGx5G1g85UB">abort(冲突后自动放弃)</option>
|
||
</select>
|
||
</label>
|
||
<label data-page-node-id="gwR8fc4feWQMTOGVirMjCO">推送策略(non-fast-forward)
|
||
<select name="push_strategy" id="f-push" data-page-node-id="HCS9CZyBErr1VeYSJxKStW">
|
||
<option value="manual" data-page-node-id="yurv3dbmJx7LKFDzzvzIUP">manual(冲突后等待人工决策)</option>
|
||
<option value="rebase" data-page-node-id="E3ifgThEynHNJhBnLn0a88">rebase(变基到远程后重试)</option>
|
||
<option value="force" data-page-node-id="lhFHAEDyn49ABT02QDys8o">force(--force-with-lease 强制推送)</option>
|
||
</select>
|
||
</label>
|
||
<label data-page-node-id="Nv2HjS10oANWojhUmKVQE4">重试次数(HTTPS)
|
||
<input name="retry_count" id="f-retry" type="number" min="0" value="3" data-page-node-id="UEgQOQBxHxqIfR5kYyZctp">
|
||
</label>
|
||
<label data-page-node-id="jNiYqEK7BpWhx0mg0CvdDY">重试间隔(秒,HTTPS)
|
||
<input name="retry_interval" id="f-retry-interval" type="number" min="0" value="5" data-page-node-id="sFEylqamHk8vW9H2D0alce">
|
||
</label>
|
||
<label class="full check-row" data-page-node-id="gWPFS7fXyat6FiuobDoynQ">
|
||
<input type="checkbox" id="f-autocommit" data-page-node-id="5ADMjJXNR5EGPDmhwiCBlm">
|
||
<span data-page-node-id="z0tpoI6jpAbJCEwUJ4cSxO">自动提交模式:检测到未提交改动时自动 commit,并随同步推送到远程</span>
|
||
</label>
|
||
<label class="full check-row">
|
||
<input type="checkbox" id="f-autosync">
|
||
<span>自动同步:按间隔 / Cron 自动拉取推送。关闭后仅响应「立即同步」手动触发,不再自动运行</span>
|
||
</label>
|
||
<label class="full" data-page-node-id="tei066TFL8N9sqInjysFvD">Cron 表达式(可选,5 段:分 时 日 月 周;填写后优先于固定间隔)
|
||
<input name="cron" id="f-cron" placeholder="*/30 * * * * 表示每 30 分钟,留空使用固定间隔" data-page-node-id="6W3Ua8pPoGLuaNh7rGcDOw">
|
||
<span id="cron-next" class="cron-next" data-page-node-id="WgXuBnZPqGWvOBGRxzIVCn"></span>
|
||
</label>
|
||
<label class="full" data-page-node-id="fsjZ6wLid5NUBV0yAHKdII">日志文件路径(留空使用默认 logs/配置名.log)
|
||
<input name="log_file" id="f-log" data-page-node-id="KJpv7jEWYnOQZ1PtQMetfP">
|
||
</label>
|
||
</div>
|
||
<div class="form-actions" data-page-node-id="1GfIJLKdxSyPwBqpqCCMb9">
|
||
<button type="submit" class="btn btn-primary" data-page-node-id="E2123htNE6lmoNzZTg7AwV">保存</button>
|
||
<button type="button" class="btn" id="btn-clone" hidden data-page-node-id="H6BdDiraff2cjD9EWjF8Eh">克隆此配置</button>
|
||
<button type="button" class="btn btn-danger" id="btn-delete" hidden data-page-node-id="iyYF2JZ87tE2mGPCkbHX5w">删除配置</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="login" class="modal" hidden data-page-node-id="bALcA8zunmLBixpK2bI55B">
|
||
<div class="modal-box login-box" data-page-node-id="kcGN8ZqtOQx7KUIgGpoGCN">
|
||
<div class="modal-head" data-page-node-id="TPAEpzey0DyD3tbzQcX6AD">
|
||
<h2 data-page-node-id="SxFYrLjYGUJGks4LhmWFGa">Git Sync 控制台</h2>
|
||
</div>
|
||
<div class="login-body" data-page-node-id="loM04avwKu3ehaXbaPV1dc">
|
||
<label data-page-node-id="PQlrAv5lABcwv1V9A2kAZf">访问密码
|
||
<input type="password" id="login-password" data-page-node-id="BQQm1tLuMFSt6HhCgtUSzi">
|
||
</label>
|
||
<p id="login-err" class="login-err" hidden data-page-node-id="c5KlyY0GNpRJlp2ZCDLC2P"></p>
|
||
<div class="form-actions" data-page-node-id="dKo7nNYzQBz8MQZa7x51Bf">
|
||
<button class="btn btn-primary" id="btn-login" data-page-node-id="EOo505vSrX2QIGGOnpcDxp">登录</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Toast 轻提示容器(替代原生 alert,固定在右下角,不打断操作) -->
|
||
<div id="toasts" class="toasts" data-page-node-id="sGCNypYh5YHNDe7nZ7TUeA"></div>
|
||
|
||
<script src="/app.js"></script>
|
||
<!-- CodeMirror:本地 vendor,必须在 app.js 之后加载以便降级检测 -->
|
||
<script src="/vendor/cm/codemirror.min.js"></script>
|
||
<script src="/vendor/cm/mode/javascript.min.js"></script>
|
||
<script src="/vendor/cm/mode/xml.min.js"></script>
|
||
<script src="/vendor/cm/mode/css.min.js"></script>
|
||
<script src="/vendor/cm/mode/htmlmixed.min.js"></script>
|
||
<script src="/vendor/cm/mode/go.min.js"></script>
|
||
<script src="/vendor/cm/mode/markdown.min.js"></script>
|
||
<script src="/vendor/cm/mode/shell.min.js"></script>
|
||
<script src="/vendor/cm/mode/python.min.js"></script>
|
||
<script src="/vendor/cm/mode/clike.min.js"></script>
|
||
<script src="/vendor/cm/mode/yaml.min.js"></script>
|
||
<script src="/vendor/cm/mode/sql.min.js"></script>
|
||
<script src="/vendor/cm/mode/properties.min.js"></script>
|
||
<script src="/vendor/cm/mode/diff.min.js"></script>
|
||
<script src="/cm-boot.js"></script>
|
||
</body>
|
||
</html>
|