/[suikacvs]/www/test/uri/javascript/test.cgi
Suika

Contents of /www/test/uri/javascript/test.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Fri Jun 27 12:14:58 2008 UTC (17 years ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
New test data

1 #!/usr/bin/perl
2 use strict;
3
4 my $file_name = 'javascript-uris.txt';
5
6 my @item;
7 {
8 open my $file, '<', $file_name;
9 local $/ = undef;
10 @item = split /\n\n#/, <$file>;
11 }
12
13 sub htescape ($) {
14 my $s = shift;
15 $s =~ s/&/&amp;/g;
16 $s =~ s/</&lt;/g;
17 $s =~ s/"/&quot;/g;
18 return $s;
19 } # htescape
20
21 sub get_id ($) {
22 my $s = shift;
23 $s =~ s/([^0-9A-Za-z-])/sprintf '_%08X', ord $1/ge;
24 return $s;
25 } # get_id
26
27 print q[Content-Type: text/html; charset=utf-8
28
29 <!DOCTYPE HTML>
30 <html lang=en>
31 <title>javascript: URIs</title>
32 <style>
33 .note {
34
35 }
36 .item {
37 margin: 1em;
38 padding: 0.2em 0.7em;
39 background-color: #F0F8FC;
40 color: black;
41 }
42 [irrelevant] {
43 display: none;
44 }
45 </style>
46 <script>
47 window.onload = function () {
48 var tags = {};
49 var anchors = document.getElementsByTagName ('a');
50 var anchorsL = anchors.length;
51 for (var i = 0; i < anchorsL; i++) {
52 var anchor = anchors[i];
53 if (!anchor.hasAttribute ('href')) {
54 var tagName = anchor.textContent;
55 anchor.setAttribute ('href', '#tag=' + encodeURIComponent (tagName));
56 anchor.onclick = function () {
57 showTag (this.textContent);
58 };
59 tags[tagName] = true;
60 }
61 }
62
63 var uri = location.href;
64 if (uri.match (/#/)) {
65 var hash = uri.substring (uri.indexOf ('#'));
66 if (hash.match (/^#tag=/)) {
67 showTag (decodeURIComponent (hash.substring (5)));
68 }
69 }
70
71 var tagsEl = document.getElementById ('tags');
72 var tagList = [];
73 for (var v in tags) {
74 tagList.push (v);
75 }
76 tagList = tagList.sort ();
77 for (var i = 0; i < tagList.length; i++) {
78 tagsEl.appendChild (document.createTextNode (', '));
79 var a = tagsEl.appendChild (document.createElement ('a'));
80 a.href = '#tag=' + encodeURIComponent (tagList[i]);
81 a.textContent = tagList[i];
82 a.onclick = function () {
83 showTag (this.textContent);
84 };
85 }
86 }; // window.onload
87
88 function showTag (tag) {
89 var items = document.getElementsByTagName ('div');
90 var itemsL = items.length;
91 I: for (var i = 0; i < itemsL; i++) {
92 var item = items[i];
93 if (tag == '') {
94 item.removeAttribute ('irrelevant');
95 } else {
96 var itemAs = item.getElementsByTagName ('a');
97 var itemAsL = itemAs.length;
98 for (var j = 0; j < itemAsL; j++) {
99 if (itemAs[j].textContent == tag) {
100 item.removeAttribute ('irrelevant');
101 continue I;
102 }
103 }
104 item.setAttribute ('irrelevant', '');
105 }
106 }
107 }
108 </script><p id=tags>Tags: <a href="#" onclick="showTag ('')">All</a></p>];
109
110 for (@item) {
111 s/^#//;
112 my %prop;
113 for (split /\n#/, $_) {
114 if (s/^([0-9A-Za-z-]+)(?>\n|\z)//s) {
115 $prop{$1} = $_;
116 } elsif (s/^([0-9A-Za-z-]+)\s+escaped(?>\n|\z)//s) {
117 my $t = $1;
118 s/&#x([0-9A-Fa-f]+);/chr hex $1/ge;
119 $prop{$t} = $_;
120 }
121 }
122
123 my $id = htescape (get_id ($prop{data}));
124 my $euri = htescape ($prop{data});
125 print qq[<div class=item id=$id><p>URI: &lt;<a href="$euri">$euri</a>&gt;];
126 for (qw/note conforming non-conforming source/) {
127 next unless defined $prop{$_};
128 print qq[<p>];
129 print qq[<strong>Conforming <code>javascript:</code> URI</strong>: ] if $_ eq 'conforming';
130 print qq[<strong>Non-conforming <code>javascript:</code> URI</strong>: ] if $_ eq 'non-conforming';
131 print qq[Source: ] if $_ eq 'source';
132 my $v = htescape ($prop{$_});
133 $v =~ s[&lt;([^>]+)>][&lt;<a href="$1">$1</a>&gt;]g;
134 print qq[<span class=note>] . $v . qq[</span>];
135 }
136
137 if (defined $prop{tags}) {
138 my @tag = sort {$a cmp $b} split /\n/, $prop{tags};
139 print q[<p class=tags>Tags: ];
140 print join ', ', map {'<a>' . htescape ($_) . '</a>'} @tag;
141 }
142 print qq[</div>];
143 }

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24