@@ -14,16 +14,11 @@
14 14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !e || !e.length ) throw new Error("Missing elements: "+s);
15 15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return e;
16 16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
17 17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const eIframe = E('#iframe');
18 18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const eSelect = E('#selectPage');
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eSelect.addEventListener('change',function(ev){
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const so = ev.target.options[ev.target.selectedIndex];
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( so ){
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eIframe.setAttribute('src', so.value || so.innerText);
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- });
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const eCurrentUrl = E('#currentUrl');
25 20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26 21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
27 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Prepend the fossil instance's URL to each link. We have to guess
28 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
which part of the URL is the fossil CGI/server instance. The
29 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
following works when run (A) from under /uv or /ext and (B) from
@@ -30,11 +25,12 @@
30 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/doc/branchname/test/link-tester.html.
31 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
32 27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
let urlTop;
33 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
let loc = (''+window.location);
34 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
let aLoc = loc.split('/')
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aLoc.pop(); /* this file name */
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aLoc.pop(); /* file name */
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const thisDir = aLoc.join('/');
36 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const rxDoc = /.*\/doc\/[^/]+\/.*/;
37 33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
//console.log(rxDoc, loc, aLoc);
38 34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( loc.match(rxDoc) ){
39 35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* We're hopefully now at the top-most fossil-served
40 36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
URL. */
@@ -49,21 +45,50 @@
49 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
o.value = urlTop + (o.value || o.innerText);
50 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
52 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const eBtnPrev = E('#btn-prev');
53 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const eBtnNext = E('#btn-next');
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const updateUrl = function(opt){
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( opt ){
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ let url = (opt.value || opt.innerText);
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eCurrentUrl.innerText = url.replace(urlTop,'');
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eCurrentUrl.setAttribute('href', url);
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eCurrentUrl.innerText = '';
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eSelect.addEventListener('change',function(ev){
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const so = ev.target.options[ev.target.selectedIndex];
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( so ){
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eIframe.setAttribute('src', so.value || so.innerText);
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ updateUrl(so);
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const selectEntry = function(ndx){
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ndx>=0 ){
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eSelect.selectedIndex = ndx;
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eSelect.dispatchEvent(new Event('change',{target:eSelect}));
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
54 75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
55 76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const cycleLink = function(dir){
56 77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
let n = eSelect.selectedIndex + dir;
57 78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n < 0 ) n = eSelect.options.length-1;
58 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else if( n>=eSelect.options.length ){
59 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = 0;
60 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n>=0 ){
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const opt = eSelect.options[n];
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( opt && opt.disabled ){
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If that OPTION element is disabled, skip over it. */
62 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eSelect.selectedIndex = n;
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cycleLink(dir);
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ selectEntry(n);
63 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eSelect.dispatchEvent(new Event('change',{target:eSelect}));
65 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
66 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
67 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eBtnPrev.addEventListener('click', ()=>cycleLink(-1), false);
68 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eBtnNext.addEventListener('click', ()=>cycleLink(1), false);
69 94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -127,11 +152,11 @@
127 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
let ht;
128 153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
let extra = 0;
129 154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eToAvoid.forEach((e)=>e ? extra += effectiveHeight(e) : false);
130 155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ht = wh - extra;
131 156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ht < 100 ) ht = 100;
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eConstrained.style.top = 'calc('+extra+'px + 0.25em)';
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eConstrained.style.top = 'calc('+extra+'px + 1.5em)';
133 158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eConstrained.style.height =
134 159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eConstrained.style.maxHeight = [
135 160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"calc(", ht, "px",
136 161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" - 0.65em"/*fudge value*/,")"
137 162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* ^^^^ hypothetically not needed, but both Chrome/FF on
@@ -148,7 +173,52 @@
148 173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
149 174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150 175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
delete ForceResizeKludge.$disabled;
151 176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ForceResizeKludge();
152 177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eSelect.dispatchEvent(new Event('change',{target:eSelect}));
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ selectEntry(0);
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /**
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Read link-tester.json, which should live in the same directory
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ as this file. It's expected to be an array with entries
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ in one of the following forms:
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - "string" = Separator label (disabled)
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - ["/path"] = path with itself as a label
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - ["label", "/path"] = path with the given label
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ All paths are expected to have a "/" prefix and this script
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ accounts for mapping that to the fossil part of this script's
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ URL.
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ window.fetch(thisDir+'/link-tester.json').then((r)=>r.json()).then(j=>{
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ //console.log("fetched",j);
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eSelect.innerHTML = '';
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const opt = function(arg){
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const o = document.createElement('option');
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ //console.warn(arguments);
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ let rc = true;
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 'string' === typeof arg ){
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Grouping separator */
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ o.innerText = "--- " + arg + " ---";
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ o.setAttribute('disabled','');
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = false;
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( 1===arg.length ){
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ o.innerText = arg[0];
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ o.value = urlTop + arg[0];
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( 2==arg.length ){
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ o.innerText = arg[0];
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ o.value = urlTop + arg[1];
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eSelect.appendChild(o);
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ let ndx = -1/*index of first non-disabled entry*/, i = 0;
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(const e of j){
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( opt(e) && ndx<0 ){
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ndx = i;
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ++i;
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ selectEntry(ndx);
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
154 224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
155 225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
156 226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A DDED test/link-tester.json