/[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 - (hide annotations) (download)
Fri Jun 27 12:14:58 2008 UTC (16 years, 9 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
New test data

1 wakaba 1.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