OSDN Git Service

(no commit message)
[fswiki/sandbox.git] / takezoe / plugin / presentation / PresentationHandler.pm
1 package plugin::presentation::PresentationHandler;\r
2 ################################################################################\r
3 #\r
4 # JavaScript¤ò»È¤Ã¤Æ¥×¥ì¥¼¥ó¥Æ¡¼¥·¥ç¥ó¤ò¹Ô¤¤¤Þ¤¹¡£\r
5 #\r
6 ################################################################################\r
7 use strict;\r
8 \r
9 sub new {\r
10     my $class = shift;\r
11     my $self = {};\r
12     return bless $self,$class;\r
13 }\r
14 \r
15 sub do_action {\r
16         my $self = shift;\r
17         my $wiki = shift;\r
18         my $cgi = $wiki->get_CGI;\r
19         my $pagename = $cgi->param("page");\r
20         \r
21         $wiki->set_title("¥×¥ì¥¼¥ó¥Æ¡¼¥·¥ç¥ó: $pagename");\r
22         \r
23         my @lines = split(/\n/, $wiki->get_page($pagename));\r
24         my @pages = ();\r
25         my $title = '';\r
26         my $content = '';\r
27         \r
28         foreach my $line (@lines){\r
29                 if(index($line, '!!!')==0){\r
30                         if($title ne ''){\r
31                                 push(@pages, {title=>$title, content=>$wiki->process_wiki($content)});\r
32                         }\r
33                         $title = $wiki->process_wiki($line);\r
34                         $content = '';\r
35                 } else {\r
36                         $content .= $line . "\n";\r
37                 }\r
38         }\r
39         if($title ne ''){\r
40                 push(@pages, {title=>$title, content=>$wiki->process_wiki($content)});\r
41         }\r
42         \r
43         print "Content-Type: text/html;charset=EUC-JP\n";\r
44         print "Pragma: no-cache\n";\r
45         print "Cache-Control: no-cache\n\n";\r
46         print <<EOD;\r
47 <html>\r
48 <head>\r
49         <title>¥×¥ì¥¼¥ó¥Æ¡¼¥·¥ç¥ó¡§ @{[Util::escapeHTML($pagename)]}</title>\r
50 </head>\r
51 <body>\r
52 <style type="text/css">\r
53 @{[stylesheet()]}\r
54 </style>\r
55 <script language="JavaScript">\r
56 var presen_page = 0;\r
57 var presen_data = new Array($#pages);\r
58 EOD\r
59         my $count = 0;\r
60         foreach my $page (@pages){\r
61                 print <<EOD;\r
62 var data = new Object();\r
63 data.title   = '@{[&escapeJavaScript($page->{title})]}';\r
64 data.content = '@{[escapeJavaScript($page->{content})]}';\r
65 presen_data[$count] = data;\r
66 EOD\r
67                 $count++;\r
68         }\r
69         \r
70         print <<EOD;\r
71 function showNextPage(){\r
72         var div = document.getElementById('presentation');\r
73         if(presen_page == presen_data.length){\r
74                 div.innerHTML = "¥¹¥é¥¤¥É¥·¥ç¡¼¤Ï½ªÎ»¤·¤Þ¤·¤¿¡£";\r
75                 presen_page++;\r
76         } else {\r
77                 div.innerHTML = presen_data[presen_page].title + \r
78                                 presen_data[presen_page].content;\r
79                 presen_page++;\r
80         }\r
81         div.focus(false);\r
82 }\r
83 \r
84 function backToFirst(){\r
85         presen_page = 0;\r
86         showNextPage();\r
87 }\r
88 \r
89 function showPrevPage(){\r
90         if(presen_page > 1){\r
91                 presen_page--;\r
92                 presen_page--;\r
93                 showNextPage();\r
94         }\r
95 }\r
96 \r
97 function exitPresentation(){\r
98         location.href='@{[$wiki->config('script_name').'?page='.Util::escapeHTML($pagename)]}'\r
99 }\r
100 </script>\r
101 <div class="presen_menu">\r
102   <a href="javascript:backToFirst();">ºÇ½é</a>\r
103   <a href="javascript:showPrevPage();">Á°¤Ø</a>\r
104   <a href="javascript:showNextPage();">¼¡¤Ø</a>\r
105   <a href="javascript:exitPresentation();">½ªÎ»</a>\r
106 </div>\r
107 <div id="presentation" onMouseUp ="javascript:showNextPage();">\r
108 ¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥¹¥é¥¤¥É¥·¥ç¡¼¤ò³«»Ï¤·¤Þ¤¹¡£\r
109 </div>\r
110 </body>\r
111 </html>\r
112 EOD\r
113         \r
114         exit;\r
115 }\r
116 \r
117 #===============================================================================\r
118 # ¥×¥ì¥¼¥ó¥â¡¼¥É¤ÎCSS¤òÊֵѤ·¤Þ¤¹¡£\r
119 #===============================================================================\r
120 sub stylesheet {\r
121         return <<END_OF_CSS;\r
122 div#presentation {\r
123         font-size: 300%;\r
124         height: 80%;\r
125 }\r
126 \r
127 div.presen_menu {\r
128         text-align: right;\r
129         margin: 0px;\r
130         font-size: 10px;\r
131 }\r
132 END_OF_CSS\r
133 }\r
134 \r
135 #===============================================================================\r
136 # JavaScript¤Îʸ»úÎó¤Ë¥¨¥¹¥±¡¼¥×¤·¤Þ¤¹¡£\r
137 #===============================================================================\r
138 sub escapeJavaScript {\r
139         my $value = shift;\r
140         $value =~ s/\n/\\n/g;\r
141         $value =~ s/'/\\'/g;\r
142         return $value;\r
143 }\r
144 \r
145 #===============================================================================\r
146 # ¥á¥Ë¥å¡¼¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£\r
147 #===============================================================================\r
148 sub hook {\r
149         my $self = shift;\r
150         my $wiki = shift;\r
151         my $pagename = $wiki->get_CGI()->param("page");\r
152         \r
153         $wiki->add_menu("¥×¥ì¥¼¥ó¥Æ¡¼¥·¥ç¥ó",$wiki->config('script_name').\r
154                         "?action=PRESEN&amp;page=".&Util::url_encode($pagename));\r
155 }\r
156 \r
157 1;\r