Artifact
e2914854f4ab538cb8a46b07017e8dbe21a39c2a :
File
features/file_link.th1
— part of check-in
[0499e95f66]
at
2021-10-14 11:14:32
on branch trunk
— Generate link meta for file pages (complements fx_meta),
could still be shortened; maybe should include info/CHKIN pages too
(user:
mario
size: 1721)
0000: 23 20 6f 75 74 70 75 74 20 3c 6c 69 6e 6b 3e 20 # output <link>
0010: 66 6f 72 20 22 66 69 6c 65 22 20 70 61 67 65 73 for "file" pages
0020: 0a 70 72 6f 63 20 66 69 6c 65 5f 6c 69 6e 6b 20 .proc file_link
0030: 7b 7d 20 7b 0a 20 20 20 20 75 70 76 61 72 20 31 {} {. upvar 1
0040: 20 63 75 72 72 65 6e 74 5f 70 61 67 65 20 63 75 current_page cu
0050: 72 72 65 6e 74 5f 70 61 67 65 0a 20 20 20 20 73 rrent_page. s
0060: 65 74 20 6e 61 6d 65 20 5b 67 65 74 50 61 72 61 et name [getPara
0070: 6d 65 74 65 72 20 6e 61 6d 65 5d 0a 20 20 20 20 meter name].
0080: 73 65 74 20 63 69 20 5b 67 65 74 50 61 72 61 6d set ci [getParam
0090: 65 74 65 72 20 63 69 5d 25 0a 20 20 20 20 73 65 eter ci]%. se
00a0: 74 20 74 6f 70 20 5b 67 6c 6f 62 61 6c 53 74 61 t top [globalSta
00b0: 74 65 20 74 6f 70 5d 0a 20 20 20 20 73 65 74 20 te top]. set
00c0: 73 71 6c 5f 62 79 6e 61 6d 65 20 20 7b 0a 20 20 sql_byname {.
00d0: 20 20 20 20 20 53 45 4c 45 43 54 20 75 75 69 64 SELECT uuid
00e0: 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 62 6c FROM bl
00f0: 6f 62 20 4c 45 46 54 20 4a 4f 49 4e 20 6d 6c 69 ob LEFT JOIN mli
0100: 6e 6b 20 4f 4e 20 62 6c 6f 62 2e 72 69 64 3d 6d nk ON blob.rid=m
0110: 6c 69 6e 6b 2e 66 69 64 20 20 20 20 20 20 20 20 link.fid
0120: 20 4c 45 46 54 20 4a 4f 49 4e 20 66 69 6c 65 6e LEFT JOIN filen
0130: 61 6d 65 20 4f 4e 20 6d 6c 69 6e 6b 2e 66 6e 69 ame ON mlink.fni
0140: 64 3d 66 69 6c 65 6e 61 6d 65 2e 66 6e 69 64 0a d=filename.fnid.
0150: 20 20 20 20 20 20 20 20 57 48 45 52 45 20 6e 61 WHERE na
0160: 6d 65 20 3d 20 24 6e 61 6d 65 20 20 20 20 20 20 me = $name
0170: 20 20 4f 52 44 45 52 20 42 59 20 72 69 64 20 44 ORDER BY rid D
0180: 45 53 43 20 4c 49 4d 49 54 20 31 0a 20 20 20 20 ESC LIMIT 1.
0190: 7d 0a 20 20 20 20 73 65 74 20 73 71 6c 5f 62 79 }. set sql_by
01a0: 6e 61 6d 65 63 69 20 7b 0a 20 20 20 20 20 20 20 nameci {.
01b0: 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d SELECT uuid FROM
01c0: 20 62 6c 6f 62 0a 20 20 20 20 20 20 20 20 57 48 blob. WH
01d0: 45 52 45 20 72 69 64 20 49 4e 20 28 0a 20 20 20 ERE rid IN (.
01e0: 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 SELEC
01f0: 54 20 66 69 64 0a 20 20 20 20 20 20 20 20 20 20 T fid.
0200: 20 20 20 20 20 20 46 52 4f 4d 20 62 6c 6f 62 20 FROM blob
0210: 4c 45 46 54 20 4a 4f 49 4e 20 6d 6c 69 6e 6b 20 LEFT JOIN mlink
0220: 4f 4e 20 6d 69 64 3d 62 6c 6f 62 2e 72 69 64 0a ON mid=blob.rid.
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0240: 4c 45 46 54 20 4a 4f 49 4e 20 66 69 6c 65 6e 61 LEFT JOIN filena
0250: 6d 65 20 6f 6e 20 6d 6c 69 6e 6b 2e 66 6e 69 64 me on mlink.fnid
0260: 3d 66 69 6c 65 6e 61 6d 65 2e 66 6e 69 64 0a 20 =filename.fnid.
0270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 WH
0280: 45 52 45 20 75 75 69 64 20 4c 49 4b 45 20 24 63 ERE uuid LIKE $c
0290: 69 20 41 4e 44 20 6e 61 6d 65 20 3d 20 24 6e 61 i AND name = $na
02a0: 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 me.
02b0: 20 20 4f 52 44 45 52 20 42 59 20 72 69 64 20 44 ORDER BY rid D
02c0: 45 53 43 0a 20 20 20 20 20 20 20 20 29 0a 20 20 ESC. ).
02d0: 20 20 7d 0a 20 20 20 20 68 74 6d 6c 20 22 3c 21 }. html "<!
02e0: 2d 2d 20 46 4c 28 24 63 75 72 72 65 6e 74 5f 70 -- FL($current_p
02f0: 61 67 65 2c 6e 61 6d 65 3d 24 6e 61 6d 65 2c 63 age,name=$name,c
0300: 69 3d 24 63 69 29 20 2d 2d 3e 5c 6e 22 0a 20 20 i=$ci) -->\n".
0310: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 20 22 if {[regexp "
0320: 5e 64 6f 63 2f 28 74 69 70 7c 74 72 75 6e 6b 29 ^doc/(tip|trunk)
0330: 2f 2e 2b 22 20 24 63 75 72 72 65 6e 74 5f 70 61 /.+" $current_pa
0340: 67 65 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 23 ge]} {. #
0350: 20 64 6f 63 2f 74 69 70 2f 66 69 6c 65 2e 74 78 doc/tip/file.tx
0360: 74 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 71 t. set sq
0370: 6c 20 24 73 71 6c 5f 62 79 6e 61 6d 65 0a 20 20 l $sql_byname.
0380: 20 20 7d 20 65 6c 73 65 69 66 20 7b 22 24 63 75 } elseif {"$cu
0390: 72 72 65 6e 74 5f 70 61 67 65 22 20 65 71 20 22 rrent_page" eq "
03a0: 66 69 6e 66 6f 22 7d 20 7b 0a 20 20 20 20 20 20 finfo"} {.
03b0: 20 20 69 66 20 7b 22 24 63 69 22 20 6e 65 20 22 if {"$ci" ne "
03c0: 25 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 %"} {.
03d0: 20 20 23 20 66 69 6e 66 6f 3f 6e 61 6d 65 3d 66 # finfo?name=f
03e0: 69 6c 65 2e 74 78 74 26 63 69 3d 31 32 33 34 66 ile.txt&ci=1234f
03f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set
0400: 20 73 71 6c 20 24 73 71 6c 5f 62 79 6e 61 6d 65 sql $sql_byname
0410: 63 69 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 ci. } els
0420: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 e {.
0430: 23 20 66 69 6e 66 6f 3f 6e 61 6d 65 3d 66 69 6c # finfo?name=fil
0440: 65 2e 74 78 74 0a 20 20 20 20 20 20 20 20 20 20 e.txt.
0450: 20 20 73 65 74 20 73 71 6c 20 22 24 73 71 6c 5f set sql "$sql_
0460: 62 79 6e 61 6d 65 22 0a 20 20 20 20 20 20 20 20 byname".
0470: 20 20 20 20 23 63 69 20 4c 49 4d 49 54 20 31 22 #ci LIMIT 1"
0480: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d . }. }
0490: 20 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70 elseif {[regexp
04a0: 20 20 22 5e 64 6f 63 2f 5c 5c 77 2b 2f 2e 2b 22 "^doc/\\w+/.+"
04b0: 20 24 63 75 72 72 65 6e 74 5f 70 61 67 65 5d 7d $current_page]}
04c0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 7b 22 {. if {"
04d0: 24 63 69 22 20 6e 65 20 22 25 22 7d 20 7b 0a 20 $ci" ne "%"} {.
04e0: 20 20 20 20 20 20 20 20 20 20 20 23 20 64 6f 63 # doc
04f0: 2f 31 32 33 34 66 2f 66 69 6c 65 2e 74 78 74 0a /1234f/file.txt.
0500: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
0510: 73 71 6c 20 24 73 71 6c 5f 62 79 6e 61 6d 65 63 sql $sql_bynamec
0520: 69 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 i. } else
0530: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {. #
0540: 20 2f 69 6e 66 6f 2f 31 32 33 34 66 20 20 23 20 /info/1234f #
0550: 73 68 6f 75 6c 64 20 61 73 73 65 72 74 20 74 68 should assert th
0560: 61 74 20 69 74 20 72 65 66 65 72 73 20 74 6f 20 at it refers to
0570: 61 20 66 69 6c 65 20 62 6c 6f 62 3f 0a 20 20 20 a file blob?.
0580: 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d set nam
0590: 65 20 22 24 6e 61 6d 65 25 22 0a 20 20 20 20 20 e "$name%".
05a0: 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b set sql {
05b0: 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d SELECT uuid FROM
05c0: 20 62 6c 6f 62 20 77 68 65 72 65 20 75 75 69 64 blob where uuid
05d0: 20 4c 49 4b 45 20 24 6e 61 6d 65 7d 0a 20 20 20 LIKE $name}.
05e0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 65 6c 73 }. } els
05f0: 65 20 7b 20 68 74 6d 6c 20 22 3c 21 2d 2d 6e 6f e { html "<!--no
0600: 6d 61 74 63 68 2d 2d 3e 22 20 7d 0a 20 20 20 20 match-->" }.
0610: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists
0620: 20 73 71 6c 5d 7d 20 7b 0a 20 20 20 20 20 20 20 sql]} {.
0630: 20 68 74 6d 6c 20 22 3c 21 2d 2d 20 3d 20 24 73 html "<!-- = $s
0640: 71 6c 20 2d 2d 3e 22 0a 20 20 20 20 20 20 20 20 ql -->".
0650: 71 75 65 72 79 20 24 73 71 6c 20 7b 0a 20 20 20 query $sql {.
0660: 20 20 20 20 20 20 20 20 20 68 74 6d 6c 20 22 3c html "<
0670: 6c 69 6e 6b 20 72 65 6c 3d 27 61 6c 74 65 72 6e link rel='altern
0680: 61 74 69 76 65 20 76 63 73 20 72 61 77 27 20 68 ative vcs raw' h
0690: 72 65 66 3d 27 24 74 6f 70 2f 72 61 77 2f 24 75 ref='$top/raw/$u
06a0: 75 69 64 27 3e 22 0a 20 20 20 20 20 20 20 20 7d uid'>". }
06b0: 0a 20 20 20 20 7d 0a 7d 0a . }.}.