@@ -1,10 +1,30 @@
1 1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(function(F/*the fossil object*/){
2 2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"use strict";
3 3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**
4 4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Code for the /filepage app. Requires that the fossil JS
5 5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bootstrapping is complete and fossil.fetch() has been installed.
6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Custom events, handled via fossil.page.addEventListener():
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - 'fileedit-file-loaded': passes on information when it loads a
10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ file, in the form of an object:
11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ filename: string,
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ checkin: UUID string,
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isExe: bool,
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mimetype: mimetype stringas determined by the fossil server.
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ The fossil.page.value() method gets or sets the current file
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ content for the page. Hypothetically, this can be overridden by
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ skin-level JS in order to use a custom 3rd-party editing widget
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ in place of the built-in textarea, but that is as yet untested.
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ In order to do so the client would need to replace DOM element
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #fileedit-content-editor with their custom widget.
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7 27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const E = (s)=>document.querySelector(s),
8 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D = F.dom,
9 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
P = F.page;
10 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -187,10 +207,11 @@
187 207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
selectPreviewMode: E('#select-preview-mode select'),
188 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
selectHtmlEmsWrap: E('#select-preview-html-ems'),
189 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
selectEolWrap: E('#select-preview-html-ems'),
190 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cbLineNumbersWrap: E('#cb-line-numbers'),
191 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cbAutoPreview: E('#cb-preview-autoupdate > input[type=checkbox]'),
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cbIsExe: E('input[type=checkbox][name=exec_bit]'),
192 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tabs:{
193 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
content: E('#fileedit-tab-content'),
194 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
preview: E('#fileedit-tab-preview'),
195 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff: E('#fileedit-tab-diff'),
196 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
commit: E('#fileedit-tab-commit')
@@ -299,20 +320,29 @@
299 320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
selectFontSize.dispatchEvent(
300 321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
// Force UI update
301 322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
new Event('change',{target:selectFontSize})
302 323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
303 324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(0){ // only for testing
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ P.addEventListener(
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 'fileedit-file-loaded',
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (e)=>console.debug('fileedit-file-loaded ==>',e)
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
304 333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}, false)/*onload event handler*/;
305 334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
306 335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**
307 336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Getter (if called with no args) or setter (if passed an arg) for
308 337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
the current file content. We use a function, rather than direct
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- access so that clients can hypothetically swap out this method
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- from their skin in order to facilitate plugging-in of fancy
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3rd-party editor widgets.
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ access, so that clients can hypothetically swap out this method
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from their skin in order to facilitate plugging-in of a fancy
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 3rd-party editor widget.
312 341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- The setter form returns this object.
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ The setter form returns this object, and re-implementations must
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do the same.
314 344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
315 345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
P.value = function(){
316 346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(0===arguments.length){
317 347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return this.e.taEditor.value;
318 348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -324,12 +354,12 @@
324 354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**
325 355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
If either of...
326 356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
327 357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- P.previewModes.current==='wiki'
328 358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- - P.previewModes.current==='guess' AND the currently-loaded
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- file has an extension of (md|wiki)
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - P.previewModes.current==='guess' AND the currently-loaded file
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ has a mimetype of "text/x-fossil-wiki" or "text/x-markdown".
331 361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
332 362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
... then this function updates the document's base.href to a
333 363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
repo-relative /doc/{{this.finfo.checkin}}/{{directory part of
334 364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.finfo.filename}}/
335 365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -336,16 +366,16 @@
336 366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
If neither of those conditions applies, this is a no-op.
337 367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
338 368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
P.baseHrefForFile = function f(){
339 369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const fn = this.finfo ? this.finfo.filename : undefined;
340 370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!fn) return this;
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(!f.rxWiki){
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- f.rxWiki = /\.(wiki|md)$/i;
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(!f.wikiMimeTypes){
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ f.wikiMimeTypes = ["text/x-fossil-wiki", "text/x-markdown"];
343 373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
344 374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if('wiki'===P.previewModes.current
345 375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| ('guess'===P.previewModes.current
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && f.rxWiki.test(fn))){
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && f.wikiMimeTypes.indexOf(this.finfo.mimetype)>=0)){
347 377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const a = fn.split('/');
348 378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a.pop();
349 379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.base.tag.href = F.repoUrl(
350 380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
'doc/'+F.hashDigits(this.finfo.checkin)
351 381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+'/'+(a.length ? a.join('/')+'/' : '')
@@ -436,13 +466,17 @@
436 466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return !!P.finfo;
437 467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
438 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
439 469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**
440 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
loadFile() loads (file,checkinVersion) and updates the relevant
441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UI elements to reflect the loaded state.
471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UI elements to reflect the loaded state. If passed no arguments
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ then it re-uses the values from the currently-loaded file
473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (becoming a no-op if no file is loaded).
442 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Returns this object, noting that the load is async.
475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Returns this object, noting that the load is async. After loading
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ it triggers a 'fileedit-file-loaded' event, passing it
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.finfo.
444 478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
445 479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
P.loadFile = function(file,rev){
446 480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(0===arguments.length){
447 481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!affirmHasFile()) return this;
448 482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file = this.finfo.filename;
@@ -455,15 +489,20 @@
455 489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
urlParams: {
456 490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ajax: 'content',
457 491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
filename:file,
458 492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
checkin:rev
459 493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- onload:(r)=>{
494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ responseHeaders: ['x-fileedit-file-perm', 'content-type'],
495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ onload:(r,headers)=>{
461 496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
F.message('Loaded content.');
462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- self.value(r);
463 497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
self.updateVersion(file,rev);
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.finfo.isExe = ('x'===headers['x-fileedit-file-perm']);
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.finfo.mimetype = headers['content-type'].split(';').shift();
464 500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
self.tabs.switchToTab(self.e.tabs.content);
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.e.cbIsExe.checked = self.finfo.isExe;
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.value(r);
503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.dispatchEvent('fileedit-file-loaded', self.finfo);
465 504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
466 505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
467 506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return this;
468 507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
469 508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -524,14 +563,13 @@
524 563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
525 564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
526 565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return this;
527 566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
528 567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
530 568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**
531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fetches the content diff based on the contents and settings of this
532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- page's input fields, and updates the UI with the diff view.
569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fetches the content diff based on the contents and settings of
570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this page's input fields, and updates the UI with the diff view.
533 571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
534 572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Returns this object, noting that the operation is async.
535 573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
536 574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
P.diff = function f(sbs){
537 575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!affirmHasFile()) return this;
@@ -644,8 +682,7 @@
644 682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
responseType: 'json',
645 683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
onload: f.updateView
646 684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
647 685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return this;
648 686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
650 687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
651 688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
})(window.fossil);
652 689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!