bitpull 0.1.24 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ui/ide.html CHANGED
@@ -13,10 +13,13 @@
13
13
  window.__BITPULL__ = { token: p.get("token") || "", lang: p.get("lang") || "", folder: p.get("folder") || "" };
14
14
  fetch("/api/ui/session", { method: "POST", headers: { "x-bitpull-token": window.__BITPULL__.token } }).then(function (r) {
15
15
  if (!r.ok) { document.body.textContent = "BitPull: open this page from the app."; return; }
16
- var css = document.createElement("link");
17
- css.rel = "stylesheet";
18
- css.href = "/ui/ide.css";
19
- document.head.appendChild(css);
16
+ // Monaco's own stylesheet: without it the editor has no gutter and draws its minimap anywhere.
17
+ ["/ui/monaco/vs/editor/editor.main.css", "/ui/ide.css"].forEach(function (href) {
18
+ var css = document.createElement("link");
19
+ css.rel = "stylesheet";
20
+ css.href = href;
21
+ document.head.appendChild(css);
22
+ });
20
23
  var s = document.createElement("script");
21
24
  s.src = "/ui/ide.js";
22
25
  document.body.appendChild(s);
@@ -30,104 +33,145 @@
30
33
  </head>
31
34
  <body>
32
35
  <div id="ide" hidden>
33
- <header id="top">
34
- <a id="back" href="#" data-i18n="ide.back" data-tip="tip.ide.back"></a>
35
- <select id="folder" data-tip="tip.pj.folder"></select>
36
- <button class="ghost" id="folder-add" data-i18n="pj.folder.add" data-tip="tip.pj.folder.add"></button>
37
- <span class="grow"></span>
38
- <button class="ghost" id="quick-open" data-i18n="ide.quick" data-tip="tip.ide.quick"></button>
39
- <button class="ghost" id="preview" data-i18n="ide.preview" data-tip="tip.ide.preview"></button>
40
- <select id="model" data-tip="tip.pj.model"></select>
41
- <select id="mode" data-tip="tip.ide.mode"><option value="ask" data-i18n="pj.mode.ask"></option><option value="edits" data-i18n="pj.mode.edits"></option><option value="auto" data-i18n="pj.mode.auto"></option></select>
42
- <button class="ghost" id="limits-open" data-i18n="pj.limits" data-tip="tip.pj.limits"></button>
36
+ <header id="titlebar">
37
+ <button class="tb" id="back" data-tip="tip.ide.back" data-icon="back"></button>
38
+ <button class="tb folder" id="folder-btn" data-tip="tip.pj.folder"><span data-icon="folder"></span><span id="folder-name"></span><span data-icon="chevron-down"></span></button>
39
+ <select id="folder" hidden></select>
40
+ <div class="grow"></div>
41
+ <button class="tb search" id="palette-btn" data-tip="tip.ide.palette"><span data-icon="search"></span><span id="palette-label" class="muted"></span></button>
42
+ <div class="grow"></div>
43
+ <button class="tb" id="toggle-side" data-tip="tip.ide.toggle.side" data-icon="layout-left"></button>
44
+ <button class="tb" id="toggle-panel" data-tip="tip.ide.toggle.panel" data-icon="layout-bottom"></button>
45
+ <button class="tb" id="toggle-agent" data-tip="tip.ide.toggle.agent" data-icon="layout-right"></button>
46
+ <button class="tb" id="settings-btn" data-tip="tip.ide.settings" data-icon="gear"></button>
43
47
  </header>
44
- <div id="body">
48
+ <div id="workbench">
45
49
  <nav id="activity">
46
- <button data-side="files" class="on" data-tip="tip.ide.files"><svg viewBox="0 0 24 24"><path d="M4 4h6l2 2h8v13H4z"/></svg></button>
47
- <button data-side="search" data-tip="tip.ide.search"><svg viewBox="0 0 24 24"><circle cx="10" cy="10" r="6"/><path d="M15 15l5 5"/></svg></button>
48
- <button data-side="git" data-tip="tip.ide.git"><svg viewBox="0 0 24 24"><circle cx="6" cy="6" r="2.5"/><circle cx="6" cy="18" r="2.5"/><circle cx="18" cy="9" r="2.5"/><path d="M6 8.5v7M18 11.5c0 4-12 2-12 4"/></svg></button>
49
- <button data-side="outline" data-tip="tip.ide.outline"><svg viewBox="0 0 24 24"><path d="M5 6h14M8 11h11M8 16h11M5 11h0M5 16h0"/></svg></button>
50
- <button data-side="history" data-tip="tip.ide.history"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="8"/><path d="M12 7v5l3 2"/></svg></button>
50
+ <button data-side="files" class="on" data-tip="tip.ide.files" data-icon="files"></button>
51
+ <button data-side="search" data-tip="tip.ide.search" data-icon="search"></button>
52
+ <button data-side="git" data-tip="tip.ide.git" data-icon="git"></button>
53
+ <button id="views-more" data-tip="tip.ide.views" data-icon="chevron-down"></button>
51
54
  </nav>
52
55
  <aside id="side">
53
56
  <section data-panel="files">
54
- <div class="panel-head"><span data-i18n="ide.files"></span><span class="grow"></span>
55
- <button class="icon" id="new-file" data-tip="tip.ide.new_file">+</button>
56
- <button class="icon" id="new-dir" data-tip="tip.ide.new_dir">+▢</button>
57
- <button class="icon" id="refresh" data-tip="tip.ide.refresh">⟳</button></div>
58
- <ul id="tree" class="tree" role="tree"></ul>
57
+ <div class="view-title"><span data-i18n="ide.explorer"></span></div>
58
+ <div class="pane open" data-pane="tree">
59
+ <div class="pane-head"><span data-icon="chevron-right" class="twist"></span><span id="tree-title" class="pane-name"></span><span class="grow"></span>
60
+ <span class="pane-acts"><button class="ib" id="new-file" data-tip="tip.ide.new_file" data-icon="new-file"></button><button class="ib" id="new-dir" data-tip="tip.ide.new_dir" data-icon="new-folder"></button><button class="ib" id="refresh" data-tip="tip.ide.refresh" data-icon="refresh"></button><button class="ib" id="collapse-all" data-tip="tip.ide.collapse" data-icon="collapse"></button></span></div>
61
+ <div class="pane-body"><ul id="tree" class="tree" role="tree"></ul></div>
62
+ </div>
63
+ <div class="pane" data-pane="outline">
64
+ <div class="pane-head"><span data-icon="chevron-right" class="twist"></span><span class="pane-name" data-i18n="ide.outline"></span></div>
65
+ <div class="pane-body"><ul id="outline" class="list"></ul></div>
66
+ </div>
67
+ <div class="pane" data-pane="history">
68
+ <div class="pane-head"><span data-icon="chevron-right" class="twist"></span><span class="pane-name" data-i18n="ide.history"></span></div>
69
+ <div class="pane-body"><p class="muted small pad" data-i18n="ide.history.hint"></p><ul id="history" class="list"></ul></div>
70
+ </div>
59
71
  </section>
60
72
  <section data-panel="search" hidden>
61
- <div class="panel-head" data-i18n="ide.search"></div>
62
- <input type="text" id="search-q" data-i18n-placeholder="ide.search.placeholder">
63
- <div class="row small"><label data-tip="tip.ide.search.case"><input type="checkbox" id="search-case"> Aa</label><label data-tip="tip.ide.search.regex"><input type="checkbox" id="search-regex"> .*</label></div>
64
- <div id="search-info" class="muted small"></div>
73
+ <div class="view-title"><span data-i18n="ide.search"></span></div>
74
+ <div class="pad">
75
+ <div class="field"><input type="text" id="search-q" data-i18n-placeholder="ide.search.placeholder"><label class="opt" data-tip="tip.ide.search.case"><input type="checkbox" id="search-case"><span>Aa</span></label><label class="opt" data-tip="tip.ide.search.regex"><input type="checkbox" id="search-regex"><span>.*</span></label></div>
76
+ <div id="search-info" class="muted small"></div>
77
+ </div>
65
78
  <ul id="search-results" class="list"></ul>
66
79
  </section>
67
80
  <section data-panel="git" hidden>
68
- <div class="panel-head"><span data-i18n="ide.git"></span><span class="grow"></span><button class="icon" id="git-refresh" data-tip="tip.ide.refresh">⟳</button></div>
69
- <div id="git-branch" class="muted small"></div>
70
- <textarea id="git-message" rows="2" data-i18n-placeholder="ide.git.message"></textarea>
71
- <div class="row"><button id="git-commit" data-i18n="ide.git.commit" data-tip="tip.ide.git.commit"></button><button class="ghost" id="git-push" data-i18n="ide.git.push" data-tip="tip.ide.git.push"></button></div>
72
- <div class="panel-sub" data-i18n="ide.git.staged"></div>
81
+ <div class="view-title"><span data-i18n="ide.git"></span><span class="grow"></span><button class="ib" id="git-refresh" data-tip="tip.ide.refresh" data-icon="refresh"></button></div>
82
+ <div class="pad">
83
+ <div id="git-branch" class="muted small"></div>
84
+ <textarea id="git-message" rows="2" data-i18n-placeholder="ide.git.message"></textarea>
85
+ <div class="row"><button class="primary grow" id="git-commit" data-i18n="ide.git.commit" data-tip="tip.ide.git.commit"></button><button class="ghost" id="git-push" data-i18n="ide.git.push" data-tip="tip.ide.git.push"></button></div>
86
+ </div>
87
+ <div class="sub-head" data-i18n="ide.git.staged"></div>
73
88
  <ul id="git-staged" class="list"></ul>
74
- <div class="panel-sub" data-i18n="ide.git.changes"></div>
89
+ <div class="sub-head" data-i18n="ide.git.changes"></div>
75
90
  <ul id="git-changes" class="list"></ul>
76
- <div id="git-msg" class="muted small"></div>
91
+ <div id="git-msg" class="muted small pad"></div>
77
92
  </section>
78
93
  <section data-panel="outline" hidden>
79
- <div class="panel-head" data-i18n="ide.outline"></div>
80
- <ul id="outline" class="list"></ul>
94
+ <div class="view-title"><span data-i18n="ide.outline"></span></div>
95
+ <ul id="outline-view" class="list"></ul>
81
96
  </section>
82
97
  <section data-panel="history" hidden>
83
- <div class="panel-head" data-i18n="ide.history"></div>
84
- <p class="muted small" data-i18n="ide.history.hint"></p>
85
- <ul id="history" class="list"></ul>
98
+ <div class="view-title"><span data-i18n="ide.history"></span></div>
99
+ <ul id="history-view" class="list"></ul>
86
100
  </section>
87
101
  </aside>
88
- <div class="split v" data-split="side" data-tip="tip.ide.resize"></div>
89
- <main id="center">
90
- <div id="tabs" role="tablist"></div>
102
+ <div class="sash" data-split="side" data-tip="tip.ide.resize"></div>
103
+ <main id="editor-area">
104
+ <div id="tabs-row"><div id="tabs" role="tablist"></div><div class="tabs-acts"><button class="ib" id="split-editor" data-tip="tip.ide.split" data-icon="split"></button><button class="ib" id="editor-more" data-tip="tip.ide.more" data-icon="more"></button></div></div>
105
+ <div id="crumbs" class="muted"></div>
91
106
  <div id="review" hidden>
92
107
  <span id="review-title"></span><span class="grow"></span>
93
108
  <span id="review-hunks"></span>
94
- <button id="review-accept" data-tip="tip.ide.review.accept"></button>
109
+ <button class="primary" id="review-accept" data-tip="tip.ide.review.accept"></button>
95
110
  <button class="ghost" id="review-reject" data-tip="tip.ide.review.reject"></button>
96
111
  <button class="ghost" id="review-close" data-i18n="ide.close" data-tip="tip.ide.close"></button>
97
112
  </div>
98
- <div id="editor-wrap"><div id="editor" dir="ltr"></div><div id="diff" dir="ltr" hidden></div>
99
- <div id="welcome"><h2 data-i18n="ide.welcome"></h2><p class="muted" data-i18n="ide.welcome.text"></p><ul id="keys" class="muted small"></ul></div>
113
+ <div id="editor-wrap">
114
+ <div id="editor" dir="ltr"></div>
115
+ <div id="editor2" dir="ltr" hidden></div>
116
+ <div id="diff" dir="ltr" hidden></div>
117
+ <div id="welcome"><div class="welcome-box"><div class="logo" data-icon="logo"></div><h2 data-i18n="ide.welcome"></h2><p class="muted" data-i18n="ide.welcome.text"></p><table id="keys" class="keys"></table></div></div>
118
+ </div>
119
+ </main>
120
+ <div class="sash" data-split="panel" data-tip="tip.ide.resize"></div>
121
+ <section id="panel">
122
+ <div class="panel-head">
123
+ <div class="ptabs"><button data-bottom="problems" class="on" data-tip="tip.ide.problems"><span data-icon="problems" class="pic"></span><span data-i18n="ide.problems"></span><span id="problems-count" class="count" hidden></span></button><button data-bottom="output" data-tip="tip.ide.output"><span data-icon="output" class="pic"></span><span data-i18n="ide.output"></span></button><button data-bottom="terminal" data-tip="tip.ide.terminal"><span data-icon="terminal" class="pic"></span><span data-i18n="pj.tab.terminal"></span></button><button data-bottom="ports" data-tip="tip.ide.ports" hidden><span data-icon="ports" class="pic"></span><span data-i18n="ide.ports"></span><span id="ports-count" class="count" hidden></span></button><button class="ib" id="panel-more" data-tip="tip.ide.panel.more" data-icon="more"></button></div>
124
+ <span class="grow"></span>
125
+ <div class="pacts"><button class="ib" id="problems-run" data-tip="tip.ide.problems.run" data-icon="play"></button><button class="ib" id="panel-max" data-tip="tip.ide.panel.max" data-icon="maximize"></button><button class="ib" id="bottom-close" data-tip="tip.ide.close" data-icon="close"></button></div>
100
126
  </div>
101
- <div class="split h" data-split="bottom" data-tip="tip.ide.resize"></div>
102
- <section id="bottom">
103
- <div class="bottom-tabs"><button data-bottom="problems" class="on" data-i18n="ide.problems" data-tip="tip.ide.problems"></button><button data-bottom="output" data-i18n="ide.output" data-tip="tip.ide.output"></button><button data-bottom="terminal" data-i18n="pj.tab.terminal" data-tip="tip.ide.terminal"></button>
104
- <span class="grow"></span><button class="ghost small" id="problems-run" data-i18n="ide.problems.run" data-tip="tip.ide.problems.run"></button><button class="icon" id="bottom-close" data-tip="tip.ide.close">×</button></div>
127
+ <div class="panel-body">
105
128
  <div data-bpanel="problems"><ul id="problems" class="list"></ul></div>
106
129
  <div data-bpanel="output" hidden><pre id="output"></pre></div>
107
130
  <div data-bpanel="terminal" hidden><div id="terminal-host"></div></div>
108
- </section>
109
- </main>
110
- <div class="split v" data-split="agent" data-tip="tip.ide.resize"></div>
131
+ <div data-bpanel="ports" hidden><table id="ports" class="grid"><thead><tr><th data-i18n="ide.ports.port"></th><th data-i18n="ide.ports.address"></th><th data-i18n="ide.ports.process"></th><th></th></tr></thead><tbody></tbody></table><p id="ports-empty" class="muted small pad" data-i18n="ide.ports.none"></p></div>
132
+ </div>
133
+ </section>
134
+ <div class="sash" data-split="agent" data-tip="tip.ide.resize"></div>
111
135
  <aside id="agent">
112
- <div class="panel-head"><button class="ghost" id="agents-toggle" data-tip="tip.ide.agents"></button><span class="grow"></span><button id="agent-new" data-i18n="ide.agent.new" data-tip="tip.ide.agent.new"></button></div>
113
- <div id="agents" hidden><input type="text" id="agents-q" data-i18n-placeholder="ide.agents.search"><ul id="agents-list" class="list"></ul></div>
136
+ <div class="agent-top">
137
+ <div class="field"><span data-icon="search"></span><input type="text" id="agents-q" data-i18n-placeholder="ide.agents.search"></div>
138
+ <button class="ghost wide" id="agent-new" data-tip="tip.ide.agent.new"><span data-icon="plus"></span><span data-i18n="ide.agent.new"></span></button>
139
+ <ul id="agents-list" class="list agents"></ul>
140
+ </div>
141
+ <div class="agent-title"><span id="agents-toggle" class="muted small"></span></div>
114
142
  <div id="agent-log"></div>
115
143
  <div id="agent-pending" hidden></div>
116
144
  <div id="agent-limit" hidden><strong data-i18n="ide.limit.title"></strong><p id="agent-limit-text" class="small"></p>
117
- <div class="row"><button id="limit-go" data-i18n="ide.limit.go" data-tip="tip.pj.continue"></button><button class="ghost" id="limit-stop" data-i18n="ide.limit.stop" data-tip="tip.pj.stop"></button><button class="ghost" id="limit-edit" data-i18n="ide.limit.edit" data-tip="tip.pj.limits"></button></div></div>
145
+ <div class="row"><button class="primary" id="limit-go" data-i18n="ide.limit.go" data-tip="tip.pj.continue"></button><button class="ghost" id="limit-stop" data-i18n="ide.limit.stop" data-tip="tip.pj.stop"></button><button class="ghost" id="limit-edit" data-i18n="ide.limit.edit" data-tip="tip.pj.limits"></button></div></div>
118
146
  <div id="agent-changes" class="small"></div>
119
147
  <div id="agent-status" class="muted small"></div>
120
148
  <div id="composer">
121
- <textarea id="prompt" rows="3" data-i18n-placeholder="ide.prompt.placeholder"></textarea>
122
149
  <ul id="mention" class="list popup" hidden></ul>
123
- <div class="row"><span id="mode-hint" class="muted small grow"></span>
124
- <button class="ghost" id="agent-undo" data-i18n="pj.undo" data-tip="tip.pj.undo" hidden></button>
125
- <button class="danger" id="agent-stop" data-i18n="pj.stop" data-tip="tip.pj.stop" hidden></button>
126
- <button id="agent-send" data-i18n="pj.send" data-tip="tip.pj.send"></button></div>
150
+ <textarea id="prompt" rows="3" data-i18n-placeholder="ide.prompt.placeholder"></textarea>
151
+ <div class="composer-bar">
152
+ <select id="model" data-tip="tip.pj.model"></select>
153
+ <select id="mode" data-tip="tip.ide.mode"><option value="ask" data-i18n="pj.mode.ask"></option><option value="edits" data-i18n="pj.mode.edits"></option><option value="auto" data-i18n="pj.mode.auto"></option></select>
154
+ <span class="grow"></span>
155
+ <button class="ib" id="agent-undo" data-tip="tip.pj.undo" data-icon="undo" hidden></button>
156
+ <button class="ib danger" id="agent-stop" data-tip="tip.pj.stop" data-icon="stop" hidden></button>
157
+ <button class="send" id="agent-send" data-tip="tip.pj.send" data-icon="send"></button>
158
+ </div>
159
+ <div id="mode-hint" class="muted small"></div>
127
160
  </div>
128
161
  </aside>
129
162
  </div>
163
+ <footer id="statusbar">
164
+ <button class="sb" id="sb-branch" data-tip="tip.ide.git" hidden><span data-icon="git"></span><span></span></button>
165
+ <button class="sb" id="sb-problems" data-tip="tip.ide.problems"><span data-icon="error"></span><span id="sb-errors">0</span><span data-icon="warning"></span><span id="sb-warnings">0</span></button>
166
+ <span class="grow"></span>
167
+ <span class="sb" id="sb-pos" hidden></span>
168
+ <span class="sb" id="sb-lang" hidden></span>
169
+ <span class="sb" id="sb-enc" hidden>UTF-8</span>
170
+ <button class="sb" id="sb-model" data-tip="tip.pj.model"></button>
171
+ <button class="sb" id="sb-mode" data-tip="tip.ide.mode"></button>
172
+ </footer>
130
173
  </div>
174
+ <div id="menu" class="menu" hidden></div>
131
175
  <div id="modal" hidden><div class="box"><h3 id="modal-title"></h3><div id="modal-body"></div><div class="row end" id="modal-buttons"></div></div></div>
132
176
  <div id="tip" role="tooltip" hidden></div>
133
177
  </body>