OSDN Git Service

pettanR 0.4.x
authoritozyun <itozyun@git.sourceforge.jp>
Sun, 22 Jan 2012 09:51:41 +0000 (18:51 +0900)
committeritozyun <itozyun@git.sourceforge.jp>
Sun, 22 Jan 2012 09:51:41 +0000 (18:51 +0900)
176 files changed:
0.4.x/balloon/_w0.gif [new file with mode: 0644]
0.4.x/balloon/_w0_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w1.gif [new file with mode: 0644]
0.4.x/balloon/_w10.gif [new file with mode: 0644]
0.4.x/balloon/_w10_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w11.gif [new file with mode: 0644]
0.4.x/balloon/_w11_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w12.gif [new file with mode: 0644]
0.4.x/balloon/_w12_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w13.gif [new file with mode: 0644]
0.4.x/balloon/_w13_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w14.gif [new file with mode: 0644]
0.4.x/balloon/_w14_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w15.gif [new file with mode: 0644]
0.4.x/balloon/_w15_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w16.gif [new file with mode: 0644]
0.4.x/balloon/_w16_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w17.gif [new file with mode: 0644]
0.4.x/balloon/_w17_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w18.gif [new file with mode: 0644]
0.4.x/balloon/_w18_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w19.gif [new file with mode: 0644]
0.4.x/balloon/_w19_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w1_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w2.gif [new file with mode: 0644]
0.4.x/balloon/_w20.gif [new file with mode: 0644]
0.4.x/balloon/_w20_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w21.gif [new file with mode: 0644]
0.4.x/balloon/_w21_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w22.gif [new file with mode: 0644]
0.4.x/balloon/_w22_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w23.gif [new file with mode: 0644]
0.4.x/balloon/_w23_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w2_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w3.gif [new file with mode: 0644]
0.4.x/balloon/_w3_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w4.gif [new file with mode: 0644]
0.4.x/balloon/_w4_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w5.gif [new file with mode: 0644]
0.4.x/balloon/_w5_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w6.gif [new file with mode: 0644]
0.4.x/balloon/_w6_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w7.gif [new file with mode: 0644]
0.4.x/balloon/_w7_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w8.gif [new file with mode: 0644]
0.4.x/balloon/_w8_b1.gif [new file with mode: 0644]
0.4.x/balloon/_w9.gif [new file with mode: 0644]
0.4.x/balloon/_w9_b1.gif [new file with mode: 0644]
0.4.x/common.css [new file with mode: 0644]
0.4.x/common.js [new file with mode: 0644]
0.4.x/diary/diary.xsl [new file with mode: 0644]
0.4.x/diary/itozyun.xml [new file with mode: 0644]
0.4.x/error.png [new file with mode: 0644]
0.4.x/folder_album.png [new file with mode: 0644]
0.4.x/folder_general.png [new file with mode: 0644]
0.4.x/grid.gif [new file with mode: 0644]
0.4.x/help/help.xsl [new file with mode: 0644]
0.4.x/help/jp.xml [new file with mode: 0644]
0.4.x/help/wellcom.png [new file with mode: 0644]
0.4.x/icons.gif [new file with mode: 0644]
0.4.x/images/1.gif [new file with mode: 0644]
0.4.x/images/1.png [new file with mode: 0644]
0.4.x/images/10.gif [new file with mode: 0644]
0.4.x/images/11.gif [new file with mode: 0644]
0.4.x/images/12.gif [new file with mode: 0644]
0.4.x/images/13.gif [new file with mode: 0644]
0.4.x/images/14.gif [new file with mode: 0644]
0.4.x/images/15.gif [new file with mode: 0644]
0.4.x/images/16.gif [new file with mode: 0644]
0.4.x/images/17.gif [new file with mode: 0644]
0.4.x/images/1751.gif [new file with mode: 0644]
0.4.x/images/1752.gif [new file with mode: 0644]
0.4.x/images/1753.gif [new file with mode: 0644]
0.4.x/images/1754.gif [new file with mode: 0644]
0.4.x/images/18.gif [new file with mode: 0644]
0.4.x/images/1876.gif [new file with mode: 0644]
0.4.x/images/1877.gif [new file with mode: 0644]
0.4.x/images/1878.gif [new file with mode: 0644]
0.4.x/images/1885.gif [new file with mode: 0644]
0.4.x/images/1886.gif [new file with mode: 0644]
0.4.x/images/1887.gif [new file with mode: 0644]
0.4.x/images/1891.gif [new file with mode: 0644]
0.4.x/images/1892.gif [new file with mode: 0644]
0.4.x/images/1893.gif [new file with mode: 0644]
0.4.x/images/1894.gif [new file with mode: 0644]
0.4.x/images/19.gif [new file with mode: 0644]
0.4.x/images/1911.gif [new file with mode: 0644]
0.4.x/images/1946.gif [new file with mode: 0644]
0.4.x/images/1947.gif [new file with mode: 0644]
0.4.x/images/1987.gif [new file with mode: 0644]
0.4.x/images/1990.gif [new file with mode: 0644]
0.4.x/images/2.gif [new file with mode: 0644]
0.4.x/images/20.gif [new file with mode: 0644]
0.4.x/images/2084.gif [new file with mode: 0644]
0.4.x/images/21.gif [new file with mode: 0644]
0.4.x/images/2153.gif [new file with mode: 0644]
0.4.x/images/2157.gif [new file with mode: 0644]
0.4.x/images/2158.gif [new file with mode: 0644]
0.4.x/images/2165.gif [new file with mode: 0644]
0.4.x/images/2168.gif [new file with mode: 0644]
0.4.x/images/22.gif [new file with mode: 0644]
0.4.x/images/2276.gif [new file with mode: 0644]
0.4.x/images/2277.gif [new file with mode: 0644]
0.4.x/images/2278.gif [new file with mode: 0644]
0.4.x/images/2279.gif [new file with mode: 0644]
0.4.x/images/2287.gif [new file with mode: 0644]
0.4.x/images/2288.gif [new file with mode: 0644]
0.4.x/images/2299.gif [new file with mode: 0644]
0.4.x/images/23.gif [new file with mode: 0644]
0.4.x/images/2312.gif [new file with mode: 0644]
0.4.x/images/2313.gif [new file with mode: 0644]
0.4.x/images/2314.gif [new file with mode: 0644]
0.4.x/images/24.gif [new file with mode: 0644]
0.4.x/images/25.gif [new file with mode: 0644]
0.4.x/images/26.gif [new file with mode: 0644]
0.4.x/images/27.gif [new file with mode: 0644]
0.4.x/images/28.gif [new file with mode: 0644]
0.4.x/images/29.gif [new file with mode: 0644]
0.4.x/images/3.gif [new file with mode: 0644]
0.4.x/images/30.gif [new file with mode: 0644]
0.4.x/images/31.gif [new file with mode: 0644]
0.4.x/images/32.gif [new file with mode: 0644]
0.4.x/images/33.gif [new file with mode: 0644]
0.4.x/images/34.gif [new file with mode: 0644]
0.4.x/images/35.gif [new file with mode: 0644]
0.4.x/images/36.gif [new file with mode: 0644]
0.4.x/images/37.gif [new file with mode: 0644]
0.4.x/images/38.gif [new file with mode: 0644]
0.4.x/images/39.gif [new file with mode: 0644]
0.4.x/images/4.gif [new file with mode: 0644]
0.4.x/images/40.gif [new file with mode: 0644]
0.4.x/images/41.gif [new file with mode: 0644]
0.4.x/images/42.gif [new file with mode: 0644]
0.4.x/images/43.gif [new file with mode: 0644]
0.4.x/images/44.gif [new file with mode: 0644]
0.4.x/images/45.gif [new file with mode: 0644]
0.4.x/images/46.gif [new file with mode: 0644]
0.4.x/images/47.gif [new file with mode: 0644]
0.4.x/images/48.gif [new file with mode: 0644]
0.4.x/images/49.gif [new file with mode: 0644]
0.4.x/images/5.gif [new file with mode: 0644]
0.4.x/images/50.gif [new file with mode: 0644]
0.4.x/images/51.gif [new file with mode: 0644]
0.4.x/images/52.gif [new file with mode: 0644]
0.4.x/images/6.gif [new file with mode: 0644]
0.4.x/images/7.gif [new file with mode: 0644]
0.4.x/images/8.gif [new file with mode: 0644]
0.4.x/images/9.gif [new file with mode: 0644]
0.4.x/images/images.json [new file with mode: 0644]
0.4.x/images/original_pictures.json [new file with mode: 0644]
0.4.x/images/tag-list.json [new file with mode: 0644]
0.4.x/index.html [new file with mode: 0644]
0.4.x/jquery-1.6.2.min.js [new file with mode: 0644]
0.4.x/loading.gif [new file with mode: 0644]
0.4.x/opacity0.gif [new file with mode: 0644]
0.4.x/sitemap/sitemap.xml [new file with mode: 0644]
0.4.x/sitemap/sitemap.xsl [new file with mode: 0644]
0.4.x/system.js [new file with mode: 0644]
0.4.x/test/1.gif [new file with mode: 0644]
0.4.x/test/data.js [new file with mode: 0644]
0.4.x/test/flip.svg [new file with mode: 0644]
0.4.x/test/svg.html [new file with mode: 0644]
0.4.x/thumbnail/1.png [new file with mode: 0644]
0.4.x/thumbnail/2.png [new file with mode: 0644]
0.4.x/thumbnail/3.png [new file with mode: 0644]
0.4.x/thumbnail/4.png [new file with mode: 0644]
0.4.x/thumbnail/5.png [new file with mode: 0644]
0.4.x/wiki/wiki.css [new file with mode: 0644]
0.4.x/wiki/wiki.js [new file with mode: 0644]
0.4.x/wiki/wiki.xml [new file with mode: 0644]
0.4.x/wiki/wiki.xsl [new file with mode: 0644]
0.4.x/wiki/wiki_120117.xml [new file with mode: 0644]
0.4.x/wiki/wiki_120119.xml [new file with mode: 0644]
0.4.x/work.css [new file with mode: 0644]
0.4.x/work.html [new file with mode: 0644]
0.4.x/work.js [new file with mode: 0644]

diff --git a/0.4.x/balloon/_w0.gif b/0.4.x/balloon/_w0.gif
new file mode 100644 (file)
index 0000000..bd5f864
Binary files /dev/null and b/0.4.x/balloon/_w0.gif differ
diff --git a/0.4.x/balloon/_w0_b1.gif b/0.4.x/balloon/_w0_b1.gif
new file mode 100644 (file)
index 0000000..d82b7b6
Binary files /dev/null and b/0.4.x/balloon/_w0_b1.gif differ
diff --git a/0.4.x/balloon/_w1.gif b/0.4.x/balloon/_w1.gif
new file mode 100644 (file)
index 0000000..48514a0
Binary files /dev/null and b/0.4.x/balloon/_w1.gif differ
diff --git a/0.4.x/balloon/_w10.gif b/0.4.x/balloon/_w10.gif
new file mode 100644 (file)
index 0000000..e0ab19f
Binary files /dev/null and b/0.4.x/balloon/_w10.gif differ
diff --git a/0.4.x/balloon/_w10_b1.gif b/0.4.x/balloon/_w10_b1.gif
new file mode 100644 (file)
index 0000000..de061ca
Binary files /dev/null and b/0.4.x/balloon/_w10_b1.gif differ
diff --git a/0.4.x/balloon/_w11.gif b/0.4.x/balloon/_w11.gif
new file mode 100644 (file)
index 0000000..b38de85
Binary files /dev/null and b/0.4.x/balloon/_w11.gif differ
diff --git a/0.4.x/balloon/_w11_b1.gif b/0.4.x/balloon/_w11_b1.gif
new file mode 100644 (file)
index 0000000..0f979b5
Binary files /dev/null and b/0.4.x/balloon/_w11_b1.gif differ
diff --git a/0.4.x/balloon/_w12.gif b/0.4.x/balloon/_w12.gif
new file mode 100644 (file)
index 0000000..72af3b4
Binary files /dev/null and b/0.4.x/balloon/_w12.gif differ
diff --git a/0.4.x/balloon/_w12_b1.gif b/0.4.x/balloon/_w12_b1.gif
new file mode 100644 (file)
index 0000000..e5f70c4
Binary files /dev/null and b/0.4.x/balloon/_w12_b1.gif differ
diff --git a/0.4.x/balloon/_w13.gif b/0.4.x/balloon/_w13.gif
new file mode 100644 (file)
index 0000000..34c7726
Binary files /dev/null and b/0.4.x/balloon/_w13.gif differ
diff --git a/0.4.x/balloon/_w13_b1.gif b/0.4.x/balloon/_w13_b1.gif
new file mode 100644 (file)
index 0000000..b5a5d2f
Binary files /dev/null and b/0.4.x/balloon/_w13_b1.gif differ
diff --git a/0.4.x/balloon/_w14.gif b/0.4.x/balloon/_w14.gif
new file mode 100644 (file)
index 0000000..5952918
Binary files /dev/null and b/0.4.x/balloon/_w14.gif differ
diff --git a/0.4.x/balloon/_w14_b1.gif b/0.4.x/balloon/_w14_b1.gif
new file mode 100644 (file)
index 0000000..8e94d1f
Binary files /dev/null and b/0.4.x/balloon/_w14_b1.gif differ
diff --git a/0.4.x/balloon/_w15.gif b/0.4.x/balloon/_w15.gif
new file mode 100644 (file)
index 0000000..ee2ff98
Binary files /dev/null and b/0.4.x/balloon/_w15.gif differ
diff --git a/0.4.x/balloon/_w15_b1.gif b/0.4.x/balloon/_w15_b1.gif
new file mode 100644 (file)
index 0000000..e1695ee
Binary files /dev/null and b/0.4.x/balloon/_w15_b1.gif differ
diff --git a/0.4.x/balloon/_w16.gif b/0.4.x/balloon/_w16.gif
new file mode 100644 (file)
index 0000000..78b7c7a
Binary files /dev/null and b/0.4.x/balloon/_w16.gif differ
diff --git a/0.4.x/balloon/_w16_b1.gif b/0.4.x/balloon/_w16_b1.gif
new file mode 100644 (file)
index 0000000..dbd66e4
Binary files /dev/null and b/0.4.x/balloon/_w16_b1.gif differ
diff --git a/0.4.x/balloon/_w17.gif b/0.4.x/balloon/_w17.gif
new file mode 100644 (file)
index 0000000..4977827
Binary files /dev/null and b/0.4.x/balloon/_w17.gif differ
diff --git a/0.4.x/balloon/_w17_b1.gif b/0.4.x/balloon/_w17_b1.gif
new file mode 100644 (file)
index 0000000..bf63671
Binary files /dev/null and b/0.4.x/balloon/_w17_b1.gif differ
diff --git a/0.4.x/balloon/_w18.gif b/0.4.x/balloon/_w18.gif
new file mode 100644 (file)
index 0000000..f904ec4
Binary files /dev/null and b/0.4.x/balloon/_w18.gif differ
diff --git a/0.4.x/balloon/_w18_b1.gif b/0.4.x/balloon/_w18_b1.gif
new file mode 100644 (file)
index 0000000..fe8fc88
Binary files /dev/null and b/0.4.x/balloon/_w18_b1.gif differ
diff --git a/0.4.x/balloon/_w19.gif b/0.4.x/balloon/_w19.gif
new file mode 100644 (file)
index 0000000..15c38f7
Binary files /dev/null and b/0.4.x/balloon/_w19.gif differ
diff --git a/0.4.x/balloon/_w19_b1.gif b/0.4.x/balloon/_w19_b1.gif
new file mode 100644 (file)
index 0000000..0940573
Binary files /dev/null and b/0.4.x/balloon/_w19_b1.gif differ
diff --git a/0.4.x/balloon/_w1_b1.gif b/0.4.x/balloon/_w1_b1.gif
new file mode 100644 (file)
index 0000000..fa63ab6
Binary files /dev/null and b/0.4.x/balloon/_w1_b1.gif differ
diff --git a/0.4.x/balloon/_w2.gif b/0.4.x/balloon/_w2.gif
new file mode 100644 (file)
index 0000000..fa07e5f
Binary files /dev/null and b/0.4.x/balloon/_w2.gif differ
diff --git a/0.4.x/balloon/_w20.gif b/0.4.x/balloon/_w20.gif
new file mode 100644 (file)
index 0000000..5f3b7e3
Binary files /dev/null and b/0.4.x/balloon/_w20.gif differ
diff --git a/0.4.x/balloon/_w20_b1.gif b/0.4.x/balloon/_w20_b1.gif
new file mode 100644 (file)
index 0000000..8818931
Binary files /dev/null and b/0.4.x/balloon/_w20_b1.gif differ
diff --git a/0.4.x/balloon/_w21.gif b/0.4.x/balloon/_w21.gif
new file mode 100644 (file)
index 0000000..98ddb1d
Binary files /dev/null and b/0.4.x/balloon/_w21.gif differ
diff --git a/0.4.x/balloon/_w21_b1.gif b/0.4.x/balloon/_w21_b1.gif
new file mode 100644 (file)
index 0000000..3057ccb
Binary files /dev/null and b/0.4.x/balloon/_w21_b1.gif differ
diff --git a/0.4.x/balloon/_w22.gif b/0.4.x/balloon/_w22.gif
new file mode 100644 (file)
index 0000000..0dbc5c9
Binary files /dev/null and b/0.4.x/balloon/_w22.gif differ
diff --git a/0.4.x/balloon/_w22_b1.gif b/0.4.x/balloon/_w22_b1.gif
new file mode 100644 (file)
index 0000000..e736f4c
Binary files /dev/null and b/0.4.x/balloon/_w22_b1.gif differ
diff --git a/0.4.x/balloon/_w23.gif b/0.4.x/balloon/_w23.gif
new file mode 100644 (file)
index 0000000..d74f80c
Binary files /dev/null and b/0.4.x/balloon/_w23.gif differ
diff --git a/0.4.x/balloon/_w23_b1.gif b/0.4.x/balloon/_w23_b1.gif
new file mode 100644 (file)
index 0000000..ca41564
Binary files /dev/null and b/0.4.x/balloon/_w23_b1.gif differ
diff --git a/0.4.x/balloon/_w2_b1.gif b/0.4.x/balloon/_w2_b1.gif
new file mode 100644 (file)
index 0000000..dc29c49
Binary files /dev/null and b/0.4.x/balloon/_w2_b1.gif differ
diff --git a/0.4.x/balloon/_w3.gif b/0.4.x/balloon/_w3.gif
new file mode 100644 (file)
index 0000000..b664807
Binary files /dev/null and b/0.4.x/balloon/_w3.gif differ
diff --git a/0.4.x/balloon/_w3_b1.gif b/0.4.x/balloon/_w3_b1.gif
new file mode 100644 (file)
index 0000000..c8d4af5
Binary files /dev/null and b/0.4.x/balloon/_w3_b1.gif differ
diff --git a/0.4.x/balloon/_w4.gif b/0.4.x/balloon/_w4.gif
new file mode 100644 (file)
index 0000000..f39af9b
Binary files /dev/null and b/0.4.x/balloon/_w4.gif differ
diff --git a/0.4.x/balloon/_w4_b1.gif b/0.4.x/balloon/_w4_b1.gif
new file mode 100644 (file)
index 0000000..542d5d7
Binary files /dev/null and b/0.4.x/balloon/_w4_b1.gif differ
diff --git a/0.4.x/balloon/_w5.gif b/0.4.x/balloon/_w5.gif
new file mode 100644 (file)
index 0000000..0d74823
Binary files /dev/null and b/0.4.x/balloon/_w5.gif differ
diff --git a/0.4.x/balloon/_w5_b1.gif b/0.4.x/balloon/_w5_b1.gif
new file mode 100644 (file)
index 0000000..b5fbf61
Binary files /dev/null and b/0.4.x/balloon/_w5_b1.gif differ
diff --git a/0.4.x/balloon/_w6.gif b/0.4.x/balloon/_w6.gif
new file mode 100644 (file)
index 0000000..2a97e6c
Binary files /dev/null and b/0.4.x/balloon/_w6.gif differ
diff --git a/0.4.x/balloon/_w6_b1.gif b/0.4.x/balloon/_w6_b1.gif
new file mode 100644 (file)
index 0000000..5f5552b
Binary files /dev/null and b/0.4.x/balloon/_w6_b1.gif differ
diff --git a/0.4.x/balloon/_w7.gif b/0.4.x/balloon/_w7.gif
new file mode 100644 (file)
index 0000000..197543e
Binary files /dev/null and b/0.4.x/balloon/_w7.gif differ
diff --git a/0.4.x/balloon/_w7_b1.gif b/0.4.x/balloon/_w7_b1.gif
new file mode 100644 (file)
index 0000000..64c6ca2
Binary files /dev/null and b/0.4.x/balloon/_w7_b1.gif differ
diff --git a/0.4.x/balloon/_w8.gif b/0.4.x/balloon/_w8.gif
new file mode 100644 (file)
index 0000000..057323b
Binary files /dev/null and b/0.4.x/balloon/_w8.gif differ
diff --git a/0.4.x/balloon/_w8_b1.gif b/0.4.x/balloon/_w8_b1.gif
new file mode 100644 (file)
index 0000000..7c9c2c7
Binary files /dev/null and b/0.4.x/balloon/_w8_b1.gif differ
diff --git a/0.4.x/balloon/_w9.gif b/0.4.x/balloon/_w9.gif
new file mode 100644 (file)
index 0000000..fccc259
Binary files /dev/null and b/0.4.x/balloon/_w9.gif differ
diff --git a/0.4.x/balloon/_w9_b1.gif b/0.4.x/balloon/_w9_b1.gif
new file mode 100644 (file)
index 0000000..af4e630
Binary files /dev/null and b/0.4.x/balloon/_w9_b1.gif differ
diff --git a/0.4.x/common.css b/0.4.x/common.css
new file mode 100644 (file)
index 0000000..cddf53b
--- /dev/null
@@ -0,0 +1,505 @@
+/*\r
+ * pettanR\r
+ * \r
+ *   common.css\r
+ * \r
+ *   version 0.1.0\r
+ *\r
+ */\r
+\r
+/*  VML ( v\:* don't work for ie8(ie8mode))\r
+--------------------------------------------------------------------------------------*/\r
+       v\:shape,\r
+       v\:image {\r
+               behavior:       url(#default#VML);\r
+               display:        block;\r
+       }\r
+\r
+/*  Reset\r
+--------------------------------------------------------------------------------------*/\r
+       html, body {\r
+               margin:                         0;\r
+               padding:                        0;\r
+       }\r
+\r
+/*  Reset\r
+--------------------------------------------------------------------------------------*/\r
+/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+       body{\r
+               font:                   13px/1.231 arial,helvetica,clean,sans-serif;\r
+               line-height:    1;\r
+               *font-size:             small;\r
+               *font:                  x-small;\r
+       }\r
+       select, input, button, textarea, button{\r
+               font:                   99% arial,helvetica,clean,sans-serif;\r
+       }\r
+       table{\r
+               font-size:              inherit;\r
+               font:                   100%;\r
+       }\r
+       \r
+       html, body, div, span, applet, object, iframe,\r
+       h1, h2, h3, h4, h5, h6, p, blockquote, pre,\r
+       a, abbr, acronym, address, big, cite, code,\r
+       del, dfn, em, font, img, ins, kbd, q, s, samp,\r
+       small, strike, strong, sub, sup, tt, var,\r
+       b, u, i, center,\r
+       dl, dt, dd, ol, ul, li,\r
+       fieldset, form, label, legend,\r
+       table, caption, tbody, tfoot, thead {\r
+               margin:                 0;\r
+               padding:                0;\r
+               border:                 0;\r
+               outline:                0;\r
+               vertical-align: baseline;\r
+               font-family:    "Hiragino Kaku Gothic Pro","MS Pゴシック", Osaka, "ヒラギノ角ゴ Pro W3","メイリオ",Meiryo,sans-serif;\r
+       }\r
+        \r
+       p {\r
+               text-shadow:    #000 0 0 0;/* for Safari */ \r
+               -moz-opacity:   0.99;/* for Firefox */ \r
+       }\r
+       \r
+       pre, code, kbd, samp, tt {\r
+               font-family:            monospace;\r
+               line-height:            100%;\r
+               *font-size:                     108%;\r
+               margin-bottom:          1em;\r
+       }\r
+\r
+       /* http://e2designer.seesaa.net/article/152168876.html */\r
+       /* http://perishablepress.com/press/2010/06/01/wrapping-content/ */\r
+       pre {\r
+               white-space: pre;           /* CSS 2.0 */\r
+               white-space: pre-wrap;      /* CSS 2.1 */\r
+               white-space: pre-line;      /* CSS 3.0 */\r
+               white-space: -pre-wrap;     /* Opera 4-6 */\r
+               white-space: -o-pre-wrap;   /* Opera 7 */\r
+               white-space: -moz-pre-wrap; /* Mozilla */\r
+               white-space: -hp-pre-wrap;  /* HP Printers */\r
+               word-wrap:   break-word;    /* IE 5+ */\r
+       }\r
+       \r
+       /* remember to define focus styles! */\r
+       :focus { outline: 0;}\r
+       \r
+       /* remember to highlight inserts somehow! */\r
+       ins { text-decoration: none;}\r
+       del { text-decoration: line-through;}\r
+       \r
+       /* http://honoo-no.com/creators/2008/02/14_211120.html */\r
+       textarea, input {\r
+               font-family: "MS Pゴシック", Osaka, "ヒラギノ角ゴ Pro W3",sans-serif;\r
+       }\r
+\r
+       dt {\r
+               margin-left:    1em;\r
+               font-weight:    bold;\r
+       }\r
+       dd {\r
+               margin-left:    2em;\r
+       }\r
+\r
+/*  ClearFix\r
+--------------------------------------------------------------------------------------*/\r
+       /* for modern brouser */\r
+       claerfix:after {   \r
+               content: ".";   \r
+               display: block;   \r
+               visibility: hidden;   \r
+               height: 0.1px;   \r
+               font-size: 0.1em;   \r
+               line-height: 0;   \r
+               clear: both;   \r
+       } \r
+       /* IE7,MacIE5 */\r
+       .clearfix {\r
+               display: inline-block;\r
+       }\r
+       /* WinIE6 below, Exclude MacIE5 \*/\r
+       * html .clearfix {\r
+               zoom: 1;\r
+       }\r
+       .clearfix {\r
+               display: block;\r
+               overflow: auto;\r
+       }\r
+       /**/\r
+\r
+\r
+/*  Typography\r
+--------------------------------------------------------------------------------------*/\r
+       a:link { color:#008;}\r
+       a:visited { color: #505;}\r
+       a { text-decoration: none;}\r
+       \r
+       a:hover {\r
+               text-decoration:        underline;\r
+               color:                          #f60;\r
+       }\r
+       h1 {\r
+               letter-spacing:         2px;\r
+               padding:                        0 10px;\r
+       }\r
+       h2 {\r
+               letter-spacing:         2px;\r
+           border-top:                 1px solid #333;\r
+           border-bottom:              1px solid #333;\r
+           padding:                    0.5em 0 0.5em 0.5em;\r
+           font-size:                  1.4em;\r
+               line-height:            1.4em;\r
+               margin:                         0 2px 1em;\r
+               text-shadow:            1px 1px 3px rgba(0, 0, 0, 0.6);\r
+    }\r
+\r
+       h3 {\r
+               letter-spacing:         2px;\r
+           border-bottom:              1px dotted #333333;\r
+           font-size:                  1.4em;\r
+               line-height:            1.4em;\r
+               padding:                        0 0 0 0.5em;\r
+               margin:                         0 0 1em 0.5em;\r
+               font-weight:            bold;\r
+       }               \r
+\r
+       h4 {\r
+               font-weight:            bold;\r
+               font-size:                      116%;\r
+               letter-spacing:         1px;\r
+               border-left:            0.5em #ccc solid;\r
+               border-bottom:          1px #999 solid;\r
+               padding:                        4px 0 2px 0.6em;\r
+               margin:                         2em 0 1em 1em;\r
+       }\r
+       h5 {\r
+               letter-spacing:         1px;\r
+               border-bottom:          1px #999 dotted;\r
+               padding:                        6px 6px 2px;\r
+               margin:                         1.5em 14px 1em 1.5em;\r
+       }\r
+       h5, h6 {\r
+               font-size:                      1em;\r
+               padding:                        0 5px 0;\r
+       }\r
+       h6 {\r
+               border-left:            5px #999 solid;\r
+               letter-spacing:         1px;\r
+               margin-left:            2em;\r
+       }\r
+       \r
+       p, ul, ol, dl, blockquote, pre, table {\r
+               margin:                         0 0 1em 2em;\r
+       }\r
+       blockquote, cite {}\r
+       em {}\r
+\r
+       /* tables still need 'cellspacing="0"' in the markup */\r
+       table {\r
+               border:                         #999 solid;\r
+               border-width:           1px 1px 0 0;\r
+               border-collapse:        collapse;\r
+               empty-cells:            show;\r
+               border-spacing:         0;\r
+               line-height:            1.6em;\r
+       }\r
+\r
+       th, td {\r
+               padding:                        5px;\r
+               border:                         #999 solid;\r
+               border-width:           0 0 1px 1px;\r
+       }\r
+\r
+/*  Button\r
+--------------------------------------------------------------------------------------*/\r
+       .button {\r
+               border:                                 1px outset #ccc;\r
+               background-color:               #eee;\r
+               color:                                  #666;\r
+               font-weight:                    bold;\r
+               text-align:                             center;\r
+               cursor:                                 pointer;\r
+               overflow:                               hidden;\r
+               height:                                 30px;\r
+               line-height:                    30px;\r
+               border-radius:                  5px;\r
+               -o-border-radius:               5px;\r
+               -ms-border-radius:              5px;\r
+               -moz-border-radius:             5px;\r
+               -webkit-border-radius:  5px;\r
+       }\r
+\r
+/*  Loading\r
+--------------------------------------------------------------------------------------*/\r
+       .loading {\r
+               background-image:               url( loading.gif);\r
+               background-position:    50% 50%;\r
+               background-repeat:              no-repeat;\r
+       }\r
+       .error {\r
+               background-image:               url( error.png);\r
+               background-position:    50% 50%;\r
+               background-repeat:              no-repeat;\r
+       }\r
+\r
+\r
+/*  Footer & Footer Fix\r
+ *   http://www.themaninblue.com/writing/perspective/2005/08/29/\r
+--------------------------------------------------------------------------------------*/\r
+       html,\r
+       body {\r
+               height:                 100%;\r
+       }\r
+       #general-content {\r
+               position:               relative;\r
+               min-height:             100%;\r
+               _height:                100%;\r
+       }\r
+       \r
+       #outer-wrapper {\r
+               padding-bottom: 200px;/* フッターの高さと同じ値にする */\r
+       }\r
+\r
+       #footer-content {\r
+               height:                 200px;\r
+               position:               relative;\r
+               margin-top:             -200px;\r
+       }\r
+\r
+\r
+/*  Noscript Alert\r
+--------------------------------------------------------------------------------------*/\r
+       #noscript-alert {\r
+               border-left:            1px solid #666;\r
+               display:                        block;\r
+               text-align:                     center;\r
+               color:                          red;\r
+               font-weight:            bold;\r
+               font-size:                      12px;\r
+               line-height:            12px;\r
+               padding:                        11px 0 7px;\r
+       }\r
+\r
+/*  global-navi\r
+--------------------------------------------------------------------------------------*/\r
+       #global-navi {\r
+               position:                               absolute;\r
+               right:                                  0;\r
+               top:                                    0;\r
+               width:                                  320px;\r
+               text-align:                             right;\r
+               height:                                 30px;\r
+               border-right:                   1px solid #666;\r
+       }\r
+               #global-navi a,\r
+               #global-navi a:link,\r
+               #global-navi a:visited,\r
+               #global-navi a:active {\r
+                       text-align:                     center;\r
+                       color:                          #666;\r
+                       text-decoration:        none;\r
+                       display:                        inline-block;\r
+                       _display:                       inline;\r
+                       _zoom:                          1;\r
+                       float:                          left;\r
+                       width:                          79px;\r
+                       border-left:            1px solid #666;\r
+                       font-size:                      12px;\r
+                       line-height:            12px;\r
+                       padding:                        11px 0 7px;\r
+                       outline:                        0;\r
+               }\r
+\r
+               #global-navi a {\r
+                       background-color:       #ccc; /* for ie6 */\r
+               }\r
+               #global-navi a:active {\r
+                       background-color:       #333;\r
+               }\r
+               #global-navi a:hover {\r
+                       background-color:       #999;\r
+                       color:                          #eee;\r
+               }\r
+               #global-navi a.current,\r
+               #global-navi a.current:visited {\r
+                       background-color:       #666;\r
+                       color:                          #eee;\r
+               }\r
+\r
+/*  header\r
+--------------------------------------------------------------------------------------*/\r
+       #header {\r
+               background-color:               #ccc;\r
+               height:                                 30px;\r
+               line-height:                    30px;\r
+       }\r
+       h1 {\r
+               height:                                 30px;\r
+               line-height:                    30px;\r
+               font-size:                              1.4em;\r
+               font-weight:                    normal;\r
+               text-shadow:                    1px 1px 3px rgba(0, 0, 0, 0.6);\r
+       }       \r
+\r
+/*  base-content-width\r
+--------------------------------------------------------------------------------------*/\r
+       .base-content-width {\r
+               width:                                  770px;\r
+               margin:                                 0 auto;\r
+       }\r
+       \r
+/*  main\r
+--------------------------------------------------------------------------------------*/\r
+       #main,\r
+       .main {\r
+               padding:                                20px 10px;\r
+       }\r
+               #main p,\r
+               #main pre,\r
+               .main p,\r
+               .main pre {\r
+                       line-height:                    1.6em;\r
+               }\r
+\r
+/*  footer-content\r
+--------------------------------------------------------------------------------------*/\r
+       #footer-content {\r
+               background-color:               #ccc;\r
+               position:                               relative;\r
+       }\r
+       #footer {\r
+               border-top:                             1px solid #999;\r
+               padding-bottom:                 30px;\r
+       }\r
+               .footer-item-wrapper {\r
+                       width:                                  200px;\r
+                       float:                                  left;\r
+               }\r
+                       .footer-item {\r
+                               padding-right:          30px;\r
+                       }\r
+                       .footer-item h2 {\r
+                               font-size:                      1em;\r
+                               padding:                        0 0 0.3em 0.5em;\r
+                               margin-top:                     0.7em;\r
+                               margin-bottom:          0.6em;\r
+                               text-align:                     left;\r
+                               border-top:                     0;\r
+                               border-left:            0;\r
+                               border-right:           0;\r
+                               border-bottom:          1px solid #999;\r
+                               box-shadow:                     none;\r
+                               -moz-box-shadow:        none;\r
+                               -webkit-box-shadow:     0;\r
+                       }\r
+                       .footer-item ul {\r
+                               list-style:                     none;\r
+                               padding:                        0 30px 0 1em;\r
+                               margin:                         0;\r
+                       }\r
+                               .footer-item li {\r
+                                       line-height:            1.6em;\r
+                               }\r
+               #copyright {\r
+                       position:                               absolute;\r
+                       left:                                   0;\r
+                       bottom:                                 10px;\r
+                       width:                                  100%;\r
+                       height:                                 20px;\r
+                       line-height:                    20px;\r
+                       text-align:                             center;\r
+               }\r
+\r
+/*  dl table\r
+--------------------------------------------------------------------------------------*/\r
+       .dl-table dt,\r
+       .dl-table-small dt {\r
+               clear:                  left;\r
+               float:                  left;\r
+               height:                 1.8em;\r
+               line-height:    1.8em;\r
+               overflow:               hidden;\r
+               margin:                 0;\r
+               padding:                0 0 0 0.2em;\r
+       }\r
+       .dl-table dd,\r
+       .dl-table-small dd {\r
+               margin:                 0 0 0.5em;\r
+               line-height:    1.8em;\r
+               border-bottom:  1px solid #ccc;\r
+       }\r
+       .dl-table dt {\r
+               width:                  180px;\r
+       }\r
+       .dl-table dd {\r
+               padding:                0 0 0 200px;\r
+       }\r
+       .dl-table-small dt {\r
+               width:                  140px;\r
+       }\r
+       .dl-table-small dd {\r
+               padding:                0 0 0 150px;\r
+       }\r
+/*  Reversible Image\r
+--------------------------------------------------------------------------------------*/       \r
+       img.img-flip-v { /* 上下反転 */\r
+               transform:                              scale( 1, -1);\r
+               -o-transform:                   scale( 1, -1);\r
+               -ms-transform:                  scale( 1, -1);\r
+               -moz-transform:                 scale( 1, -1);\r
+               -webkit-transform:              scale( 1, -1);\r
+               /*filter:                                       progid:DXImageTransform.Microsoft.BasicImage( Mirror=1, Rotation=2);\r
+               -ms-filter:                             progid:DXImageTransform.Microsoft.BasicImage( Mirror=1, Rotation=2);*/\r
+               filter:                                 flipv();\r
+               -ms-filter:                             flipv();\r
+       }\r
+       v\:image.img-flip-v {\r
+               flip:                                   y; /* vml */\r
+       } \r
+       \r
+       img.img-flip-h { /* 左右反転 */\r
+               transform:                              scale( -1, 1);\r
+               -o-transform:                   scaleX( -1, 1);\r
+               -ms-transform:                  scale( -1, 1);\r
+               -moz-transform:                 scale( -1, 1);\r
+               -webkit-transform:              scale( -1, 1);\r
+               /*filter:                                       progid:DXImageTransform.Microsoft.BasicImage( Mirror=1);\r
+               -ms-filter:                             progid:DXImageTransform.Microsoft.BasicImage( Mirror=1);*/\r
+               filter:                                 fliph();\r
+               -ms-filter:                             fliph();\r
+       }\r
+       v\:image.img-flip-h {\r
+               flip:                                   x; /* vml */\r
+       }\r
+       \r
+       img.img-flip-vh { /* 上下左右反転 */\r
+               transform:                              scale( -1, -1);\r
+               -o-transform:                   scaleY( -1, -1);\r
+               -ms-transform:                  scale( -1, -1);\r
+               -moz-transform:                 scale( -1, -1);\r
+               -webkit-transform:              scale( -1, -1);\r
+               /*filter:                                       progid:DXImageTransform.Microsoft.BasicImage( Rotation=2);\r
+               -ms-filter:                             progid:DXImageTransform.Microsoft.BasicImage( Rotation=2);*/\r
+               filter:                                 flipv() fliph();\r
+               -ms-filter:                             flipv() fliph();\r
+       }\r
+       v\:image.img-flip-vh {\r
+               rotation :                              180; /* vml */\r
+       }\r
+\r
+/*  Reversible Image with png-fix\r
+--------------------------------------------------------------------------------------*/\r
+       .img-flip-v .img-flip-with-pngfix-v {\r
+               filter:                                 flipv();\r
+       }\r
+       .img-flip-h .img-flip-with-pngfix-h {\r
+               filter:                                 fliph();\r
+       }\r
+       .img-flip-vh .img-flip-with-pngfix-h {\r
+               filter:                                 flipv() fliph();\r
+       }
\ No newline at end of file
diff --git a/0.4.x/common.js b/0.4.x/common.js
new file mode 100644 (file)
index 0000000..e067704
--- /dev/null
@@ -0,0 +1,1864 @@
+/*\r
+ * pettanR common.js\r
+ *   version 0.1.0\r
+ * \r
+ * author: itozyun\r
+ */\r
+\r
+var pettanr = ( function(){\r
+       var     FUNCTION_ARRAY = [],\r
+               URL = document.location.href.split( '#')[ 0],\r
+               IS_LOCAL = URL.indexOf( 'file:') === 0,\r
+               URL_PARAMS = ( function(){\r
+                       var search = document.location.search,\r
+                               l = search.length;\r
+                   if( 1 < l){\r
+                       var     query = search.substring( 1),\r
+                                       params = query.split( '&'),\r
+                                       ret = {}, elm, name;\r
+                       while( params.length > 0){\r
+                           elm = params.shift().split( '=');\r
+                                       name = decodeURIComponent( elm[ 0]);\r
+                                       if( elm.length === 2){\r
+                                   ret[ name] = ( function( v){\r
+                                                       if( '' + parseFloat( v) === v) return parseFloat( v);\r
+                                                       if( v === 'true') return true;\r
+                                                       if( v === 'false') return false;\r
+                                                       if( v === 'null') return null;\r
+                                                       if( v === 'undefined') return undefined;\r
+                                                       return v;\r
+                                               })( decodeURIComponent( elm[ 1]));\r
+                                       } else\r
+                                       if( elm.length === 1){\r
+                                               ret[ name] = true;\r
+                                       }\r
+                       }\r
+                       return ret;\r
+                   }\r
+                   return {};\r
+               })(),\r
+               IS_DEBUG = IS_LOCAL === true || URL_PARAMS.debug === true,\r
+               jqWindow , jqDocument , jqBody;\r
+       return {\r
+               version: '0.4.0',\r
+               init: function(){\r
+                       jqWindow = $( window);\r
+                       jqDocument = $( document);\r
+                       jqBody = $( document.body);\r
+                       \r
+                       var l = FUNCTION_ARRAY.length,\r
+                               _fn;\r
+                       for( var i=0; i<l; i++){\r
+                               _fn = FUNCTION_ARRAY[ i];\r
+                               _fn.init && _fn.init( _fn === pettanr.view ? FUNCTION_ARRAY : undefined);\r
+                       }\r
+                       \r
+                       delete pettanr.init;\r
+               },\r
+               fn: function( _fn){\r
+                       FUNCTION_ARRAY.push( _fn);\r
+                       pettanr.init === undefined && _fn.init && _fn.init();\r
+               },\r
+               jqWindow: function(){\r
+                       return jqWindow;\r
+               },\r
+               jqDocument: function(){\r
+                       return jqDocument;\r
+               },\r
+               jqBody: function(){\r
+                       return jqBody;\r
+               },\r
+               URL_PARAMS: URL_PARAMS,\r
+               LOCAL: IS_LOCAL,\r
+               DEBUG: IS_DEBUG\r
+       }\r
+})();\r
+\r
+/*\r
+ * pettanr.util\r
+ * \r
+ *   extend( baseInstance, extend)\r
+ *   cleanCommnetNode()\r
+ *   cleanElement()\r
+ *   getElementSize( _elm)\r
+ *   getImageSize()\r
+ *   getAbsolutePath()\r
+ *   getGrobalObjectName()\r
+ * \r
+ */\r
+pettanr.util = ( function(){\r
+       var ELM_SIZE_GETTER = ( function(){\r
+                       var ret = document.createElement( 'DIV'),\r
+                               style = ret.style;\r
+                       ret.id = 'elmSizeGetter';\r
+                       style.position = 'absolute';\r
+                       style.left = '0px';\r
+                       style.top = '-9999px';\r
+                       style.visibility = 'hidden';\r
+                       document.body.appendChild( ret);\r
+                       return ret;\r
+               })(),\r
+               IMG_SIZE_GETTER = ( function(){\r
+                       var ret = ELM_SIZE_GETTER.cloneNode( true);\r
+                       ret.id = 'imgSizeGetter';\r
+                       document.body.appendChild( ret);\r
+                       return ret;\r
+               })(),\r
+               CLEAN_TARGET_ELEMENT = 'script,style,object,applet,embed,iframe,frame,base,bgsound,frameset,listing'.split( ',');\r
+       \r
+       /* clean comment node */\r
+       cleanCommnetNode();\r
+       \r
+       /* clean noscript */\r
+       var nodeNoscript = document.getElementsByTagName( 'noscript'),\r
+               noscript;\r
+       for(var i=0; i<nodeNoscript.length; ++i){\r
+               noscript = nodeNoscript[i];\r
+               noscript.parentNode && noscript.parentNode.removeChild( noscript);\r
+       }\r
+       nodeNoscript = noscript = null;\r
+       \r
+       function cleanCommnetNode( _targetElm){\r
+               var _elms = ( _targetElm || document).getElementsByTagName( '*'),\r
+                       _elm,\r
+                       i = 0;\r
+               while( i < _elms.length){\r
+                       _elm = _elms[ i];\r
+                       if( _elm.nodeType === 8 && _elm.parentNode){\r
+                               _elm.parentNode.removeChild( _elm);\r
+                       } else {\r
+                               ++i;\r
+                       }\r
+               }\r
+       }\r
+       return {\r
+               extend: function( baseInstance, extend){\r
+                       for( var key in extend){\r
+                               baseInstance[ key] = extend[ key];\r
+                       }\r
+                       return baseInstance;\r
+               },\r
+               createGlobalUniqueName: function(){\r
+                       var randomKey = null;\r
+                       while(true) {\r
+                               randomKey = '_uniqueName'+(''+Math.random()).replace(/\./,'');\r
+                               if( window[randomKey] === undefined){\r
+                                       break;\r
+                               }\r
+                       }\r
+                       return randomKey;\r
+               },      \r
+               cleanCommnetNode: cleanCommnetNode,\r
+               cleanElement: function( _targetElm){\r
+                       var l = CLEAN_TARGET_ELEMENT.length,\r
+                               elms, elm, j;\r
+                       for( var i=0; i<l; ++i){\r
+                               elms = _targetElm.getElementsByTagName( CLEAN_TARGET_ELEMENT[ i]);\r
+                               if( elms.length > 0){\r
+                                       for( j=0; i<elms.length; ++j){\r
+                                               elm = elms[ 0];\r
+                                               elm.parentNode && elm.parentNode.removeChild( elm);\r
+                                       }\r
+                               }\r
+                       }\r
+                       cleanCommnetNode( _targetElm);\r
+                       if( pettanr.ua.isIE === false) return;\r
+                       elms = document.getElementsByName( '*');\r
+                       l = elms.length;\r
+                       for(i=0; i<l; ++i){\r
+                               elm = elms[ i];\r
+                               elm.style.filter = '';\r
+                               elm.style.behavior = '';\r
+                       }\r
+               },\r
+               getElementSize: function( _elm){\r
+                       if( !_elm){\r
+                               return {\r
+                                       width:  0,\r
+                                       height: 0\r
+                               }\r
+                       }\r
+                       var     parentElm = _elm.parentNode,\r
+                               prevElm = _elm.previousSibling,\r
+                               nextElm = _elm.nextSibling,\r
+                               displayNone = _elm.style.display === 'none';\r
+                       if( displayNone === true) _elm.style.display = '';\r
+                       ELM_SIZE_GETTER.appendChild( _elm);\r
+                       var ret = {\r
+                               width:          _elm.offsetWidth,\r
+                               height:         _elm.offsetHeight\r
+                       }\r
+                       if( displayNone === true) _elm.style.display = 'none';\r
+                       if( nextElm){\r
+                               parentElm.insertBefore( _elm, nextElm);\r
+                       } else          \r
+                       if( prevElm && prevElm.nextSibling){\r
+                               parentElm.insertBefore( _elm, prevElm.nextSibling);\r
+                       } else {\r
+                               parentElm && parentElm.appendChild( _elm);\r
+                       }                       \r
+                       return ret;\r
+               },\r
+               getImageSize: function( img){\r
+                       var     parentElm = img.parentNode,\r
+                               prevElm = img.previousSibling,\r
+                               nextElm = img.nextSibling,\r
+                               displayNone = img.style.display === 'none';\r
+                       if( displayNone === true) img.style.display = '';\r
+                       IMG_SIZE_GETTER.appendChild( img);\r
+                       var size = getActualDimension( img);\r
+                       IMG_SIZE_GETTER.removeChild( img);\r
+                       if( displayNone === true) img.style.display = 'none';\r
+                       if( nextElm){\r
+                               parentElm.insertBefore( img, nextElm);\r
+                       } else          \r
+                       if( prevElm && prevElm.nextSibling){\r
+                               parentElm.insertBefore( img, prevElm.nextSibling);\r
+                       } else {\r
+                               parentElm && parentElm.appendChild( img);\r
+                       }\r
+                       return size;\r
+                       \r
+               /* LICENSE: MIT\r
+                * AUTHOR: uupaa.js@gmail.com\r
+                */\r
+                       function getActualDimension(image) {\r
+                               var run, mem, w, h, key = "actual";\r
+                       \r
+                       // for Firefox, Safari, Google Chrome\r
+                               if ("naturalWidth" in image) {\r
+                                       return {\r
+                                               width:  image.naturalWidth,\r
+                                               height: image.naturalHeight\r
+                                       };\r
+                               }\r
+                       \r
+                               if ("src" in image) { // HTMLImageElement\r
+                                       if (image[key] && image[key].src === image.src) {\r
+                                               return image[key];\r
+                                       }\r
+                                       if (document.uniqueID) { // for IE\r
+                                               run = image.runtimeStyle;\r
+                                               mem = { w: run.width, h: run.height }; // keep runtimeStyle\r
+                                               run.width  = "auto"; // override\r
+                                               run.height = "auto";\r
+                                               w = image.width;\r
+                                               h = image.height;\r
+                                               run.width  = mem.w; // restore\r
+                                               run.height = mem.h;\r
+                                       } else { // for Opera and Other\r
+                                       /*\r
+                                               function fn() {\r
+                                                       w = image.width;\r
+                                                       h = image.height;\r
+                                               }\r
+                                               mem = { w: image.width, h: image.height }; // keep current style\r
+                                               image.removeAttribute("width");\r
+                                               image.addEventListener("DOMAttrModified", fn, false);\r
+                                               image.removeAttribute("height");\r
+                                               // call fn\r
+                                               image.removeEventListener("DOMAttrModified", fn, false);\r
+                                               image.width  = mem.w; // restore\r
+                                               image.height = mem.h;\r
+                                       */\r
+                                               mem = { w: image.width, h: image.height }; // keep current style\r
+                                               image.removeAttribute("width");\r
+                                               image.removeAttribute("height");\r
+                                               w = image.width;\r
+                                               h = image.height;\r
+                                               image.width  = mem.w; // restore\r
+                                               image.height = mem.h;\r
+                                       }\r
+                                       return image[key] = { width: w, height: h, src: image.src }; // bond\r
+                               }\r
+                               // HTMLCanvasElement\r
+                               return { width: image.width, height: image.height };\r
+                       }\r
+               },\r
+               loadImage: function( URLorELM, onLoad, onError, delay, timeout){\r
+                       delay = delay || 250;\r
+                       timeout = timeout || 5000;\r
+                       var type = typeof URLorELM,\r
+                               img, images, src, abstractPath;\r
+                       if( type === 'string'){\r
+                               src = URLorELM;\r
+                               // images = [];\r
+                       } else\r
+                       // http://d.hatena.ne.jp/hottolinkblog/20090228/1235823487\r
+                       if( type === 'object' && typeof URLorELM.hspace !== 'undefined' && typeof URLorELM.vspace !== 'undefined'){\r
+                               img = URLorELM;\r
+                               images = [ img];\r
+                               src = img.src;\r
+                       } else {\r
+                               return;\r
+                       }\r
+                       abstractPath = this.getAbsolutePath( src);\r
+                       \r
+                       loadImage( images, abstractPath,\r
+                               function( abspath, actualW, actualH){\r
+                                       if( abstractPath !== abspath) return;\r
+                                       onLoad && setTimeout( function(){ // 一度読み込まれた画像は即座にonLoadされてしまうので遅延\r
+                                               onLoad( src, actualW, actualH);\r
+                                       }, 0);\r
+                               },\r
+                               function( abspath){\r
+                                       if( abstractPath !== abspath) return;\r
+                                       onError && setTimeout( function(){\r
+                                               onError( src);\r
+                                       }, 0);\r
+                               }, delay, timeout\r
+                       );\r
+                       \r
+               /*  LICENSE: MIT?\r
+                *  URL: http://d.hatena.ne.jp/uupaa/20080413/1208067631\r
+                *  AUTHOR: uupaa.js@gmail.com\r
+                * \r
+                *  fixed for ie6-8 by pettanr\r
+                *   new Image -> document.createElement( 'IMG')\r
+                */\r
+                       function loadImage( images, abspath, onLoad, onError, delay, timeout) {\r
+                               images = images || document.images;\r
+                               var img,\r
+                                       i = 0, l = images.length,\r
+                                       tick = 0;\r
+                               for(; i < l; ++i) {\r
+                                       img = images[i];\r
+                                       if ( img.src === abspath && img.complete) {\r
+                                               var size = pettanr.util.getImageSize( img);\r
+                                               onLoad( abspath, size.width, size.height);\r
+                                               return;\r
+                                       }\r
+                               }\r
+                               img = document.createElement( 'IMG'); //var img = new Image(); ではieでimgのsizeが取れない、、、removeChildも失敗し、imgSizeGetterにimgが残る\r
+                               img.finish = false;\r
+                               img.onabort = img.onerror = function() {\r
+                                       if (img.finish) { return; }\r
+                                       img.finish = true;\r
+                                       onError(abspath);\r
+                                       img.onload = img.onabort = img.onerror = "";\r
+                               };\r
+                               img.onload  = function() {\r
+                                       img.finish = true;\r
+                                       if (window.opera && !img.complete) {\r
+                                               onError(abspath);\r
+                                               img.onload = img.onabort = img.onerror = "";\r
+                                               return;\r
+                                       }\r
+                                       var size = pettanr.util.getImageSize( img);\r
+                                       onLoad( abspath, size.width, size.height);\r
+                                       img.onload = img.onabort = img.onerror = "";\r
+                                       //img = void 0;\r
+                               };\r
+                               img.src = abspath;\r
+                               if (!img.finish && timeout) {\r
+                                       setTimeout(function() {\r
+                                               if (img.finish) { return; }\r
+                                               if (img.complete) {\r
+                                                       img.finish = true;\r
+                                                       if (img.width) { return; }\r
+                                                       onError(abspath);\r
+                                                       img.onload = img.onabort = img.onerror = "";\r
+                                                       return;\r
+                                               }\r
+                                               if ((tick += delay) > timeout) {\r
+                                                       img.finish = true;\r
+                                                       onError(abspath);\r
+                                                       img.onload = img.onabort = img.onerror = "";\r
+                                                       return;\r
+                                               }\r
+                                               setTimeout(arguments.callee, delay);\r
+                                       }, 0);\r
+                               }\r
+                       }\r
+               },\r
+               getAbsolutePath: function( path) {\r
+                       var e = document.createElement("div");\r
+                       e.innerHTML = '<a href=\"' + path + '\" />';\r
+                       return e.firstChild.href;\r
+               },\r
+               getAbsolutePosition: function( _elm){\r
+                       // Find the destination's position\r
+                       var     destx = _elm.offsetLeft,\r
+                               desty = _elm.offsetTop,\r
+                               thisNode = _elm,\r
+                               body = document.body;\r
+                       while (thisNode.offsetParent && thisNode.offsetParent !== body){\r
+                               thisNode = thisNode.offsetParent;\r
+                               destx += thisNode.offsetLeft;\r
+                               desty += thisNode.offsetTop;\r
+                       }\r
+                       return {\r
+                               x:      destx,\r
+                               y:      desty\r
+                       }\r
+               },\r
+               pullHtmlAsTemplete: function( IDorELM){\r
+                       if( typeof IDorELM === 'string'){\r
+                               IDorELM = document.getElementById( IDorELM);\r
+                       }\r
+                       if( !IDorELM) return;\r
+                       IDorELM.parentNode && IDorELM.parentNode.removeChild( IDorELM);\r
+                       if( IDorELM.id && IDorELM.id.indexOf( 'templete-') === 0){\r
+                               IDorELM.id = '';\r
+                       }\r
+                       return IDorELM;\r
+               }\r
+       }\r
+})();\r
+\r
+/*\r
+ * pettanr.ua\r
+ * \r
+ *   detect userAgent\r
+ *   detect plug in\r
+ */\r
+pettanr.ua = ( function(){\r
+       var ua = (function(){\r
+                       var acme = {};\r
+                       \r
+                       var n = navigator;\r
+                       var dua = n.userAgent;\r
+                       var dav = n.appVersion;\r
+                       var tv = parseFloat(dav);\r
+                       acme.isOpera = (dua.indexOf("Opera") >= 0) ? tv: undefined;\r
+                       acme.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;\r
+                       acme.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined;\r
+                       acme.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined;\r
+                       var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);\r
+                       if(index && !acme.isChrome){\r
+                               acme.isSafari = parseFloat(dav.split("Version/")[1]);\r
+                               if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){\r
+                                       acme.isSafari = 2;\r
+                               }\r
+                       }\r
+                       if(document.all && !acme.isOpera){\r
+                               acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;\r
+                       }\r
+                       \r
+                       return acme;\r
+               })(),\r
+               isIE = navigator.userAgent.toLowerCase().indexOf( 'msie') !== -1,\r
+               ieVersion = isIE === true ? parseInt( navigator.appVersion.toLowerCase().replace( /.*msie[ ]/, '').match( /^[0-9]+/)) : 0,\r
+               ieRenderingVersion = ieVersion === 8 ? document.documentMode : ieVersion,\r
+               isStanderdMode = document.compatMode === 'CSS1Compat',\r
+               VML = ( function(){\r
+                       if( isIE === false || ieVersion > 8) return false;\r
+                       var globalObjectName = pettanr.util.createGlobalUniqueName(),\r
+                               script;\r
+                       document.write( [ '<!--[if gte vml 1]><script id="detectVML">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
+                       if( window[globalObjectName] === 1){\r
+                               script = document.getElementById( 'detectVML');\r
+                               script.parentNode.removeChild( script);\r
+                               window[globalObjectName] = script = null;\r
+                               return true;\r
+                       }\r
+                       //pettanr.util.cleanCommnetNode();\r
+                       return false;\r
+               })(),\r
+               isStandAloneMode = ( function(){\r
+                       if( isIE === false) return false;\r
+                       if( VML === true) return false;\r
+                       var globalObjectName = pettanr.util.createGlobalUniqueName(),\r
+                               script;\r
+                       document.write( [ '<!--[if IE ', Math.floor( ieVersion), ']><script id="detectStandAlone">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
+                       if( window[globalObjectName] === 1){\r
+                               script = document.getElementById( 'detectStandAlone');\r
+                               script.parentNode.removeChild( script);\r
+                               window[globalObjectName] = script = null;\r
+                               return false;\r
+                       }\r
+                       //pettanr.util.cleanCommnetNode();\r
+                       return true;\r
+               })();\r
+       return {\r
+               IE:                                     ua.isIE,\r
+               GECKO:                          0,\r
+               OPERA:                          ua.isOpera,\r
+               KHTML:                          ua.isKhtml,\r
+               WEBKIT:                         ua.isWebKit,\r
+               CHROME:                         ua.isChrome,\r
+               isIE:                           isIE,\r
+               ieVersion:                      ieVersion,\r
+               ieRenderingVersion:     ieRenderingVersion,\r
+               isStanderdMode:         isStanderdMode,\r
+               VENDER_PREFIX: ( function() {\r
+                       var ua = navigator.userAgent.toLowerCase();\r
+                       if ( ua.indexOf('opera') !== -1) {\r
+                               return 'O';\r
+                       } else if ( ua.indexOf('msie') !== -1) {\r
+                               return 'ms';\r
+                       } else if ( ua.indexOf('webkit') !== -1) {\r
+                               return 'webkit';\r
+                       } else if ( navigator.product === 'Gecko') {\r
+                               return 'Moz';\r
+                       }\r
+                       return '';\r
+               })(),\r
+               ACTIVEX: ( function(){\r
+                       if( isIE === false || ieVersion > 8) return false;\r
+                       var className = document.body.className,\r
+                               test;\r
+                       if( className && className.indexOf( 'pettanr-ActiveX-enabled') !== -1) return true;\r
+                       if( className && className.indexOf( 'pettanr-ActiveX-disabled') !== -1) return false;\r
+                       try {\r
+                               test = new ActiveXObject('DXImageTransform.Microsoft.gradient');\r
+                       } catch( e){\r
+                               return false;\r
+                       }\r
+                       return !!test;\r
+               })(),\r
+               VML: VML,\r
+               STANDALONE: isStandAloneMode,\r
+               startVML: function(){\r
+                       delete this.startVML;\r
+                       if( pettanr.ua.VML !== true) return false;\r
+                       if (!document.namespaces["v"]) {\r
+                       document.namespaces.add("v", "urn:schemas-microsoft-com:vml", "#default#VML");\r
+                   }\r
+                   document.createStyleSheet().cssText = "v\:shape,v\:image{behavior:url(#default#VML);display:block;};";\r
+               }\r
+       }\r
+})();\r
+\r
+\r
+pettanr.CONST = ( function(){\r
+       var isLocal = pettanr.LOCAL === true || pettanr.URL_PARAMS.exjson === false;\r
+       return {\r
+               ORIGINAL_PICTURES_JSON_URL: ( isLocal === true ? 'images\/' : 'http:\/\/pettanr.heroku.com\/') + 'original_pictures.json'\r
+       }\r
+})();\r
+\r
+\r
+pettanr.view = ( function(){\r
+       /* create iframe overlay of user console */\r
+       var location = document.location.pathname,\r
+               isWorkPage = location.indexOf( '\/work.html') !== -1 || location.indexOf( '\work.html') !== -1,\r
+               deep =  location.indexOf( '\/diary\/') !== -1 ||\r
+                               location.indexOf( '\/text\/') !== -1 ||\r
+                               location.indexOf( '\/help\/') !== -1 ||\r
+                               location.indexOf( '\/sitemap\/') !== -1 ||\r
+                               location.indexOf( '\/wiki\/') !== -1,\r
+               LoginUserNavi;\r
+\r
+       if( isWorkPage === false){\r
+               LoginUserNavi = ( function(){\r
+                       var _body = document.body,\r
+                               _root = document.getElementsByTagName( 'HTML')[ 0],\r
+                               filter,\r
+                               iframe, visible = false;\r
+                       return {\r
+                               init: function( viewIndex){\r
+                                       filter = document.createElement( 'DIV');\r
+                                       filter.style.position = 'absolute';\r
+                                       filter.style.left = filter.style.top = '0px';\r
+                                       filter.style.width = filter.style.height ='100%';\r
+                                       filter.style.backgroundColor = '#fff';\r
+       \r
+                                       var ua = pettanr.ua,\r
+                                               id = 'work',\r
+                                               src = [\r
+                                                               deep === true ? '../' : '',\r
+                                                               'work.html',\r
+                                                               typeof viewIndex === 'number' ? '?view=' +viewIndex : ''\r
+                                               ].join( '');\r
+                                       \r
+                                       var el = document.createElement(ua.isIE ? '<iframe name="' + id + '" src="' + src + '">' : 'iframe');\r
+                                       el.id = el.name = id;\r
+                                       el.setAttribute( 'name', id);\r
+                                       \r
+                                       el.style.position = 'absolute';\r
+                                       el.style.left = el.style.top = '0px';\r
+                                       el.style.width = el.style.height ='100%';\r
+                                       el.style.overflow = 'hidden';\r
+                                       el.hspace = el.vspace = el.marginheight = el.marginwidth = 0;\r
+                                       \r
+                                       _body.appendChild(el);\r
+                                       window[id] = el;\r
+                                       iframe = el;\r
+                                       \r
+                                       if (!ua.isIE) {\r
+                                               var idoc;//WebKit > 521 corresponds with Safari 3, which started with 522 WebKit version.\r
+                                               if (ua.isWebKit > 521) {\r
+                                                       idoc = el.contentWindow.document;\r
+                                               } else if (ua.isSafari) {\r
+                                                       idoc = el.document;\r
+                                               } else { //  if(d.isMozilla){\r
+                                                       idoc = el.contentWindow;\r
+                                               }\r
+                                               \r
+                                               if ( !idoc) {\r
+                                                       try {\r
+                                                               el.src = src;\r
+                                                               el.contentWindow.location.replace = src;                                                        \r
+                                                       } catch (e){}\r
+                                                       try {\r
+                                                               //el.contentWindow.location = src;                                                      \r
+                                                       } catch (e){}\r
+                                                       try {\r
+                                                               el.location = src; // for Safari 2.0.3 ??\r
+                                                       } catch (e){}\r
+                                                       \r
+                                               } else if( ua.isOpera){\r
+                                                       el.src = src; // for Opera\r
+                                                       el.contentWindow.location.replace = src; // for Opera\r
+                                               } else {\r
+                                                       //el.src = src; // for firefox\r
+                                                       idoc.location.replace(src);\r
+                                               }\r
+                                       }\r
+                                       \r
+                                       delete LoginUserNavi.init;\r
+                               },\r
+                               show: function(){\r
+                                       if(visible === true) return;\r
+                                       if (_root) {\r
+                                               _root.style.overflow = 'hidden';\r
+                                       }\r
+                                       _body.style.overflow = 'hidden';\r
+                                       \r
+                                       var index = ( function( a){\r
+                                               var node = a.parentNode.getElementsByTagName( 'a'),\r
+                                                       l = node.length;\r
+                                               for( var i=0; i<l; ++i){\r
+                                                       if( node[ i] === a) return i\r
+                                               }\r
+                                               return -1;\r
+                                       })( this);\r
+                                       if( index === -1) return false;\r
+                                       \r
+                                       LoginUserNavi.init && LoginUserNavi.init( index);\r
+                                       \r
+                                       iframe.parentNode !== _body && _body.appendChild( iframe);\r
+                                       \r
+                                       _body.insertBefore( filter, iframe);\r
+                                       \r
+                                       visible = true;\r
+                                       \r
+                                       return false;\r
+                               },\r
+                               hide: function(){\r
+                                       if(visible === false) return;\r
+                                       \r
+                                       _body.removeChild(filter);\r
+                                       _body.style.overflow = '';\r
+                                       if (_root) {\r
+                                               _root.style.overflow = '';\r
+                                       }\r
+                                       _body.removeChild(iframe);\r
+                                       \r
+                                       visible = false;\r
+                               }\r
+                       }\r
+               })();\r
+       } else {\r
+               LoginUserNavi = ( function(){\r
+                       return {\r
+                               show: function(){\r
+                                       var index = ( function( a){\r
+                                               var node = a.parentNode.getElementsByTagName( 'a'),\r
+                                                       l = node.length;\r
+                                               for( var i=0; i<l; ++i){\r
+                                                       if( node[ i] === a) return i\r
+                                               }\r
+                                               return -1;\r
+                                       })( this);\r
+                                       if( index === -1) return false;\r
+                                       \r
+                                       pettanr.view.show( index);\r
+                                       return false;\r
+                               },\r
+                               hide: function(){}\r
+                       }\r
+               })();\r
+               \r
+               var elmDl = document.getElementById( 'useragent'),\r
+                       elmDt, elmDd,\r
+                       data = {\r
+                               ua:                     navigator.userAgent,\r
+                               platform:       navigator.platform,\r
+                               appVersion:     navigator.appVersion,\r
+                               appCodeName:navigator.appCodeName,\r
+                               appName:        navigator.appName,\r
+                               language:       navigator.browserLanguage || navigator.language\r
+                       },\r
+                       ua = pettanr.ua;\r
+               if( ua.IE){\r
+                       //data.ua = 'Internet Explorer';\r
+                       data.version = ua.IE;\r
+                       if( ua.ieVersion >= 8) data.RenderingVersion = ua.ieRenderingVersion;\r
+                       data.browserType = ua.STANDALONE === true ? 'Standalone' : 'bundle';\r
+                       if( ua.ieVersion < 9) {\r
+                               data.vml = ua.VML;\r
+                       } else {\r
+                               data.svg = ua.SVG;\r
+                       }\r
+               }\r
+               data.RenderingMode = ua.isStanderdMode === true ? 'Standerd' : 'Quirks';\r
+               \r
+               for( var key in data){\r
+                       elmDt = document.createElement( 'dt');\r
+                       elmDt.innerHTML = key;\r
+                       elmDd = document.createElement( 'dd');\r
+                       elmDd.innerHTML = '' + data[ key];\r
+                       if( !data[ key]) elmDd.style.color = 'red';\r
+                       elmDl.appendChild( elmDt);\r
+                       elmDl.appendChild( elmDd);\r
+               }\r
+       }\r
+\r
+       /* global-navi */\r
+       var navi = document.getElementById('global-navi'),\r
+               origin = document.createElement('a'),\r
+               items = ( function(){\r
+                       var ret = ['Home', 'Comic list', 'Picture', 'Setting'];\r
+                       if( pettanr.DEBUG === true) {\r
+                               ret.push( 'debug');\r
+                               navi.style.width = '400px';\r
+                       }                       \r
+                       return ret;\r
+               })(),\r
+               l = items.length,\r
+               item;\r
+       origin.href = '#';\r
+       for(var i=0; i<l; ++i){\r
+               item = origin.cloneNode( true);\r
+               item.innerHTML = items[ i];\r
+               item.onclick = LoginUserNavi.show;\r
+               navi.appendChild( item);\r
+       }\r
+       location = origin = item = null;\r
+       \r
+       /* debug info */\r
+       // ua version, lang, os, plugin ( vml, svg), standerdmode, balloon, rimg\r
+\r
+/*\r
+ * window resize event, overlay と currentなviewに流す\r
+ * view modeの保持\r
+ *      editor, overlay, comic-viewer, image-explorer\r
+ * fadeIn, faseOut\r
+ */\r
+\r
+       var jqWindow,\r
+               funcArray,\r
+               HOME_ID = 'entrance',\r
+               VIEW_ID_ARRAY = [ HOME_ID, 'cabinet', 'gallery', 'backyard'],\r
+               elmCurrent,\r
+               currentView,\r
+               currentID = ( function( _view){\r
+                       var _viewID;\r
+                       \r
+                       if( typeof _view === 'number' && _view < VIEW_ID_ARRAY.length){\r
+                               _viewID = VIEW_ID_ARRAY[ _view];\r
+                       } else\r
+                       if( typeof _view === 'string'){\r
+                               _viewID = _view;\r
+                       } else {\r
+                               _viewID = HOME_ID;\r
+                       }\r
+\r
+                       if( document.getElementById( _viewID)){\r
+                               return _viewID;\r
+                       }\r
+                       return HOME_ID;\r
+               })( pettanr.URL_PARAMS.view);\r
+       \r
+       pettanr.DEBUG === true && VIEW_ID_ARRAY.push( 'debug');\r
+       \r
+       show();\r
+       \r
+       function onWindowResize(){\r
+               var _fn,\r
+                       l = funcArray.length,\r
+                       w = jqWindow.width(),\r
+                       h = jqWindow.height();\r
+               //for( var i=0; i<l; ++i){\r
+               //      _fn = funcArray[ i];\r
+               //      _fn.onWindowResize && _fn.onWindowResize( w, h);\r
+               //}\r
+               currentView && currentView.onWindowResize && currentView.onWindowResize( w, h);\r
+               pettanr.overlay.currentID !== null && pettanr.overlay.onWindowResize( w, h);\r
+       }\r
+       function show(){\r
+               if( isWorkPage === false) return;\r
+               \r
+               var _elm = document.getElementById( currentID);\r
+               if( elmCurrent) elmCurrent.style.display = 'none';\r
+               _elm.style.display = 'block';\r
+               elmCurrent = _elm;\r
+               \r
+               var     nodesA = navi.getElementsByTagName( 'a') || [],\r
+                       l = nodesA.length,\r
+                       _a;\r
+               for(var i=0; i<l; ++i){\r
+                       if( nodesA[ i]){\r
+                               nodesA[ i].className = VIEW_ID_ARRAY[ i] === currentID ? 'current' : '';\r
+                       }\r
+               }\r
+               \r
+               if( !pettanr.view || pettanr.view.init !== undefined) return;\r
+               currentView = pettanr[ currentID];\r
+               if( !currentView) return;\r
+               typeof currentView.onOpen === 'function' && currentView.onOpen();\r
+               setTimeout( onWindowResize, 0);\r
+       }\r
+       return {\r
+               init: function( _funcArray){\r
+                       funcArray = _funcArray;\r
+                       jqWindow = pettanr.jqWindow();\r
+                       jqWindow.resize( onWindowResize);\r
+                       \r
+                       currentView = currentView || pettanr[ currentID];\r
+                       currentView && typeof currentView.onOpen === 'function' && currentView.onOpen();\r
+                       \r
+                       setTimeout( onWindowResize, 100);\r
+                       \r
+                       delete pettanr.view.init;\r
+               },\r
+               show: function( _viewID){\r
+                       if( typeof _viewID === 'number' && _viewID < VIEW_ID_ARRAY.length){\r
+                               _viewID = VIEW_ID_ARRAY[ _viewID];\r
+                       } else\r
+                       if( typeof _viewID === 'string'){\r
+                               _viewID = _viewID;\r
+                       } else {\r
+                               _viewID = HOME_ID;\r
+                       }\r
+                       for( var key in pettanr.view){\r
+                               if( pettanr.view[ key] === _viewID){\r
+                                       if( currentID !== _viewID && document.getElementById( _viewID)){\r
+                                               this.currentID = currentID = _viewID;\r
+                                               show();\r
+                                       }\r
+                                       return;\r
+                               }\r
+                       }\r
+                       alert( _viewID);\r
+               },\r
+               currentID:      currentID,\r
+               HOME:           HOME_ID,\r
+               COMICS:         VIEW_ID_ARRAY[ 1],\r
+               IMAGES:         VIEW_ID_ARRAY[ 2],\r
+               SETTING:        VIEW_ID_ARRAY[ 3],\r
+               DEBUG:          VIEW_ID_ARRAY[ 4],\r
+               EDITOR:         'editor',\r
+               OVERLAY:        'overlay'\r
+       }\r
+})();\r
+\r
+pettanr.overlay = ( function(){\r
+       var SHADOW_OPACITY = 0.5,\r
+               jqConteiner, jqShadow, jqCloseButton,// jqBody, \r
+               currentOverlay = null,\r
+               visible = false,\r
+               windowW, windowH;\r
+\r
+\r
+       var IMAGE_GROUP_EXPROLER = ( function(){\r
+               var ICON_ARRAY = [],\r
+                       WHEEL_DELTA = 64,\r
+                       containerW, containerH, wrapX,\r
+                       jqWrap, jqContainer, jqItemOrigin,\r
+                       itemW, itemH,\r
+                       jqName, jqButton, buttonW,\r
+                       folder, onUpdateFunction,\r
+                       winW,\r
+                       onEnterInterval = null;\r
+               \r
+               var BASE_PATH = pettanr.LOCAL === false ? 'http://pettan.heroku.com/images/' : 'images/',\r
+                       THUMB_PATH = BASE_PATH, // + 'thumbnail/',\r
+                       LIMIT_FILESIZE = 1024 * 10; // 10KB\r
+               var IMAGE_DATA = 0;\r
+               \r
+               var ImageGroupIconClass = function( INDEX, data){\r
+                       var JQ_ICON_WRAP = jqItemOrigin.clone( true),\r
+                               SRC = [ BASE_PATH, data.id, '.', data.ext].join( ''),\r
+                               LOW_SRC = data.filesize && data.filesize > LIMIT_FILESIZE ? [ THUMB_PATH, data.id, '.', data.ext].join( '') : null,\r
+                               reversibleImage = null,\r
+                               actualW, actualH,\r
+                               onEnterFlag = false;\r
+                       JQ_ICON_WRAP.children( 'div').eq( 0).html( data.filesize + 'bytes');\r
+                       jqContainer.append( JQ_ICON_WRAP.css( { left: INDEX * itemW}));\r
+                       \r
+                       function onLoad( url, _imgW, _imgH){\r
+                               if( reversibleImage === null) {\r
+                                       alert( url);\r
+                                       return;\r
+                               }\r
+                               actualW = _imgW || 64;\r
+                               actualH = _imgH || 64;\r
+                               JQ_ICON_WRAP.children( 'div').eq( 1).html( actualW +'x' +actualH);\r
+                               var zoom = 128 /( actualW > actualH ? actualW : actualH),\r
+                                       _h = Math.floor( actualH *zoom),\r
+                                       _w = Math.floor( actualW *zoom);\r
+                               reversibleImage.elm.style.width = _w +'px';\r
+                               reversibleImage.elm.style.height = _h +'px';\r
+                               reversibleImage.elm.style.margin = Math.floor( itemH /2 -_h /2)+'px 0 0';\r
+                               reversibleImage.resize( _w, _h);\r
+                               JQ_ICON_WRAP.click( onClick);\r
+                       }\r
+                       \r
+                       function onClick( e){\r
+                               pettanr.overlay.hide();\r
+                               if (onUpdateFunction) {\r
+                                       if( LOW_SRC === null){\r
+                                               onUpdateFunction( SRC, actualW, actualH);\r
+                                       } else {\r
+                                               onCloseUpdate( onUpdateFunction); // close()で値が消えるので、クロージャに保持\r
+                                       }\r
+                               }\r
+                               close();                                \r
+                       }\r
+                       \r
+                       function onCloseUpdate( onUpdate){\r
+                               pettanr.util.loadImage( SRC,\r
+                                       function( _abspath, imgW, imgH){\r
+                                               onUpdate( SRC, imgW, imgH);\r
+                                               onUpdate = null;\r
+                                       },\r
+                                       function( _abspath){\r
+                                               onUpdate( SRC, data.width || 64, data.height || 64);\r
+                                               onUpdate = null;\r
+                                       }\r
+                               );\r
+                       }\r
+                       \r
+                       return {\r
+                               onEnter: function(){\r
+                                       if( onEnterFlag === true) return;\r
+                                       reversibleImage = pettanr.image.createReversibleImage( LOW_SRC || SRC, itemW, itemH, onLoad);\r
+                                       JQ_ICON_WRAP.children( 'img').replaceWith( reversibleImage.elm);\r
+                                       onEnterFlag = true;                             \r
+                               },\r
+                               destroy: function(){\r
+                                       reversibleImage && reversibleImage.destroy();\r
+                                       JQ_ICON_WRAP.remove();\r
+                                       reversibleImage = JQ_ICON_WRAP = null;\r
+                                       delete this.destroy;\r
+                               }\r
+                       }\r
+               }\r
+               \r
+               function close(){\r
+                       jqContainer.stop().animate( {\r
+                                       height: 0,\r
+                                       top:    Math.floor( windowH /2)\r
+                               }, function(){\r
+                                       jqWrap.hide()\r
+                               });\r
+                       while( ICON_ARRAY.length > 0){\r
+                               ICON_ARRAY.shift().destroy();\r
+                       }\r
+                       onEnterInterval !== null && window.clearTimeout( onEnterInterval);\r
+                       onUpdateFunction = onEnterInterval = null;\r
+               }\r
+               function onEnterShowImage(){\r
+                       var l = ICON_ARRAY.length,\r
+                               _start = -wrapX /itemW -1,\r
+                               _end = _start + winW /itemW +1;\r
+                       for( var i=0; i<l; ++i){\r
+                               _start < i && i < _end && ICON_ARRAY[ i].onEnter();\r
+                       }\r
+                       onEnterInterval !== null && window.clearTimeout( onEnterInterval);\r
+                       onEnterInterval = null;\r
+               }\r
+               function onCloseClick(){\r
+                       pettanr.overlay.hide();\r
+                       // onUpdateFunction && onUpdateFunction( textElement);\r
+                       close();\r
+               }\r
+               function onMouseWheel( e, delta){\r
+                       if( winW < containerW){\r
+                               wrapX += delta *WHEEL_DELTA;\r
+                               wrapX = wrapX > 0 ? 0 : wrapX < winW -containerW ? winW -containerW : wrapX;\r
+                               jqContainer.css( { left: wrapX});\r
+                               \r
+                               onEnterInterval !== null && window.clearTimeout( onEnterInterval);\r
+                               onEnterInterval = window.setTimeout( onEnterShowImage, 500);\r
+                       }\r
+                       //e.stopPropagation();\r
+                       return false;                   \r
+               }\r
+               return {\r
+                       init: function(){\r
+                               this.jqWrap = jqWrap = $( '#image-gruop-wrapper').hide();\r
+                               jqContainer = $( '#image-icon-container').mousewheel( onMouseWheel);\r
+                               containerH = pettanr.util.getElementSize( jqContainer.get( 0)).height;\r
+                               jqItemOrigin = $( $( '#imageGruopItemTemplete').remove().html());\r
+                               var itemSize = pettanr.util.getElementSize( jqItemOrigin.get( 0));\r
+                               itemW = itemSize.width;\r
+                               itemH = itemSize.height;\r
+                               jqName = $( '#gruop-name-display');\r
+                               jqButton = $( '#image-gruop-button').click( onCloseClick);\r
+                               buttonW = pettanr.util.getElementSize( jqButton.get( 0)).width;\r
+                               \r
+                               delete IMAGE_GROUP_EXPROLER.init;\r
+                       },\r
+                       jqWrap: null,\r
+                       show: function( _folder, _onUpdateFunction){\r
+                               this.init !== undefined && this.init();\r
+                               \r
+                               folder = _folder;\r
+                               onUpdateFunction = _onUpdateFunction;\r
+                               pettanr.overlay.show( this);\r
+                               \r
+                               var l = _folder.getChildFileLength();\r
+                               for( var i=0; i<l; ++i){\r
+                                       ICON_ARRAY.push( new ImageGroupIconClass( i, _folder.getChildFileByIndex( i)));\r
+                               }\r
+                               wrapX = 0;\r
+                               containerW = l * itemW;\r
+                               \r
+                               winW = windowW;\r
+                               var w = winW > containerW ? winW : containerW,\r
+                                       h = windowH > containerH ? containerH : windowH;\r
+                               \r
+                               jqWrap.show();\r
+                               jqContainer.css( {\r
+                                       width:          w,\r
+                                       height:         0,\r
+                                       left:           0,\r
+                                       top:            Math.floor( windowH /2)\r
+                               }).stop().animate( {\r
+                                       height:         h,\r
+                                       top:            Math.floor( windowH /2 -h /2)\r
+                               });\r
+                               \r
+                               jqButton.css( {\r
+                                       left:           Math.floor( winW /2 -buttonW /2),\r
+                                       top:            Math.floor( windowH /2 +containerH /2 +10)\r
+                               });\r
+                               \r
+                               onEnterShowImage();\r
+                       },\r
+                       onWindowResize: function( _windowW, _windowH){\r
+                               var w = _windowW > containerW ? _windowW : containerW,\r
+                                       h = _windowH > containerH ? containerH : _windowH,\r
+                                       offsetW = Math.floor( _windowW /2 -winW /2);\r
+                               winW = _windowW;\r
+                               if( offsetW <= 0){ // smaller\r
+                                       jqContainer.css( {\r
+                                               left:                           offsetW,\r
+                                               width:                          w\r
+                                       }).animate( {\r
+                                               left:                           0,\r
+                                               top:                            Math.floor( _windowH /2 -h /2)\r
+                                       });                                     \r
+                               } else {\r
+                                       jqContainer.css( { // bigger\r
+                                               left:                           0,\r
+                                               width:                          w,\r
+                                               borderLeftWidth:        offsetW\r
+                                       }).animate( {\r
+                                               top:                            Math.floor( _windowH /2 -h /2),\r
+                                               borderLeftWidth:        0\r
+                                       });\r
+                               }\r
+                               jqButton.css( {\r
+                                       left:           Math.floor( _windowW /2 -buttonW /2),\r
+                                       top:            Math.floor( _windowH /2 +containerH /2 +10)\r
+                               });\r
+                               onEnterShowImage();\r
+                       },\r
+                       onClose: close,\r
+                       ID: 'imageGroupExproler'\r
+               }\r
+       })();\r
+       /*\r
+        * 
+        */\r
+\r
+       function close(){\r
+               currentOverlay && currentOverlay.onClose && currentOverlay.onClose();\r
+               pettanr.overlay.hide();         \r
+       }\r
+       function asyncResize(){\r
+               currentOverlay.onWindowResize( windowW, windowH);\r
+       }\r
+       function onCloseClick( e){\r
+               close();\r
+               e.preventDefault();\r
+               return false;           \r
+       }\r
+       return {\r
+               init: function(){\r
+                       //jqBody = pettanr.jqBody();\r
+                       jqConteiner = $( '#overlay-container');\r
+                       jqShadow = $( '#overlay-shadow');\r
+                       jqCloseButton = $( '#overlay-close-button').click( onCloseClick);\r
+                       \r
+                       pettanr.key.addKeyDownEvent( pettanr.view.OVERLAY, 27, false, false, close); // 27.esc\r
+                       \r
+                       delete pettanr.overlay.init;\r
+               },\r
+               show: function( _currentOverlay){\r
+                       if( visible === true && currentOverlay === _currentOverlay) return;\r
+                       jqConteiner.stop().css( {\r
+                               filter:         '',\r
+                               opacity:        ''\r
+                       }).fadeIn();\r
+                       this.visible = visible = true;\r
+                       currentOverlay = _currentOverlay;\r
+                       this.currentID = _currentOverlay.ID;\r
+                       jqCloseButton.toggle( !!_currentOverlay.onClose);\r
+               },\r
+               hide: function(){\r
+                       currentOverlay = null;\r
+                       if( visible === false) return;\r
+                       jqConteiner.stop().css( {\r
+                               filter:         '',\r
+                               opacity:        ''\r
+                       }).fadeOut();\r
+                       this.visible = visible = false;\r
+                       this.currentID = null;\r
+               },\r
+               visible: visible,\r
+               currentID: null,\r
+               onWindowResize: function( _windowW, _windowH){\r
+                       jqConteiner.css( { height:      _windowH});\r
+                       jqShadow.css( { height: _windowH});\r
+                       windowW = _windowW;\r
+                       windowH = _windowH;\r
+                       // 先にeditorのcanvasを確定する。\r
+                       currentOverlay && currentOverlay.onWindowResize && setTimeout( asyncResize, 0);\r
+               }\r
+       }\r
+})();\r
+\r
+/* ----------------------------------------\r
+ * KEY\r
+ * \r
+ *  - EDITABLE_TEXT_CONTROL\r
+ *    - EditableTextClass\r
+ *      .update: function,\r
+ *      .show: function,\r
+ *      .hide: function,\r
+ *      .start: function,\r
+ *      .finish: finish,\r
+ *      .enabled: function,\r
+ *      .index: function,\r
+ *      .instance: function\r
+ * \r
+ *    .SHIFT_DOWN_EVENT:       'shiftDown',\r
+ *    .SHIFT_UP_EVENT:         'shiftUp',\r
+ *    .CTRL_DOWN_EVENT:                'ctrlDown',\r
+ *    .CTRL_UP_EVENT:          'ctrlUp',\r
+ *    .SPACE_DOWN_EVENT:       'spaceDown',\r
+ *    .SPACE_UP_EVENT:         'spaceUp',\r
+ *    .init:                           function,\r
+ *    .addKeyDownEvent:                        function,\r
+ *    .keyEventDispatcher:     function,\r
+ *    .createEditableText:     function,\r
+ * \r
+ * ショートカットキーの監視とテキスト入力(input, textarea)、チェックボックスを管理する。\r
+ * キー入力はdocumentで受けて、テキスト編集中(input, textarea)はそちらにキーイベント流す。\r
+ * \r
+ */\r
+pettanr.key = ( function(){\r
+       var log,\r
+               jqWindow,\r
+               keyOperationChatcher,\r
+               KEYEVENT_ARRAY = [],\r
+               shiftEnabled = false,\r
+               ctrlEnabled = false;\r
+       \r
+       var EDITABLE_TEXT_CONTROL = ( function(){\r
+               var     EDITABLE_TEXT_TABLE = {},\r
+                       currentText = null;\r
+\r
+               var EditableTextClass = function( WRAPPER_ELM, ON_UPDATE_FUNCTION, GROUP_ID){\r
+                       var ELM = WRAPPER_ELM.children( '.editable-value').eq( 0),\r
+                               value = ELM.html(),\r
+                               jqInput,\r
+                               index = EDITABLE_TEXT_TABLE[ GROUP_ID].length,\r
+                               instance,\r
+                               enabled = true,\r
+                               A = $( '<a href="#" onclick="return false;"></a>').html( value).click( function(e){\r
+                                       instance = instance || EDITABLE_TEXT_TABLE[ GROUP_ID][ index];\r
+                                       EDITABLE_TEXT_CONTROL.start( instance);                                                         \r
+                                       A.hide();\r
+                                       jqInput = $( '<input type="text"/>').val( value);\r
+                                       ELM.append( jqInput);\r
+                                       jqInput.focus().select();\r
+                                       e.preventDefault();\r
+                                       return false;\r
+                               });\r
+                       ELM.addClass( 'editable-text').html( A);\r
+                       \r
+                       return {\r
+                               update: function( _value){\r
+                                       value = _value !== undefined ? _value : value;\r
+                                       A.html( value);\r
+                                       jqInput && jqInput.val( value);\r
+                                       currentText === instance && this.finish();\r
+                               },\r
+                               show: function(){\r
+                                       enabled === false && WRAPPER_ELM.show();\r
+                                       enabled= true;\r
+                               },\r
+                               hide: function(){\r
+                                       enabled === true && WRAPPER_ELM.hide();\r
+                                       enabled = false;\r
+                               },\r
+                               start: function(){\r
+                                       !jqInput && A.click();\r
+                               },\r
+                               finish: function( keep){\r
+                                       var _newValue = keep === true ? value : jqInput.val();\r
+                                       A.html( _newValue).show();\r
+                                       jqInput.remove();\r
+                                       jqInput = null;\r
+                                       ON_UPDATE_FUNCTION && _newValue !== value && ON_UPDATE_FUNCTION( _newValue, value);\r
+                                       EDITABLE_TEXT_CONTROL.finish( instance);                                        \r
+                               },\r
+                               enabled: function(){\r
+                                       return enabled;\r
+                               },\r
+                               index : index,\r
+                               groupID: GROUP_ID\r
+                       }\r
+               }\r
+               var CheckboxClass = function( WRAPPER_ELM, ON_UPDATE_FUNCTION, GROUP_ID){\r
+                       var ELM = WRAPPER_ELM.children( '.checkbox-value').eq( 0),\r
+                               value = ELM.html(),\r
+                               jqInput,\r
+                               index = EDITABLE_TEXT_TABLE[ GROUP_ID].length,\r
+                               instance,\r
+                               enabled = true,\r
+                               A = $( '<a href="#" onclick="return false;"></a>').html( value).click( function(e){\r
+                                       instance = instance || EDITABLE_TEXT_TABLE[ GROUP_ID][ index];\r
+                                       EDITABLE_TEXT_CONTROL.start( instance);                                                         \r
+                                       A.hide();\r
+                                       jqInput = $( '<input type="text"/>').val( value);\r
+                                       ELM.append( jqInput);\r
+                                       jqInput.focus().select();\r
+                                       e.preventDefault();\r
+                                       return false;\r
+                               });\r
+                       ELM.addClass( 'editable-text').html( A);\r
+                       \r
+                       function finish(keep){\r
+                               if(keep === true){\r
+\r
+                               } else {\r
+                                       _finish( jqInput.val());\r
+                               }\r
+                               function _finish( VALUE_NEW){\r
+                                       value = VALUE_NEW;\r
+                                       A.html( VALUE_NEW).show();\r
+                                       jqInput.remove();\r
+                                       jqInput = null;\r
+                                       ON_UPDATE_FUNCTION && VALUE_NEW !== value && ON_UPDATE_FUNCTION( VALUE_NEW, value);\r
+                                       EDITABLE_TEXT_CONTROL.finish( instance);\r
+                               }\r
+                       }\r
+                       return {\r
+                               update: function( _value){\r
+                                       value = _value !== undefined ? _value : value;\r
+                                       A.html( value);\r
+                                       jqInput && jqInput.val( value);\r
+                                       currentText === instance && finish();\r
+                               },\r
+                               show: function(){\r
+                                       enabled === false && WRAPPER_ELM.show();\r
+                                       enabled= true;\r
+                               },\r
+                               hide: function(){\r
+                                       enabled === true && WRAPPER_ELM.hide();\r
+                                       enabled = false;\r
+                               },\r
+                               start: function(){\r
+                                       !jqInput && A.click();\r
+                               },\r
+                               finish: finish,\r
+                               enabled: function(){\r
+                                       return enabled;\r
+                               },\r
+                               groupID: GROUP_ID\r
+                       }\r
+               }\r
+               return {\r
+                       createEditableText: function( ELM, ON_UPDATE_FUNCTION, GROUP_ID){\r
+                               if( GROUP_ID && !EDITABLE_TEXT_TABLE[ GROUP_ID]) EDITABLE_TEXT_TABLE[ GROUP_ID] = [];\r
+                               var ret = EditableTextClass.apply( {}, [ ELM, ON_UPDATE_FUNCTION, GROUP_ID]);\r
+                               GROUP_ID && EDITABLE_TEXT_TABLE[ GROUP_ID].push( ret);\r
+                               return ret;\r
+                       },\r
+                       createCheckbox: function( ELM, ON_UPDATE_FUNCTION, GROUP_ID){\r
+                               \r
+                       },\r
+                       start: function( _currentText){\r
+                               currentText !== _currentText && currentText && currentText.finish();\r
+                               currentText = _currentText;\r
+                       },\r
+                       finish: function( _currentText){\r
+                               if( currentText !== _currentText) return;\r
+                               currentText = null \r
+                       },\r
+                       keyEventRellay: function( e){\r
+                               if( e.type === 'keyup') return false;\r
+                               if( currentText === null) return false;\r
+                               \r
+                               var keyCode = e.keyCode;\r
+                               if( keyCode === 13 || keyCode === 27 || keyCode === 9 || keyCode === 18 || e.altKey === true){ // 13.return 27.esc 9.tab 18.alt\r
+                                       var _groupID = currentText.groupID,\r
+                                               _index = currentText.index;\r
+                                       currentText.finish( keyCode === 27);\r
+                                       keyCode === 9 && _groupID && EDITABLE_TEXT_CONTROL.tabShift( _groupID, _index, e.shiftKey === true ? -1 : 1);\r
+                                       keyCode === 13 && _groupID && EDITABLE_TEXT_CONTROL.tabShift( _groupID, _index, 1);\r
+                               }\r
+                               return true;\r
+                       },\r
+                       tabShift: function( _groupID, _index, _way){\r
+                               var GROUP_ARRAY = EDITABLE_TEXT_TABLE[ _groupID] || [],\r
+                                       l = GROUP_ARRAY.length,\r
+                                       i = _index +_way;\r
+                               if( l < 2) return;\r
+                               while( i !== _index){\r
+                                       i = i < 0 ?\r
+                                               l -1 :\r
+                                               i === l ? 0 : i; // 0 < i < l\r
+                                       if( GROUP_ARRAY[ i].enabled() === true) break;\r
+                                       i += _way;\r
+                               }\r
+                               if( i === _index) return;\r
+                               setTimeout( function(){ GROUP_ARRAY[ i].start();}, 0);\r
+                       }\r
+               }\r
+       })();\r
+       \r
+       function keyHit( e){\r
+               log.html( [ e.keyCode, e.shiftKey, e.ctrlKey, e.altKey, e.type].join( ','));\r
+               //keyOperationChatcher.val( '');\r
+               var cancel = false,\r
+                       callback = e.type,\r
+                       key = e.keyCode,\r
+                       overlayEnabled = pettanr.overlay.visible === true,\r
+                       currentViewID = overlayEnabled === true ? pettanr.overlay.currentID : pettanr.view.currentID;\r
+               if( callback === 'keypress') callback = 'keydown';\r
+               if( EDITABLE_TEXT_CONTROL.keyEventRellay( e) === false){\r
+                       var shift = e.shiftKey,\r
+                               ctrl = e.ctrlKey,\r
+                               l = KEYEVENT_ARRAY.length,\r
+                               d;\r
+                       if( key === 16 || e.shiftKey === true){\r
+                               shiftEnabled = callback !== 'keyup';\r
+                       }\r
+                       if( key === 17 || e.ctrlKey === true){\r
+                               ctrlEnabled = callback !== 'keyup';\r
+                       }\r
+\r
+                       for( var i=0; i<l; i++){\r
+                               d = KEYEVENT_ARRAY[ i];\r
+                               if( (\r
+                                               d.viewID === currentViewID ||\r
+                                                       ( overlayEnabled === true && d.viewID === pettanr.view.OVERLAY)\r
+                                       ) &&\r
+                                       d.keyCode === key &&\r
+                                       ( d.shift === undefined || d.shift === shift) &&\r
+                                       ( d.ctrl === undefined || d.ctrl === ctrl)\r
+                               ){\r
+                                       ( function( func, e){\r
+                                               func && setTimeout( function(){\r
+                                                       func( e);\r
+                                                       func = e = null;\r
+                                               }, 0);\r
+                                       })( d[callback], e);\r
+                                       cancel = true;\r
+                               }\r
+                       }\r
+               }\r
+               if( cancel === true || key === 18 || key === 9 || key === 27 || e.altKey === true){ // 13.enter 18.esc 9.tab 27.esc   || ( key === 13 && overlayEnabled === false)\r
+                       e.preventDefault();\r
+               e.keyCode = 0;\r
+               e.cancelBubble = true;\r
+               e.returnValue = false;\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       var keyPress = pettanr.ua.isIE === true && pettanr.ua.ieRenderingVersion < 8 ? ( function( e){\r
+                       var key = e.keyCode;\r
+                       if( key === 13 || key === 27){\r
+                               keyHit( e);\r
+                               return false;\r
+                       }\r
+       }) : null;\r
+       \r
+       return {\r
+               init: function(){\r
+                       log = $( '#key-event-log').html( 'ready');\r
+\r
+                       jqWindow = pettanr.jqWindow().focus();\r
+                       keyOperationChatcher = pettanr.jqDocument()\r
+                               .keydown( keyHit)\r
+                               .keyup( keyHit)\r
+                               .mouseenter( function(){\r
+                                       jqWindow.focus();\r
+                               });\r
+                       keyPress && keyOperationChatcher.keypress( keyPress);\r
+\r
+                       delete pettanr.key.init;\r
+               },\r
+               addKeyDownEvent: function( _viewID, _keyCode, _shift, _ctrl, _callbackFunction){\r
+                       KEYEVENT_ARRAY.push( {\r
+                               viewID:                 _viewID,\r
+                               keyCode:                _keyCode,\r
+                               shift:                  _shift,\r
+                               ctrl:                   _ctrl,\r
+                               keydown:                _callbackFunction\r
+                       });\r
+               },\r
+               addKeyUpdateEvent: function( _viewID, _keyCode, _shift, _ctrl, _callbackFunction){\r
+                       KEYEVENT_ARRAY.push( {\r
+                               viewID:         _viewID,\r
+                               keyCode:        _keyCode,\r
+                               shift:          _shift,\r
+                               ctrl:           _ctrl,\r
+                               keydown:        _callbackFunction,\r
+                               keyup:          _callbackFunction\r
+                       });\r
+               },\r
+               addCursorEvent: function( _viewID, _shift, _ctrl, _callbackFunction){\r
+                       \r
+               },\r
+               keyEventDispatcher: function(){\r
+                       return keyOperationChatcher;\r
+               },\r
+               createEditableText: EDITABLE_TEXT_CONTROL.createEditableText,\r
+               createCheckbox: EDITABLE_TEXT_CONTROL.createCheckbox,\r
+               shiftEnabled: function(){\r
+                       return shiftEnabled;\r
+               },\r
+               ctrlEnabled: function(){\r
+                       return ctrlEnabled;\r
+               }\r
+       }\r
+})();\r
+\r
+/* ----------------------------------------\r
+ * Vector Support\r
+ * \r
+ *              __________\r
+ *             /          \\r
+ *            /            \\r
+ *            |,startX,Y    |\r
+ * tailX,Y - <              |\r
+ *            |'endX,Y      |\r
+ *            \            /\r
+ *                \__________/\r
+ * \r
+ * SVG\r
+ * -----------------------\r
+ * ie9, other modern browser\r
+ * \r
+ * XML\r
+ * -----------------------\r
+ * ie5.5-8\r
+ * \r
+ * 内部の角度計算は radian で統一したい。\r
+ * 当初 vectorEnabled = true で一度書いてみる。\r
+ * 駄目なら、代替のイメージのsrcの用意もここで担当。\r
+ * 閲覧と編集両方で使う。\r
+ * \r
+ */\r
+pettanr.balloon = ( function() {\r
+       var MIN_BALLOON_WIDTH = 30,\r
+               MIN_BALLOON_HEIGHT = 30,\r
+               TAIL_WIDTH = 6,\r
+               TAIL_HEIGHT = 10,\r
+               STROKE_WIDTH = 1.2,\r
+               PADDING_TOP = TAIL_HEIGHT,\r
+               PADDING_LEFT = TAIL_HEIGHT,\r
+               ACCURACY = 1, // 有効少数桁        \r
+               IS_VML = pettanr.ua.isIE === true && pettanr.ua.ieVersion < 9,\r
+               ELM_BALLOON_ORIGIN = ( function(){\r
+                       var ret;\r
+                       try {\r
+                               if( IS_VML === true){\r
+                                       ret = document.createElement( 'DIV');\r
+                                       var shape = document.createElement( 'v:shape');\r
+                                       shape.coordorigin = "0,0";\r
+                                       shape.strokecolor = "black";\r
+                                       shape.strokeweight = STROKE_WIDTH;\r
+                                       shape.fillcolor = "white";\r
+                                       ret.appendChild( shape);\r
+                               } else {\r
+                                       var kSVGNS = 'http://www.w3.org/2000/svg';\r
+                                       ret = document.createElementNS( kSVGNS, 'svg');\r
+                                       var path = document.createElementNS( kSVGNS, 'path');\r
+                                       path.setAttribute( 'fill', "white");\r
+                                       path.setAttribute( 'stroke', "black");\r
+                                       path.setAttribute( 'strokeWidth', STROKE_WIDTH);\r
+                                       ret.appendChild( path);\r
+                               }\r
+                               return ret;     \r
+                       } catch( e){\r
+                               return null;\r
+                       }\r
+               })(),\r
+               NUM_BALLOON_IMAGE = 24,\r
+               vectorEnabled = ELM_BALLOON_ORIGIN !== null && pettanr.URL_PARAMS.vector !== false;\r
+       if( IS_VML === true && pettanr.ua.VML === false) vectorEnabled = false;\r
+\r
+       var XBROWSER_BALLOON_CLASS = function( w, h, a){\r
+               var balloonElm = vectorEnabled === true ? ELM_BALLOON_ORIGIN.cloneNode( true) : document.createElement( 'IMG'), // pettanr.imageに変更\r
+                       path = balloonElm.getElementsByTagName( 'path')[ 0],\r
+                       shape = balloonElm.getElementsByTagName( 'shape')[ 0],\r
+                       cos = Math.cos, sin = Math.sin,\r
+                       abs = Math.abs, pow = Math.pow,\r
+                       round = Math.round,\r
+                       floor = Math.floor,\r
+                       TARGET = TAIL_WIDTH * TAIL_WIDTH,\r
+                       DEG_TO_RAD = Math.PI / 180,\r
+                       l = ',';\r
+               \r
+               draw( a, w, h);\r
+               \r
+               function draw( _a, _w, _h){\r
+                       a = _a !== undefined ? _a : a;\r
+                       w = _w !== undefined ? _w -PADDING_TOP *2 : w;\r
+                       h = _h !== undefined ? _h -PADDING_LEFT *2 : h;\r
+\r
+                       if( vectorEnabled === false){\r
+                               balloonElm.setAttribute( 'src', balloonUrlBuilder( a));\r
+                               return;\r
+                       }\r
+                       \r
+                       var rx = w /2,\r
+                               ry = h /2,\r
+                               tailRad = a * DEG_TO_RAD,\r
+                               tailX = rx +( rx +TAIL_HEIGHT) * cos( tailRad),\r
+                               tailY = ry +( ry +TAIL_HEIGHT) * sin( tailRad),\r
+                               startX, startY, endX, endY;\r
+               /*\r
+                * tailの太さをTAIL_WIDTHに一致させるため、角度を絞りつつ計算\r
+                */\r
+                       var startRad, endRad,\r
+                               _startX, _startY, _endX, _endY,\r
+                               tailDeg = 0, d;\r
+                       \r
+                       for( var i = 45; i > 0.01; i /= 2){\r
+                               d = ( tailDeg +i) /2;\r
+                               startRad = ( a +d) * DEG_TO_RAD;\r
+                               endRad = ( a -d) * DEG_TO_RAD;\r
+                               \r
+                               _startX = rx +cos( startRad) *rx;\r
+                               _startY = ry +sin( startRad) *ry;\r
+                               _endX = rx +cos( endRad) *rx;\r
+                               _endY = ry +sin( endRad) *ry;   //円弧上のY位置=円中心Y+sin(角度×PI÷180)×円半径\r
+                                       \r
+                               if( pow( ( _startX -_endX), 2) + pow( ( _startY -_endY), 2) < TARGET){\r
+                                       tailDeg += i;\r
+                                       startX = _startX;\r
+                                       startY = _startY;\r
+                                       endX = _endX;\r
+                                       endY = _endY;                                           \r
+                               }\r
+                       }\r
+\r
+               /*\r
+                * \r
+                */                     \r
+                       if( IS_VML === true){\r
+                               var _tailX = tailX *10,\r
+                                       _tailY = tailY *10,\r
+                                       __startX = startX *10,\r
+                                       __startY = startY *10,\r
+                                       __endX = endX *10,\r
+                                       __endY = endY *10,\r
+                                       __w = w *10,\r
+                                       __h = h *10;\r
+                               \r
+                               shape.style.width = w +'px';\r
+                               shape.style.height = h +'px';\r
+                               shape.coordsize = [ __w, __h].join( l);\r
+                               shape.path = [\r
+                                       ' ar ', 0, l, 0, l, __w, l, __h, l,\r
+                                       round( __endX), l, round( __endY), l,\r
+                                       round( __startX), l, round( __startY),\r
+                                       ' l ', round( _tailX), l, round( _tailY),\r
+                                       ' x e'\r
+                               ].join( '');\r
+\r
+                               balloonElm.style.marginTop =  _tailY < 0 ? floor( ( 60 +_tailY) /10) : 10;\r
+                               balloonElm.style.marginLeft = _tailX < 0 ? floor( ( 60 +_tailX) /10) : 10;\r
+                       } else {\r
+                               balloonElm.setAttribute( 'width', w +PADDING_LEFT *2);\r
+                               balloonElm.setAttribute( 'height', h +PADDING_TOP *2);\r
+                               path.setAttribute( 'd', [\r
+                                       'M', cround( tailX + PADDING_LEFT), l, cround( tailY +PADDING_TOP),\r
+                                       'L', cround( startX +PADDING_LEFT), l, cround( startY +PADDING_TOP),\r
+                                       'A', rx, l, ry,\r
+                                       '0 1 1',                        // flag\r
+                                       cround( endX +PADDING_LEFT), l, cround( endY +PADDING_TOP),\r
+                                       'z'\r
+                               ].join( ' '));\r
+                       }\r
+                       function cround( v, r){\r
+                               r = r || ACCURACY;\r
+                               return round( v *pow( 10.0, r)) /pow( 10.0, r);\r
+                       }\r
+               }\r
+               \r
+               function balloonUrlBuilder( _a){\r
+                       var d = 360 /NUM_BALLOON_IMAGE;\r
+                       _a += 90 +d /2;\r
+                       return [ 'balloon\/_w', _a < 360 -d /2 ? floor( _a /d) : 0, '.gif'].join( '');\r
+               }\r
+               return {\r
+                       elm: balloonElm,\r
+                       resize: draw,\r
+                       angle: function( _a){\r
+                               _a !== undefined && _a !== a &&\r
+                                       vectorEnabled === false ? balloonUrlBuilder( _a) : draw( _a);\r
+                               return a;\r
+                       },\r
+                       type: function( _type){\r
+                               //draw( _a);\r
+                       },\r
+                       getURL: function(){\r
+                               return balloonUrlBuilder( a);\r
+                       },\r
+                       destroy: function(){\r
+                               balloonElm.parentNode && balloonElm.parentNode.removeChild( balloonElm);\r
+                               balloonElm = null;\r
+                               delete this.destroy;\r
+                       }\r
+               }\r
+       };\r
+       \r
+       IS_VML === false && vectorEnabled === true && ( function(){\r
+               var detect = XBROWSER_BALLOON_CLASS.apply( {}, [ 100, 100, 0]),\r
+                       size = pettanr.util.getElementSize( detect.elm);\r
+               vectorEnabled = size.width !== 0 && size.height !== 0;\r
+               detect.destroy();\r
+               detect = size = null;\r
+       })();\r
+\r
+       return {\r
+           createBalloon: function( _w, _h, _a){\r
+               return XBROWSER_BALLOON_CLASS.apply( {}, [ _w, _h, _a]);\r
+           },\r
+               TYPE_NONE:                              0,\r
+               TYPE_SPEACH_BALLOON:    1,\r
+               TYPE_THINKING:                  2,\r
+               TYPE_BOM:                               3,\r
+               TYPE_BLACK_BOX:                 4,\r
+               TYPE_BLUE_BOX:                  5\r
+       }\r
+})();\r
+\r
+/* ----------------------------------------\r
+ *  pettanr.image\r
+ *  \r
+ *   xBackendな画像反転、画像描画機能。\r
+ *   \r
+ *   画像の反転\r
+ *     - css3\r
+ *     - ActiveX (ie)\r
+ *     - VML (ie)\r
+ *     - canvas ??\r
+ *     - flash(lite)\r
+ *     - silverlight\r
+ *     - pettan server\r
+ *   \r
+ *   png画像の表示(アルファpngをサポートしないie6以下のため)\r
+ *     - ActiveX\r
+ *     - VML\r
+ *     - flash(lite)\r
+ *     - silverlight\r
+ *     \r
+ *     -moz-transform:scale( -1, -1);\r
+ */\r
+pettanr.image = ( function(){\r
+       var REG_PNG = /\.png?/i,\r
+               IS_CSS3 = 0,\r
+               IS_VML = 1,\r
+               IS_ACTIVEX = 2,\r
+               IS_CANVAS = 3,\r
+               IS_FLASH = 4,\r
+               IS_SILVERLIGHT = 5,\r
+               IS_SERVER = 6,\r
+               IS_ACTIVEX_SERVER = 7,\r
+               BACKEND = ( function(){\r
+                       if( pettanr.DEBUG === true && pettanr.URL_PARAMS.rimg){\r
+                               var rimg = pettanr.URL_PARAMS.rimg.toLowerCase();\r
+                               if( rimg === 'css3') return IS_CSS3;\r
+                               if( rimg === 'activex') return IS_ACTIVEX;\r
+                               if( rimg === 'vml') return IS_VML;\r
+                       }\r
+                       if( pettanr.ua.isIE === false || pettanr.ua.ieVersion >= 9) return IS_CSS3; // 不十分!\r
+                       if( pettanr.ua.VML === true) return IS_VML;\r
+                       if( pettanr.ua.ACTIVEX === true) return IS_ACTIVEX;\r
+                       if( pettanr.FLASH === true) return IS_FLASH;\r
+                       if( pettanr.SILVERLIGHT === true) return IS_SILVERLIGHT;\r
+                       return IS_SERVER;\r
+               })(),\r
+               PNG_FIX = pettanr.ua.isIE === true && pettanr.ua.ieVersion <= 6,\r
+               BACKEND_WHEN_PNG = PNG_FIX === false ? BACKEND : ( function(){\r
+                       if( pettanr.ua.VML === true) return IS_VML;\r
+                       if( pettanr.FLASH === true) return IS_FLASH;\r
+                       if( pettanr.SILVERLIGHT === true) return IS_SILVERLIGHT;\r
+                       if( pettanr.ua.ACTIVEX === true) return IS_ACTIVEX_SERVER;\r
+                       return IS_SERVER;\r
+               })();\r
+       \r
+       var XBackendReversibleImageClass = ( function(){\r
+               var CLASS_NAME = 'reversible-image-container',\r
+                       CLASS_NAME_LOADING = CLASS_NAME + ' loading',\r
+                       CLASS_NAME_ERROR = CLASS_NAME +' error',\r
+                       RETRY_DELAY = 5000;\r
+                       NUM_RETRY = 3;\r
+               \r
+               var css3Image = function( url, w, h, onLoadCallback){\r
+                       var elmWrap = document.createElement( 'div'),\r
+                               elmImg,\r
+                               loaded = false,\r
+                               retryTimer = null;\r
+                       elmWrap.className = CLASS_NAME_LOADING;\r
+                       pettanr.util.loadImage( url, onLoad, onError, 100, 10000);\r
+                       function onLoad( _url, _actualW, _actualH){\r
+                               if( elmWrap === null) return;\r
+                               elmImg = new Image;\r
+                               /*\r
+                                * createElement 直後に append しないと、ie(ActiveX)で img が正しく表示されない.\r
+                                */\r
+                               elmWrap.appendChild( elmImg);\r
+                               elmImg.setAttribute( 'src', url);\r
+                               elmWrap.className = CLASS_NAME;\r
+                               onLoadCallback && onLoadCallback( _url, _actualW, _actualH);\r
+                               onLoadCallback = null;\r
+                               loaded = true;\r
+                               resize( w, h);\r
+                       }\r
+                       function onError( _url){\r
+                               if( elmWrap === null) return;\r
+                               elmWrap.className = CLASS_NAME_ERROR;\r
+                               retryTimer = setTimeout( function(){\r
+                                       elmWrap.className = CLASS_NAME_LOADING;\r
+                                       pettanr.util.loadImage( url, onLoad, onError, 100, 10000);\r
+                               }, RETRY_DELAY);\r
+                       }\r
+                       function resize( _w, _h){\r
+                               w = _w !== undefined ? _w : w;\r
+                               h = _h !== undefined ? _h : h;\r
+                               if( loaded === false) return;\r
+                               elmImg.className = w < 0 || h < 0 ? ( 'img-flip-' + ( w < 0 && h < 0 ? 'vh' : ( w < 0 ? 'v' : 'h'))) : '';\r
+                       }\r
+                       return {\r
+                               elm : elmWrap,\r
+                               resize: resize,\r
+                               destroy: function(){\r
+                                       loaded === true && elmWrap.removeChild( elmImg);\r
+                                       retryTimer !== null && clearTimeout( retryTimer);\r
+                                       elmWrap = vmlImg = onLoadCallback = retryTimer = null;\r
+                                       elmWrap = elmImg = onLoadCallback = null;\r
+                                       delete this.destroy;\r
+                               }\r
+                       }\r
+               }\r
+               var activexImage = css3Image;\r
+               var vmlImage = function( url, w, h, onLoadCallback){\r
+                       var elmWrap = document.createElement( 'div'),\r
+                               vmlImg,\r
+                               loaded = false,\r
+                               retryTimer = null;\r
+                       elmWrap.className = CLASS_NAME_LOADING;\r
+                       pettanr.util.loadImage( url, onLoad, onError, 100, 10000);\r
+                       function onLoad( _url, _actualW, _actualH){\r
+                               if( elmWrap === null) return;\r
+                               elmWrap.className = CLASS_NAME;\r
+                               vmlImg = document.createElement( 'v:image');\r
+                               vmlImg.src = url;\r
+                               loaded = true;\r
+                               resize( w, h);\r
+                               onLoadCallback && onLoadCallback( _url, _actualW, _actualH);\r
+                               onLoadCallback = null;\r
+                       }\r
+                       function onError( _url){\r
+                               if( elmWrap === null) return;\r
+                               elmWrap.className = CLASS_NAME_ERROR;\r
+                               retryTimer = setTimeout( function(){\r
+                                       elmWrap.className = CLASS_NAME_LOADING;\r
+                                       pettanr.util.loadImage( url, onLoad, onError, 100, 10000);\r
+                               }, RETRY_DELAY);\r
+                       }\r
+                       function resize( _w, _h){\r
+                               w = _w !== undefined ? _w : w;\r
+                               h = _h !== undefined ? _h : h;\r
+                               if( loaded !== true) return;\r
+                               vmlImg.style.width = w < 0 ? -w : w +'px';\r
+                               vmlImg.style.height = h < 0 ? -h : h +'px';\r
+                               //if( flipH !== _flipH || flipV !== _flipV){\r
+                                       vmlImg.parentNode === elmWrap && elmWrap.removeChild( vmlImg);\r
+                               //}\r
+                                       vmlImg.className = w < 0 || h < 0 ? ( 'img-flip-' + ( w < 0 && h < 0 ? 'vh' : ( w < 0 ? 'v' : 'h'))) : '';\r
+                                       elmWrap.appendChild( vmlImg);\r
+                       }\r
+                       return {\r
+                               elm : elmWrap,\r
+                               resize: resize,\r
+                               destroy: function(){\r
+                                       loaded === true && elmWrap.removeChild( vmlImg);\r
+                                       retryTimer !== null && clearTimeout( retryTimer);\r
+                                       elmWrap = vmlImg = onLoadCallback = retryTimer = null;\r
+                                       delete this.destroy;\r
+                               }\r
+                       }\r
+               }\r
+               var serverImage = function( url, w, h, onLoadCallback){\r
+                       \r
+               }\r
+               \r
+               return function( url, w, h, onLoadCallback){\r
+                               var flipH = w < 0,\r
+                                       flipV = h < 0,\r
+                                       onLoadCallbackAsync = onLoadCallback,// ? function(){ setTimeout( onLoadCallback, 0);} : undefined,// 一度読み込んだ画像は即座にonLoadになるため遅延\r
+                                       xBackendImage = ( function( urlIsXDomain){\r
+                                               if( BACKEND === IS_CSS3) return css3Image.apply( {}, [ url, w, h, onLoadCallbackAsync]);\r
+                                               if( BACKEND === IS_VML) return vmlImage.apply( {}, [ url, w, h, onLoadCallbackAsync]);\r
+                                               if( BACKEND === IS_ACTIVEX) return activexImage.apply( {}, [ url, w, h, onLoadCallbackAsync]);\r
+                                               return serverImage.apply( {}, [ url, w, h, onLoadCallbackAsync]);\r
+                                       })();\r
+                               return {\r
+                                       elm: xBackendImage.elm,\r
+                                       w: function( _w){\r
+                                               _w !== undefined && xBackendImage.resize( _w, h);\r
+                                               return w;\r
+                                       },\r
+                                       h: function( _h){\r
+                                               _h !== undefined && xBackendImage.resize( w, _h);\r
+                                               return h;\r
+                                       },\r
+                                       resize: xBackendImage.resize,\r
+                                       destroy: function(){\r
+                                               xBackendImage.destroy && xBackendImage.destroy();\r
+                                               xBackendImage = onLoadCallback = onLoadCallbackAsync = null;\r
+                                               delete this.destroy;\r
+                                       }\r
+                               }\r
+                       }\r
+       })();\r
+       return {\r
+               createReversibleImage: function( url, w, h, onLoadCallback){\r
+                       return XBackendReversibleImageClass.apply( {}, [ url, w, h, onLoadCallback]);\r
+               }\r
+       }\r
+})();\r
+\r
+\r
+\r
+\r
+/*\r
+ *  Google Analytics
+ */\r
+\r
+var _gaq = _gaq || [];\r
+_gaq.push(['_setAccount', 'UA-28023955-1']);\r
+_gaq.push(['_trackPageview']);\r
+\r
+(function() {\r
+       var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\r
+       ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\r
+       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\r
+})();
\ No newline at end of file
diff --git a/0.4.x/diary/diary.xsl b/0.4.x/diary/diary.xsl
new file mode 100644 (file)
index 0000000..3d94cf4
--- /dev/null
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" \r
+    xmlns="http://www.w3.org/1999/xhtml"> \r
+    <xsl:output \r
+        omit-xml-declaration="no" \r
+        encoding="utf-8" \r
+        method="html" \r
+        version="1.0" \r
+        doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" \r
+        doctype-system="http://www.w3.org/TR/html4/loose.dtd" \r
+        indent="yes" /> \r
+    <xsl:template match="/">\r
+        <xsl:apply-templates/>\r
+    </xsl:template>\r
+       \r
+<xsl:template match="diary">\r
+       <html>\r
+               <head>\r
+                       <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\r
+                       <meta http-equiv="Content-Style-Type" content="text/css" />\r
+                       <meta http-equiv="imagetoolbar" content="no" />\r
+                       <meta name="description">\r
+                               <xsl:attribute name="content">\r
+                                       <xsl:value-of select="@description" />\r
+                               </xsl:attribute>\r
+                       </meta>\r
+                       <title>\r
+                               <xsl:value-of select="@title" />\r
+                   <xsl:if test="@author">\r
+                       <xsl:value-of select="concat(' | ',@author)"/>\r
+                   </xsl:if>\r
+                       </title>\r
+                       <link rel='index' title='index | pettanR' href='http://pettanr.sourceforge.jp/index.html' />\r
+                       <link rel='start' title='pettanR' href='http://pettanr.sourceforge.jp/' />\r
+                       <link rel="stylesheet" type="text/css" href="../common.css" />\r
+               </head>\r
+               <body>\r
+                       <div id="general-content">\r
+                               <div id="outer-wrapper">\r
+                                       \r
+                                       <div id="header">\r
+                                               <div class="base-content-width" style="position:relative;">\r
+                                                       <h1><a href="http://pettanr.sourceforge.jp/">pettanR</a></h1>\r
+                                                       <div id="global-navi">\r
+                                                               <noscript id="noscript-alert">You need to have JavaScript enabled.</noscript>\r
+                                                       </div>\r
+                                               </div>\r
+                                       </div>\r
+                                       \r
+                                       <div id="inner-wrapper" class="base-content-width">\r
+                                               <div id="main">\r
+                                                       <h2><xsl:value-of select="@title" /></h2>\r
+                                                       <dl class="dl-table clearfix">\r
+                                                               <dt>author</dt>\r
+                                                               <dd><xsl:value-of select="@author" /></dd>\r
+                                                               <dt>description</dt>\r
+                                                               <dd><xsl:value-of select="@description" /></dd>\r
+                                                               <dt>published</dt>\r
+                                                               <dd><xsl:value-of select="@published" /></dd>\r
+                                                               <dt>updated</dt>\r
+                                                               <dd><xsl:value-of select="@direction" /></dd>\r
+                                                       </dl>\r
+                                                       \r
+                                                       <xsl:apply-templates/>\r
+                                               </div>\r
+                                       </div>\r
+                               </div>\r
+                       </div>\r
+                       \r
+                       <div id="footer-content">\r
+                               <div id="footer">\r
+                                       <div id="footer-item-container" class="base-content-width clearfix">\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>ぺったんR にようこそ</h2>\r
+                                                               <ul>\r
+                                                                       <li>サンプル</li>\r
+                                                                       <li>ぺったんRの特徴</li>\r
+                                                                       <li>沿革</li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>ドキュメント</h2>\r
+                                                               <ul>\r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors" rel="me" target="_blank">作家向けドキュメント</a></li>\r
+                                    <li>絵師向けドキュメント</li>                         \r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers" rel="me" target="_blank">開発者向けドキュメント</a></li>\r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters" rel="me" target="_blank">編集長向けドキュメント</a></li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>プロトタイプ</h2>\r
+                                                               <ul>\r
+                                    <li><a href="http://pettanr.heroku.com/" rel="me" target="_blank">pettanr.heroku.com</a></li>\r
+                                    <li><a href="../work.html" rel="console">ユーザーコンソール</a></li>\r
+                                                               </ul>\r
+                                                               <h2>Ajax contents</h2>\r
+                                                               <ul>\r
+                                                                       <li><a href="../help/jp.xml">help | jp</a></li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper" style="width:170px;">\r
+                                                       <div class="footer-item" style="padding-right:0;">\r
+                                                               <h2>ぺったんRチーム</h2>\r
+                                                               <ul>\r
+                                                                       <li>わたしたちについて</li>\r
+                                                                       <li>ミッション</li>\r
+                                                                       <li><a href="itozyun.xml">itozyun's diary</a></li>\r
+                                                                       <li>個人情報保護方針</li>\r
+                                                                       <li>作品の取り扱い</li>\r
+                                                                       <li>お問い合わせ</li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                       </div>\r
+                                       <div id="copyright">\r
+                                               Copyright (c) 2011-2012 pettanR team, some rights reserved.\r
+                                       </div>\r
+                               </div>\r
+                       </div>\r
+                       <script type="text/javascript" src="../common.js"></script>\r
+               </body>\r
+       </html>\r
+</xsl:template>\r
+\r
+    <xsl:template match="entry">\r
+               <xsl:for-each select=".">\r
+                       <h3><xsl:value-of select="@pubdate"/></h3>\r
+                       <pre><xsl:apply-templates/></pre>\r
+               </xsl:for-each>         \r
+    </xsl:template>\r
+\r
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/0.4.x/diary/itozyun.xml b/0.4.x/diary/itozyun.xml
new file mode 100644 (file)
index 0000000..a27a5c7
--- /dev/null
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<?xml-stylesheet type="text/xsl" href="diary.xsl"?>\r
+\r
+<diary title="ぺったんR クライアント側開発記録"\r
+               description="この xml ドキュメントは、ぺったんR エディターの開発記録です."\r
+               author="pettan復活チーム・itozyun"        \r
+               published="2012/01/301 20:19:40"\r
+               direction="left"\r
+>\r
+       <entry pubdate="11-08-27">\r
+               開始。当初uupaa.jsを使うも0.8でresize()イベントの拾い方が分からずあきらめる。\r
+       </entry>\r
+       <entry pubdate="11-08-28">\r
+               jQueryに差し替え。コマと半透過レイヤーの高さのリサイズ・windowリサイズを受けたリサイズ。オペレーションキャッチャーによるキャラクタの移動。コミックエレメントにリサイザ用のマークを表示\r
+       </entry>\r
+       <entry pubdate="11-08-29">\r
+               キャラの8方向のリサイズ、マークのみx8、実際にイベントを起こす透明な要素x8で計16個の要素を使う。\r
+       </entry>\r
+       <entry pubdate="11-08-30">\r
+               人に触ってもらったところ、操作性が悪すぎることが判明。自分でいじっている間は深刻度が把握が甘かった、、、\r
+       </entry>\r
+       <entry pubdate="11-08-31">\r
+               ドラッグ周りをjQueryに頼らない形に書き換え。マウスイベントのキャッチはoperationCatcherElmに一任する。処理が遅れ要素からカーソルが離れた段階でドラッグイベントが終了するのを防ぐ。\r
+       </entry>\r
+       <entry pubdate="11-09-02">\r
+               コマ枠のリサイザーのマウスイベントもmouseOperationChacherElmに任せる。コマ枠リサイザーとコマ要素(キャラ・吹き出し)を同列に扱うために処理を書き直す。キーイベントの調査。\r
+       </entry>\r
+       <entry pubdate="11-09-03">\r
+               ctrl+zの実装に備えて、コミック要素の座標を絶対座標からコマ枠からの相対座標とした。\r
+       </entry> \r
+       <entry pubdate="11-09-04">\r
+               altキーは一度押すと他のキー入力ができなくなる。もう一度押すと解除。以上をaltのみreturn falseしてfirefoxでは対処できた。ieではできない。\r
+               ctrl+z 戻る(アニメーション)、ctrl+0 センタリング。\r
+               svgまたはvmlで吹きだしを書いて、Vectorのサポートを調べる\r
+       </entry>\r
+       <entry pubdate="11-09-05">\r
+               ctrl+shift+zで進むを実装してみるもいまいちおかしい、、、\r
+       </entry>\r
+       <entry pubdate="11-09-06">\r
+               吹き出しのしっぽの座標決定ロジックの修正。以前は数回~数百回ループしていたのを、10回程度に固定。\r
+       </entry>\r
+       <entry pubdate="11-09-07">\r
+               戻る・進むのそもそもの考え方が間違っていた。でうまく動作!\r
+       </entry>\r
+       <entry pubdate="11-09-17">\r
+               噴出しの尻尾の回転・復帰ができる!クラス構造どうするかとか手間取ったけど、別に10日間をフルで取り組んでたわけじゃないんだからね。ie7+8でxmlの描画が非常に重い、、、\r
+               ieはマウス操作のたび?にキー入力監視用のinputからfocusが外れるみたいで、intervalで0.5秒おきにfocusさせてみた\r
+       </entry>\r
+       <entry pubdate="11-09-18">\r
+               window関連を始める。まずはinfomationのモックのみ\r
+       </entry>\r
+       <entry pubdate="11-09-19">\r
+               infomationのドラッグ、currentなcomicElementの情報の表示。\r
+               Dragに関わるアイテムは、MouseOperationChacherの下に。そうでないものは上で、ただし使うときだけ。よし!\r
+               jQueryの拡張で、editableTextを作る。こいつでinfomationの属性を編集可能にする。さらにtabキーによる項目移動。tab+shiftでその逆。currentのロックをしないと、属性変更を反映できないな。\r
+       </entry>\r
+       <entry pubdate="11-09-20">\r
+               ツールボックスwindowに着手。\r
+       </entry>        \r
+       <entry pubdate="11-09-22">\r
+               エディタブルテキストの修正を開始。グリッドスイッチを動作。吹き出しの挿入。\r
+       </entry>\r
+       <entry pubdate="11-09-23">\r
+               ie8の8modeに対応。キー周りの見直し。エディタブルテキストの修正。コミックオブジェクト情報⇔背景情報の切り替え。\r
+       </entry>\r
+       <entry pubdate="11-09-24">\r
+               クロスブラウザな吹き出しクラスの整理。画像⇔ベジェの切り替えもh2c.vectorに置く。キャンバスのドラッグ。ショートカットキーのie7以下対応。\r
+       </entry>\r
+       <entry pubdate="11-09-25">\r
+               コミックオブジェクトの操作ボタンの表示。小さい場合は外に表示。その際にはフォーカスがヒットエリアの外にも拡大。カレントなオブジェクトは優先してヒットエリアをチェック。尻尾操作の位置を修正。\r
+       </entry>\r
+       <entry pubdate="11-11-20">\r
+               再開!テキストの編集が可能に。履歴も効きます。まだリターンキーが反応しない。\r
+       </entry>\r
+       <entry pubdate="11-11-22">\r
+               comicElementの削除。ヒストリーも動作。\r
+       </entry>\r
+       <entry pubdate="11-11-23">\r
+               comicElementの追加(今はtextのみ)ヒストリーも動作。グループイメージの選択画面に着手。まだ操作はできない。\r
+       </entry>\r
+       <entry pubdate="11-11-26">\r
+               イメージの追加、ヒストリーも動作。グループイメージの選択画面も動くようになる。comicElementのコンソールのボタンに画像を用意。\r
+       </entry>\r
+       <entry pubdate="11-11-28">\r
+               レイヤーの前後、ヒストリーも動作。\r
+       </entry>\r
+       <entry pubdate="11-11-29">\r
+               グループ画像選択画面の画像の読み込みエラーに対処、マウスホイールでスクロール、filesizeの大きいものはサムネイルを表示、画面の外の画像は表示範囲に入るまで読み込まない、クリックで画像取得のリトライ。\r
+       </entry>\r
+       <entry pubdate="11-12-03">\r
+               ヒストリーに格納されたcomicElementのうち、append & removeに関するもので、ヒストリーから参照されなくなったものは.destroy()するようにする。main.jsが100KB超え。。。\r
+               file + io なクラスが必要。\r
+               xBackend(css3,ActiveX,vml,flash,silverlight,canvas)な画像の反転、ロード監視、png fix(ie6-) してくれる画像ラッパーが必要。\r
+       </entry>\r
+       <entry pubdate="11-12-06">\r
+               vmlを使ったie用のReversibleImageClassが動作。vmlはclassを変えた後に、再びelmWrap.appendChild(vmlImg)しないと再描画されない。\r
+       </entry>\r
+       <entry pubdate="11-12-11">\r
+               画像の反転操作ができるように!ヒストリーも動作。現在のバックエンドは、css3,vml,ActiveV。\r
+               jQueryが不要そうな部分は直接domに触るようにする。style.width,style.heightにieではマイナスは不可、'px'が不要。\r
+               ieでイメージの縦横pxが取れず、jsonからのデータを入れる。\r
+       </entry>\r
+       <entry pubdate="11-12-13">\r
+               ieでイメージの縦横pxが取れない問題の解消。new Image()の場合、ie8以下ではサイズが取れなかったり、removeChildに失敗するっぽい。\r
+       </entry>\r
+       <entry pubdate="11-12-18">\r
+               helpウインドウの追加。併せてWindowClass周りの大幅な書き換え。クロージャを効かせるスタイルでも継承っぽい書き方ができたかも(継承ではない.継承親・子で相互に利用するプロパティがないと美しく収まるだけ、、、)。\r
+               domTreeに追加する前にjQueryでセットしても特にイベント周りで表示がおかしくなる.ieでは特に酷い。\r
+       </entry>\r
+       <entry pubdate="11-12-25">\r
+               メニューバーが動作するようになる。他にマウスイベントリスナへのイベント伝播の書き換え。\r
+       </entry>\r
+       <entry pubdate="11-12-30">\r
+               shiftキーを押しながらのリサイズでは、縦横比が維持するようにする。\r
+       </entry>\r
+       <entry pubdate="11-12-31">\r
+               http://pettanr.sourceforge.jp/ の top ページを制作。\r
+       </entry>\r
+       <entry pubdate="12-01-01">\r
+               help ドキュメントを .xml から読み込むようにする。.xml が検索結果に表示されユーザーに開かれた場合、.xsl で html 化して表示しユーザーを正しいページに誘導する.\r
+               .xml に埋め込まれた script などの対策もしておいたけど、あんなもんでいいのだろうか??\r
+       </entry>\r
+       <entry pubdate="12-01-02">\r
+               Quit > getAsHTML が少し動作, サーバ画像での吹きだし表示も動作。\r
+               90°, -90°のときに起きていたしっぽの操作ボタンのジャンプを修正。\r
+       </entry>\r
+       <entry pubdate="12-01-03">\r
+               helpドキュメント の xml の内容を元に、メニューバーの help の内容を入れるようにする。このあたりは入り組んでしまっている。\r
+               vml が使えるか?は、vml を描画してそのサイズの取得からはできない。vml 用の条件コメントを使用に切り替えなくては。\r
+               ActiveX による反転画像モードのときに、ie で画像が表示されなかった。img を appendChild するタイミングを先にすると解消したみたい。\r
+       </entry>\r
+</diary>
\ No newline at end of file
diff --git a/0.4.x/error.png b/0.4.x/error.png
new file mode 100644 (file)
index 0000000..10c0345
Binary files /dev/null and b/0.4.x/error.png differ
diff --git a/0.4.x/folder_album.png b/0.4.x/folder_album.png
new file mode 100644 (file)
index 0000000..6f89c9d
Binary files /dev/null and b/0.4.x/folder_album.png differ
diff --git a/0.4.x/folder_general.png b/0.4.x/folder_general.png
new file mode 100644 (file)
index 0000000..99a41b9
Binary files /dev/null and b/0.4.x/folder_general.png differ
diff --git a/0.4.x/grid.gif b/0.4.x/grid.gif
new file mode 100644 (file)
index 0000000..5eb20fd
Binary files /dev/null and b/0.4.x/grid.gif differ
diff --git a/0.4.x/help/help.xsl b/0.4.x/help/help.xsl
new file mode 100644 (file)
index 0000000..47fc6ea
--- /dev/null
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" \r
+    xmlns="http://www.w3.org/1999/xhtml"> \r
+    <xsl:output \r
+        omit-xml-declaration="no" \r
+        encoding="utf-8" \r
+        method="html" \r
+        version="1.0" \r
+        doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" \r
+        doctype-system="http://www.w3.org/TR/html4/loose.dtd" \r
+        indent="yes" /> \r
+    <xsl:template match="/">\r
+        <xsl:apply-templates/>\r
+    </xsl:template>\r
+       \r
+<xsl:template match="pages">\r
+       <html>\r
+               <head>\r
+                       <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\r
+                       <meta http-equiv="Content-Style-Type" content="text/css" />\r
+                       <meta http-equiv="imagetoolbar" content="no" />\r
+                       <meta name="description">\r
+                               <xsl:attribute name="content">\r
+                                       <xsl:value-of select="@description" />\r
+                               </xsl:attribute>\r
+                       </meta>\r
+                       <title>\r
+                               <xsl:value-of select="@title" />\r
+                   <xsl:if test="@author">\r
+                       <xsl:value-of select="concat(' | ',@author)"/>\r
+                   </xsl:if>\r
+                       </title>\r
+                       <link rel='index' title='index | pettanR' href='http://pettanr.sourceforge.jp/index.html' />\r
+                       <link rel='start' title='pettanR' href='http://pettanr.sourceforge.jp/' />\r
+                       <link rel="stylesheet" type="text/css" href="../common.css" />\r
+               </head>\r
+               <body>\r
+                       <div id="general-content">\r
+                               <div id="outer-wrapper">\r
+                                       \r
+                                       <div id="header">\r
+                                               <div class="base-content-width" style="position:relative;">\r
+                                                       <h1><a href="http://pettanr.sourceforge.jp/">pettanR</a></h1>\r
+                                                       <div id="global-navi">\r
+                                                               <noscript id="noscript-alert">You need to have JavaScript enabled.</noscript>\r
+                                                       </div>\r
+                                               </div>\r
+                                       </div>\r
+                                       \r
+                                       <div id="inner-wrapper" class="base-content-width">\r
+                                               <div id="main">\r
+                                                       <h2><xsl:value-of select="@title" /></h2>\r
+                                                       <dl class="dl-table clearfix">\r
+                                                               <dt>author</dt>\r
+                                                               <dd><xsl:value-of select="@author" /></dd>\r
+                                                               <dt>description</dt>\r
+                                                               <dd><xsl:value-of select="@description" /></dd>\r
+                                                               <dt>workgroup</dt>\r
+                                                               <dd><xsl:value-of select="@workgroup" /></dd>\r
+                                                               <dt>published</dt>\r
+                                                               <dd><xsl:value-of select="@published" /></dd>\r
+                                                               <dt>updated</dt>\r
+                                                               <dd><xsl:value-of select="@updated" /></dd>\r
+                                                               <dt>direction</dt>\r
+                                                               <dd><xsl:value-of select="@direction" /></dd>\r
+                                                       </dl>\r
+                                                       \r
+                                                       <xsl:apply-templates/>\r
+                                               </div>\r
+                                       </div>\r
+                               </div>\r
+                       </div>\r
+                       \r
+                       <div id="footer-content">\r
+                               <div id="footer">\r
+                                       <div id="footer-item-container" class="base-content-width clearfix">\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>ぺったんR にようこそ</h2>\r
+                                                               <ul>\r
+                                                                       <li>サンプル</li>\r
+                                                                       <li>ぺったんRの特徴</li>\r
+                                                                       <li>沿革</li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>ドキュメント</h2>\r
+                                                               <ul>\r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors" rel="me" target="_blank">作家向けドキュメント</a></li>\r
+                                    <li>絵師向けドキュメント</li>                         \r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers" rel="me" target="_blank">開発者向けドキュメント</a></li>\r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters" rel="me" target="_blank">編集長向けドキュメント</a></li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>プロトタイプ</h2>\r
+                                                               <ul>\r
+                                    <li><a href="http://pettanr.heroku.com/" rel="me" target="_blank">pettanr.heroku.com</a></li>\r
+                                    <li><a href="../work.html" rel="console">ユーザーコンソール</a></li>\r
+                                                               </ul>\r
+                                                               <h2>Ajax contents</h2>\r
+                                                               <ul>\r
+                                                                       <li><a href="jp.xml">help | jp</a></li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper" style="width:170px;">\r
+                                                       <div class="footer-item" style="padding-right:0;">\r
+                                                               <h2>ぺったんRチーム</h2>\r
+                                                               <ul>\r
+                                                                       <li>わたしたちについて</li>\r
+                                                                       <li>ミッション</li>\r
+                                                                       <li><a href="../diary/itozyun.xml">itozyun's diary</a></li>\r
+                                                                       <li>個人情報保護方針</li>\r
+                                                                       <li>作品の取り扱い</li>\r
+                                                                       <li>お問い合わせ</li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                       </div>\r
+                                       <div id="copyright">\r
+                                               Copyright (c) 2011-2012 pettanR team, some rights reserved.\r
+                                       </div>\r
+                               </div>\r
+                       </div>\r
+                       <script type="text/javascript" src="../common.js"></script>\r
+               </body>\r
+       </html>\r
+</xsl:template>\r
+\r
+    <xsl:template match="page">\r
+               <xsl:for-each select=".">\r
+                       <h3><xsl:value-of select="@title"/></h3>\r
+                       <pre><xsl:apply-templates/></pre>\r
+               </xsl:for-each>         \r
+    </xsl:template>\r
+\r
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/0.4.x/help/jp.xml b/0.4.x/help/jp.xml
new file mode 100644 (file)
index 0000000..5cc8081
--- /dev/null
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<?xml-stylesheet type="text/xsl" href="help.xsl"?>\r
+\r
+<pages title="ぺったんR エディタ  ヘルプドキュメント"\r
+description="この xml ドキュメントは、ぺったんR エディターのためのヘルプで、ぺったんR用エディターから読み込まれて使用されます."\r
+author="pettan復活チーム"\r
+workgroup="transration group url"\r
+published="2011/12/31 00:00:00"\r
+updated="2011/12/31 00:00:00"\r
+direction="left"\r
+>\r
+       <page title="ようこそ!">\r
+               <![CDATA[\r
+               <div style="text-align:center;margin: 1em 0 2em;">\r
+               <img src="help/wellcom.png" width="200" height="200">\r
+               </div>\r
+               <p>ぺったんR はWebブラウザだけでマンガが簡単に作れてしまうツール & サービスです。</p>\r
+               <p>この ぺったんR エディターの使い方をマスターしたらちょっと楽しいかも。</p>\r
+               <h3>INDEX</h3>\r
+               <dl class="dl-table-small clearfix">\r
+                       <dt><a href="#jump1">基本的な使い方</a></dt>\r
+                       <dd>ちょっと目を通してみてね</dd>\r
+                       <dt><a href="#jump2">cool!な使い方</a></dt>\r
+                       <dd>かっこいい使い方の紹介</dd>\r
+                       <dt><a href="#jump3">ショートカット</a></dt>\r
+                       <dd>ショートカットキーを使えばスムーズにマンガが作れる!</dd>\r
+                       <dt><a href="#jump4">保存形式</a></dt>\r
+                       <dd>ぺったんR に投稿するほかにお持ち帰りができます</dd>\r
+                       <dt><a href="#jump5">ライセンス</a></dt>\r
+                       <dd>素材画像のライセンスについて</dd>\r
+                       <dt><a href="#jump6">エディタについて</a></dt>\r
+                       <dd>バージョンと対応ブラウザ</dd>\r
+               </dl>\r
+               ]]>\r
+       </page>\r
+       <page title="基本的な使い方">\r
+               <![CDATA[\r
+               <h3>画像の追加</h3>\r
+               <h3>吹き出しの追加</h3>\r
+               <h3>背景の設定</h3>\r
+               ]]>\r
+       </page>\r
+       <page title="cool!な使い方">\r
+               <![CDATA[\r
+               <h3>グリッド編集モード</h3>\r
+               <h3>マンガ以外にもこんなことが</h3>\r
+               ]]>\r
+       </page>\r
+       <page title="ショートカット">\r
+               <![CDATA[\r
+               <h3>画像や吹き出しの操作</h3>\r
+               <dl class="dl-table-small clearfix">\r
+                       <dt>ctrl + Z</dt>\r
+                       <dd>戻る</dd>\r
+                       <dt>ctrl + Y</dt>\r
+                       <dd>進む</dd>\r
+                       <dt>ctrl + shift + Z</dt>\r
+                       <dd>進む</dd>\r
+                       <dt>ctrl + F</dt>\r
+                       <dd>画像や吹き出しを前に</dd>\r
+                       <dt>ctrl + B</dt>\r
+                       <dd>画像や吹き出しを後に</dd>\r
+                       <dt>ctrl + E</dt>\r
+                       <dd>テキストの編集</dd>\r
+                       <dt>ctrl + I</dt>\r
+                       <dd>画像の追加</dd>\r
+                       <dt>ctrl + T</dt>\r
+                       <dd>吹きだしの追加</dd>\r
+                       <dt>ctrl + D</dt>\r
+                       <dd>画像や吹き出しの削除</dd>\r
+                       <dt>ESC</dt>\r
+                       <dd>変更の取り消し</dd>\r
+               </dl>\r
+               <h3>キャンバスの操作</h3>\r
+               <dl class="dl-table-small clearfix">\r
+                       <dt>ctrl + 0</dt>\r
+                       <dd>キャンバスのセンタリング</dd>\r
+                       <dt>ctrl + G</dt>\r
+                       <dd>グリッドモードのオン・オフ</dd>\r
+               </dl>\r
+               <h3>テキスト入力エリア</h3>\r
+               <dl class="dl-table-small clearfix">\r
+                       <dt>tab</dt>\r
+                       <dd>次の入力エリアにフォーカス</dd>\r
+                       <dt>shift + tab</dt>\r
+                       <dd>前の入力エリアにフォーカス</dd>\r
+                       <dt>ESC</dt>\r
+                       <dd>変更の取り消し</dd>\r
+               </dl>\r
+               ]]>\r
+       </page>\r
+       <page title="保存形式">\r
+               <![CDATA[\r
+               <h3>ぺったんサーバにポスト</h3>\r
+               <h3>ローカルに保存</h3>\r
+               <dl class="dl-table-small clearfix">\r
+                       <dt>MT形式</dt>\r
+                       <dd>MT</dd>\r
+                       <dt>htmlタグ形式</dt>\r
+                       <dd>html</dd>\r
+                       <dt>json形式</dt>\r
+                       <dd>json</dd>\r
+                       <dt>xml形式</dt>\r
+                       <dd>xml</dd>\r
+                       <dt>pdf形式</dt>\r
+                       <dd>pdf</dd>\r
+               </dl>\r
+               ]]>\r
+       </page>\r
+       <page title="ライセンス">\r
+               <![CDATA[\r
+               <h3>ライセンスとは?</h3>\r
+               <p>ぺったんに用意されている画像には著作権があり、多くの場合、著作者の設定したライセンスのもとにあなたのマンガ作品への利用が許可されています.</p>\r
+               <p>そのライセンスにはいくつかの種類があり、ぺったんRを活用していくうちにそれらのライセンスについて、一定の知識が必要になることと思います.</p>\r
+               <p>これをめんどくさい、煩わしいことに感じるかもしれません.でも、画像を提供してくれた方に敬意を払い、適切に扱うために是非覚えておいてください.</p>\r
+               <h3>ライセンスの種類</h3>\r
+               <h4>一般的なライセンス</h4>\r
+               <dl class="dl-table-small clearfix">\r
+                       <dt>Public Domain</dt>\r
+                       <dd>Public Domain</dd>\r
+                       <dt>cc-by</dt>\r
+                       <dd>Creative Commons 3.0(by)</dd>\r
+                       <dt>cc-nd</dt>\r
+                       <dd>cc-nd</dd>\r
+                       <dt>cc-nc</dt>\r
+                       <dd>cc-nc</dd>\r
+                       <dt>cc-nd</dt>\r
+                       <dd>cc-nd</dd>\r
+                       <dt>cc-sa</dt>\r
+                       <dd>cc-sa</dd>\r
+                       <dt>Unknown</dt>\r
+                       <dd>著作権がはっきりしないもの </dd>\r
+               </dl>\r
+               <h4>オリジナルライセンス</h4>\r
+               <p>絵師はオリジナルなライセンスを作成し、自分の画像作品にそれを適用することができます.</p>\r
+               <p>このようなライセンスによって提供されている画像を使用したい場合、あなたにはより一層の注意が必要です.</p>\r
+               <p>ライセンスの条文が公開されている url を確認しておきましょう.</p>\r
+               ]]>\r
+       </page>\r
+       <page title="エディタについて">\r
+               <![CDATA[\r
+               <div style="text-align:center;margin:1em 0 2em;">\r
+                       <div style="margin:1em;color:#550055;font-size:1.4em;font-weight:bold;text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6);margin-left: 0;">pettanR editor</div>\r
+                       <div style="margin:1em;">version 0.4.0</div>\r
+                       <div style="margin:1em;">&copy; 2011 pettanR team some rights reserved.</div>\r
+               </div>\r
+               <h3>推奨動作環境</h3>\r
+               <h4>Windows</h4>\r
+               <dl class="dl-table-small clearfix">\r
+                       <dt>Internet Exproler</dt>\r
+                       <dd>ie9, ie8, ie7, ie6 ie9で良好に動作します.</dd>\r
+                       <dt>Firefox</dt>\r
+                       <dd>3.6以上で動作確認.</dd>\r
+                       <dt>Chrome</dt>\r
+                       <dd>5以上で動作確認.</dd>\r
+                       <dt>Safari</dt>\r
+                       <dd>3.2以上で動作確認.</dd>\r
+                       <dt>Opera</dt>\r
+                       <dd>11以上を推奨.</dd>\r
+               </dl>\r
+               <h4>Mac</h4>\r
+               <h4>Linux</h4>\r
+               <h4>スマートフォン</h4>\r
+               ]]>\r
+       </page>\r
+</pages>
\ No newline at end of file
diff --git a/0.4.x/help/wellcom.png b/0.4.x/help/wellcom.png
new file mode 100644 (file)
index 0000000..b23824d
Binary files /dev/null and b/0.4.x/help/wellcom.png differ
diff --git a/0.4.x/icons.gif b/0.4.x/icons.gif
new file mode 100644 (file)
index 0000000..4759cc8
Binary files /dev/null and b/0.4.x/icons.gif differ
diff --git a/0.4.x/images/1.gif b/0.4.x/images/1.gif
new file mode 100644 (file)
index 0000000..d64c568
Binary files /dev/null and b/0.4.x/images/1.gif differ
diff --git a/0.4.x/images/1.png b/0.4.x/images/1.png
new file mode 100644 (file)
index 0000000..d57db50
Binary files /dev/null and b/0.4.x/images/1.png differ
diff --git a/0.4.x/images/10.gif b/0.4.x/images/10.gif
new file mode 100644 (file)
index 0000000..cab8486
Binary files /dev/null and b/0.4.x/images/10.gif differ
diff --git a/0.4.x/images/11.gif b/0.4.x/images/11.gif
new file mode 100644 (file)
index 0000000..b34aa73
Binary files /dev/null and b/0.4.x/images/11.gif differ
diff --git a/0.4.x/images/12.gif b/0.4.x/images/12.gif
new file mode 100644 (file)
index 0000000..6eddb0a
Binary files /dev/null and b/0.4.x/images/12.gif differ
diff --git a/0.4.x/images/13.gif b/0.4.x/images/13.gif
new file mode 100644 (file)
index 0000000..42baf55
Binary files /dev/null and b/0.4.x/images/13.gif differ
diff --git a/0.4.x/images/14.gif b/0.4.x/images/14.gif
new file mode 100644 (file)
index 0000000..ebaaad1
Binary files /dev/null and b/0.4.x/images/14.gif differ
diff --git a/0.4.x/images/15.gif b/0.4.x/images/15.gif
new file mode 100644 (file)
index 0000000..406dcaf
Binary files /dev/null and b/0.4.x/images/15.gif differ
diff --git a/0.4.x/images/16.gif b/0.4.x/images/16.gif
new file mode 100644 (file)
index 0000000..f36f0a0
Binary files /dev/null and b/0.4.x/images/16.gif differ
diff --git a/0.4.x/images/17.gif b/0.4.x/images/17.gif
new file mode 100644 (file)
index 0000000..e552479
Binary files /dev/null and b/0.4.x/images/17.gif differ
diff --git a/0.4.x/images/1751.gif b/0.4.x/images/1751.gif
new file mode 100644 (file)
index 0000000..cebd92e
Binary files /dev/null and b/0.4.x/images/1751.gif differ
diff --git a/0.4.x/images/1752.gif b/0.4.x/images/1752.gif
new file mode 100644 (file)
index 0000000..9bc800c
Binary files /dev/null and b/0.4.x/images/1752.gif differ
diff --git a/0.4.x/images/1753.gif b/0.4.x/images/1753.gif
new file mode 100644 (file)
index 0000000..dd26074
Binary files /dev/null and b/0.4.x/images/1753.gif differ
diff --git a/0.4.x/images/1754.gif b/0.4.x/images/1754.gif
new file mode 100644 (file)
index 0000000..dd26074
Binary files /dev/null and b/0.4.x/images/1754.gif differ
diff --git a/0.4.x/images/18.gif b/0.4.x/images/18.gif
new file mode 100644 (file)
index 0000000..589ed6d
Binary files /dev/null and b/0.4.x/images/18.gif differ
diff --git a/0.4.x/images/1876.gif b/0.4.x/images/1876.gif
new file mode 100644 (file)
index 0000000..269f0af
Binary files /dev/null and b/0.4.x/images/1876.gif differ
diff --git a/0.4.x/images/1877.gif b/0.4.x/images/1877.gif
new file mode 100644 (file)
index 0000000..b45421c
Binary files /dev/null and b/0.4.x/images/1877.gif differ
diff --git a/0.4.x/images/1878.gif b/0.4.x/images/1878.gif
new file mode 100644 (file)
index 0000000..9e9dc4d
Binary files /dev/null and b/0.4.x/images/1878.gif differ
diff --git a/0.4.x/images/1885.gif b/0.4.x/images/1885.gif
new file mode 100644 (file)
index 0000000..3352479
Binary files /dev/null and b/0.4.x/images/1885.gif differ
diff --git a/0.4.x/images/1886.gif b/0.4.x/images/1886.gif
new file mode 100644 (file)
index 0000000..e504bde
Binary files /dev/null and b/0.4.x/images/1886.gif differ
diff --git a/0.4.x/images/1887.gif b/0.4.x/images/1887.gif
new file mode 100644 (file)
index 0000000..d30db58
Binary files /dev/null and b/0.4.x/images/1887.gif differ
diff --git a/0.4.x/images/1891.gif b/0.4.x/images/1891.gif
new file mode 100644 (file)
index 0000000..c87f77c
Binary files /dev/null and b/0.4.x/images/1891.gif differ
diff --git a/0.4.x/images/1892.gif b/0.4.x/images/1892.gif
new file mode 100644 (file)
index 0000000..244ec1d
Binary files /dev/null and b/0.4.x/images/1892.gif differ
diff --git a/0.4.x/images/1893.gif b/0.4.x/images/1893.gif
new file mode 100644 (file)
index 0000000..047f47c
Binary files /dev/null and b/0.4.x/images/1893.gif differ
diff --git a/0.4.x/images/1894.gif b/0.4.x/images/1894.gif
new file mode 100644 (file)
index 0000000..44070f7
Binary files /dev/null and b/0.4.x/images/1894.gif differ
diff --git a/0.4.x/images/19.gif b/0.4.x/images/19.gif
new file mode 100644 (file)
index 0000000..deabc45
Binary files /dev/null and b/0.4.x/images/19.gif differ
diff --git a/0.4.x/images/1911.gif b/0.4.x/images/1911.gif
new file mode 100644 (file)
index 0000000..7e8e85b
Binary files /dev/null and b/0.4.x/images/1911.gif differ
diff --git a/0.4.x/images/1946.gif b/0.4.x/images/1946.gif
new file mode 100644 (file)
index 0000000..1860063
Binary files /dev/null and b/0.4.x/images/1946.gif differ
diff --git a/0.4.x/images/1947.gif b/0.4.x/images/1947.gif
new file mode 100644 (file)
index 0000000..3e88d52
Binary files /dev/null and b/0.4.x/images/1947.gif differ
diff --git a/0.4.x/images/1987.gif b/0.4.x/images/1987.gif
new file mode 100644 (file)
index 0000000..ad2f80e
Binary files /dev/null and b/0.4.x/images/1987.gif differ
diff --git a/0.4.x/images/1990.gif b/0.4.x/images/1990.gif
new file mode 100644 (file)
index 0000000..9822018
Binary files /dev/null and b/0.4.x/images/1990.gif differ
diff --git a/0.4.x/images/2.gif b/0.4.x/images/2.gif
new file mode 100644 (file)
index 0000000..11f50ba
Binary files /dev/null and b/0.4.x/images/2.gif differ
diff --git a/0.4.x/images/20.gif b/0.4.x/images/20.gif
new file mode 100644 (file)
index 0000000..703ac45
Binary files /dev/null and b/0.4.x/images/20.gif differ
diff --git a/0.4.x/images/2084.gif b/0.4.x/images/2084.gif
new file mode 100644 (file)
index 0000000..b3a4e41
Binary files /dev/null and b/0.4.x/images/2084.gif differ
diff --git a/0.4.x/images/21.gif b/0.4.x/images/21.gif
new file mode 100644 (file)
index 0000000..df60157
Binary files /dev/null and b/0.4.x/images/21.gif differ
diff --git a/0.4.x/images/2153.gif b/0.4.x/images/2153.gif
new file mode 100644 (file)
index 0000000..46d7d15
Binary files /dev/null and b/0.4.x/images/2153.gif differ
diff --git a/0.4.x/images/2157.gif b/0.4.x/images/2157.gif
new file mode 100644 (file)
index 0000000..6bd89f9
Binary files /dev/null and b/0.4.x/images/2157.gif differ
diff --git a/0.4.x/images/2158.gif b/0.4.x/images/2158.gif
new file mode 100644 (file)
index 0000000..3fd90b6
Binary files /dev/null and b/0.4.x/images/2158.gif differ
diff --git a/0.4.x/images/2165.gif b/0.4.x/images/2165.gif
new file mode 100644 (file)
index 0000000..8400292
Binary files /dev/null and b/0.4.x/images/2165.gif differ
diff --git a/0.4.x/images/2168.gif b/0.4.x/images/2168.gif
new file mode 100644 (file)
index 0000000..7ac92c6
Binary files /dev/null and b/0.4.x/images/2168.gif differ
diff --git a/0.4.x/images/22.gif b/0.4.x/images/22.gif
new file mode 100644 (file)
index 0000000..6a673fd
Binary files /dev/null and b/0.4.x/images/22.gif differ
diff --git a/0.4.x/images/2276.gif b/0.4.x/images/2276.gif
new file mode 100644 (file)
index 0000000..9ef4e17
Binary files /dev/null and b/0.4.x/images/2276.gif differ
diff --git a/0.4.x/images/2277.gif b/0.4.x/images/2277.gif
new file mode 100644 (file)
index 0000000..2e37972
Binary files /dev/null and b/0.4.x/images/2277.gif differ
diff --git a/0.4.x/images/2278.gif b/0.4.x/images/2278.gif
new file mode 100644 (file)
index 0000000..633cd60
Binary files /dev/null and b/0.4.x/images/2278.gif differ
diff --git a/0.4.x/images/2279.gif b/0.4.x/images/2279.gif
new file mode 100644 (file)
index 0000000..6f73b2e
Binary files /dev/null and b/0.4.x/images/2279.gif differ
diff --git a/0.4.x/images/2287.gif b/0.4.x/images/2287.gif
new file mode 100644 (file)
index 0000000..3090622
Binary files /dev/null and b/0.4.x/images/2287.gif differ
diff --git a/0.4.x/images/2288.gif b/0.4.x/images/2288.gif
new file mode 100644 (file)
index 0000000..5cd9294
Binary files /dev/null and b/0.4.x/images/2288.gif differ
diff --git a/0.4.x/images/2299.gif b/0.4.x/images/2299.gif
new file mode 100644 (file)
index 0000000..110ae7a
Binary files /dev/null and b/0.4.x/images/2299.gif differ
diff --git a/0.4.x/images/23.gif b/0.4.x/images/23.gif
new file mode 100644 (file)
index 0000000..2569ffd
Binary files /dev/null and b/0.4.x/images/23.gif differ
diff --git a/0.4.x/images/2312.gif b/0.4.x/images/2312.gif
new file mode 100644 (file)
index 0000000..1549602
Binary files /dev/null and b/0.4.x/images/2312.gif differ
diff --git a/0.4.x/images/2313.gif b/0.4.x/images/2313.gif
new file mode 100644 (file)
index 0000000..465bbec
Binary files /dev/null and b/0.4.x/images/2313.gif differ
diff --git a/0.4.x/images/2314.gif b/0.4.x/images/2314.gif
new file mode 100644 (file)
index 0000000..72e5494
Binary files /dev/null and b/0.4.x/images/2314.gif differ
diff --git a/0.4.x/images/24.gif b/0.4.x/images/24.gif
new file mode 100644 (file)
index 0000000..0fa01ae
Binary files /dev/null and b/0.4.x/images/24.gif differ
diff --git a/0.4.x/images/25.gif b/0.4.x/images/25.gif
new file mode 100644 (file)
index 0000000..a4489fc
Binary files /dev/null and b/0.4.x/images/25.gif differ
diff --git a/0.4.x/images/26.gif b/0.4.x/images/26.gif
new file mode 100644 (file)
index 0000000..ac0fab5
Binary files /dev/null and b/0.4.x/images/26.gif differ
diff --git a/0.4.x/images/27.gif b/0.4.x/images/27.gif
new file mode 100644 (file)
index 0000000..c4c0dc7
Binary files /dev/null and b/0.4.x/images/27.gif differ
diff --git a/0.4.x/images/28.gif b/0.4.x/images/28.gif
new file mode 100644 (file)
index 0000000..8054687
Binary files /dev/null and b/0.4.x/images/28.gif differ
diff --git a/0.4.x/images/29.gif b/0.4.x/images/29.gif
new file mode 100644 (file)
index 0000000..94e0126
Binary files /dev/null and b/0.4.x/images/29.gif differ
diff --git a/0.4.x/images/3.gif b/0.4.x/images/3.gif
new file mode 100644 (file)
index 0000000..75c56ea
Binary files /dev/null and b/0.4.x/images/3.gif differ
diff --git a/0.4.x/images/30.gif b/0.4.x/images/30.gif
new file mode 100644 (file)
index 0000000..cc65098
Binary files /dev/null and b/0.4.x/images/30.gif differ
diff --git a/0.4.x/images/31.gif b/0.4.x/images/31.gif
new file mode 100644 (file)
index 0000000..f35e252
Binary files /dev/null and b/0.4.x/images/31.gif differ
diff --git a/0.4.x/images/32.gif b/0.4.x/images/32.gif
new file mode 100644 (file)
index 0000000..1f46b62
Binary files /dev/null and b/0.4.x/images/32.gif differ
diff --git a/0.4.x/images/33.gif b/0.4.x/images/33.gif
new file mode 100644 (file)
index 0000000..31fe53d
Binary files /dev/null and b/0.4.x/images/33.gif differ
diff --git a/0.4.x/images/34.gif b/0.4.x/images/34.gif
new file mode 100644 (file)
index 0000000..815a50f
Binary files /dev/null and b/0.4.x/images/34.gif differ
diff --git a/0.4.x/images/35.gif b/0.4.x/images/35.gif
new file mode 100644 (file)
index 0000000..6e22cb5
Binary files /dev/null and b/0.4.x/images/35.gif differ
diff --git a/0.4.x/images/36.gif b/0.4.x/images/36.gif
new file mode 100644 (file)
index 0000000..b4c4f82
Binary files /dev/null and b/0.4.x/images/36.gif differ
diff --git a/0.4.x/images/37.gif b/0.4.x/images/37.gif
new file mode 100644 (file)
index 0000000..51cac73
Binary files /dev/null and b/0.4.x/images/37.gif differ
diff --git a/0.4.x/images/38.gif b/0.4.x/images/38.gif
new file mode 100644 (file)
index 0000000..21dad1f
Binary files /dev/null and b/0.4.x/images/38.gif differ
diff --git a/0.4.x/images/39.gif b/0.4.x/images/39.gif
new file mode 100644 (file)
index 0000000..84ae17d
Binary files /dev/null and b/0.4.x/images/39.gif differ
diff --git a/0.4.x/images/4.gif b/0.4.x/images/4.gif
new file mode 100644 (file)
index 0000000..a008236
Binary files /dev/null and b/0.4.x/images/4.gif differ
diff --git a/0.4.x/images/40.gif b/0.4.x/images/40.gif
new file mode 100644 (file)
index 0000000..bb1ab87
Binary files /dev/null and b/0.4.x/images/40.gif differ
diff --git a/0.4.x/images/41.gif b/0.4.x/images/41.gif
new file mode 100644 (file)
index 0000000..827c88a
Binary files /dev/null and b/0.4.x/images/41.gif differ
diff --git a/0.4.x/images/42.gif b/0.4.x/images/42.gif
new file mode 100644 (file)
index 0000000..b338990
Binary files /dev/null and b/0.4.x/images/42.gif differ
diff --git a/0.4.x/images/43.gif b/0.4.x/images/43.gif
new file mode 100644 (file)
index 0000000..6c80b9b
Binary files /dev/null and b/0.4.x/images/43.gif differ
diff --git a/0.4.x/images/44.gif b/0.4.x/images/44.gif
new file mode 100644 (file)
index 0000000..3368496
Binary files /dev/null and b/0.4.x/images/44.gif differ
diff --git a/0.4.x/images/45.gif b/0.4.x/images/45.gif
new file mode 100644 (file)
index 0000000..fe6a45f
Binary files /dev/null and b/0.4.x/images/45.gif differ
diff --git a/0.4.x/images/46.gif b/0.4.x/images/46.gif
new file mode 100644 (file)
index 0000000..51731ca
Binary files /dev/null and b/0.4.x/images/46.gif differ
diff --git a/0.4.x/images/47.gif b/0.4.x/images/47.gif
new file mode 100644 (file)
index 0000000..80bfd77
Binary files /dev/null and b/0.4.x/images/47.gif differ
diff --git a/0.4.x/images/48.gif b/0.4.x/images/48.gif
new file mode 100644 (file)
index 0000000..2ecbf7e
Binary files /dev/null and b/0.4.x/images/48.gif differ
diff --git a/0.4.x/images/49.gif b/0.4.x/images/49.gif
new file mode 100644 (file)
index 0000000..db1c6e6
Binary files /dev/null and b/0.4.x/images/49.gif differ
diff --git a/0.4.x/images/5.gif b/0.4.x/images/5.gif
new file mode 100644 (file)
index 0000000..a404c2f
Binary files /dev/null and b/0.4.x/images/5.gif differ
diff --git a/0.4.x/images/50.gif b/0.4.x/images/50.gif
new file mode 100644 (file)
index 0000000..4b8f63f
Binary files /dev/null and b/0.4.x/images/50.gif differ
diff --git a/0.4.x/images/51.gif b/0.4.x/images/51.gif
new file mode 100644 (file)
index 0000000..c9e0dd9
Binary files /dev/null and b/0.4.x/images/51.gif differ
diff --git a/0.4.x/images/52.gif b/0.4.x/images/52.gif
new file mode 100644 (file)
index 0000000..897eedd
Binary files /dev/null and b/0.4.x/images/52.gif differ
diff --git a/0.4.x/images/6.gif b/0.4.x/images/6.gif
new file mode 100644 (file)
index 0000000..3acbbdc
Binary files /dev/null and b/0.4.x/images/6.gif differ
diff --git a/0.4.x/images/7.gif b/0.4.x/images/7.gif
new file mode 100644 (file)
index 0000000..b2ed272
Binary files /dev/null and b/0.4.x/images/7.gif differ
diff --git a/0.4.x/images/8.gif b/0.4.x/images/8.gif
new file mode 100644 (file)
index 0000000..0f6d5e4
Binary files /dev/null and b/0.4.x/images/8.gif differ
diff --git a/0.4.x/images/9.gif b/0.4.x/images/9.gif
new file mode 100644 (file)
index 0000000..f47d755
Binary files /dev/null and b/0.4.x/images/9.gif differ
diff --git a/0.4.x/images/images.json b/0.4.x/images/images.json
new file mode 100644 (file)
index 0000000..5d07a70
--- /dev/null
@@ -0,0 +1,86 @@
+[\r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1481, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    }, \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1482, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    }, \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1483,\r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    }, \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1484, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    },  \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1485, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    }, \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1486, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    }, \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1487, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    },  \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1488, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    }, \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1489, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    }, \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1490, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    },  \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1491, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    }, \r
+    {\r
+        "created_at":  "2011-11-13T08:57:39Z", \r
+        "ext":                 "png", \r
+        "filesize":            9969, \r
+        "id":                  1492, \r
+        "updated_at":  "2011-11-13T08:57:39Z", \r
+    }\r
+]
\ No newline at end of file
diff --git a/0.4.x/images/original_pictures.json b/0.4.x/images/original_pictures.json
new file mode 100644 (file)
index 0000000..58e59c4
--- /dev/null
@@ -0,0 +1,252 @@
+[\r
+    {\r
+        "artist": {\r
+            "api_url": null, \r
+            "author_id": 1, \r
+            "created_at": "2012-01-05T23:58:39Z", \r
+            "crowled_at": null, \r
+            "default_lisence_id": 1, \r
+            "email": null, \r
+            "homepage_url": null, \r
+            "id": 1, \r
+            "name": "no name", \r
+            "updated_at": "2012-01-05T23:58:39Z"\r
+        }, \r
+        "artist_id": 1, \r
+        "created_at": "2012-01-05T23:59:01Z", \r
+        "ext": "png", \r
+        "filesize": 11881, \r
+        "height": 474, \r
+        "id": 1, \r
+        "lisence": {\r
+            "cc_by": 0, \r
+            "cc_nc": 0, \r
+            "cc_nd": 0, \r
+            "cc_sa": 0, \r
+            "created_at": "2012-01-11T07:49:36Z", \r
+            "id": 1, \r
+            "keep_aspect_ratio": 0, \r
+            "name": "%%<\81\84\82 \82 \82 ", \r
+            "no_convert": 0, \r
+            "no_flip": 0, \r
+            "no_resize": 0, \r
+            "updated_at": "2012-01-11T07:49:36Z", \r
+            "url": "\82¨\82¨~"\r
+        }, \r
+        "lisence_id": 1, \r
+        "resource_picture": {\r
+            "artist_id": 1, \r
+            "created_at": "2012-01-05T23:59:01Z", \r
+            "ext": "png", \r
+            "filesize": 11881, \r
+            "height": 474, \r
+            "id": 1, \r
+            "lisence_id": 1, \r
+            "original_picture_id": 1, \r
+            "updated_at": "2012-01-15T07:49:12Z", \r
+            "width": 449\r
+        }, \r
+        "updated_at": "2012-01-15T07:49:12Z", \r
+        "width": 449\r
+    }, \r
+    {\r
+        "artist": {\r
+            "api_url": null, \r
+            "author_id": 1, \r
+            "created_at": "2012-01-05T23:58:39Z", \r
+            "crowled_at": null, \r
+            "default_lisence_id": 1, \r
+            "email": null, \r
+            "homepage_url": null, \r
+            "id": 1, \r
+            "name": "no name", \r
+            "updated_at": "2012-01-05T23:58:39Z"\r
+        }, \r
+        "artist_id": 1, \r
+        "created_at": "2012-01-05T23:59:18Z", \r
+        "ext": "png", \r
+        "filesize": 9960, \r
+        "height": 463, \r
+        "id": 2, \r
+        "lisence": {\r
+            "cc_by": 0, \r
+            "cc_nc": 0, \r
+            "cc_nd": 0, \r
+            "cc_sa": 0, \r
+            "created_at": "2012-01-11T07:49:36Z", \r
+            "id": 1, \r
+            "keep_aspect_ratio": 0, \r
+            "name": "%%<\81\84\82 \82 \82 ", \r
+            "no_convert": 0, \r
+            "no_flip": 0, \r
+            "no_resize": 0, \r
+            "updated_at": "2012-01-11T07:49:36Z", \r
+            "url": "\82¨\82¨~"\r
+        }, \r
+        "lisence_id": 1, \r
+        "resource_picture": {\r
+            "artist_id": 1, \r
+            "created_at": "2012-01-05T23:59:18Z", \r
+            "ext": "png", \r
+            "filesize": 9960, \r
+            "height": 463, \r
+            "id": 2, \r
+            "lisence_id": 1, \r
+            "original_picture_id": 2, \r
+            "updated_at": "2012-01-15T07:49:12Z", \r
+            "width": 333\r
+        }, \r
+        "updated_at": "2012-01-15T07:49:12Z", \r
+        "width": 333\r
+    }, \r
+    {\r
+        "artist": {\r
+            "api_url": null, \r
+            "author_id": 1, \r
+            "created_at": "2012-01-05T23:58:39Z", \r
+            "crowled_at": null, \r
+            "default_lisence_id": 1, \r
+            "email": null, \r
+            "homepage_url": null, \r
+            "id": 1, \r
+            "name": "no name", \r
+            "updated_at": "2012-01-05T23:58:39Z"\r
+        }, \r
+        "artist_id": 1, \r
+        "created_at": "2012-01-05T23:59:34Z", \r
+        "ext": "png", \r
+        "filesize": 8492, \r
+        "height": 450, \r
+        "id": 3, \r
+        "lisence": {\r
+            "cc_by": 0, \r
+            "cc_nc": 0, \r
+            "cc_nd": 0, \r
+            "cc_sa": 0, \r
+            "created_at": "2012-01-11T07:49:36Z", \r
+            "id": 1, \r
+            "keep_aspect_ratio": 0, \r
+            "name": "%%<\81\84\82 \82 \82 ", \r
+            "no_convert": 0, \r
+            "no_flip": 0, \r
+            "no_resize": 0, \r
+            "updated_at": "2012-01-11T07:49:36Z", \r
+            "url": "\82¨\82¨~"\r
+        }, \r
+        "lisence_id": 1, \r
+        "resource_picture": {\r
+            "artist_id": 1, \r
+            "created_at": "2012-01-05T23:59:34Z", \r
+            "ext": "png", \r
+            "filesize": 8492, \r
+            "height": 450, \r
+            "id": 3, \r
+            "lisence_id": 1, \r
+            "original_picture_id": 3, \r
+            "updated_at": "2012-01-15T07:49:12Z", \r
+            "width": 333\r
+        }, \r
+        "updated_at": "2012-01-15T07:49:12Z", \r
+        "width": 333\r
+    }, \r
+    {\r
+        "artist": {\r
+            "api_url": null, \r
+            "author_id": 1, \r
+            "created_at": "2012-01-05T23:58:39Z", \r
+            "crowled_at": null, \r
+            "default_lisence_id": 1, \r
+            "email": null, \r
+            "homepage_url": null, \r
+            "id": 1, \r
+            "name": "no name", \r
+            "updated_at": "2012-01-05T23:58:39Z"\r
+        }, \r
+        "artist_id": 1, \r
+        "created_at": "2012-01-06T00:00:01Z", \r
+        "ext": "png", \r
+        "filesize": 9232, \r
+        "height": 500, \r
+        "id": 4, \r
+        "lisence": {\r
+            "cc_by": 0, \r
+            "cc_nc": 0, \r
+            "cc_nd": 0, \r
+            "cc_sa": 0, \r
+            "created_at": "2012-01-11T07:49:36Z", \r
+            "id": 1, \r
+            "keep_aspect_ratio": 0, \r
+            "name": "%%<\81\84\82 \82 \82 ", \r
+            "no_convert": 0, \r
+            "no_flip": 0, \r
+            "no_resize": 0, \r
+            "updated_at": "2012-01-11T07:49:36Z", \r
+            "url": "\82¨\82¨~"\r
+        }, \r
+        "lisence_id": 1, \r
+        "resource_picture": {\r
+            "artist_id": 1, \r
+            "created_at": "2012-01-06T00:00:01Z", \r
+            "ext": "png", \r
+            "filesize": 9232, \r
+            "height": 500, \r
+            "id": 4, \r
+            "lisence_id": 1, \r
+            "original_picture_id": 4, \r
+            "updated_at": "2012-01-15T07:49:12Z", \r
+            "width": 500\r
+        }, \r
+        "updated_at": "2012-01-15T07:49:12Z", \r
+        "width": 500\r
+    }, \r
+    {\r
+        "artist": {\r
+            "api_url": null, \r
+            "author_id": 1, \r
+            "created_at": "2012-01-05T23:58:39Z", \r
+            "crowled_at": null, \r
+            "default_lisence_id": 1, \r
+            "email": null, \r
+            "homepage_url": null, \r
+            "id": 1, \r
+            "name": "no name", \r
+            "updated_at": "2012-01-05T23:58:39Z"\r
+        }, \r
+        "artist_id": 1, \r
+        "created_at": "2012-01-06T00:00:20Z", \r
+        "ext": "png", \r
+        "filesize": 7875, \r
+        "height": 425, \r
+        "id": 5, \r
+        "lisence": {\r
+            "cc_by": 0, \r
+            "cc_nc": 0, \r
+            "cc_nd": 0, \r
+            "cc_sa": 0, \r
+            "created_at": "2012-01-11T07:49:36Z", \r
+            "id": 1, \r
+            "keep_aspect_ratio": 0, \r
+            "name": "%%<\81\84\82 \82 \82 ", \r
+            "no_convert": 0, \r
+            "no_flip": 0, \r
+            "no_resize": 0, \r
+            "updated_at": "2012-01-11T07:49:36Z", \r
+            "url": "\82¨\82¨~"\r
+        }, \r
+        "lisence_id": 1, \r
+        "resource_picture": {\r
+            "artist_id": 1, \r
+            "created_at": "2012-01-06T00:00:20Z", \r
+            "ext": "png", \r
+            "filesize": 7875, \r
+            "height": 425, \r
+            "id": 5, \r
+            "lisence_id": 1, \r
+            "original_picture_id": 5, \r
+            "updated_at": "2012-01-15T07:49:12Z", \r
+            "width": 252\r
+        }, \r
+        "updated_at": "2012-01-15T07:49:12Z", \r
+        "width": 252\r
+    }\r
+]
\ No newline at end of file
diff --git a/0.4.x/images/tag-list.json b/0.4.x/images/tag-list.json
new file mode 100644 (file)
index 0000000..d7b5c9c
--- /dev/null
@@ -0,0 +1,30 @@
+[\r
+    {\r
+        "id":                  1,\r
+        "name":                        "著名人"\r
+    }, \r
+    {\r
+        "id":                  2,\r
+        "name":                        "アニマル"\r
+    },  \r
+    {\r
+        "id":                  3,\r
+        "name":                        "ゆるきゃら"\r
+    },\r
+    {\r
+        "id":                  4,\r
+        "name":                        "擬人化"\r
+    },\r
+    {\r
+        "id":                  5,\r
+        "name":                        "アニメ・マンガ"\r
+    },   \r
+    {\r
+        "id":                  6,\r
+        "name":                        "クリーチャー"\r
+    }, \r
+    {\r
+        "id":                  7,\r
+        "name":                        "生物"\r
+    }\r
+]
\ No newline at end of file
diff --git a/0.4.x/index.html b/0.4.x/index.html
new file mode 100644 (file)
index 0000000..4d59e13
--- /dev/null
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<html xmlns:v="urn:schemas-microsoft-com:vml">\r
+    <head>\r
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+           <meta http-equiv="Content-Language" content="ja">\r
+           <meta http-equiv="Content-Script-Type" content="text/javascript">\r
+           <meta http-equiv="Content-Style-Type" content="text/css">\r
+           <meta http-equiv="imagetoolbar" content="no">\r
+        <title>pettanR</title>\r
+               <link rel="stylesheet" type="text/css" href="common.css">\r
+       </head>\r
+       <body>\r
+               <div id="general-content">\r
+                       <div id="outer-wrapper">\r
+                               \r
+                               <div id="header">\r
+                                       <div class="base-content-width" style="position:relative;">\r
+                                               <h1>pettanR</h1>\r
+                                       <!-- global navi -->\r
+                                               <div id="global-navi">\r
+                                                       <noscript id="noscript-alert">You need to have JavaScript enabled.</noscript>\r
+                                               </div>\r
+                                       </div>\r
+                               </div>\r
+                               \r
+                               <div id="inner-wrapper" class="base-content-width">\r
+                                       <div id="main">\r
+                                               <div style="padding:50px;text-align:center;">\r
+                                                       <p style="font-size:2em;font-weight:bold;color:#666;line-height:1.6em;">\r
+                                                               もうしばらくしたら、いつもと同じ一日が、<br>\r
+                                                               忘れられない一日になります。\r
+                                                       </p>\r
+                                                       <p style="text-align:center;color:#999;">\r
+                                                               ぺったんRからの特別な発表を、もうちょっとまっててね。\r
+                                                       </p>\r
+                                                       <img src="http://static.sourceforge.jp/thumb/g/2/930/640x640_0.png" width="200" height="200" alt="ぺったんR">\r
+                                               </div>\r
+                                       </div>\r
+                               </div>\r
+                       </div>\r
+               </div>\r
+               \r
+               <!-- footer -->\r
+               <div id="footer-content">\r
+                       <div id="footer">\r
+                               <div id="footer-item-container" class="base-content-width clearfix">\r
+                                       <div class="footer-item-wrapper">\r
+                                               <div class="footer-item">\r
+                                                       <h2>ぺったんR にようこそ</h2>\r
+                                                       <ul>\r
+                                                               <li>サンプル</li>\r
+                                                               <li>ぺったんRの特徴</li>\r
+                                                               <li>沿革</li>\r
+                                                       </ul>\r
+                                               </div>\r
+                                       </div>\r
+                                       <div class="footer-item-wrapper">\r
+                                               <div class="footer-item">\r
+                                                       <h2>ドキュメント</h2>\r
+                                                       <ul>\r
+                                                               <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors" rel="me" target="_blank">作家向けドキュメント</a></li>\r
+                                                               <li>絵師向けドキュメント</li>                                                 \r
+                                                               <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers" rel="me" target="_blank">開発者向けドキュメント</a></li>\r
+                                                               <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters" rel="me" target="_blank">編集長向けドキュメント</a></li>\r
+                                                       </ul>\r
+                                               </div>\r
+                                       </div>\r
+                                       <div class="footer-item-wrapper">\r
+                                               <div class="footer-item">\r
+                                                       <h2>プロトタイプ</h2>\r
+                                                       <ul>\r
+                                                               <li><a href="http://pettanr.heroku.com/" rel="me" target="_blank">pettanr.heroku.com</a></li>\r
+                                                               <li><a href="work.html" rel="console">ユーザーコンソール</a></li>\r
+                                                       </ul>\r
+                                                       <h2>Ajax contents</h2>\r
+                                                       <ul>\r
+                                                               <li><a href="help/jp.xml">help | jp</a></li>\r
+                                                       </ul>\r
+                                               </div>\r
+                                       </div>\r
+                                       <div class="footer-item-wrapper" style="width:170px;">\r
+                                               <div class="footer-item" style="padding-right:0;">\r
+                                                       <h2>ぺったんRチーム</h2>\r
+                                                       <ul>\r
+                                                               <li>わたしたちについて</li>\r
+                                                               <li>ミッション</li>\r
+                                                               <li><a href="diary/itozyun.xml">itozyun's diary</a></li>\r
+                                                               <li>個人情報保護方針</li>\r
+                                                               <li>作品の取り扱い</li>\r
+                                                               <li>お問い合わせ</li>\r
+                                                       </ul>\r
+                                               </div>\r
+                                       </div>\r
+                               </div>\r
+                               <div id="copyright">Copyright &copy; 2011-2012 pettanR team, some rights reserved.</div>\r
+                       </div>\r
+               </div>\r
+               <script type="text/javascript" src="common.js"></script>\r
+    </body>\r
+</html>
\ No newline at end of file
diff --git a/0.4.x/jquery-1.6.2.min.js b/0.4.x/jquery-1.6.2.min.js
new file mode 100644 (file)
index 0000000..925a891
--- /dev/null
@@ -0,0 +1,31 @@
+/*!
+ * jQuery JavaScript Library v1.6.2
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Jun 30 14:16:56 2011 -0400
+ */
+(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bR,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
+shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j
+)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cs(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cr("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
+
+
+/* Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
+ *
+ * Version: 3.0.2
+ * 
+ * Requires: 1.2.2+
+ */
+(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery);
\ No newline at end of file
diff --git a/0.4.x/loading.gif b/0.4.x/loading.gif
new file mode 100644 (file)
index 0000000..f864d5f
Binary files /dev/null and b/0.4.x/loading.gif differ
diff --git a/0.4.x/opacity0.gif b/0.4.x/opacity0.gif
new file mode 100644 (file)
index 0000000..cfc751a
Binary files /dev/null and b/0.4.x/opacity0.gif differ
diff --git a/0.4.x/sitemap/sitemap.xml b/0.4.x/sitemap/sitemap.xml
new file mode 100644 (file)
index 0000000..f0cf119
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<?xml-stylesheet type="text/xsl" href="sitemap.xsl"?>\r
+\r
+<!-- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> -->\r
+<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r
+<!--  created with free sitemap generation system www.sitemapxml.jp  --> \r
+<url>\r
+  <loc>http://pettanr.sourceforge.jp/</loc>\r
+  <lastmod>2012-01-01T12:41:54+00:00</lastmod>\r
+  <priority>1.00</priority>\r
+</url>\r
+<url>\r
+  <loc>http://pettanr.sourceforge.jp/help/jp.xml</loc>\r
+  <lastmod>2012-01-01T12:12:13+00:00</lastmod>\r
+  <priority>0.80</priority>\r
+</url>\r
+<url>\r
+  <loc>http://pettanr.sourceforge.jp/diary/itozyun.xml</loc>\r
+  <lastmod>2012-01-01T12:12:13+00:00</lastmod>\r
+  <priority>0.80</priority>\r
+</url>\r
+\r
+</urlset>
\ No newline at end of file
diff --git a/0.4.x/sitemap/sitemap.xsl b/0.4.x/sitemap/sitemap.xsl
new file mode 100644 (file)
index 0000000..75eeb53
--- /dev/null
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" \r
+    xmlns="http://www.w3.org/1999/xhtml"> \r
+    <xsl:output \r
+        omit-xml-declaration="no" \r
+        encoding="utf-8" \r
+        method="html" \r
+        version="1.0" \r
+        doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" \r
+        doctype-system="http://www.w3.org/TR/html4/loose.dtd" \r
+        indent="yes" /> \r
+    <xsl:template match="/">\r
+        <xsl:apply-templates/>\r
+    </xsl:template>\r
+       \r
+<xsl:template match="urlset">\r
+       <html>\r
+               <head>\r
+                       <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\r
+                       <meta http-equiv="Content-Style-Type" content="text/css" />\r
+                       <meta http-equiv="imagetoolbar" content="no" />\r
+                       <meta name="description" content="this is sitemap" />\r
+                       <title>sitemap | pettanR</title>\r
+                       <link rel='index' title='index | pettanR' href='http://pettanr.sourceforge.jp/index.html' />\r
+                       <link rel='start' title='pettanR' href='http://pettanr.sourceforge.jp/' />\r
+                       <link rel="stylesheet" type="text/css" href="../common.css" />\r
+               </head>\r
+               <body>\r
+                       <div id="general-content">\r
+                               <div id="outer-wrapper">\r
+                                       \r
+                                       <div id="header">\r
+                                               <div class="base-content-width" style="position:relative;">\r
+                                                       <h1><a href="http://pettanr.sourceforge.jp/">pettanR</a></h1>\r
+                                                       <div id="global-navi">\r
+                                                               <noscript id="noscript-alert">You need to have JavaScript enabled.</noscript>\r
+                                                       </div>\r
+                                               </div>\r
+                                       </div>\r
+                                       \r
+                                       <div id="inner-wrapper" class="base-content-width">\r
+                                               <div id="main">\r
+                                                       <h2>sitemap</h2>\r
+                                                                                                               \r
+                                                       <xsl:apply-templates/>\r
+                                               </div>\r
+                                       </div>\r
+                               </div>\r
+                       </div>\r
+                       \r
+                       <div id="footer-content">\r
+                               <div id="footer">\r
+                                       <div id="footer-item-container" class="base-content-width clearfix">\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>ぺったんR にようこそ</h2>\r
+                                                               <ul>\r
+                                                                       <li>サンプル</li>\r
+                                                                       <li>ぺったんRの特徴</li>\r
+                                                                       <li>沿革</li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>ドキュメント</h2>\r
+                                                               <ul>\r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors" rel="me" target="_blank">作家向けドキュメント</a></li>\r
+                                    <li>絵師向けドキュメント</li>                         \r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers" rel="me" target="_blank">開発者向けドキュメント</a></li>\r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters" rel="me" target="_blank">編集長向けドキュメント</a></li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>プロトタイプ</h2>\r
+                                                               <ul>\r
+                                                                       <li><a href="http://pettanr.heroku.com/" rel="me" target="_blank">pettanr.heroku.com</a></li>\r
+                                                                       <li><a href="../work.html" rel="console">ユーザーコンソール</a></li>\r
+                                                               </ul>\r
+                                                               <h2>Ajax contents</h2>\r
+                                                               <ul>\r
+                                                                       <li><a href="../help/jp.xml">help | jp</a></li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper" style="width:170px;">\r
+                                                       <div class="footer-item" style="padding-right:0;">\r
+                                                               <h2>ぺったんRチーム</h2>\r
+                                                               <ul>\r
+                                                                       <li>わたしたちについて</li>\r
+                                                                       <li>ミッション</li>\r
+                                                                       <li><a href="../diary/itozyun.xml">itozyun's diary</a></li>\r
+                                                                       <li>個人情報保護方針</li>\r
+                                                                       <li>作品の取り扱い</li>\r
+                                                                       <li>お問い合わせ</li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                       </div>\r
+                                       <div id="copyright">\r
+                                               Copyright (c) 2011-2012 pettanR team, some rights reserved.\r
+                                       </div>\r
+                               </div>\r
+                       </div>\r
+                       <script type="text/javascript" src="../common.js"></script>\r
+               </body>\r
+       </html>\r
+</xsl:template>\r
+\r
+    <xsl:template match="url">\r
+       <dl class="dl-table clearfix">\r
+               <xsl:for-each select=".">\r
+                       <xsl:apply-templates/>\r
+               </xsl:for-each>\r
+               </dl>\r
+    </xsl:template>\r
+\r
+    <xsl:template match="loc">\r
+               <dt>\r
+               <a>\r
+                       <xsl:attribute name="href">\r
+                               <xsl:apply-templates/>\r
+                       </xsl:attribute>\r
+                       <xsl:apply-templates/>\r
+               </a>\r
+               </dt>\r
+               <dd><xsl:apply-templates/></dd>\r
+    </xsl:template>\r
+    <xsl:template match="lastmod">\r
+               <dd class="lastmod">\r
+                       <xsl:apply-templates/>\r
+               </dd>\r
+    </xsl:template>    \r
+    <xsl:template match="priority">\r
+               <dd class="priority">\r
+                       <xsl:apply-templates/>\r
+               </dd>\r
+    </xsl:template>    \r
+\r
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/0.4.x/system.js b/0.4.x/system.js
new file mode 100644 (file)
index 0000000..b1f1a2d
--- /dev/null
@@ -0,0 +1,904 @@
+/*
+ * pettanR system.js
+ *   version 0.4.0
+ *   
+ * author:
+ *   itozyun
+ * licence:
+ *   3-clause BSD
+ */
+
+
+pettanr.log = ( function(){
+       return {
+               init: function(){}
+       }
+})();
+
+pettanr.io = ( function(){
+       
+       return {
+               init: function(){}
+       }
+})();
+
+/*
+ * 画像一覧は
+ *     お気に入り画像一覧 > tag:ペン次郎 > ペン次郎:笑う
+ *  最近アップロードされた画像 > images
+ *  最近使われた画像 > images
+ *  キャラクター画像庫 > アニマル系 > tag:ペン次郎 > ペン次郎:笑う
+ *  風景画像庫 >
+ *  効果画像庫 >
+ *  アイテム画像庫 >
+ *  
+ * 画像一覧を読み込むタイミング
+ */
+pettanr.file = ( function(){
+       var TREE_TYPE_IS_COMIC = 1,
+               TREE_TYPE_IS_IMAGE = 2,
+               FILE_TYPE_IS_FOLDER = 1,
+               FILE_TYPE_IS_FOLDER_FOR_PANEL = 2,
+               FILE_TYPE_IS_FOLDER_FOR_IMAGE = 3,
+               FILE_TYPE_IS_PANEL = 10,
+               FILE_TYPE_IS_IMAGE = 11,
+               FILE_TYPE_IS_HTML = 12,
+               FILE_TYPE_IS_SETTING = 13,
+               FOLDER_TYPE_IS_COMIC = 1,
+               FILE_STATE_IS_UNKNOWN = 0,
+               FILE_STATE_IS_OK = 1,
+               FILE_STATE_IS_LOADING = 2,
+               FILE_STATE_IS_ERROR = 3,
+               FILE_STATE_IS_BROKEN = 4,
+               TREE_EVENT_UPDATE = 'onTreeUpdate',
+               FILE_EVENT_UPDATE_ATTRIVUTE = 'onFileUpdate',
+               FILE_EVENT_GET_SEQENTIAL_FILES = 'gotSeqentilFiles',
+               ROLE_IS_SUPER_USER = 2^4,
+               ROLE_IS_OWNER = 2^3,
+               ROLE_IS_CREATOR = 2^2,
+               ROLE_IS_ARTIST = 2^1,
+               ROLE_IS_VISITOR = 2^0,
+               ROLE_IS_UNKROWN = 2^-1,
+               UPDATE_POLICY_SOCAV = 0x11111,// s: super user
+               UPDATE_POLICY_SOCA_ = 0x11110,// o: owner( comic || panel || picture )
+               UPDATE_POLICY_SOC__ = 0x11100,// c: creator
+               UPDATE_POLICY_SO_A_ = 0x11010,// a: artist
+               UPDATE_POLICY_SO___ = 0x11000,// v: visitor
+               UPDATE_POLICY__O___ = 0x01000,// l: lisence manager
+               UPDATE_POLICY_S____ = 0x10000,
+               UPDATE_POLICY______ = 0x00000,
+               FILEDATA_RESITER = [],
+               FILEDATA_HAS_rID_RESISTER = {},
+               FILEDATA_ACCESS = [],
+               FILE_OBJECT_POOL = [];
+               
+       var REQUEST_CONTROLER = ( function(){
+               var REQUEST_TICKET_RESISTER = [],
+                       DATA_TYPE_ARRAY = 'json,xml,html,text'.split( ','),
+                       DATA_IS_JSON = 0,
+                       DATA_IS_XML = 1,
+                       DATA_IS_HTML = 2,
+                       DATA_IS_TEXT = 3,
+                       numError = 0;
+               
+               var RequestTicketClass = function( _type, _data, _url, _onLoad, _onError){
+                       this.type = DATA_TYPE_ARRAY[ _type];
+                       this.data = _data;
+                       this.url = _url;
+                       this.onLoad = _onLoad;
+                       this.onError = _onError;
+                       this.state = 0;
+               };
+               
+               function request(){
+                       if( REQUEST_TICKET_RESISTER.length === 0) return;
+                       var _ticket = REQUEST_TICKET_RESISTER.shift();
+                       $.ajax({
+                               url:            _ticket.url,
+                               dataType:       _ticket.type,
+                               success:        function( _data){
+                                       _ticket.onLoad( _ticket.data, _data);
+                               },
+                               error:          function(){
+                                       _ticket.onError( _ticket.data);
+                               }
+                       });
+               }
+               
+               return {
+                       init: function(){
+                               delete REQUEST_CONTROLER.init;
+                       },
+                       getNumTask: function(){
+                               return REQUEST_TICKET_RESISTER.length;
+                       },
+                       getNumError: function(){
+                               return numError;
+                       },
+                       getJson: function( _data, _url, _onLoad, _onError){
+                               REQUEST_TICKET_RESISTER.push( new RequestTicketClass( DATA_IS_JSON, _data, _url, _onLoad, _onError));
+                               request();
+                       }
+               }
+       })();
+
+       var FILE_CONTROLER = ( function(){
+               var EVENT_LISTENER_RESISTER = [],
+                       TREE_ARRAY = [],
+                       TREE_ACCESS_ARRAY = [],
+                       instance;
+
+               var TreeClass = function( ROOTFILE_DATA){
+                       var UID = TREE_ACCESS_ARRAY.length,
+                               PARENT_FILE_RESITER = [],
+                               ACCESS = {
+                                       fileEventChatcher:      dispatchFileEvent,
+                                       destroy:                        onDestroy
+                               },
+                               EVENT_LISTENER_ARRAY = [],
+                               rootFile,
+                               currentFile,
+                               instance;
+                               
+                       TREE_ACCESS_ARRAY.push( ACCESS);
+                       
+                       function onDestroy(){
+                               
+                       }
+                       
+                       function dispatchFileEvent( e){
+                               var _eventType = e.eventType,
+                                       _targetFile = e.targetFile,
+                                       _ticket, _type, _file, _callback,
+                                       l = EVENT_LISTENER_RESISTER.length;
+                               for(var i=0; i<l; ++i){
+                                       _ticket = EVENT_LISTENER_RESISTER[i],
+                                       _type = _ticket.eventType,
+                                       _file = _ticket.targetFile,
+                                       _callback = _ticket.callBack;
+                                       if( _eventType === _type && _file.getUID() === _targetFile.getUID()){
+                                               _callback( _type, _targetFile, e.key, e.value);
+                                       } else if( _type === TREE_EVENT_UPDATE && _eventType === FILE_EVENT_GET_SEQENTIAL_FILES){
+                                               _callback( TREE_EVENT_UPDATE, _targetFile);
+                                       }
+                               }
+                       }
+                       
+                       return {
+                               init: function(){
+                                       instance = this;
+                                       currentFile = rootFile = new FileClass( this, null, ROOTFILE_DATA);
+                                       rootFile.init();
+                                       FILE_CONTROLER.getSeqentialFiles( currentFile);
+                                       delete this.init;
+                               },
+                               getUID: function(){ return UID},
+                               getRootFile : function(){
+                                       return rootFile;
+                               },
+                               getCurrentFile: function(){
+                                       return currentFile;
+                               },
+                               hierarchy: function(){
+                                       return PARENT_FILE_RESITER.length;
+                               },
+                               getParentFileAt: function( _index){
+                                       var l = PARENT_FILE_RESITER.length;
+                                       if( typeof _index !== 'number' || _index < 0 || _index >= l) return null;
+                                       return PARENT_FILE_RESITER[ l -1 -_index];
+                               },
+                               down: function( _index){
+                                       if( typeof _index !== 'number' || _index < 0 || _index >= currentFile.getChildFileLength()) return;
+                                       PARENT_FILE_RESITER.unshift( currentFile);
+                                       currentFile = currentFile.getChildFileByIndex( _index);
+                                       FILE_CONTROLER.getSeqentialFiles( currentFile);
+                                       return currentFile;
+                               },
+                               up: function( _index){
+                                       var l = PARENT_FILE_RESITER.length;
+                                       if( l === 0) return null;
+                                       if( typeof _index === 'number'){
+                                               if( _index >= l) return null;
+                                               currentFile = this.getParentFileAt( _index);
+                                               PARENT_FILE_RESITER.splice( 0, l -_index);
+                                       } else {
+                                               currentFile = PARENT_FILE_RESITER.shift();
+                                       }
+                                       FILE_CONTROLER.getSeqentialFiles( currentFile);
+                                       return currentFile;     
+                               },
+                               addTreeEventListener: function( _eventType, _callback){
+                                       EVENT_LISTENER_RESISTER.push( new FileEventTicketClass( null, _eventType, _callback));
+                               },
+                               removeTreeEventListener: function( _eventType, _callback){
+                                       
+                               },
+                               createSearchResultFolder: function( _searchParam){
+                                       
+                               },
+                               destroySearchResultFolder: function( _searchParam){
+                                       
+                               },
+                               destroy: function(){
+                                       destroyTree( UID);
+                               }
+                       }
+               };
+               /**
+                * _access.DATA === FILEDATA_RESITER[uid]
+                */
+               function getFileDataAccess( UIDorFILE){
+                       var l = FILEDATA_ACCESS.length,
+                               _file = typeof UIDorFILE === 'number' ? FILEDATA_RESITER[ UIDorFILE] : UIDorFILE,
+                               _uid = _file && _file.getUID ? _file.getUID() : -1,
+                               _data = _uid !== -1 ? FILEDATA_RESITER[ _uid] : null,
+                               _access;
+                       if( _data === null) return null;
+                       for(var i=0; i<l; ++i){
+                               _access = FILEDATA_ACCESS[ i];
+                               if( _access.DATA === _data) return _access;
+                       }
+                       return null;
+               }
+               function getChildren( UIDorFILE){
+                       var _access = getFileDataAccess( UIDorFILE);
+                       return  _access !== null ? _access.CHILDREN : null
+               }
+               function onLoadJson( _file, _json){
+                       var _access = getFileDataAccess( _file),
+                               _data = _access !== null ? _access.DATA : null,
+                               l = _json.length,
+                               _fileData;
+                       if( _data == null){
+                               onErrorJson( _file);
+                               return;
+                       }
+                       if( l === 0) return;
+                       if( !_data.children){
+                               _data.children = [];
+                       }
+                       var _children = _data.children,
+                               _newData,
+                               _rFolderData,
+                               _artistFolderData = getFolderDataByResourceID( 'Artists', buildResourceID( _data.json, 'artist'), true),
+                               _artistFolder = new FileClass( SYSTEM_TREE, _file, _artistFolderData);
+                       if( !_artistFolderData.children){
+                               _artistFolderData.children = [];
+                       }
+                       if( _file.isChildFile( _artistFolderData) === false){
+                               _children.push( _artistFolderData);
+                       }
+                       for(var i=0; i<l; ++i){
+                               _newData = buildFileData( _json[ i], _data.json);
+                               FILEDATA_RESITER.push( _newData);
+                               //_children.push( _newData);
+                               if( _newData.rID){
+                                       _rFolderData = getFolderDataByResourceID( 'Pictures', buildResourceID( _data.json, 'img'), true);
+                                       if( _file.isChildFile( _rFolderData) === false){
+                                               _children.push( _rFolderData);
+                                       }
+                                       if( !_rFolderData.children){
+                                               _rFolderData.children = [];
+                                       }
+                                       _rFolderData.children.push( _newData);
+                               }
+                               if( _newData.artist){
+                                       _rFolderData = getFolderDataByResourceID( _newData.artist.name, buildResourceID( _artistFolderData.rID, _newData.artist.id), true);
+                                       if( _artistFolder.isChildFile( _rFolderData) === false){
+                                               _artistFolderData.children.push( _rFolderData);
+                                       }
+                                       if( !_rFolderData.children){
+                                               _rFolderData.children = [];
+                                       }
+                                       _rFolderData.children.push( _newData);
+                               }
+                       }
+                       delete _data.json;
+                       _artistFolder.collect();
+                       _access.fileEventChatcher( new FileEventClass( FILE_EVENT_GET_SEQENTIAL_FILES, _file, 'children', null));
+               }
+               function onErrorJson( _file){
+                       var _access = getFileDataAccess( _file),
+                               _data = _access !== null ? _access.DATA : null;
+                       if( _data !== null){
+                               _data.state = FILE_STATE_IS_ERROR;
+                       }
+               }
+               function buildFileData( _data, _url){
+                       if( !_data.name){
+                               _data.name = [ _data.id, _data.ext].join( '.');
+                       }
+                       _data.type = FILE_TYPE_IS_IMAGE;
+                       _data.thumbnail = 'thumbnail/' + _data.name;
+                       
+                       var _rID = buildResourceID( _url, 'img');
+                       if( _rID !== null){
+                               _data.rID = _rID + _data.id;
+                               FILEDATA_HAS_rID_RESISTER[ _data.rID] = _data;
+                       }
+                       return _data;
+               }
+               function buildResourceID( _url, _type){
+                       if( _url === null) return null;
+                       return [ _url.replace(/https?:\/\/([^\/]*).*/, '$1'), _type].join('_');
+               }
+       /**
+        * getFileByResourceID( id, create)
+        * rID を持つ Object は {} にも格納.
+        */
+               function getFolderDataByResourceID( _name, _rID, _create){
+                       if( FILEDATA_HAS_rID_RESISTER[ _rID]){
+                               return FILEDATA_HAS_rID_RESISTER[ _rID];
+                       }
+                       var _newData = {
+                               name:           _name,
+                               type:           FILE_TYPE_IS_FOLDER,
+                               rID:            _rID
+                       };
+                       FILEDATA_RESITER.push( _newData);
+                       FILEDATA_HAS_rID_RESISTER[ _rID] = _newData;
+                       return _newData;
+               }
+               
+               function destroyTree(){
+                       
+               }
+               
+               return {
+                       init: function(){
+                               instance = this;
+                               delete FILE_CONTROLER.init;
+                       },
+                       createTree: function( _rootFileData){
+                               var _tree = new TreeClass( _rootFileData);
+                               _tree.init();
+                               TREE_ARRAY.push( _tree);
+                               return _tree;
+                       },
+                       getFileData: function( _file){
+                               var _access = getFileDataAccess( _file);
+                               return _access !== null ? _access.DATA : null;
+                       },
+                       getSeqentialFiles: function( _file){
+                               var _data = this.getFileData( _file),
+                                       _json = _data ? _data.json : null;
+                               if( _json !== null){
+                                       REQUEST_CONTROLER.getJson( _file, _json, onLoadJson, onErrorJson);
+                               }
+                       },
+                       updateFileAttribute: function( _uid, key, _value, _opt_callback){
+                               var _data = getFileDataAccess( _uid),
+                                       _type = _data.TYPE;
+                               
+                       },                      
+                       getFileAttribute: function( _uid, KEYorKEYARRAY){
+                               var _fileData = getFileDataAccess( _uid),
+                                       _type = _fileData.TYPE;
+                       },
+                       move: function( _prentUID, _targetfile, _newFolder, _newIndex, _opt_callback){
+                               var _parentData = getFileDataAccess( _prentUID),
+                                       _parentType = _parentData.TYPE,
+                                       _targetData = getFileDataAccess( _targetfile),
+                                       _targetType = _targetData.TYPE;
+                       },
+                       replace: function( _uid, _file, _newIndex){
+                               
+                       },
+                       fileEventRellay: function( _targetFile, _targetTree, _event){
+                               var _uid = _targetTree.getUID(),
+                                       _access = TREE_ACCESS_ARRAY[ _uid],
+                                       l = TREE_ARRAY.length,
+                                       _tree, _currentFile;
+                               _access !== undefined && _access.fileEventChatcher( _event);
+                               for(var i=0; i<l; ++i){
+                                       if( i !== _uid){
+                                               _tree = TREE_ARRAY[i];
+                                               _currentFile = _tree.getCurrentFile();
+                                               if( FILE_CONTROLER.getFileData( _currentFile) === _access.DATA){
+                                                       _tree.fileEventChatcher( _event);
+                                               }
+                                       }
+                               }
+                       }
+               }
+       })();
+
+       var FileEventTicketClass = function( UID, _eventType, _callback){
+               return {
+                       fileUID:        UID,
+                       eventType:      _eventType,
+                       callBack:       _callback,
+                       destroy: function(){
+                               this.callBack = _callback = null;
+                       }
+               }
+       }
+       
+       var FileEventClass = function( eventType, file, key, value){
+               return {
+                       eventType:                      eventType,
+                       targetFile:                     file,
+                       updatedAttribute:       key,
+                       updatedValue:           value
+               }
+       }
+
+/*
+ * fileのdataはobjectで保持している。
+ * pettanr.file.の外からファイルをみるときは、FileClassを通して操作する。
+ * fileの変更、それに付随して追加されたイベントは、TreeClassで管理される。
+ * treeがdestryされると、fileのイベントリスナーも全て削除される。
+ * 他の tree も data の共通する currentFile に対してのみは、file の変更イベントを受け取って流す.
+ */
+       
+       var FileClass = function( TREE, parentFile, data){
+               if( !data.children){
+                       data.children = [];
+               }
+               var TYPE = data.type,
+                       UID = FILEDATA_ACCESS.length,
+                       CHILDREN = data.children,
+                       instance;
+               
+               FILEDATA_ACCESS.push(
+                       {
+                               TYPE:                           TYPE,
+                               DATA:                           data,
+                               CHILDREN:                       CHILDREN,
+                               destroy:                        destroy,
+                               updateParent:           updateParent,
+                               fileEventChatcher:      dispatchEvent
+                       }
+               );
+               function destroy(){
+                       CHILDREN.splice( 0, CHILDREN.length);
+                       parentFile = data = CHILDREN = null;
+                       delete this.destroy;                    
+               }
+               function updateParent( _parent){
+                       parentFile = _parent;
+               }
+               function dispatchEvent( e){
+                       FILE_CONTROLER.fileEventRellay( instance, TREE, e);
+               }
+               return {
+                       init: function(){
+                               instance = this;
+                               delete this.init;
+                       },
+                       TYPE: function(){ return TYPE;},
+                       getName: function(){
+                               return data.name || 'no_name';
+                       },
+                       getThumbnail: function(){
+                               return data.thumbnail || null;
+                       },
+                       getUID: function(){
+                               return UID;
+                       },
+                       getState: function(){
+                               return data.state !== undefined ? data.state : FILE_STATE_IS_OK;
+                       },
+                       getChildFileLength: function(){
+                               return CHILDREN && typeof CHILDREN.length === 'number' ? CHILDREN.length : 0;
+                       },
+                       getChildFileByIndex: function( _index){
+                               if( typeof _index !== 'number' || _index < 0 || typeof CHILDREN.length !== 'number' || _index >= CHILDREN.length) return null;
+                               _file = new FileClass( TREE, this, CHILDREN[ _index]);
+                               _file.init();
+                               return _file;
+                       },
+                       getChildFileIndex: function( _FILEorFILEDATA){
+                               if( !CHILDREN || typeof CHILDREN.length !== 'number') return -1;
+                               var l = FILEDATA_RESITER.length,
+                                       _fileData = null;
+                               for( var i=0; i<l; ++i){
+                                       if( _FILEorFILEDATA === FILEDATA_RESITER[ i]){
+                                               _fileData = _FILEorFILEDATA;
+                                               break;
+                                       };
+                               }
+                               if( _fileData === null){
+                                       _fileData = FILE_CONTROLER.getFileData( _FILEorFILEDATA);
+                               }
+                               if( _fileData === null) return -1;
+                               
+                               l = CHILDREN.length
+                               for( var i=0; i<l; ++i){
+                                       if( CHILDREN[ i] === _fileData) return i;
+                               }
+                               return -1;
+                       },
+                       isChildFile: function( _FILEorFILEDATA){
+                               return this.getChildFileIndex( _FILEorFILEDATA) !== -1;
+                       },                      
+                       getAttribute: function( KEYorKEYARRAY){
+                               return FILE_CONTROLER.getFileAttribute( UID, KEYorKEYARRAY);
+                       },
+                       getSeqentialFiles: function(){
+                               FILE_CONTROLER.getSeqentialFiles( this);
+                       },
+                       updateAttribute: function( key, value, opt_callback){
+                               TREE.updateFileAttribute( UID, key, value, opt_callback);
+                       },
+                       move: function( _newFolder, _newIndex, opt_callback){
+                               TREE.move( parentFile, UID, _newFolder, _newIndex, opt_callback);
+                       },
+                       replace: function( _newIndex, opt_callback){
+                               TREE.replace( parentFile, UID, _newIndex, opt_callback);
+                       },
+                       addEventListener: function( _eventType, _callback){
+                               FILE_CONTROLER.addEventListener( UID, _eventType, _callback);
+                       },
+                       removeEventListener: function( _eventType, _callback){
+                               FILE_CONTROLER.removeEventListener( UID, _eventType, _callback);
+                       },
+                       collect: function(){
+                               
+                       }
+               }
+       };
+       function getFileObject( TREE, parentFile, data){
+               var _file;
+               if( FILE_OBJECT_POOL.length > 0){
+                       _file = FILE_OBJECT_POOL.shift();
+               } else {
+                       _file = new FileClass();
+               }
+               _file.init( TREE, parentFile, data);
+               return _file;
+       }
+
+       var ROOT_FILEDATA = {
+                       name:           'root',
+                       type:           FILE_TYPE_IS_FOLDER,
+                       children:       []
+               },
+               IMAGE_FILEDATA = {
+                       name:           'image root',
+                       type:           FILE_TYPE_IS_FOLDER,
+                       json:           pettanr.CONST.ORIGINAL_PICTURES_JSON_URL,
+                       children:       [
+                               {
+                                       name:           'My Pictures',
+                                       type:           FILE_TYPE_IS_FOLDER,
+                                       children:       []
+                               }
+                       ]
+               },
+               COMIC_FILEDATA = {
+                       name:           'comic root',
+                       type:           FILE_TYPE_IS_FOLDER
+               };
+       FILEDATA_RESITER.push( ROOT_FILEDATA, IMAGE_FILEDATA, IMAGE_FILEDATA.children[0], COMIC_FILEDATA);
+       ROOT_FILEDATA.children.push( COMIC_FILEDATA, IMAGE_FILEDATA);
+
+       var SYSTEM_TREE = FILE_CONTROLER.createTree( ROOT_FILEDATA),
+               ROOT_FILE = SYSTEM_TREE.getRootFile(),
+               COMIC_ROOT_INDEX = ROOT_FILE.getChildFileIndex( COMIC_FILEDATA),
+               IMAGE_ROOT_INDEX = ROOT_FILE.getChildFileIndex( IMAGE_FILEDATA);
+
+       return {
+               init: function(){
+                       REQUEST_CONTROLER.init();
+                       FILE_CONTROLER.init();
+                       delete pettanr.file.init;
+               },
+               createTree: function( _treeType){
+                       var _rootFile;
+                       if( _treeType === TREE_TYPE_IS_COMIC) _rootFile = COMIC_FILEDATA;
+                       if( _treeType === TREE_TYPE_IS_IMAGE) _rootFile = IMAGE_FILEDATA;
+                       if( _rootFile === undefined) return;
+                       return FILE_CONTROLER.createTree( _rootFile);
+               },
+               TREE_TYPE_IS_COMIC:             1,
+               TREE_TYPE_IS_IMAGE:             2,
+               TREE_TYPE_IS_SETTING:   3,
+               FILE_TYPE_IS_FOLDER:    FILE_TYPE_IS_FOLDER,
+               FILE_TYPE_IS_IMAGE:             FILE_TYPE_IS_IMAGE,
+               FILE_TYPE_IS_PANEL:             FILE_TYPE_IS_PANEL,
+               FILE_TYPE_IS_SETTING:   FILE_TYPE_IS_SETTING
+       }
+})();
+
+pettanr.finder = ( function(){
+       var FINDER_ARRAY = [],
+               ELM_ORIGIN_FINDER_LOCATION_ITEM = pettanr.util.pullHtmlAsTemplete( 'templete-finder-location-item'),
+               ELM_ORIGIN_FINDER_ICON = pettanr.util.pullHtmlAsTemplete( 'templete-finder-icon'),
+               ELM_ORIGIN_CONTAINER = pettanr.util.pullHtmlAsTemplete( 'templete-finder-container'),
+               ICON_HEIGHT = pettanr.util.getElementSize( ELM_ORIGIN_FINDER_ICON).height,
+               ICON_CLASSNAME = ELM_ORIGIN_FINDER_ICON.getElementsByTagName( 'div')[0].className,
+               FINDER_ICON_POOL = [],
+               BREAD_OBJECT_POOL = [];
+       
+       var FinderIconClass = function(){
+               var elmContainer,
+                       ELM_WRAPPER = ELM_ORIGIN_FINDER_ICON.cloneNode( true),
+                       ELM_THUMBNAIL = ELM_WRAPPER.getElementsByTagName( 'div')[0],
+                       ELM_FILENAME = ELM_WRAPPER.getElementsByTagName( 'div')[1],
+                       file, w, index, style, instansce;
+               
+               function draw(){
+                       var _thumb = file.getThumbnail();
+                       if( _thumb !== null){
+                               ELM_THUMBNAIL.className = ICON_CLASSNAME + ' has-thumbnail';
+                               ELM_THUMBNAIL.style.backgroundImage = [ 'url(', _thumb, ')'].join( '');
+                       } else {
+                               ELM_THUMBNAIL.className = ICON_CLASSNAME + ' file-type-' +file.TYPE();
+                               ELM_THUMBNAIL.style.backgroundImage = '';
+                       }
+                       ELM_FILENAME.innerHTML = file.getName();
+               }
+               function resize(){
+                       ELM_WRAPPER.style.top = (index * ICON_HEIGHT) +'px';
+               }
+               function onCollect(){
+                       elmContainer.removeChild( ELM_WRAPPER);
+                       elmContainer = null;
+                       FINDER_ICON_POOL.push( instansce);
+               }
+               
+               return {
+                       init: function( _file, _elmContainer, _w, _index, _style){
+                               instansce = this;
+                               if( elmContainer !== _elmContainer){
+                                       _elmContainer.appendChild( ELM_WRAPPER);
+                                       elmContainer = _elmContainer;
+                               }
+                               if( file !== _file){
+                                       file = _file;
+                                       draw();
+                               }
+                               if( index !== _index){
+                                       index = _index;
+                                       resize();
+                               }
+                       },
+                       elm: ELM_WRAPPER,
+                       index: function( _index){
+                               
+                               return index;
+                       },
+                       style: function( _style){
+                               
+                               return style;
+                       },
+                       onResize: function( w){
+                               
+                       },
+                       collect: function(){
+                               elmContainer.removeChild( ELM_WRAPPER);
+                               file = elmContainer = null;
+                               FINDER_ICON_POOL.push( this);
+                       }
+               }
+       }
+       function updateIconPosition( _style, _w, _index, _elm){
+               
+       }
+       var BreadcrumbClass = function(){
+               var elmContainer,
+                       ELM_WRAPPER = ELM_ORIGIN_FINDER_LOCATION_ITEM.cloneNode( true),
+                       ELM_FILENAME = ELM_WRAPPER.getElementsByTagName( 'a')[0],
+                       file, w, index, instansce;
+
+               function draw(){
+                       ELM_FILENAME.className = 'file-icon-' +file.TYPE();
+                       ELM_FILENAME.innerHTML = file.getName();
+               }
+               function resize( index){
+                       ELM_WRAPPER.style.left = (index * 90) +'px';
+               }
+
+               return {
+                       init: function( _file, _elmContainer, _index){
+                               instansce = this;
+                               if( elmContainer !== _elmContainer){
+                                       _elmContainer.appendChild( ELM_WRAPPER);
+                                       elmContainer = _elmContainer;
+                               }
+                               if( file !== _file){
+                                       file = _file;
+                                       draw();
+                               }
+                               if( index !== _index){
+                                       index = _index;
+                                       resize( index);
+                               }
+                       },
+                       elm: ELM_WRAPPER,
+                       index: function( _index){
+                               
+                               return index;
+                       },
+                       onResize: function( w){
+                               
+                       },
+                       collect: function(){
+                               elmContainer.removeChild( ELM_WRAPPER);
+                               file = elmContainer = null;
+                               BREAD_OBJECT_POOL.push( this);
+                       }
+               }
+       }
+       
+       var FinderClass = function( ELM_CONTAINER, TREE_TYPE, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled){
+               var ICON_ARRAY = [],
+                       BREAD_ARRAY = [],
+                       elmContainer = ELM_ORIGIN_CONTAINER.cloneNode( true),
+                       elmLocation = elmContainer.getElementsByTagName( 'ul')[0],
+                       nodesDiv = elmContainer.getElementsByTagName( 'div'),
+                       elmSidebarButton = nodesDiv[1],
+                       elmStyleButton = nodesDiv[2],
+                       elmActionButton = nodesDiv[3],
+                       elmBody = nodesDiv[ nodesDiv.length -1],
+                       tree = pettanr.file.createTree( TREE_TYPE),
+                       headX,
+                       headY,
+                       headH = pettanr.util.getElementSize( ELM_ORIGIN_FINDER_ICON).height,
+                       bodyY,
+                       currentFile = null,
+                       breadW = 90,
+                       size = pettanr.util.getElementSize( ELM_ORIGIN_FINDER_ICON),
+                       iconW = size.width,
+                       iconH = size.height,
+                       style = 0;
+                       w = 800;
+
+               tree.addTreeEventListener( 'onTreeUpdate', draw);
+               
+               function draw(){
+                       var     l = tree.hierarchy() +1,
+                               m = BREAD_ARRAY.length,
+                               _file, _bread;
+                       for(var i=0; i<l; ++i){
+                               _file = i !== l-1 ? tree.getParentFileAt( i) : tree.getCurrentFile();
+                               if( i < m){
+                                       BREAD_ARRAY[ i].init( _file, elmLocation, i);
+                               } else {
+                                       BREAD_ARRAY.push( getBreadcrumb( _file, elmLocation, i));
+                               }
+                       }
+                       while( l < BREAD_ARRAY.length){
+                               BREAD_ARRAY.pop().collect();
+                       }
+                       
+                       l = _file.getChildFileLength();
+                       m = ICON_ARRAY.length;
+
+                       for( i=0; i<l; ++i){
+                               if( i < m){
+                                       ICON_ARRAY[ i].init( _file.getChildFileByIndex( i), elmBody, w, i, style);
+                               } else {
+                                       ICON_ARRAY.push( getFinderIcon( _file.getChildFileByIndex( i), elmBody, w, i, style));
+                               }
+                       }
+                       while( l < ICON_ARRAY.length){
+                               ICON_ARRAY.pop().collect();
+                       }
+               }
+               function onHeadClick( e){
+                       var _mouseX = e.pageX -headX,
+                               _mouseY = e.pageY -headY,
+                               i = Math.floor( _mouseX /breadW),
+                               l = BREAD_ARRAY.length -1;
+                       if( i < l){
+                               var _file = tree.getParentFileAt( i);
+                               if( _file !== null){
+                                       tree.up( i);
+                                       draw();
+                               }
+                       }
+               }
+               function onBodyClick( e){
+                       var _mouseX = e.pageX,
+                               _mouseY = e.pageY -bodyY,
+                               i = Math.floor( _mouseY /iconH),
+                               l = ICON_ARRAY.length;
+                       if( i < l){
+                               var _file = tree.getCurrentFile().getChildFileByIndex( i);
+                               if( _file !== null && _file.TYPE() === pettanr.file.FILE_TYPE_IS_FOLDER){
+                                       tree.down( i);
+                                       draw();
+                               }
+                       }
+               }
+               
+               return {
+                       init: function(){
+                               ELM_CONTAINER.appendChild( elmContainer);
+                               $( elmLocation).click( onHeadClick);
+                               $( elmContainer).click( onBodyClick);
+                               var position = pettanr.util.getAbsolutePosition( elmLocation);
+                               headX = position.x;
+                               headY = position.y;
+                               bodyY = pettanr.util.getAbsolutePosition( elmBody).y;
+                               delete this.init;
+                       },
+                       onOpen: function(){
+                               this.init !== undefined && this.init();
+                               draw();
+                       },
+                       onClose: function(){
+                               
+                       },
+                       onWindowResize: function(){
+                               
+                       }
+               }
+       }
+       function getFinderIcon( _file, _elmContainer, w, index, style){
+               var _icon;
+               if( FINDER_ICON_POOL.length > 0){
+                       _icon = FINDER_ICON_POOL.shift();
+               } else {
+                       _icon = new FinderIconClass();
+               }
+               _icon.init( _file, _elmContainer, w, index, style);
+               return _icon;
+       }
+       
+       function getBreadcrumb( _file, _elmContainer, index){
+               var _bread;
+               if( BREAD_OBJECT_POOL.length > 0){
+                       _bread = BREAD_OBJECT_POOL.shift();
+               } else {
+                       _bread = new BreadcrumbClass();
+               }
+               _bread.init( _file, _elmContainer, index);
+               return _bread;
+       }
+
+       return {
+               init: function(){
+                       
+               },
+               createFinder: function( _elmTarget, _treeType, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled){
+                       var _finder = new FinderClass( _elmTarget, _treeType, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled);
+                       FINDER_ARRAY.push( _finder);
+                       return _finder;
+               }
+       }
+})();
+
+pettanr.gallery = ( function(){
+       var finder,
+               elmContainer = document.getElementById( 'gallery');
+               
+       return {
+               init: function( _option){
+                       option = _option;
+                       delete pettanr.gallery.init;
+               },
+               firstOpen: function(){
+                       finder = pettanr.finder.createFinder( elmContainer, pettanr.file.TREE_TYPE_IS_IMAGE);
+                       delete pettanr.gallery.firstOpen;
+               },
+               onOpen: function(){
+                       pettanr.gallery.firstOpen !== undefined && pettanr.gallery.firstOpen();
+                       finder.onOpen();
+                       
+               },
+               onClose: function(){
+                       finder.onClose();
+               },
+               onWindowResize: function(){
+                       finder.onWindowResize();
+               }
+       }
+})();
+
+// i18n
+// login
+// lib
+
+pettanr.fn( pettanr.view);
+pettanr.fn( pettanr.overlay);
+pettanr.fn( pettanr.key);
+pettanr.fn( pettanr.balloon);
+pettanr.fn( pettanr.editor);
+pettanr.fn( pettanr.file);
+pettanr.fn( pettanr.finder);
+pettanr.fn( pettanr.gallery);
+
+$(window).ready( pettanr.init);
diff --git a/0.4.x/test/1.gif b/0.4.x/test/1.gif
new file mode 100644 (file)
index 0000000..d64c568
Binary files /dev/null and b/0.4.x/test/1.gif differ
diff --git a/0.4.x/test/data.js b/0.4.x/test/data.js
new file mode 100644 (file)
index 0000000..7cf6d72
--- /dev/null
@@ -0,0 +1,30 @@
+/**
+ * @author Administrator
+ */
+
+/** * ドキュメント内のSVGを別ウィンドウで出力する。
+ * 引数svgIndexには、ドキュメント内のSVG要素のインデックスを指定すること。
+ * * (指定しない場合は0。最初のSVG要素とみなされる) */
+function exportSVG(svgIndex){
+       if (!svgIndex) {         svgIndex = 0;     } 
+       // SVG要素を取得。 
+       var svgNode = document.getElementsByTagName("svg")[svgIndex];
+       // 生成されるXMLにSVGのネームスペースを指定。 
+       svgNode.setAttribute("xmlns", "http://www.w3.org/2000/svg");
+       // XMLドキュメント宣言  
+       var svgText = "\n";
+       // 出力するXML(テキスト)SVG要素を追加する。 
+       svgText += svgNode.parentNode.innerHTML;
+       //alert(svgText);
+       // SVG-XMLを文字列化したものをdataスキームで生成 
+       // エスケープ(UTF-16文字列はエスケープ解除) 
+       var data = "data:image/svg+xml;charset=UTF-8," + UnescapeUTF16Only(escape(svgText));
+       // 別ウィンドウ(_blank)に出力 
+       var svgWindow = window.open(data, "SVG", "_blank");
+}
+function UnescapeUTF16Only(s) {
+       return s.replace(/%u\w\w\w\w/g, UnescapeUTF16);
+}
+function UnescapeUTF16(s) {
+       return unescape(s);
+}
\ No newline at end of file
diff --git a/0.4.x/test/flip.svg b/0.4.x/test/flip.svg
new file mode 100644 (file)
index 0000000..cd6c03a
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><image x="0" y="0" width="200" height="200" xlink:href="http://static.sourceforge.jp/thumb/g/2/930/640x640_0.png" transform="scale(-1,1) translate(-200,0)" /></svg>
\ No newline at end of file
diff --git a/0.4.x/test/svg.html b/0.4.x/test/svg.html
new file mode 100644 (file)
index 0000000..d594242
--- /dev/null
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<html xmlns:v="urn:schemas-microsoft-com:vml">\r
+    <head>\r
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+           <meta http-equiv="Content-Language" content="ja">\r
+           <meta http-equiv="Content-Script-Type" content="text/javascript">\r
+           <meta http-equiv="Content-Style-Type" content="text/css">\r
+           <meta http-equiv="imagetoolbar" content="no">\r
+        <title>pettanR</title>\r
+               <link rel="stylesheet" type="text/css" href="common.css">\r
+       </head>\r
+       <body>\r
+               <div id="general-content">\r
+                       <div id="outer-wrapper">\r
+                               \r
+                               <div id="header">\r
+                                       <div class="base-content-width" style="position:relative;">\r
+                                               <h1>pettanR</h1>\r
+                                       <!-- global navi -->\r
+                                               <div id="global-navi">\r
+                                                       <noscript id="noscript-alert">You need to have JavaScript enabled.</noscript>\r
+                                               </div>\r
+                                       </div>\r
+                               </div>\r
+                               \r
+                               <div id="inner-wrapper" class="base-content-width">\r
+                                       <div id="main">\r
+<img src="flip.svg">\r
+\r
+<img src="data:image/svg+xml;charset=utf-8,%3c%3fxml%20version%3d%221.0%22%3f%3e%3c!DOCTYPE%20svg%20PUBLIC%20%22-%2f%2fW3C%2f%2fDTD%20SVG%201.1%2f%2fEN%22%20%22http%3a%2f%2fwww.w3.org%2fGraphics%2fSVG%2f1.1%2fDTD%2fsvg11.dtd%22%3e%3csvg%20xmlns%3d%22http%3a%2f%2fwww.w3.org%2f2000%2fsvg%22%20version%3d%221.1%22%20xmlns%3axlink%3d%22http%3a%2f%2fwww.w3.org%2f1999%2fxlink%22%20width%3d%22200%22%20height%3d%22200%22%3e%3cimage%20x%3d%220%22%20y%3d%220%22%20width%3d%22200%22%20height%3d%22200%22%20xlink%3ahref%3d%22http%3a%2f%2fstatic.sourceforge.jp%2fthumb%2fg%2f2%2f930%2f640x640_0.png%22%20transform%3d%22scale(-1%2c1)%20translate(-200%2c0)%22%20%2f%3e%3c%2fsvg%3e">\r
+<img src="data:image/svg+xml;charset=utf-8,%3c%3fxml%20version%3d%221.0%22%3f%3e%3c!DOCTYPE%20svg%20PUBLIC%20%22-%2f%2fW3C%2f%2fDTD%20SVG%201.1%2f%2fEN%22%20%22http%3a%2f%2fwww.w3.org%2fGraphics%2fSVG%2f1.1%2fDTD%2fsvg11.dtd%22%3e%3csvg%20xmlns%3d%22http%3a%2f%2fwww.w3.org%2f2000%2fsvg%22%20version%3d%221.1%22%20xmlns%3axlink%3d%22http%3a%2f%2fwww.w3.org%2f1999%2fxlink%22%20width%3d%22200%22%20height%3d%22200%22%3e%3cimage%20x%3d%220%22%20y%3d%220%22%20width%3d%22200%22%20height%3d%22200%22%20xlink%3ahref%3d%22http%3a%2f%2fstatic.sourceforge.jp%2fthumb%2fg%2f2%2f930%2f640x640_0.png%22%20transform%3d%22scale(-1%2c1)%20translate(-200%2c0)%22%20%2f%3e%3c%2fsvg%3e">\r
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">\r
+<image x="0" y="0" width="200" height="200" xlink:href="1.gif" transform="scale(-1,1) translate(-200,0)" />\r
+</svg>\r
+\r
+                                       </div>\r
+                               </div>\r
+                       </div>\r
+               </div>\r
+               \r
+               <!-- footer -->\r
+               <div id="footer-content">\r
+                       <div id="footer">\r
+                               <div id="footer-item-container" class="base-content-width clearfix">\r
+                                       <div class="footer-item-wrapper">\r
+                                               <div class="footer-item">\r
+                                                       <h2>ぺったんR にようこそ</h2>\r
+                                                       <ul>\r
+                                                               <li>サンプル</li>\r
+                                                               <li>ぺったんRの特徴</li>\r
+                                                               <li>沿革</li>\r
+                                                       </ul>\r
+                                               </div>\r
+                                       </div>\r
+                                       <div class="footer-item-wrapper">\r
+                                               <div class="footer-item">\r
+                                                       <h2>ドキュメント</h2>\r
+                                                       <ul>\r
+                                                               <li>作家向けドキュメント</li>\r
+                                                               <li>絵師向けドキュメント</li>                                                 \r
+                                                               <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers" rel="me" target="_blank">開発者向けドキュメント</a></li>\r
+                                                               <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters" rel="me" target="_blank">編集長向けドキュメント</a></li>\r
+                                                       </ul>\r
+                                               </div>\r
+                                       </div>\r
+                                       <div class="footer-item-wrapper">\r
+                                               <div class="footer-item">\r
+                                                       <h2>プロトタイプ</h2>\r
+                                                       <ul>\r
+                                                               <li>pettanr</li>\r
+                                                               <li><a href="work.html" rel="editor">js editor</a></li>\r
+                                                       </ul>\r
+                                                       <h2>Ajax contents</h2>\r
+                                                       <ul>\r
+                                                               <li><a href="help/jp.xml">help | jp</a></li>\r
+                                                       </ul>\r
+                                               </div>\r
+                                       </div>\r
+                                       <div class="footer-item-wrapper" style="width:170px;">\r
+                                               <div class="footer-item" style="padding-right:0;">\r
+                                                       <h2>ぺったんRチーム</h2>\r
+                                                       <ul>\r
+                                                               <li>わたしたちについて</li>\r
+                                                               <li>ミッション</li>\r
+                                                               <li><a href="diary/itozyun.xml">itozyun's diary</a></li>\r
+                                                               <li>個人情報保護方針</li>\r
+                                                               <li>作品の取り扱い</li>\r
+                                                               <li>お問い合わせ</li>\r
+                                                       </ul>\r
+                                               </div>\r
+                                       </div>\r
+                               </div>\r
+                               <div id="copyright">Copyright &copy; 2011-2012 pettanR team, some rights reserved.</div>\r
+                       </div>\r
+               </div>\r
+               <script type="text/javascript">\r
+                       function exportSVG(){\r
+                               var svgText = "\n";\r
+                               // 出力するXML(テキスト)SVG要素を追加する。 \r
+                               svgText += document.svgtext.value;\r
+                               //alert(svgText);\r
+                               // SVG-XMLを文字列化したものをdataスキームで生成 \r
+                               // エスケープ(UTF-16文字列はエスケープ解除) \r
+                               var data = "data:image/svg+xml;charset=UTF-8," + UnescapeUTF16Only(escape(svgText));\r
+                               // 別ウィンドウ(_blank)に出力 \r
+                               var svgWindow = window.open(data, "SVG", "_blank");\r
+                       }\r
+                       function UnescapeUTF16Only(s) {\r
+                               return s.replace(/%u\w\w\w\w/g, UnescapeUTF16);\r
+                       }\r
+                       function UnescapeUTF16(s) {\r
+                               return unescape(s);\r
+                       }\r
+               </script>\r
+    </body>\r
+</html>\r
+\r
diff --git a/0.4.x/thumbnail/1.png b/0.4.x/thumbnail/1.png
new file mode 100644 (file)
index 0000000..3ab5eae
Binary files /dev/null and b/0.4.x/thumbnail/1.png differ
diff --git a/0.4.x/thumbnail/2.png b/0.4.x/thumbnail/2.png
new file mode 100644 (file)
index 0000000..f44806b
Binary files /dev/null and b/0.4.x/thumbnail/2.png differ
diff --git a/0.4.x/thumbnail/3.png b/0.4.x/thumbnail/3.png
new file mode 100644 (file)
index 0000000..8655441
Binary files /dev/null and b/0.4.x/thumbnail/3.png differ
diff --git a/0.4.x/thumbnail/4.png b/0.4.x/thumbnail/4.png
new file mode 100644 (file)
index 0000000..c449e4c
Binary files /dev/null and b/0.4.x/thumbnail/4.png differ
diff --git a/0.4.x/thumbnail/5.png b/0.4.x/thumbnail/5.png
new file mode 100644 (file)
index 0000000..c985a19
Binary files /dev/null and b/0.4.x/thumbnail/5.png differ
diff --git a/0.4.x/wiki/wiki.css b/0.4.x/wiki/wiki.css
new file mode 100644 (file)
index 0000000..f9294c1
--- /dev/null
@@ -0,0 +1,166 @@
+#wiki-container {
+       margin:                         1em 0 3em;
+}
+       #page-navi-container {
+               width:                          180px;
+               float:                          left;
+       }
+               #page-total {
+                       height:                         12px;
+                       font-size:                      12px;
+                       line-height:            12px;
+                       padding:                        8px 1em;
+                       color:                          #999;
+                       border-top:                     1px solid #ccc;
+                       border-bottom:          1px solid #ccc;
+               }
+               .page-navi,
+               .page-navi-current {
+                       height:                         24px;
+                       border-bottom:          1px solid #ccc;
+               }
+                       .page-navi a,
+                       .page-navi a:link,
+                       .page-navi-current a,
+                       .page-navi-current a:link {
+                               display:                        block;
+                               font-size:                      14px;
+                               line-height:            14px;
+                               padding:                        6px 0 4px 0.5em;
+                               color:                          #333;
+                               text-decoration:        none;
+                               overflow:                       hidden;
+                       }
+                       .page-navi a:hover {
+                               background-color:       #ccc;
+                       }               
+               
+               .page-navi-current {
+                       background-color:       #333;
+               }
+                       .page-navi-current a:link,
+                       .page-navi-current a:visited {
+                               color:                          #eee;
+                       }
+                       .page-navi-current a:hover {
+                               background-color:       #444;
+                       }
+
+       #page-body-container {
+               width:                          580px;
+               float:                          right;
+       }
+               .page-wrapper {
+                       display:                        none;
+               }
+               .page-wrapper:target,
+               .page-wrapper-current {
+                       display:                        block !important;
+               }
+                       .page-header {
+                               position:                       relative;
+                               line-height:            56px;
+                               background-color:       #ddd;
+                               margin-bottom:          1em;
+                               height:                         56px;
+                       }
+                               .page-title {
+                                       position:                       absolute;
+                                       top:                            0;
+                                       left:                           -5px;
+                                       font-size:                      56px;
+                                       font-weight:            bold;
+                                       line-height:            56px;
+                                       height:                         56px;
+                                       padding-left:           0;
+                                       overflow:                       hidden;
+                                       display:                        block;
+                                       color:                          #fff;
+                                       width:                          580px;
+                               }
+                               .page-title:first-letter {
+                                       font-size:                      76px;
+                                       line-height:            56px;
+                                       color:                          #666;
+                               }
+                               .page-date {
+                                       position:                       absolute;
+                                       top:                            28px;
+                                       right:                          0;
+                                       display:                        block;
+                                       color:                          #666;
+                                       font-size:                      12px;
+                                       font-weight:            bold;
+                                       line-height:            12px;
+                                       width:                          80px;
+                               }
+       
+       
+       .internalLink {
+               border-bottom:          1px solid green;
+       }                       
+       .externalLink {
+               border-bottom:          1px solid red;
+       }
+       .internalLink:hover,                    
+       .externalLink:hover {
+               text-decoration:        none;
+       }       
+       .jump-to-top {
+               display:                        block;
+               text-align:                     right;
+       }
+       
+
+#wiki-container h1 {
+       text-align:             left;
+       margin:                 1em 0 2em;
+       font-size:              2em;
+}
+
+#wiki-container h2 {
+       text-align:             left;
+       margin:                 2em 0 1em 0;
+}
+#wiki-container h3,
+#wiki-container h4,
+#wiki-container h5,
+#wiki-container h6 {
+       text-align:             left;
+       margin:                 2em 0 1em;
+}
+
+img.embed-image {
+       margin:                 0 0 1em;
+       max-width:              580px;
+}
+#wiki-container {
+       line-height: 1.6em;
+}
+
+       #wiki-container pre,
+       #wiki-container blockquote {
+           border:                             1px solid;
+           overflow:                   auto;
+           padding:                    4px 0.5em;
+           margin:                             0.8em 0 1em 2em;
+           line-height:                1.4em;
+           white-space:                pre-wrap;
+           word-wrap:                  break-word;
+           font-size:                  12px;
+       }
+       #wiki-container pre {
+               border-color:           #ccc;
+           background-color:   #f0f0f0;
+       }
+       #wiki-container blockquote {
+               border-color:           #e9f;
+           background-color:   #ecf;
+       }
+
+       #page-body-container ul,
+       #page-body-container ol {
+               margin-bottom: 1em;
+       }
+       #page-body-container ul ul, #page-body-container ol ul {margin: 0 0 0 1.2em; font-size: 0.95em;}
+       #page-body-container ul ol, #page-body-container ol ol {margin: 0 0 0 1.6em; font-size: 0.95em;}
diff --git a/0.4.x/wiki/wiki.js b/0.4.x/wiki/wiki.js
new file mode 100644 (file)
index 0000000..e8a734b
--- /dev/null
@@ -0,0 +1,308 @@
+/**
+ * @author Administrator
+ */
+( function(){
+       var CLEAN_TARGET_ELEMENT = 'script,style,object,applet,embed,iframe,frame,base,bgsound,frameset,listing'.split( ','),
+               root = document.getElementById('wiki-container'),
+               navi = document.getElementById('page-navi-container'),
+               ELM_BODY_CONTAINER = document.getElementById('page-body-container'),
+               titleArray = [],
+               elmBuilder = document.createElement( 'div'),
+               wikiPageClass = function( id, title, elmNavi, elmAnchor, elmWrapper, elmBody){
+                       var visible = false;
+                       titleArray.push( title);
+                       
+                       elmAnchor.onclick = jumpPage;
+                       
+                       return {
+                               fixCommentToHtml: function(){
+                                       elmBuilder.innerHTML = elmBody.childNodes[0].nodeValue.replace( /\[\[BR\]\]/g, '');
+                                       cleanElement( elmBuilder);
+                                       moveElement( elmBody);
+                                       delete this.fixCommentToHtml;
+                               },
+                               buildInnerLink: function(){
+                                       var jumpArray = elmBody.getElementsByTagName( 'a'),
+                                               l = jumpArray.length,
+                                               _jump, _index;
+                                       for(var i=0; i<l; ++i){
+                                               _jump = jumpArray[i];
+                                               _index = getPageIndexByTitle( _jump.childNodes[0].nodeValue);
+                                               if( _index === -1) continue;
+                                               _jump.href = '#page' +( _index +1);
+                                               _jump.onclick = jumpPage;
+                                               _jump.className += ' internalLink';
+                                       }
+                                       delete this.buildInnerLink;
+                               },
+                               show: function( _id){
+                                       if( id === _id && visible === false){
+                                               elmWrapper.className = 'page-wrapper-current';
+                                               elmWrapper.style.display = 'block';
+                                               elmNavi.className = 'page-navi-current';
+                                               ELM_BODY_CONTAINER.appendChild( elmWrapper);
+                                               visible = true;
+                                       }
+                                       if( id !== _id && visible === true){
+                                               elmWrapper.className = 'page-wrapper';
+                                               elmWrapper.style.display = '';
+                                               elmNavi.className = 'page-navi';
+                                               ELM_BODY_CONTAINER.removeChild( elmWrapper);
+                                               visible = false;
+                                       }
+                               }
+                       }
+               },
+               wikiPageArray = ( function(){
+                       var ret = [],
+                               _body = document.body,
+                               _children = navi.getElementsByTagName( 'div'),
+                               l = _children.length,
+                               _child, _a, _title, _id, _wrap,
+                               _page;
+                               
+                       _body.appendChild( elmBuilder);
+
+                       for(var i=0; i<l; ++i){
+                               _child = _children[i];
+                               if( _child.className.indexOf( 'page-navi') !== -1){
+                                       _a = _child.getElementsByTagName( 'a')[0];
+                                       _title = _a ? _a.childNodes[0].nodeValue : null;
+                                       _id = _a ? _a.href.split('#')[1] : null;
+                                       _wrap = document.getElementById( _id);
+                                       _page = new wikiPageClass( _id, _title, _child, _a, _wrap, _wrap.getElementsByTagName( 'div')[1]);
+                                       !document.all && _page.fixCommentToHtml();
+                                       ret.push( _page);
+                               }
+                       }
+                       _body.removeChild( elmBuilder);
+                       
+                       return ret;
+               })(),
+               NUM_PAGE = wikiPageArray.length,
+               FRONT_ID = 'FrontPage',
+               FRONT_INDEX = getPageIndexByTitle( FRONT_ID) +1,
+               jumpArray = root.getElementsByTagName('a'),
+               hash = document.location.href.split('#')[1],
+               _jump, i;
+
+       // 
+       if( !document.all){
+               cleanElement( root);
+       }
+       root = navi = elmBuilder = null;
+
+       // build inner link
+       for( i=0; i<NUM_PAGE; ++i){
+               wikiPageArray[i].buildInnerLink();
+       }
+       
+       // externalLink
+       for( i=0, l = jumpArray.length; i<l; ++i){
+               _jump = jumpArray[i];
+               if( _jump.href.indexOf('#page') === -1 ){
+                       _jump.target = '_blank';
+                       _jump.className += ' externalLink';
+               }
+       }
+       jumpArray = _jump = null;
+       
+       // show current
+       setTimeout(
+               function(){
+                       jumpPage( hash && hash.match( /page\d/) ? hash : 'page' +FRONT_INDEX);
+                       hash = null;
+               }
+       );
+       
+       function moveElement( _targetElm){
+               var _elms = _targetElm.childNodes;
+               while( _elms.length > 0){
+                       _targetElm.removeChild( _elms[ 0]);
+               }               
+               
+               _elms = elmBuilder.childNodes;
+               while( _elms.length > 0){
+                       _targetElm.appendChild( _elms[0]);
+               }
+               cleanElement( elmBuilder);
+       }
+       function cleanElement( _targetElm){
+               var l = CLEAN_TARGET_ELEMENT.length,
+                       elms, elm, i;
+               for( i=0; i<l; ++i){
+                       elms = _targetElm.getElementsByTagName( CLEAN_TARGET_ELEMENT[ i]);
+                       while( elms.length > 0){
+                               elm = elms[ 0];
+                               elm.parentNode && elm.parentNode.removeChild( elm);
+                       }
+               }
+               if( !document.all) return;
+               elms = _targetElm.getElementsByName( '*');
+               l = elms.length;
+               for(i=0; i<l; ++i){
+                       elm = elms[ i];
+                       elm.style.filter = elm.style.behavior = '';
+               }
+       }
+       function getPageIndexByTitle( _title){
+               for(var i=0; i<NUM_PAGE; ++i){
+                       if( titleArray[ i] === _title) return i;
+               }
+               return -1;
+       }
+       function jumpPage( id){
+               var id = typeof id === 'string' ? id : this.href.split('#')[1];
+               for(var i=0; i<NUM_PAGE; ++i){
+                       wikiPageArray[i].show( id);
+               }
+               return false;
+       }
+})();
+
+
+
+/* Smooth scrolling
+   Changes links that link to other parts of this page to scroll
+   smoothly to those links rather than jump to them directly, which
+   can be a little disorienting.
+   
+   sil, http://www.kryogenix.org/
+   
+   v1.0 2003-11-11
+   v1.1 2005-06-16 wrap it up in an object
+*/
+
+var ss = {
+  fixAllLinks: function() {
+    // Get a list of all links in the page
+    var allLinks = document.getElementsByTagName('a');
+    // Walk through the list
+    for (var i=0;i<allLinks.length;i++) {
+      var lnk = allLinks[i];
+      if ((lnk.href && lnk.href.indexOf('#') != -1) && 
+          ( (lnk.pathname == location.pathname) ||
+           ('/'+lnk.pathname == location.pathname) ) && 
+          (lnk.search == location.search)) {
+        // If the link is internal to the page (begins in #)
+        // then attach the smoothScroll function as an onclick
+        // event handler
+        ss.addEvent(lnk,'click',ss.smoothScroll);
+      }
+    }
+  },
+
+  smoothScroll: function(e) {
+    // This is an event handler; get the clicked on element,
+    // in a cross-browser fashion
+    if (window.event) {
+      target = window.event.srcElement;
+    } else if (e) {
+      target = e.target;
+    } else return;
+
+    // Make sure that the target is an element, not a text node
+    // within an element
+    if (target.nodeName.toLowerCase() != 'a') {
+      target = target.parentNode;
+    }
+  
+    // Paranoia; check this is an A tag
+    if (target.nodeName.toLowerCase() != 'a') return;
+  
+    // Find the <a name> tag corresponding to this href
+    // First strip off the hash (first character)
+    anchor = target.hash.substr(1);
+    // Now loop all A tags until we find one with that name
+    var allLinks = document.getElementsByTagName('a');
+    var destinationLink = null;
+    for (var i=0;i<allLinks.length;i++) {
+      var lnk = allLinks[i];
+      if (lnk.name && (lnk.name == anchor)) {
+        destinationLink = lnk;
+        break;
+      }
+    }
+    if (!destinationLink) destinationLink = document.getElementById(anchor);
+
+    // If we didn't find a destination, give up and let the browser do
+    // its thing
+    if (!destinationLink) return true;
+  
+    // Find the destination's position
+    var destx = destinationLink.offsetLeft; 
+    var desty = destinationLink.offsetTop;
+    var thisNode = destinationLink;
+    while (thisNode.offsetParent && 
+          (thisNode.offsetParent != document.body)) {
+      thisNode = thisNode.offsetParent;
+      destx += thisNode.offsetLeft;
+      desty += thisNode.offsetTop;
+    }
+  
+    // Stop any current scrolling
+    clearInterval(ss.INTERVAL);
+  
+    cypos = ss.getCurrentYPos();
+  
+    ss_stepsize = parseInt((desty-cypos)/ss.STEPS);
+    ss.INTERVAL = setInterval('ss.scrollWindow('+ss_stepsize+','+desty+',"'+anchor+'")',10);
+
+    // And stop the actual click happening
+    if (window.event) {
+      window.event.cancelBubble = true;
+      window.event.returnValue = false;
+    }
+    if (e && e.preventDefault && e.stopPropagation) {
+      e.preventDefault();
+      e.stopPropagation();
+    }
+  },
+
+  scrollWindow: function(scramount,dest,anchor) {
+    wascypos = ss.getCurrentYPos();
+    isAbove = (wascypos < dest);
+    window.scrollTo(0,wascypos + scramount);
+    iscypos = ss.getCurrentYPos();
+    isAboveNow = (iscypos < dest);
+    if ((isAbove != isAboveNow) || (wascypos == iscypos)) {
+      // if we've just scrolled past the destination, or
+      // we haven't moved from the lpageWrapperArraycroll (i.e., we're at the
+      // bottom of the page) then scroll exactly to the link
+      window.scrollTo(0,dest);
+      // cancel the repeating timer
+      clearInterval(ss.INTERVAL);
+      // and jump to the link directly so the URL's right
+      location.hash = anchor;
+    }
+  },
+
+  getCurrentYPos: function() {
+    if (document.body && document.body.scrollTop)
+      return document.body.scrollTop;
+    if (document.documentElement && document.documentElement.scrollTop)
+      return document.documentElement.scrollTop;
+    if (window.pageYOffset)
+      return window.pageYOffset;
+    return 0;
+  },
+
+  addEvent: function(elm, evType, fn, useCapture) {
+    // addEvent and removeEvent
+    // cross-browser event handling for IE5+,  NS6 and Mozilla
+    // By Scott Andrew
+    if (elm.addEventListener){
+      elm.addEventListener(evType, fn, useCapture);
+      return true;
+    } else if (elm.attachEvent){
+      var r = elm.attachEvent("on"+evType, fn);
+      return r;
+    } else {
+      alert("Handler could not be removed");
+    }
+  }
+}
+
+ss.STEPS = 25;
+
+ss.addEvent(window,"load",ss.fixAllLinks);
diff --git a/0.4.x/wiki/wiki.xml b/0.4.x/wiki/wiki.xml
new file mode 100644 (file)
index 0000000..a240b89
--- /dev/null
@@ -0,0 +1,1859 @@
+<?xml version="1.0" encoding="utf-8" ?>\r
+<?xml-stylesheet type="text/xsl" href="wiki.xsl"?>\r
+\r
+<rdf:RDF\r
+  xmlns="http://purl.org/rss/1.0/"\r
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
+  xmlns:content="http://purl.org/rss/1.0/modules/content/"\r
+  xmlns:dc="http://purl.org/dc/elements/1.1/"\r
+ >\r
+\r
+  <channel rdf:about="http://sourceforge.jp/projects/pettanr/wiki/!feeds/list">\r
+    <title>ぺったんR Wiki</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/!feeds/list</link>\r
+    <description>\r
+      ぺったんR プロジェクト Wiki ページ一覧    </description>\r
+        <dc:date>2012-01-10T16:25:14+09:00</dc:date>\r
+\r
+        <items>\r
+      <rdf:Seq>\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/YasushiIto" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/LocalWiki" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/FrontPage" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ItoZyun" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutModels" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ClientSide" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PngFix" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/JsonApi" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutLisence" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/LisencesController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PictureIo" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/InstallRubyAndRails" />\r
+\r
+              </rdf:Seq>\r
+    </items>\r
+  </channel>\r
+\r
+      <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/YasushiIto">\r
+    <title>YasushiIto</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/YasushiIto</link>\r
+    <dc:identifier>YasushiIto</dc:identifier>\r
+\r
+    <dc:date>2012-01-10T16:25:14+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[管理者メンテナンスページを分離\r
+\r
+md5を採用するとユニーク。同じ画像はアップロードできない。絵師の仕様がかわる?\r
+\r
+フキダシは名前の末尾を@ドメインにする慣習\r
+\r
+クリコモは転載自由なのか?\r
+\r
+jpgは反転できなくてもよくね?\r
+\r
+\r
+= wとhにマイナスはあり?\r
+\r
+ * 逆フキダシ\r
+ * min_width&rarr;lower_limit\r
+ * フォントなど\r
+{{{]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<p>管理者メンテナンスページを分離\r
+</p><p>md5を採用するとユニーク。同じ画像はアップロードできない。絵師の仕様がかわる?\r
+</p><p>フキダシは名前の末尾を@ドメインにする慣習\r
+</p><p>クリコモは転載自由なのか?\r
+</p><p>jpgは反転できなくてもよくね?\r
+</p><h1 id="h1-w.E3.81.A8h.E3.81.AB.E3.83.9E.E3.82.A4.E3.83.8A.E3.82.B9.E3.81.AF.E3.81.82.E3.82.8A.EF.BC.9F">wとhにマイナスはあり?</h1><ul><li>逆フキダシ\r
+</li><li>min_width→lower_limit\r
+</li><li>フォントなど\r
+<pre>  &lt;property name=&quot;fontSize&quot;/&gt;\r
+       &lt;property name=&quot;fontColor&quot;/&gt;\r
+       &lt;property name=&quot;fontWeight&quot;/&gt;\r
+       &lt;property name=&quot;serif&quot;/&gt;\r
+       &lt;property name=&quot;way&quot;/&gt;\r
+       &lt;property name=&quot;textAlign&quot;/&gt;\r
+</pre></li><li>no_adult ?\r
+</li></ul><ul><li> → \r
+</li><li> → \r
+</li><li> → \r
+</li><li> → \r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2">\r
+    <title>HtmlAndCss2</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2</link>\r
+    <dc:identifier>HtmlAndCss2</dc:identifier>\r
+    <dc:date>2012-01-10T01:12:37+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= Html + css2.1\r
+ぺったんR は、html4.01 + css2.1 をサポートするブラウザで作者の意図したとおりのコンテンツの表示を目指す.[[BR]]\r
+しかし、これは最低限の環境であるため、ぺったんR が用意する便利でパワフルな機能の恩恵のすべてを必ずしも享けられるわけではない.\r
+\r
+== マンガの表示に使用する css プロパティ\r
+ * overflow:hidden\r
+]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-Html.20.2B.20css2.1">Html + css2.1</h1><p>ぺったんR は、html4.01 + css2.1 をサポートするブラウザで作者の意図したとおりのコンテンツの表示を目指す.<br />\r
+しかし、これは最低限の環境であるため、ぺったんR が用意する便利でパワフルな機能の恩恵のすべてを必ずしも享けられるわけではない.\r
+</p><h2 id="h2-.E3.83.9E.E3.83.B3.E3.82.AC.E3.81.AE.E8.A1.A8.E7.A4.BA.E3.81.AB.E4.BD.BF.E7.94.A8.E3.81.99.E3.82.8B.20css.20.E3.83.97.E3.83.AD.E3.83.91.E3.83.86.E3.82.A3">マンガの表示に使用する css プロパティ</h2><ul><li>overflow:hidden\r
+<ul><li>コマの外にはみ出してしまう部分を隠す.コマの枠となる div に指定.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_001.html" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_001.html</a>\r
+</li></ul></li><li>position:absolute, left, top\r
+<ul><li>コミック要素(画像や吹きだし)の配置に使用.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_property.html#position" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_property.html#position</a>\r
+</li></ul></li><li>z-index\r
+<ul><li>html要素の順を無視して、コミック要素の重ね順を変更するときに使用.\r
+</li><li>html要素は意味順(時系列順)に並ぶが、コミックでは演出によって、最後に起こったことが奥に行くことも手前に来ることもある.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_position_003.html" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_position_003.html</a>\r
+</li></ul></li><li>display:table, display:teble-cell\r
+<ul><li>吹きだし内テキストの上下中央配置に使用を考えたが、、、ぺったんでは、table 要素を使用していた.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_003.html" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_003.html</a>\r
+</li></ul></li></ul><h2 id="h2-.E5.AF.BE.E5.BF.9C.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6">対応ブラウザ</h2><table class="wikitable" border="1"><tbody><tr><td>プロパティ</td><td>ie</td><td>NN</td><td>firefox</td><td>safari</td><td>chrome</td><td>opera</td></tr><tr><td>overflow:hidden</td><td>5+</td><td>6+</td><td>1+</td><td>?</td><td>1+</td><td>6+</td></tr><tr><td>position:absolute, top, left</td><td>position&amp;top:4+, left:5+</td><td>4+</td><td>1+</td><td>?</td><td>1+</td><td>6+</td></tr><tr><td>z-index</td><td>4+</td><td>4+</td><td>1+</td><td>4+</td><td>1+</td><td>6+</td></tr><tr><td>display:table,table-cell</td><td>8+</td><td>6+</td><td>2+</td><td>2+</td><td>1+</td><td>9+</td></tr></tbody></table><h3 id="h3-.E5.90.B9.E3.81.8D.E3.81.A0.E3.81.97.E5.86.85.E3.83.86.E3.82.AD.E3.82.B9.E3.83.88.E3.81.AE.E4.B8.8A.E4.B8.8B.E4.B8.AD.E5.A4.AE.E9.85.8D.E7.BD.AE">吹きだし内テキストの上下中央配置</h3><p>display:table, display:table-cell は、吹きだし内のテキストの上下中央配置に使用が検討されるが...<br />\r
+ie7 以下については、条件付コメントで、tableタグを使用.\r
+</p><p>html中\r
+<pre>&lt;!--[if lte IE 7]&gt;&lt;a href=&quot;#&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;\r
+ &lt;span&gt;Hello&lt;/span&gt;\r
+&lt;!--[if lte IE 7]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/a&gt;&lt;![endif]--&gt;\r
+</pre></p><p>xsl中で使うと\r
+<pre>&lt;xsl:comment&gt;&lt;![CDATA[[if lte IE 7]&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]]]&gt;&lt;/xsl:comment&gt;\r
+ &lt;span&gt;&lt;xsl:apply-templates/&gt;&lt;/span&gt;\r
+&lt;xsl:comment&gt;&lt;![CDATA[[if lte IE 7]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;![endif]]]&gt;&lt;/xsl:comment&gt;\r
+</pre></p><p>また、firefox3.5 について、display:table 周りのバグについて報告されている.\r
+</p><blockquote class="citation"><p>Project IE: Firefox 3.5 の display: table;(table-row; table-cell;) 関連の挙動について<br />\r
+<a href="http://ie-style.blogspot.com/2009/08/firefox-35-display-tabletable-row-table.html" class="external" rel="nofollow">http://ie-style.blogspot.com/2009/08/firefox-35-display-tabletable-row-table.html</a><br />\r
+CSSで display: table-cell; を指定してマルチカラムレイアウトを行っている場合に Firefox 3.5 だとまれにカラム落ちしてしまうという現象が起きてしまいます。\r
+</p></blockquote><p>記事によると、display:table-cell に対して、display:table でなく、display:table-row を使っておくのがいいそうだ.</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/LocalWiki">\r
+    <title>LocalWiki</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/LocalWiki</link>\r
+\r
+    <dc:identifier>LocalWiki</dc:identifier>\r
+    <dc:date>2012-01-10T01:06:42+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ローカルでの wiki の閲覧 と Wiki のバックアップ\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/980/640x640_0.png)]]\r
+\r
+== ネットが無い環境でも wiki を見る\r
+\r
+=== 動作確認ブラウザ\r
+ie8, firefox3.6\r
+\r
+=== 用意\r
+ * clientJs.git を落として、client]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.83.AD.E3.83.BC.E3.82.AB.E3.83.AB.E3.81.A7.E3.81.AE.20wiki.20.E3.81.AE.E9.96.B2.E8.A6.A7.20.E3.81.A8.20Wiki.20.E3.81.AE.E3.83.90.E3.83.83.E3.82.AF.E3.82.A2.E3.83.83.E3.83.97">ローカルでの wiki の閲覧 と Wiki のバックアップ</h1><img src="http://static.sourceforge.jp/thumb/g/2/980/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9802f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+</p><h2 id="h2-.E3.83.8D.E3.83.83.E3.83.88.E3.81.8C.E7.84.A1.E3.81.84.E7.92.B0.E5.A2.83.E3.81.A7.E3.82.82.20wiki.20.E3.82.92.E8.A6.8B.E3.82.8B">ネットが無い環境でも wiki を見る</h2><h3 id="h3-.E5.8B.95.E4.BD.9C.E7.A2.BA.E8.AA.8D.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6">動作確認ブラウザ</h3><p>ie8, firefox3.6\r
+</p><h3 id="h3-.E7.94.A8.E6.84.8F">用意</h3><ul><li>clientJs.git を落として、clientJs/0.3.0/wiki/wiki.xml をブラウザで開く.但し、wiki.xml が最新でない場合に注意!\r
+</li><li>または、以下を見て必要最小限のファイルを DL して配置.\r
+</li></ul><p>公開フィード一覧にある <a href="http://sourceforge.jp/projects/pettanr/feeds/">http://sourceforge.jp/projects/pettanr/feeds/</a>\r
+wiki 全文 をDLして、wiki.xml という名前で保存. <a href="http://sourceforge.jp/projects/pettanr/wiki/!feeds/list">http://sourceforge.jp/projects/pettanr/wiki/!feeds/list</a>\r
+</p><p>.xml の 2行目に .xsl へのリンクを追加.\r
+<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;\r
+&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;wiki.xsl&quot;?&gt;\r
+</pre></p><p>さらに、以下のファイル を DL.\r
+</p><ul><li>wiki/wiki.xsl\r
+<ul><li><a href="http://pettanr.sourceforge.jp/wiki/wiki.xsl" class="external" rel="nofollow">http://pettanr.sourceforge.jp/wiki/wiki.xsl</a>\r
+</li></ul></li><li>wiki/wiki.css\r
+<ul><li><a href="http://pettanr.sourceforge.jp/wiki/wiki.css" class="external" rel="nofollow">http://pettanr.sourceforge.jp/wiki/wiki.css</a>\r
+</li></ul></li><li>wiki/wiki.js\r
+<ul><li><a href="http://pettanr.sourceforge.jp/wiki/wiki.js" class="external" rel="nofollow">http://pettanr.sourceforge.jp/wiki/wiki.js</a>\r
+</li></ul></li><li>common.css pettanR 共通 css\r
+<ul><li><a href="http://pettanr.sourceforge.jp/common.css" class="external" rel="nofollow">http://pettanr.sourceforge.jp/common.css</a>\r
+</li></ul></li><li>common.css pettanR 共通 js\r
+<ul><li><a href="http://pettanr.sourceforge.jp/common.js" class="external" rel="nofollow">http://pettanr.sourceforge.jp/common.js</a>\r
+</li></ul></li></ul><p>以下のように配置する.\r
+</p><ul><li>common.css\r
+</li><li>common.js\r
+</li><li>wiki フォルダ\r
+<ul><li>wiki.xml\r
+</li><li>wiki.xsl\r
+</li><li>wiki.css\r
+</li><li>wiki.js\r
+</li></ul></li></ul><h3 id="h3-.E6.B3.A8.E6.84.8F">注意</h3><p>ブラウザは、Firefox と IE で確認. 他のブラウザだと、ブラウザが独自の .xsl をあててしまう.<br />\r
+また .xml が web 上にあると、ブラウザが独自の .xsl をあててしまう.<br />\r
+外部のリンクは赤く、wiki の他のページへのリンクは 緑 で表示.<br />\r
+</p><h2 id="h2-Wiki.20.E3.81.AE.E3.83.90.E3.83.83.E3.82.AF.E3.82.A2.E3.83.83.E3.83.97">Wiki のバックアップ</h2><p>wiki 全文配信フィードの <a href="http://sourceforge.jp/projects/pettanr/wiki/!feeds/list">http://sourceforge.jp/projects/pettanr/wiki/!feeds/list</a> を Google リーダーに登録しておく.</p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/FrontPage">\r
+    <title>FrontPage</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/FrontPage</link>\r
+    <dc:identifier>FrontPage</dc:identifier>\r
+    <dc:date>2012-01-08T02:24:30+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= ぺったんRのWiki =\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/926/640x640_0.png)]]\r
+== ぺったんRって何だってばよ?\r
+ぺったんを参考に、より使い勝手の良い漫画作成ツールを作ろうとしている。Rの意味はみなさんで勝手に想像してください。\r
+\r
+参考\r
+ * http://sourceforge.jp/projec]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.E3.81.AEWiki">ぺったんRのWiki</h1><img src="http://static.sourceforge.jp/thumb/g/2/926/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9262f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+</p><h2 id="h2-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.E3.81.A3.E3.81.A6.E4.BD.95.E3.81.A0.E3.81.A3.E3.81.A6.E3.81.B0.E3.82.88.EF.BC.9F">ぺったんRって何だってばよ?</h2><p>ぺったんを参考に、より使い勝手の良い漫画作成ツールを作ろうとしている。Rの意味はみなさんで勝手に想像してください。\r
+</p><p>参考\r
+</p><ul><li><a href="http://sourceforge.jp/projects/pettan/">http://sourceforge.jp/projects/pettan/</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanoss/">http://sourceforge.jp/projects/pettanoss/</a>\r
+</li></ul><p>より詳しくは<a href="http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan">WhatsPettan</a>\r
+</p><h2 id="h2-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.E3.81.AE.E7.9B.AE.E6.A8.99">ぺったんRの目標</h2><h3 id="h3-.E7.B7.8F.E5.90.88.E7.9B.AE.E6.A8.99">総合目標</h3><ul><li>漫画形式の表現がブラウザだけでできる\r
+</li><li>漫画形式のブログを簡単に始められる\r
+</li><li>漫画形式のSNSを簡単に始められる\r
+</li><li>漫画形式の記事をブログに埋め込める\r
+</li><li>その他あらゆるwebページに最小限の労力で漫画を表示できる\r
+</li></ul><h3 id="h3-.E9.96.8B.E7.99.BA.E7.9B.AE.E6.A8.99">開発目標</h3><ul><li>ぺったんR Web API\r
+</li><li>ぺったんR Web API に対応した、ひとつ以上のサーバ側実装\r
+</li><li>ぺったんR Web API に対応した、ひとつ以上のクライアント側実装\r
+</li><li>ぺったんR をお試しできる Web サービスの運営\r
+</li></ul><h2 id="h2-.E7.8F.BE.E5.9C.A8.E3.81.AE.E7.8A.B6.E6.B3.81">現在の状況</h2><ul><li>プロトタイプ作成中。 <a href="http://pettanr.heroku.com/" class="external" rel="nofollow">http://pettanr.heroku.com/</a>\r
+</li><li>プロジェクト Web サイトの制作中 <a href="http://pettanr.sourceforge.jp/index.html" class="external" rel="nofollow">http://pettanr.sourceforge.jp/index.html</a>\r
+</li></ul><h2 id="h2-.E9.96.8B.E7.99.BA.E8.80.85.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">開発者向けドキュメント</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers">ForDevelopers</a>\r
+</li></ul><h2 id="h2-.E7.B7.A8.E9.9B.86.E9.95.B7.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">編集長向けドキュメント</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters">ForWebmasters</a>\r
+</li></ul><h2 id="h2-.E4.BD.9C.E5.AE.B6.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">作家向けドキュメント</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors">ForAuthors</a>\r
+</li></ul><h2 id="h2-.E5.90.84.E8.87.AA.E3.81.AE.E3.83.A1.E3.83.A2">各自のメモ</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/YasushiIto">YasushiIto</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ItoZyun">ItoZyun</a>\r
+</li></ul><h2 id="h2-.E8.B3.87.E6.96.99.E3.83.BB.E3.83.9E.E3.83.B3.E3.82.AC.E8.A6.81.E7.B4.A0.E3.81.AE.E6.97.A5.E8.8B.B1.E5.AF.BE.E8.A8.B3">資料・マンガ要素の日英対訳</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements">TranslationComicElements</a>\r
+</li></ul><script src="/projects/pettanr/files/compact.js" type="text/javascript" charset="utf-8"></script>\r
+<div class="dashboard-widget"><h3 class="titlebar">最近のチケット一覧</h3><div class="dashboard-body"><div class="noent">(empty)</div></div></div>\r
+]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ItoZyun">\r
+    <title>ItoZyun</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ItoZyun</link>\r
+    <dc:identifier>ItoZyun</dc:identifier>\r
+    <dc:date>2012-01-07T10:06:07+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クライアント側\r
+ * ユーザーログイン後の操作(マンガ管理・コマ作成・画像管理・設定)は、すべて js 有効 が前提の Ajax ページで行う.\r
+ * ログインしたユーザーのマンガ閲覧も、Ajaxページで行う.画像読み込みを非同期化して、画面外の画像の読み込みを抑止する.\r
+\r
+= javascript のクリーンアップ、圧縮\r
+== クリーンアップ\r
+javascript は、変数宣言時]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E5.81.B4">クライアント側</h1><ul><li>ユーザーログイン後の操作(マンガ管理・コマ作成・画像管理・設定)は、すべて js 有効 が前提の Ajax ページで行う.\r
+</li><li>ログインしたユーザーのマンガ閲覧も、Ajaxページで行う.画像読み込みを非同期化して、画面外の画像の読み込みを抑止する.\r
+</li></ul><h1 id="h1-javascript.20.E3.81.AE.E3.82.AF.E3.83.AA.E3.83.BC.E3.83.B3.E3.82.A2.E3.83.83.E3.83.97.E3.80.81.E5.9C.A7.E7.B8.AE">javascript のクリーンアップ、圧縮</h1><h2 id="h2-.E3.82.AF.E3.83.AA.E3.83.BC.E3.83.B3.E3.82.A2.E3.83.83.E3.83.97">クリーンアップ</h2><p>javascript は、変数宣言時の区切り文字や、行の終わりのセミコロンなどを間違えていても、予期したとおりに動作したりして潜在的な問題を抱えることになる.[[BR]]\r
+<br />以上のものは、Aptana で警告されないものも結構ある.[[BR]]\r
+<br />jsDo.it にアップロードすると、Webコンソールで javascript の警告を教えてくれる.[[BR]]\r
+<br />その警告に従って修正したところ、Aptana2 の構文解析も動くようになった.コード量が増えると勝手に構文解析も止まるのかと思っていたけど、そのようなわけだった、、、[[BR]]\r
+<br /></p><h2 id="h2-.E5.9C.A7.E7.B8.AE">圧縮</h2><p>以上を済ませた後に、圧縮(難読化)を行うことで、js ファイルの読み込みや動作を早くし、負荷を抑えることができる.[[BR]]\r
+<br />圧縮ツールには、Web アプリとして提供されているものもあって便利.[[BR]]\r
+<br /><a href="http://compressorrater.thruhere.net/" class="external" rel="nofollow">http://compressorrater.thruhere.net/</a> が、複数の圧縮エンジンに通した結果を比較表示してくれる.[[BR]]\r
+<br />現在 140KB 程度の js ファイルを 60KB 程度にすることができた.[[BR]]\r
+<br />ただし、その圧縮後のファイルが動かないこともあり(というかほとんど動かない、または操作中に動かなくなる)圧縮ツール用にコードを書く必要がある.[[BR]]\r
+<br />jsは、コードが実行される順番に変数宣言をしていけばいいのだが、圧縮ツール用には、変数の宣言を最初の変数の登場より先にしなくてはならない.[[BR]]\r
+<br /></p><p>変数の宣言がないままに変数が登場すると、\r
+<pre>function createPopup(){\r
+// Popup クラスから Popup インスタンスを作る.\r
+ var _popup = PopupClass.apply( {}, []);\r
+}\r
+~\r
+// Popup クラスの宣言\r
+var PopupClass = function(){};\r
+</pre>圧縮ツールは、最初に登場する PopupClass はそのまま.var PopupCl<a href="http://sourceforge.jp/projects/pettanr/wiki/PopupClass">PopupClass</a>r a= などと圧縮をかける.結果、createPopup() したときに PopupClass が未定義だよ!となる.[[BR]]\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/PopupClass">PopupClass</a><br /></p><ul><li>決定版はこれだ! Javascriptの圧縮、難読化ツール 比較検討 http://gogolounge.blog.shinobi.jp/Entry/4/\r
+<a href="http://gogolounge.blog.shinobi.jp/Entry/4/" class="external" rel="nofollow">http://gogolounge.blog.shinobi.jp/Entry/4/</a></li></ul><h1 id="h1-javascript.20.E3.81.AE.E3.83.A1.E3.83.A2.E3.83.AA.E3.83.AA.E3.83.BC.E3.82.AF">javascript のメモリリーク</h1><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/%E9%96%8B%E7%99%BA">開発</a>IEメモリリークの最後の壁はAjaxのonreadystatechangeやった!! http://d.hatena.ne.jp/AWAWA/20071207<a href="http://d.hatena.ne.jp/AWAWA/20071207/1197036423" class="external" rel="nofollow">http://d.hatena.ne.jp/AWAWA/20071207/1197036423</a></li><li>Internet Explorer リーク パターンを理解して解決する http://msdn.microsoft.com/ja-jp/<a href="http://msdn.microsoft.com/ja-jp/library/bb250448" class="external" rel="nofollow">http://msdn.microsoft.com/ja-jp/library/bb250448</a></li></ul><p>クロージャがまずい.[[BR]]\r
+<br />dom追加は、appendChild を先に.あとからプロパティをセット.[[BR]]\r
+<br />イベントハンドラに、グローバルで定義された 空の function を突っ込んで解除する.\r
+</p><h1 id="h1-.E3.82.B9.E3.82.BF.E3.83.B3.E3.83.89.E3.82.A2.E3.83.AD.E3.83.BC.E3.83.B3.E7.89.88.20IE.20.E3.81.AE.E9.80.9A.E5.B8.B8.E7.89.88.E3.81.A8.E7.95.B0.E3.81.AA.E3.82.8B.E6.8C.99.E5.8B.95">スタンドアローン版 IE の通常版と異なる挙動</h1><p>IETester で 条件付コメントによる、vml のインストールの有無のチェックができない挙動に遭遇.[[BR]]\r
+<br />vml のチェックは、現在は条件付コメントを動的に付与して行っている.(他にいい方法ないかな、、、?)\r
+<pre>VML: ( function(){\r
+       if( isIE === false || ieVersion &gt; 8) return false;\r
+       var globalObjectName = createGrobalObjectName(), script;\r
+       document.writeln( [ '&lt;!--[if gte vml 1]&gt;&lt;script type=&quot;text/javascript&quot;&gt;window.', globalObjectName,'=1;&lt;/script&gt;&lt;![endif]--&gt;'].join( ''));\r
+       if( window[ globalObjectName] === 1){\r
+               window[ globalObjectName] = undefined;\r
+               return true;\r
+       }\r
+       return false;\r
+})(),\r
+</pre></p><p>XPsp3 に IETester をインストールして 6, 7, 8 をテストできる環境にしているが、6 と 7 では、vml のチェックが働かない.[[BR]]\r
+<br />これは、スタンドアローン版 IE は 条件付コメントが働かない、ためと思われる.[[BR]]\r
+<br />一方で、8 で正しく動いているのは、8 が Windows 環境のデフォルトの ie なので通常版であるため、と思う.[[BR]]\r
+<br /></p><p>navigator.ua で取得したバージョンと 動的に書き出した条件付コメント(内でスクリプトを使用)が不一致だったら、スタンドアローン版として処理する.\r
+</p><ul><li>条件付コメント文の誤算 http://bopsublog.blog.<a href="http://bopsublog.blog.shinobi.jp/Entry/15/" class="external" rel="nofollow">http://bopsublog.blog.shinobi.jp/Entry/15/</a></li><li><a href="http://philip.html5.org/data/ccs.html" class="external" rel="nofollow">http://philip.html5.org/data/ccs.html</a>\r
+</li></ul><h1 id="h1-about.20itozyun">about itozyun</h1><ul><li>目立ちたがり屋という点でフロントエンジニアが性に合っている.\r
+</li><li>好奇心に負けて地雷を踏む性格なので、API 設計などを任せてはいけない.</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors">\r
+    <title>ForAuthors</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ForAuthors</link>\r
+    <dc:identifier>ForAuthors</dc:identifier>\r
+\r
+    <dc:date>2012-01-06T19:53:55+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[== 奥行きzと時間軸t\r
+コミックの各コマには奥行きと時間軸があります。\r
+\r
+奥行きとは、キャラクターの重なり順序とも言いかえることができて、CSS上ではzindexと同じ意味です。\r
+\r
+時間軸はストーリー上での時間の流れの順序で、読者がフキダシやキャラクターを目で追う順序とも言えます。コマのデータを時間軸順に並べれば、台本を読むのと同じになるイメージです。\r
+\r
+これらをコミック上で正しく]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h2 id="h2-.E5.A5.A5.E8.A1.8C.E3.81.8Dz.E3.81.A8.E6.99.82.E9.96.93.E8.BB.B8t">奥行きzと時間軸t</h2><p>コミックの各コマには奥行きと時間軸があります。\r
+</p><p>奥行きとは、キャラクターの重なり順序とも言いかえることができて、CSS上ではzindexと同じ意味です。\r
+</p><p>時間軸はストーリー上での時間の流れの順序で、読者がフキダシやキャラクターを目で追う順序とも言えます。コマのデータを時間軸順に並べれば、台本を読むのと同じになるイメージです。\r
+</p><p>これらをコミック上で正しく並べるために、奥行きzと時間軸tが用意してあります。奥行きに関してはエディタでビジュアルに操作している限り問題ありません。しかし、コマの外観だけを見て制作すると、時間軸は必ず正しく並ぶというわけではありません。時間軸を意識することで、より違和感のない漫画ができるとぺったんRでは考えています。画像がきれいに表示されない環境や読み上げソフトなどを使った場合は、特に効果があるはずです。\r
+</p><h2 id="h2-.E3.83.A6.E3.83.8B.E3.83.BC.E3.82.AF.E3.81.AA.E5.A5.A5.E8.A1.8C.E3.81.8D.E3.83.87.E3.83.BC.E3.82.BF.E4.BD.9C.E6.88.90">ユニークな奥行きデータ作成</h2><p>ページ内で同じzindexを持っては意味がありません。そこでzが重ならないようにデータをユニークに作成する必要があります。\r
+</p><h2 id="h2-.E3.83.A6.E3.83.8B.E3.83.BC.E3.82.AF.E3.81.AA.E6.99.82.E9.96.93.E8.BB.B8.E3.83.87.E3.83.BC.E3.82.BF.E4.BD.9C.E6.88.90">ユニークな時間軸データ作成</h2><ul><li>コマ単位でtを順序づけ。\r
+<ul><li>コミック表示など複数のコマが表示される場合は、コマ番号tからのオフセット\r
+</li><li>例えば、コマ1にオブジェクトが4つあるとき、コマ2のtは4から始まる。\r
+</li><li>コマ2に6つのオブジェクトがあるなら、コマ3のtは10から始まる。\r
+</li><li>コマ3に添付されたコマ絵のtが2なら、コマ3のt(オフセット)10+2で12\r
+<ul><li>まぁ、ここはクライアントが好きにしていい話か。別に1-2とか2-3で管理してもいいけど。\r
+</li></ul></li></ul></li><li>tは0から始まる\r
+</li><li>コマpanels内でコマ絵panel_picturesとフキダシ枠speach_balloonのtは重なっちゃだめ。両者は同じレベル。\r
+<ul><li>ただし、フキダシ枠speach_balloonの中にあるセリフspeachesは一つレベルが下。セリフspeachesのtは一つのフキダシ枠speach_balloonの中でユニーク。ほとんどのフキダシにはセリフスペースは一個しかないから、多段フキダシを除けばspeaches.tは常に0。\r
+</li></ul></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">\r
+    <title>XbackendReversibleImage</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage</link>\r
+    <dc:identifier>XbackendReversibleImage</dc:identifier>\r
+    <dc:date>2012-01-06T08:09:10+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クロスバックエンドな反転画像機能\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/933/640x640_0.png)]]\r
+ぺったん運営時から、画像を反転させて使用したい、という要望はあった.[[BR]]\r
+とくにキャラクター画像を左右に反転させたい、という要望だ.[[BR]]\r
+\r
+ぺったんR では、その反転に取り組む.[[BR]]\r
+サーバ]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.AD.E3.82.B9.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89.E3.81.AA.E5.8F.8D.E8.BB.A2.E7.94.BB.E5.83.8F.E6.A9.9F.E8.83.BD">クロスバックエンドな反転画像機能</h1><img src="http://static.sourceforge.jp/thumb/g/2/933/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9332f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+ぺったん運営時から、画像を反転させて使用したい、という要望はあった.[[BR]]\r
+<br />とくにキャラクター画像を左右に反転させたい、という要望だ.[[BR]]\r
+<br /></p><p>ぺったんR では、その反転に取り組む.[[BR]]\r
+<br />サーバー側での反転画像の準備と、ブラウザでのクロスバックエンドな対応、という二段構えだ.[[BR]]\r
+<br /></p><h2 id="h2-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E5.81.B4.E3.81.A7.E3.81.AE.E3.82.AF.E3.83.AD.E3.82.B9.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89.E3.81.AA.E5.8F.8D.E8.BB.A2.E8.A1.A8.E7.A4.BA">ブラウザ側でのクロスバックエンドな反転表示</h2><h3 id="h3-.E3.81.AF.E3.81.98.E3.82.81.E3.81.AB">はじめに</h3><p>ブラウザのネイティブな反転表示機能(css3)および、ブラウザの独自拡張や Flash 等のプラグインを使用する.[[BR]]\r
+<br />これらの機能をサポートしない、または切っているブラウザは、サーバー側で生成した画像を利用することになる.[[BR]]\r
+<br />ブラウザ側でなるべく画像を用意しサーバーへの負荷を極力抑えます.\r
+</p><h3 id="h3-.E4.BD.BF.E7.94.A8.E3.81.99.E3.82.8B.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89">使用するバックエンド</h3><h4 id="h4-css3">css3</h4><p>例\r
+<pre>img.img-flip-v { /* 上下反転 */\r
+       transform:              scale( 1, -1);\r
+       -o-transform:           scale( 1, -1);\r
+       -ms-transform:          scale( 1, -1);\r
+       -moz-transform:         scale( 1, -1);\r
+       -webkit-transform:      scale( 1, -1);\r
+}      \r
+img.img-flip-h { /* 左右反転 */\r
+       transform:              scale( -1, 1);\r
+       -o-transform:           scale( -1, 1);\r
+       -ms-transform:          scale( -1, 1);\r
+       -moz-transform:         scale( -1, 1);\r
+       -webkit-transform:      scale( -1, 1);\r
+}\r
+img.img-flip-vh { /* 上下左右反転 */\r
+       transform:              scale( -1, -1);\r
+       -o-transform:           scale( -1, -1);\r
+       -ms-transform:          scale( -1, -1);\r
+       -moz-transform:         scale( -1, -1);\r
+       -webkit-transform:      scale( -1, -1);\r
+}\r
+</pre></p><h4 id="h4-VML">VML</h4><p>例\r
+<pre>v\:image.img-flip-v {\r
+       flip:                   y; /* vml */\r
+}\r
+v\:image.img-flip-h {\r
+       flip:                   x; /* vml */\r
+}v\:image.img-flip-vh {\r
+       rotation :              180; /* vml */\r
+}\r
+</pre>ie独自拡張の VML が ie6~8 での反転画像の本命となる.上記のように vml 用の css も使える.(ただし js による css の適用にくせがある.)[[BR]]\r
+<br />VML で表示された画像は、ie6 以下にある透過 png の問題も解消される.(但し ie6 のみ.ie5.5 以下では透過表示が不十分)[[BR]]\r
+<br /></p><blockquote class="citation"><p>Windows版 IE 5以降の VMLレンダラで半透明、透過PNGを表示する[[BR]]\r
+<br /><a href="http://www.minc.ne.jp/~konda/new/png/urawaza04.html" class="external" rel="nofollow">http://www.minc.ne.jp/~konda/new/png/urawaza04.html</a><br />\r
+IE 5 及び 5.5 (5.50.4133.200)の vgx.dll(Microsoft Vector Graphics Rendering(VML))は、Beta バージョンですから 半透明系は、以下の画像の様に擬似半透明表示(ディザリング)されます\r
+</p></blockquote><pre>&lt;!--[if !gte vml 1]&gt;&lt;!--&gt;&lt;img src=&quot;*.png&quot; width=&quot;*&quot; height=&quot;*&quot; alt=&quot;*&quot; /&gt;&lt;!--&lt;![endif]--&gt;\r
+&lt;!--[if gte vml 1]&gt;&lt;v:image src=&quot;*.png&quot; style=&quot;width: *px; height: *px; behavior: url(#default#vml)&quot; alt=&quot;*&quot; /&gt;&lt;![endif]--&gt;\r
+</pre><p>さらに、ActiveX よりも動作が速い(らしい).[[BR]]\r
+<br />但し VML は windows の構成によってはインストールされていない場合があり、必ずしも使えるわけではない.[[BR]]\r
+<br />itozyun の環境のひとつでも VML が使えなかった.nlite で削ってしまったためと思われる.\r
+</p><h3 id="h3-SVG">SVG</h3><p>svg な xml を js で作って data スキームで読み込む。Opera8+ でも画像反転できるかも。Opera9.6 で静的に埋め込んだ以上の html では反転表示ができた。ただし Firefox3.6 Chrome8 では表示できない。[[BR]]\r
+<br />dataスキームになった svg に対しては、画像の url を絶対座標で与える。\r
+svg を html に直接埋め込む方式では、なぜか手元で一度も成功していない。\r
+<pre>&lt;?xml version=&quot;1.0&quot;?&gt;\r
+&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;\r
+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; version=&quot;1.1&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;200&quot; height=&quot;200&quot;&gt;\r
+&lt;image x=&quot;0&quot; y=&quot;0&quot; width=&quot;200&quot; height=&quot;200&quot; xlink:href=&quot;1.gif&quot; transform=&quot;scale(-1,1) translate(-200,0)&quot; /&gt;\r
+&lt;/svg&gt;\r
+</pre></p><ul><li><a href="http://software.hixie.ch/utilities/cgi/data/data" class="external" rel="nofollow">http://software.hixie.ch/utilities/cgi/data/data</a>\r
+</li><li>サイトの表示スピードを改善!dataスキームURIを使った画像の埋め込み http://labs.cybridge.jp/2011/12/data-uri.html\r
+<a href="http://labs.cybridge.jp/2011/12/data-uri.html" class="external" rel="nofollow">http://labs.cybridge.jp/2011/12/data-uri.html</a><ul><li>データスキーム対応ブラウザ \r
+</li><li>Firefox2+\r
+</li><li>Safari\r
+</li><li>Chrome\r
+</li><li>Opera7.2+\r
+</li><li>IE8+\r
+</li></ul></li></ul><pre>&lt;img src=&quot;data:image/svg+xml;charset=utf-8,%3c%3fxml%20version%3d%221.0%22%3f%3e%3c!DOCTYPE%20svg%20PUBLIC%20%22-%2f%2fW3C%2f%2fDTD%20SVG%201.1%2f%2fEN%22%20%22http%3a%2f%2fwww.w3.org%2fGraphics%2fSVG%2f1.1%2fDTD%2fsvg11.dtd%22%3e%3csvg%20xmlns%3d%22http%3a%2f%2fwww.w3.org%2f2000%2fsvg%22%20version%3d%221.1%22%20xmlns%3axlink%3d%22http%3a%2f%2fwww.w3.org%2f1999%2fxlink%22%20width%3d%22200%22%20height%3d%22200%22%3e%3cimage%20x%3d%220%22%20y%3d%220%22%20width%3d%22200%22%20height%3d%22200%22%20xlink%3ahref%3d%22http%3a%2f%2fstatic.sourceforge.jp%2fthumb%2fg%2f2%2f930%2f640x640_0.png%22%20transform%3d%22scale(-1%2c1)%20translate(-200%2c0)%22%20%2f%3e%3c%2fsvg%3e&quot;&gt;\r
+</pre><h4 id="h4-ActiveX">ActiveX</h4><pre>img.img-flip-v { /* 上下反転 */\r
+       filter:                 progid:DXImageTransform.Microsoft.BasicImage( Mirror=1, Rotation=2);\r
+       -ms-filter:             progid:DXImageTransform.Microsoft.BasicImage( Mirror=1, Rotation=2);\r
+}\r
+img.img-flip-h { /* 左右反転 */\r
+       filter:                 progid:DXImageTransform.Microsoft.BasicImage( Mirror=1);\r
+       -ms-filter:             progid:DXImageTransform.Microsoft.BasicImage( Mirror=1);\r
+}\r
+img.img-flip-vh { /* 上下左右反転 */\r
+       filter:                 progid:DXImageTransform.Microsoft.BasicImage( Rotation=2);\r
+       -ms-filter:             progid:DXImageTransform.Microsoft.BasicImage( Rotation=2);\r
+}\r
+</pre><p>ActiveX は、ie6 以下のための pngfix にも使いたいが、反転とAlpha Image Loader を同時に使用することはできない.[[BR]]\r
+<br />ie6では、ActiveX による反転は、png 画像に対しては使用できない.\r
+</p><h4 id="h4-Flash">Flash</h4><p>クロスドメインな画像に対しても、読み込み、反転表示は行える.[[BR]]\r
+<br />なるべく バージョンの古い Flash で用意してサポート範囲を広くしたいが、js と連携する ExternalInterface が使えなくなったりと多難かもしれない.\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/ExternalInterface">ExternalInterface</a></p><h4 id="h4-Canvas">Canvas</h4><p>同一ドメインの画像のみになるが、画像のピクセルデータを取得し反転しつつ描画することができる.[[BR]]\r
+<br /></p><blockquote class="citation"><p>Canvasによる画像ファイル(img要素)の読み書き[[BR]]\r
+<br /><a href="http://www.programmingmat.jp/webhtml_lab/canvas_image.html" class="external" rel="nofollow">http://www.programmingmat.jp/webhtml_lab/canvas_image.html</a>\r
+</p></blockquote><h4 id="h4-Silverlight">Silverlight</h4><h4 id="h4-.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E3.82.B5.E3.82.A4.E3.83.89.E7.94.BB.E5.83.8F">サーバーサイド画像</h4><p>サーバー側で反転画像を用する.このサーバ画像へのアクセスを極力減らすのが、X Backend Imageの目的のひとつ.\r
+<pre>picture/001.png\r
+picture/v/001.png\r
+picture/h/001.png\r
+picture/vh/001.png\r
+</pre></p><h3 id="h3-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E6.A9.9F.E8.83.BD.E5.AF.BE.E5.BF.9C.E8.A1.A8">ブラウザ機能対応表</h3><table class="wikitable" border="1"><tbody><tr><td>バックエンド</td><td>ie5+5.5</td><td>ie6</td><td>ie7 &amp; 8</td><td>ie9+</td><td>FF</td><td>Safari</td><td>Chrome</td><td>Opera</td></tr><tr><td>CSS3:transform</td><td>×</td><td>×</td><td>×</td><td>○</td><td>3.5+</td><td>3.1+(?)</td><td>1+</td><td>10.5+</td></tr><tr><td>VML</td><td>▲透過pngの表示が汚い</td><td>△</td><td>△環境による</td><td>?</td><td>×</td><td>×</td><td>×</td><td>×</td></tr><tr><td>Canvas</td><td>×</td><td>×</td><td>×</td><td>○</td><td>1.5+</td><td>1.3+</td><td>1+</td><td>9+</td></tr><tr><td>SVG +DATAスキーム</td><td>×</td><td>×</td><td>×</td><td>?</td><td>?</td><td>?</td><td>?</td><td>8+(?)</td></tr><tr><td>サーバー画像</td><td>△</td><td>△要pngfix</td><td>○</td><td>○</td><td>○</td><td>○</td><td>○</td><td>○</td></tr></tbody></table>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutModels">\r
+    <title>AboutModels</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutModels</link>\r
+\r
+    <dc:identifier>AboutModels</dc:identifier>\r
+    <dc:date>2012-01-05T17:49:46+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ER図\r
+下記のページを参考にすれば生成できるはずだが、Windows環境では画像に落とせない。\r
+\r
+ * http://sawada0903.blogspot.com/2010/10/rails30er.html\r
+ * http://rails-erd.rubyforge.org/install.html\r
+\r
+出力されるERD.dotはdotっていうグラフ描画ツールのマクロ。\r
+\r
+G]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-ER.E5.9B.B3">ER図</h1><p>下記のページを参考にすれば生成できるはずだが、Windows環境では画像に落とせない。\r
+</p><ul><li><a href="http://sawada0903.blogspot.com/2010/10/rails30er.html" class="external" rel="nofollow">http://sawada0903.blogspot.com/2010/10/rails30er.html</a>\r
+</li><li><a href="http://rails-erd.rubyforge.org/install.html" class="external" rel="nofollow">http://rails-erd.rubyforge.org/install.html</a>\r
+</li></ul><p>出力されるERD.dotはdotっていうグラフ描画ツールのマクロ。\r
+</p><p><a href="http://sourceforge.jp/projects/pettanr/wiki/GraphViz">GraphViz</a>のbinにdot.exeがあるからこれで画像にできる\r
+<pre>dot.exe -Tgif ERD.dot &gt; erd.gif\r
+</pre></p><h1 id="h1-.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E3.81.A8.E3.82.AB.E3.83.A9.E3.83.A0">テーブルとカラム</h1><h2 id="h2-admins.20.E7.AE.A1.E7.90.86.E8.80.85">admins 管理者</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>email</td><td></td><td>string</td><td>  </td><td>FALSE</td><td> </td><td></td></tr><tr><td>encrypted_password</td><td></td><td>string</td><td> </td><td>FALSE</td><td>128</td><td></td></tr><tr><td>reset_password_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>reset_password_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>remember_created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>sign_in_count</td><td></td><td>integer</td><td>0</td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmed_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AdminModel">AdminModel</a>\r
+</li></ul><h2 id="h2-artists.20.E7.B5.B5.E5.B8.AB">artists 絵師</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>email</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>name</td><td>ペンネーム</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>homepage_url</td><td>ホームページURL</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>api_url</td><td>素材配布APIのURL</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>default_lisence_id</td><td>省略時のライセンスid</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>crowled_at</td><td>素材配布APIの最新呼び出し時刻</td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>author_id</td><td>作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ArtistModel">ArtistModel</a>\r
+</li></ul><h2 id="h2-authors.20.E4.BD.9C.E5.AE.B6">authors 作家</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>name</td><td>ペンネーム</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>email</td><td>メールアドレス</td><td>string</td><td>  </td><td>FALSE</td><td> </td><td></td></tr><tr><td>encrypted_password</td><td></td><td>string</td><td> </td><td>FALSE</td><td>128</td><td></td></tr><tr><td>reset_password_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>reset_password_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>remember_created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>sign_in_count</td><td></td><td>integer</td><td>0</td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>authentication_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmed_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AuthorModel">AuthorModel</a>\r
+</li></ul><h2 id="h2-balloon_templates.20.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E6.9E.A0.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">balloon_templates フキダシ枠テンプレート</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>speach_balloon_id</td><td>フキダシテンプレートid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>system_picture_id</td><td>フキダシ素材id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>tail</td><td>尻尾の向き</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>size</td><td>サイズのバリエーション</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>min_width</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>max_width</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>min_height</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>max_height</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BallonTemplateModel">BallonTemplateModel</a>\r
+</li></ul><h2 id="h2-balloons.20.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7">balloons フキダシ</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>panel_id</td><td>所属パネルid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>balloon_template_id</td><td>フキダシ枠テンプレート種id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>system_picture_id</td><td>フキダシ素材id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>tail</td><td>尻尾の向き</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>size</td><td>サイズのバリエーション</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>z</td><td>表示順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr><tr><td>width</td><td>表示幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>表示高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BalloonModel">BalloonModel</a>\r
+</li></ul><h2 id="h2-comics.20.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF">comics コミック</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>title</td><td>作品名</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>width</td><td>コマの幅デフォルト値</td><td>integer</td><td>200</td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマの高さデフォルト値</td><td>integer</td><td>80</td><td>FALSE</td><td> </td><td></td></tr><tr><td>visible</td><td>公開フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>可視範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>editable</td><td>編集フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>許可範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>author_id</td><td>作者の作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>\r
+</li></ul><h2 id="h2-common_lisences.20.E3.82.B3.E3.83.A2.E3.83.B3.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">common_lisences コモンライセンス</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>lisence_id</td><td>ライセンスid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>name</td><td>ライセンス名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>url</td><td>条項ページURL</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_by</td><td>クリエイティブコモンズBYフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_sa</td><td>クリエイティブコモンズSAフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nd</td><td>クリエイティブコモンズNDフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nc</td><td>クリエイティブコモンズNCフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_resize</td><td>サイズ変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_flip</td><td>反転不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>keep_aspect_ratio</td><td>縦横比変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisenceModel">CommonLisenceModel</a>\r
+</li></ul><h2 id="h2-lisences.20.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">lisences ライセンス</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>name</td><td>ライセンス名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>url</td><td>条項ページURL</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_by</td><td>クリエイティブコモンズBYフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_sa</td><td>クリエイティブコモンズSAフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nd</td><td>クリエイティブコモンズNDフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nc</td><td>クリエイティブコモンズNCフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_resize</td><td>サイズ変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_flip</td><td>反転不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>keep_aspect_ratio</td><td>縦横比変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/LisenceModel">LisenceModel</a>\r
+</li></ul><h2 id="h2-original_lisences.20.E3.82.AA.E3.83.AA.E3.82.B8.E3.83.8A.E3.83.AB.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">original_lisences オリジナルライセンス</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>artist_id</td><td>ライセンス策定者 絵師id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>lisence_id</td><td>ライセンスid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>name</td><td>ライセンス名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>url</td><td>条項ページURL</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_by</td><td>クリエイティブコモンズBYフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_sa</td><td>クリエイティブコモンズSAフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nd</td><td>クリエイティブコモンズNDフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nc</td><td>クリエイティブコモンズNCフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_resize</td><td>サイズ変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_flip</td><td>反転不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>keep_aspect_ratio</td><td>縦横比変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalLisenceModel">OriginalLisenceModel</a>\r
+</li></ul><h2 id="h2-original_pictures.20.E5.8E.9F.E7.94.BB">original_pictures 原画</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>ext</td><td>画像フォーマット</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅ピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>filesize</td><td>画像サイズ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>artist_id</td><td>投稿者 絵師id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>lisence_id</td><td>付与ライセンスid</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPictureModel">OriginalPictureModel</a>\r
+</li></ul><h2 id="h2-system_pictures.20.E3.82.B7.E3.82.B9.E3.83.86.E3.83.A0.E7.94.BB.E5.83.8F">system_pictures システム画像</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>ext</td><td>画像フォーマット</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅ピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>filesize</td><td>画像サイズ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SystemPictureModel">SystemPictureModel</a>\r
+</li></ul><h2 id="h2-panel_pictures.20.E3.82.B3.E3.83.9E.E7.B5.B5">panel_pictures コマ絵</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>panel_id</td><td>所属パネル</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>resource_picture_id</td><td>素材id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>link</td><td>リンク</td><td>string</td><td> </td><td> </td><td>200</td><td>参照するページをリンクできる</td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>z</td><td>表示順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr><tr><td>width</td><td>コマ絵の幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマ絵の高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>flipv</td><td>垂直反転</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>fliph</td><td>水平反転</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel">PanelPictureModel</a>\r
+</li></ul><h2 id="h2-panels.20.E3.82.B3.E3.83.9E">panels コマ</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>comic_id</td><td>所属コミック</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>resource_picture_id</td><td>背景画像 素材id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>width</td><td>コマの幅</td><td>integer</td><td>200</td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマの高さ</td><td>integer</td><td>80</td><td>FALSE</td><td> </td><td></td></tr><tr><td>border</td><td>コマの枠線の太さ</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>y</td><td>表示位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>z</td><td>表示優先順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>t</td><td>コマ番号</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>author_id</td><td>コマの投稿者 作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelModel">PanelModel</a>\r
+</li></ul><h2 id="h2-resource_pictures.20.E7.B4.A0.E6.9D.90">resource_pictures 素材</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>ext</td><td>画像フォーマット</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅ピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>filesize</td><td>画像サイズ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>artist_id</td><td>投稿者 絵師id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>lisence_id</td><td>付与ライセンスid</td><td>integer</td><td> </td><td> </td><td> </td><td><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPicture">OriginalPicture</a>のコピー 変更不可</td></tr><tr><td>original_picture_id</td><td>原画id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">ResourcePictureModel</a>\r
+</li></ul><h2 id="h2-speach_balloons.20.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">speach_balloons フキダシテンプレート</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>name</td><td>フキダシ名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>tail_count</td><td>尻尾の向きの数</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>size_count</td><td>サイズのバリエーション数</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>表示順</td><td>integer</td><td>1</td><td>false</td><td> </td><td>ファイルエクスプローラーなどで</td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonModel">SpeachBalloonModel</a>\r
+</li></ul><h2 id="h2-speach_templates.20.E3.82.BB.E3.83.AA.E3.83.95.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">speach_templates セリフテンプレート</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>balloon_template_id</td><td>フキダシ枠テンプレートid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachTemplateModel">SpeachTemplateModel</a>\r
+</li></ul><h2 id="h2-speaches.20.E3.82.BB.E3.83.AA.E3.83.95">speaches セリフ</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>balloon_id</td><td>フキダシ枠id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>content</td><td>台詞</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr><tr><td>width</td><td>幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachModel">SpeachModel</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor">\r
+    <title>JavascriptEditor</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor</link>\r
+    <dc:identifier>JavascriptEditor</dc:identifier>\r
+    <dc:date>2012-01-04T22:04:51+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= Javascript\r
+ js は 閲覧時 に使われるもの、ログイン後に使われるもの、その両方で使われるものがある.\r
+\r
+== common.js\r
+ * pettnar.\r
+ * pettanr.const\r
+ * pettanr.ua\r
+   * ブラウザの情報、プラグインの情報\r
+ * pettnar.util\r
+   * \r
+ * pettnar.overlay\r
+   * ポップア]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-Javascript">Javascript</h1><div class="indent">js は 閲覧時 に使われるもの、ログイン後に使われるもの、その両方で使われるものがある.\r
+</div><h2 id="h2-common.js">common.js</h2><ul><li>pettnar.\r
+</li><li>pettanr.const\r
+</li><li>pettanr.ua\r
+<ul><li>ブラウザの情報、プラグインの情報\r
+</li></ul></li><li>pettnar.util\r
+<ul><li>\r
+</li></ul></li><li>pettnar.overlay\r
+<ul><li>ポップアップオーバーレイを管理する.\r
+</li></ul></li><li>pettnar.key\r
+<ul><li>キーイベントの発行、テキスト入力エリアの管理\r
+</li></ul></li><li>pettnar.balloon\r
+<ul><li>クロスバックエンドな吹きだし画像のためのラッパーの発行.XbackendSpeachBalloon\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">XbackendSpeachBalloon</a></li><li>SVG, VML といったベクター画像で吹きだし(balloon)を描画する(ベクター画像のサポートがない場合は代替画像を表示する)\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">AboutSpeachBalloon</a>\r
+</li></ul></li><li>pettnar.image\r
+<ul><li>クロスバックエンドな、Reversible Image のためのラッパーを発行.XbackendReversibleImage\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">XbackendReversibleImage</a></li><li>css3, VML, ActiveX, Flash, サーバー側で生成した反転画像 を使用して画像の反転を行う.\r
+</li><li>透過 PNG のサポートが甘い IE6 以下にたいして、VML, Flash, ActiveX+サーバー画像 による描画サポートを行う.PngFix\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/PngFix">PngFix</a></li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">PictureIo</a>\r
+</li></ul></li><li>pettnar.i18n\r
+<ul><li>マルチ言語情報の保持.言語変更イベントの管理.\r
+</li></ul></li><li>pettnar.io\r
+<ul><li>通信\r
+</li><li>xml としてサーバに置かれた ajax なリソースに対して、ajax feed api を使った json リクエスト(xmlより転送量が少ない)などの 複数経路でリクエストを行うラッパー\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">JsonApi</a>\r
+</li></ul></li><li>pettnar.load\r
+<ul><li>work.js と jQuery のロード.min や debag version の切り替え.jQuery version の切り替え.\r
+</li></ul></li></ul><h2 id="h2-work.js">work.js</h2><p>ログイン後のユーザー(管理者)の操作.コミック・画像の管理やコマの作成.\r
+</p><ul><li>pettnar.view\r
+<ul><li>現在のビューを管理する.Window Resize イベントの監視.\r
+</li></ul></li><li>pettnar.editor\r
+<ul><li>コマの編集を行う.\r
+</li></ul></li><li>pettnar.file\r
+<ul><li>サーバから取得したリソース情報を保持し、データの取得やアクセス権のチェック、データのアップデートをラップする.\r
+</li></ul></li><li>pettnar.finder\r
+<ul><li>ファイル(リソース)エクスプローラー\r
+</li><li>コミック、コマ、画像、吹きだし、画像提供絵師情報</li></ul></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc">\r
+    <title>ChangeDoc</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc</link>\r
+    <dc:identifier>ChangeDoc</dc:identifier>\r
+    <dc:date>2012-01-04T18:19:48+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 改変予告\r
+== モデルの変名\r
+\r
+balloon_templates\r
+ * border &rarr; size\r
+ * min_width &rarr; \r
+ * max_width &rarr; \r
+ * min_height &rarr; \r
+ * max_height &rarr; \r
+balloons \r
+ * border &rarr; size\r
+ * zindex &ra]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E6.94.B9.E5.A4.89.E4.BA.88.E5.91.8A">改変予告</h1><h2 id="h2-.E3.83.A2.E3.83.87.E3.83.AB.E3.81.AE.E5.A4.89.E5.90.8D">モデルの変名</h2><p>balloon_templates\r
+</p><ul><li>border → size\r
+</li><li>min_width → \r
+</li><li>max_width → \r
+</li><li>min_height → \r
+</li><li>max_height → \r
+</li></ul><p>balloons \r
+</p><ul><li>border → size\r
+</li><li>zindex → z\r
+</li><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>width → \r
+</li><li>height → \r
+</li></ul><p>comics \r
+</p><ul><li>default_width → width\r
+</li><li>default_height → height\r
+</li></ul><p>original_pictures\r
+</p><ul><li>width → \r
+</li><li>height → \r
+</li></ul><p>panel_pictures\r
+</p><ul><li>width → \r
+</li><li>height → \r
+</li><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>zindex → z\r
+</li><li>v → flipv\r
+</li><li>h → fliph\r
+</li></ul><p>panels\r
+</p><ul><li>width → \r
+</li><li>height → \r
+</li><li>seqno → t\r
+</li></ul><p>speach_balloons\r
+</p><ul><li>tail_limit → tail_count\r
+</li><li>border_limit → size_count\r
+</li></ul><p>speach_templates\r
+</p><ul><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>width → \r
+</li><li>height → \r
+</li></ul><p>speaches\r
+</p><ul><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>width → \r
+</li><li>height → \r
+</li></ul><p>balloons \r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ストーリー上の順序も品質に関わるため\r
+</p><p>speaches\r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ストーリー上の順序も品質に関わるため\r
+</p><p>panels\r
+<table class="wikitable" border="1"><tbody><tr><td>x</td><td>表示位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>y</td><td>表示位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>z</td><td>表示優先順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:将来の拡張に備えるため\r
+</p><p>panel_pictures\r
+<table class="wikitable" border="1"><tbody><tr><td>url</td><td>リンク</td><td>string</td><td> </td><td> </td><td>200</td><td>参照するページをリンクできる</td></tr></tbody></table></p><p>追加理由:本家から取り込んでなかった\r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ストーリー上の順序も品質に関わるため\r
+</p><p>lisences\r
+<table class="wikitable" border="1"><tbody><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ie6がpng透過できないためgif変換の必要ができたため\r
+</p><p>common_lisences\r
+<table class="wikitable" border="1"><tbody><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ie6がpng透過できないためgif変換の必要ができたため\r
+</p><p>original_lisences\r
+<table class="wikitable" border="1"><tbody><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ie6がpng透過できないためgif変換の必要ができたため\r
+</p><p>comics\r
+<table class="wikitable" border="1"><tbody><tr><td>visible</td><td>公開フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>可視範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>editable</td><td>編集フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>許可範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr></tbody></table></p><p>追加理由:本家から取り込んでなかった\r
+</p><p>speach_balloons\r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>表示順</td><td>integer</td><td>1</td><td>false</td><td> </td><td>ファイルエクスプローラーなどで</td></tr></tbody></table></p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema">\r
+    <title>DatabaseSchema</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema</link>\r
+    <dc:identifier>DatabaseSchema</dc:identifier>\r
+\r
+    <dc:date>2012-01-04T18:05:04+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 定義\r
+超やっつけだけど、無いよりはマシか。\r
+\r
+{{{\r
+ActiveRecord::Schema.define(:version =&gt; 20120102071851) do\r
+\r
+  create_table &quot;admins&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;email&quot;,        ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E5.AE.9A.E7.BE.A9">定義</h1><p>超やっつけだけど、無いよりはマシか。\r
+</p><pre>ActiveRecord::Schema.define(:version =&gt; 20120102071851) do\r
+\r
+  create_table &quot;admins&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;email&quot;,                                 :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;encrypted_password&quot;,     :limit =&gt; 128, :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;reset_password_token&quot;\r
+    t.datetime &quot;reset_password_sent_at&quot;\r
+    t.datetime &quot;remember_created_at&quot;\r
+    t.integer  &quot;sign_in_count&quot;,                         :default =&gt; 0\r
+    t.datetime &quot;current_sign_in_at&quot;\r
+    t.datetime &quot;last_sign_in_at&quot;\r
+    t.string   &quot;current_sign_in_ip&quot;\r
+    t.string   &quot;last_sign_in_ip&quot;\r
+    t.string   &quot;confirmation_token&quot;\r
+    t.datetime &quot;confirmed_at&quot;\r
+    t.datetime &quot;confirmation_sent_at&quot;\r
+    t.string   &quot;authentication_token&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;admins&quot;, [&quot;authentication_token&quot;], :name =&gt; &quot;index_admins_on_authentication_token&quot;, :unique =&gt; true\r
+  add_index &quot;admins&quot;, [&quot;confirmation_token&quot;], :name =&gt; &quot;index_admins_on_confirmation_token&quot;, :unique =&gt; true\r
+  add_index &quot;admins&quot;, [&quot;email&quot;], :name =&gt; &quot;index_admins_on_email&quot;, :unique =&gt; true\r
+  add_index &quot;admins&quot;, [&quot;reset_password_token&quot;], :name =&gt; &quot;index_admins_on_reset_password_token&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;artists&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;email&quot;\r
+    t.string   &quot;name&quot;\r
+    t.string   &quot;homepage_url&quot;\r
+    t.string   &quot;api_url&quot;\r
+    t.integer  &quot;default_lisence_id&quot;\r
+    t.datetime &quot;crowled_at&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+    t.integer  &quot;author_id&quot;\r
+  end\r
+\r
+  create_table &quot;authors&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;name&quot;\r
+    t.string   &quot;email&quot;,                                 :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;encrypted_password&quot;,     :limit =&gt; 128, :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;reset_password_token&quot;\r
+    t.datetime &quot;reset_password_sent_at&quot;\r
+    t.datetime &quot;remember_created_at&quot;\r
+    t.integer  &quot;sign_in_count&quot;,                         :default =&gt; 0\r
+    t.datetime &quot;current_sign_in_at&quot;\r
+    t.datetime &quot;last_sign_in_at&quot;\r
+    t.string   &quot;current_sign_in_ip&quot;\r
+    t.string   &quot;last_sign_in_ip&quot;\r
+    t.string   &quot;authentication_token&quot;\r
+    t.string   &quot;confirmation_token&quot;\r
+    t.datetime &quot;confirmed_at&quot;\r
+    t.datetime &quot;confirmation_sent_at&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;authors&quot;, [&quot;authentication_token&quot;], :name =&gt; &quot;index_authors_on_authentication_token&quot;, :unique =&gt; true\r
+  add_index &quot;authors&quot;, [&quot;confirmation_token&quot;], :name =&gt; &quot;index_authors_on_confirmation_token&quot;, :unique =&gt; true\r
+  add_index &quot;authors&quot;, [&quot;email&quot;], :name =&gt; &quot;index_authors_on_email&quot;, :unique =&gt; true\r
+  add_index &quot;authors&quot;, [&quot;reset_password_token&quot;], :name =&gt; &quot;index_authors_on_reset_password_token&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;balloon_templates&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;speach_balloon_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;system_picture_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;tail&quot;,              :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;size&quot;,              :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;min_width&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;max_width&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;min_height&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;max_height&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;balloon_templates&quot;, [&quot;speach_balloon_id&quot;, &quot;tail&quot;, &quot;size&quot;], :name =&gt; &quot;balloon_templates_idts&quot;, :unique =&gt; true\r
+  add_index &quot;balloon_templates&quot;, [&quot;speach_balloon_id&quot;], :name =&gt; &quot;index_balloon_templates_on_speach_balloon_id&quot;\r
+\r
+  create_table &quot;balloons&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;panel_id&quot;,                           :null =&gt; false\r
+    t.integer  &quot;balloon_template_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;system_picture_id&quot;,                  :null =&gt; false\r
+    t.integer  &quot;tail&quot;,                :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;size&quot;,                :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;x&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;z&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;t&quot;,                   :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                              :null =&gt; false\r
+    t.integer  &quot;height&quot;,                             :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;balloons&quot;, [&quot;panel_id&quot;, &quot;t&quot;], :name =&gt; &quot;balloon_idt&quot;, :unique =&gt; true\r
+  add_index &quot;balloons&quot;, [&quot;panel_id&quot;], :name =&gt; &quot;index_balloons_on_panel_id&quot;\r
+\r
+  create_table &quot;comics&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;title&quot;\r
+    t.integer  &quot;width&quot;,      :default =&gt; 200, :null =&gt; false\r
+    t.integer  &quot;height&quot;,     :default =&gt; 80,  :null =&gt; false\r
+    t.integer  &quot;visible&quot;,    :default =&gt; 0,   :null =&gt; false\r
+    t.integer  &quot;editable&quot;,   :default =&gt; 0,   :null =&gt; false\r
+    t.integer  &quot;author_id&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;comics&quot;, [&quot;author_id&quot;], :name =&gt; &quot;index_comics_on_author_id&quot;\r
+\r
+  create_table &quot;common_lisences&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;lisence_id&quot;,                       :null =&gt; false\r
+    t.string   &quot;name&quot;,                             :null =&gt; false\r
+    t.string   &quot;url&quot;,                              :null =&gt; false\r
+    t.integer  &quot;cc_by&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_sa&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nd&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nc&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_resize&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_flip&quot;,           :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_convert&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;keep_aspect_ratio&quot;, :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  create_table &quot;lisences&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;name&quot;,                             :null =&gt; false\r
+    t.string   &quot;url&quot;,                              :null =&gt; false\r
+    t.integer  &quot;cc_by&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_sa&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nd&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nc&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_resize&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_flip&quot;,           :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_convert&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;keep_aspect_ratio&quot;, :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;lisences&quot;, [&quot;url&quot;], :name =&gt; &quot;index_lisences_on_url&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;original_lisences&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;artist_id&quot;,                        :null =&gt; false\r
+    t.integer  &quot;lisence_id&quot;,                       :null =&gt; false\r
+    t.string   &quot;name&quot;,                             :null =&gt; false\r
+    t.string   &quot;url&quot;,                              :null =&gt; false\r
+    t.integer  &quot;cc_by&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_sa&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nd&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nc&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_resize&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_flip&quot;,           :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_convert&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;keep_aspect_ratio&quot;, :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  create_table &quot;original_pictures&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;ext&quot;,        :null =&gt; false\r
+    t.integer  &quot;width&quot;,      :null =&gt; false\r
+    t.integer  &quot;height&quot;,     :null =&gt; false\r
+    t.integer  &quot;filesize&quot;,   :null =&gt; false\r
+    t.integer  &quot;artist_id&quot;\r
+    t.integer  &quot;lisence_id&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;original_pictures&quot;, [&quot;artist_id&quot;], :name =&gt; &quot;index_original_pictures_on_artist_id&quot;\r
+\r
+  create_table &quot;panel_pictures&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;panel_id&quot;,                                          :null =&gt; false\r
+    t.integer  &quot;resource_picture_id&quot;,                               :null =&gt; false\r
+    t.string   &quot;url&quot;,                 :limit =&gt; 200\r
+    t.integer  &quot;x&quot;,                                                 :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                                 :null =&gt; false\r
+    t.integer  &quot;z&quot;,                                                 :null =&gt; false\r
+    t.integer  &quot;t&quot;,                                  :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                                             :null =&gt; false\r
+    t.integer  &quot;height&quot;,                                            :null =&gt; false\r
+    t.integer  &quot;flipv&quot;,                              :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;fliph&quot;,                              :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;panel_pictures&quot;, [&quot;panel_id&quot;, &quot;t&quot;], :name =&gt; &quot;panel_pictures_idt&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;panels&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;comic_id&quot;,                             :null =&gt; false\r
+    t.integer  &quot;resource_picture_id&quot;\r
+    t.integer  &quot;width&quot;,               :default =&gt; 200, :null =&gt; false\r
+    t.integer  &quot;height&quot;,              :default =&gt; 80,  :null =&gt; false\r
+    t.integer  &quot;border&quot;,              :default =&gt; 1,   :null =&gt; false\r
+    t.integer  &quot;x&quot;,                                    :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                    :null =&gt; false\r
+    t.integer  &quot;z&quot;,                                    :null =&gt; false\r
+    t.integer  &quot;t&quot;,                   :default =&gt; 1,   :null =&gt; false\r
+    t.integer  &quot;author_id&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;panels&quot;, [&quot;author_id&quot;], :name =&gt; &quot;index_panels_on_author_id&quot;\r
+  add_index &quot;panels&quot;, [&quot;comic_id&quot;, &quot;t&quot;], :name =&gt; &quot;panels_idt&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;resource_pictures&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;ext&quot;,                 :null =&gt; false\r
+    t.integer  &quot;width&quot;,               :null =&gt; false\r
+    t.integer  &quot;height&quot;,              :null =&gt; false\r
+    t.integer  &quot;filesize&quot;,            :null =&gt; false\r
+    t.integer  &quot;artist_id&quot;\r
+    t.integer  &quot;lisence_id&quot;\r
+    t.integer  &quot;original_picture_id&quot;, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  create_table &quot;speach_balloons&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;name&quot;,                      :null =&gt; false\r
+    t.integer  &quot;tail_count&quot;, :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;size_count&quot;, :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;t&quot;,          :default =&gt; 1, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;speach_balloons&quot;, [&quot;t&quot;], :name =&gt; &quot;speach_balloons_t&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;speach_templates&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;balloon_template_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;x&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;t&quot;,                   :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                              :null =&gt; false\r
+    t.integer  &quot;height&quot;,                             :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;speach_templates&quot;, [&quot;balloon_template_id&quot;, &quot;t&quot;], :name =&gt; &quot;speach_templates_idt&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;speaches&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;balloon_id&quot;,                :null =&gt; false\r
+    t.string   &quot;content&quot;\r
+    t.integer  &quot;x&quot;,                         :null =&gt; false\r
+    t.integer  &quot;y&quot;,                         :null =&gt; false\r
+    t.integer  &quot;t&quot;,          :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                     :null =&gt; false\r
+    t.integer  &quot;height&quot;,                    :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;speaches&quot;, [&quot;balloon_id&quot;, &quot;t&quot;], :name =&gt; &quot;speaches_bt&quot;, :unique =&gt; true\r
+  add_index &quot;speaches&quot;, [&quot;balloon_id&quot;], :name =&gt; &quot;index_speaches_on_balloon_id&quot;\r
+\r
+  create_table &quot;system_pictures&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;ext&quot;,        :null =&gt; false\r
+    t.integer  &quot;width&quot;,      :null =&gt; false\r
+    t.integer  &quot;height&quot;,     :null =&gt; false\r
+    t.integer  &quot;filesize&quot;,   :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+end\r
+\r
+</pre>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController">\r
+    <title>SpeachBalloonsController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController</link>\r
+    <dc:identifier>SpeachBalloonsController</dc:identifier>\r
+    <dc:date>2012-01-04T07:58:05+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= フキダシテンプレート\r
+コマ上に添付するためのフキダシ見本と、それを管理する処理。主に二つの使われ方をする。\r
+\r
+ * 作家が使うエディタ上のフキダシエクスプローラーで見本として表示するための情報をjsonで返す。\r
+ * 管理者がフキダシの基礎情報をメンテナンスする。\r
+\r
+メンテナンスはjson経由で行うことが多い。枠テンプレートとセリフテンプレートのすべての情報を同時に更新する必要があ]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">フキダシテンプレート</h1><p>コマ上に添付するためのフキダシ見本と、それを管理する処理。主に二つの使われ方をする。\r
+</p><ul><li>作家が使うエディタ上のフキダシエクスプローラーで見本として表示するための情報をjsonで返す。\r
+</li><li>管理者がフキダシの基礎情報をメンテナンスする。\r
+</li></ul><p>メンテナンスはjson経由で行うことが多い。枠テンプレートとセリフテンプレートのすべての情報を同時に更新する必要があるためである。詳しくはAboutSpeachBalloon。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">AboutSpeachBalloon</a></p><p>参考:Spea<a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonModel">SpeachBalloonModel</a></p><h2 id="h2-index">index</h2><p>一覧形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家/管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>○</td></tr></tbody></table></p><p>主にクライアントのエディタがフキダシリストを得るために使う。全レコードがt順で返る。\r
+</p><p>html形式では、管理者がメンテナンスのために閲覧する。重要なカラムの情報が一覧で表示されるほか、showへの誘導と、削除のボタンが配置される。\r
+</p><h2 id="h2-show">show</h2><p>単票形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>管理者がメンテナンスのために閲覧する機能。\r
+</p><h2 id="h2-create">create</h2><p>作成\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>json形式で</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>×</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>管理者がフキダシを追加するための機能。\r
+</p><p>jsonデータを元にフキダシテンプレートを作成する。データ作成方法はHowToMakeSpeachBalloonを見る。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">HowToMakeSpeachBalloon</a></p><h2 id="h2-update">update</h2><p>更新\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>×</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>管理者がフキダシを修正するための機能。\r
+</p><p>指定されたidのフキダシテンプレートを、jsonデータを元に更新する。データ作成方法はHowToMakeSpeachBalloonを見る。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">HowToMakeSpeachBalloon</a></p><h3 id="h3-.E4.BE.8B.E5.A4.96">例外</h3><p>権限がないアカウントで要求された場合は、処理を中断し、サインインを促すページに遷移する。\r
+指定されたidが存在しない場合は、404エラーコードが返る。\r
+</p><h2 id="h2-destroy">destroy</h2><p>削除\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>指定されたidのフキダシテンプレートを削除する。フキダシテンプレートだけでなく、枠テンプレートとセリフテンプレートも同時に削除される。\r
+</p><h3 id="h3-.E4.BE.8B.E5.A4.96-2">例外</h3><p>権限がないアカウントで要求された場合は、処理を中断し、サインインを促すページに遷移する。\r
+指定されたidが存在しない場合は、404エラーコードが返る。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel">\r
+    <title>PanelPictureModel</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel</link>\r
+\r
+    <dc:identifier>PanelPictureModel</dc:identifier>\r
+    <dc:date>2012-01-03T12:34:36+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コマ絵\r
+コマ上に添付された素材に関するデータ。\r
+\r
+参考:PanelPicturesController\r
+\r
+== カラム\r
+\r
+== 作成手順\r
+コマ絵は常にパネル経由で作成されるため、PanelsControllerからjsonフォーマットで送信する。\r
+\r
+コマ絵は素材のコピーなので、素材ResourcePictureModelのデータを元に作成する。行の新規作成時はデフォルト値と]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9E.E7.B5.B5">コマ絵</h1><p>コマ上に添付された素材に関するデータ。\r
+</p><p>参考:Pane<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController">PanelPicturesController</a></p><h2 id="h2-.E3.82.AB.E3.83.A9.E3.83.A0">カラム</h2><h2 id="h2-.E4.BD.9C.E6.88.90.E6.89.8B.E9.A0.86">作成手順</h2><p>コマ絵は常にパネル経由で作成されるため、PanelsControllerからjsonフォーマットで送信する。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelsController">PanelsController</a></p><p>コマ絵は素材のコピーなので、素材ResourcePictureModelのデータを元に作成する。<a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">ResourcePictureModel</a>のように値をコピーすること。\r
+</p><table class="wikitable" border="1"><tbody><tr><td><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPicture">PanelPicture</a></td><td><a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePicture">ResourcePicture</a></td></tr><tr><td>width</td><td>width</td></tr></tbody></table>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">\r
+    <title>ResourcePictureModel</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel</link>\r
+    <dc:identifier>ResourcePictureModel</dc:identifier>\r
+    <dc:date>2012-01-03T11:56:43+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= 素材\r
+絵師から提供された原画OriginalPictureModelをコマPanel上で扱いやすいように整えた画像に関するデータ。\r
+\r
+参考:ResourcePicturesController\r
+\r
+== カラム\r
+\r
+== 作成手順\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E7.B4.A0.E6.9D.90">素材</h1><p>絵師から提供された原画OriginalPictureModelをコ<a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPictureModel">OriginalPictureModel</a>像に関するデータ。\r
+</p><p>参考:Reso<a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePicturesController">ResourcePicturesController</a></p><h2 id="h2-.E3.82.AB.E3.83.A9.E3.83.A0">カラム</h2><h2 id="h2-.E4.BD.9C.E6.88.90.E6.89.8B.E9.A0.86">作成手順</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController">\r
+    <title>PanelPicturesController</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController</link>\r
+    <dc:identifier>PanelPicturesController</dc:identifier>\r
+    <dc:date>2012-01-03T11:39:51+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コマ絵\r
+コマ上に添付された素材に関する処理。\r
+\r
+コマ絵の操作はパネル経由でしか許可されていないので、処理することはない。かろうじて管理者がレコード値を閲覧できるのみである。\r
+\r
+参考:PanelPictureModel\r
+\r
+== index\r
+一覧形式\r
+||パラメータ||なし||\r
+||権限||管理者||\r
+\r
+== show\r
+単票形式\r
+||パラメータ||id||\r
+||権限|]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9E.E7.B5.B5">コマ絵</h1><p>コマ上に添付された素材に関する処理。\r
+</p><p>コマ絵の操作はパネル経由でしか許可されていないので、処理することはない。かろうじて管理者がレコード値を閲覧できるのみである。\r
+</p><p>参考:Pane<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel">PanelPictureModel</a></p><h2 id="h2-index">index</h2><p>一覧形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>管理者</td></tr></tbody></table></p><h2 id="h2-show">show</h2><p>単票形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr></tbody></table></p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers">\r
+    <title>ForDevelopers</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers</link>\r
+    <dc:identifier>ForDevelopers</dc:identifier>\r
+\r
+    <dc:date>2012-01-02T13:28:58+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 開発者向けドキュメント\r
+== 開発環境\r
+=== サーバーサイド\r
+ * Ruby1.9+Rails3.1\r
+==== 構築\r
+ * InstallRubyAndRails\r
+ * DownloadSourceCode\r
+ * PictureIo\r
+ * RmagickAndDmagick\r
+\r
+=== クライアントサイド\r
+ * html4.01 + css2.1 に加え css3, SV]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E9.96.8B.E7.99.BA.E8.80.85.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">開発者向けドキュメント</h1><h2 id="h2-.E9.96.8B.E7.99.BA.E7.92.B0.E5.A2.83">開発環境</h2><h3 id="h3-.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E3.82.B5.E3.82.A4.E3.83.89">サーバーサイド</h3><ul><li>Ruby1.9+Rails3.1\r
+</li></ul><h4 id="h4-.E6.A7.8B.E7.AF.89">構築</h4><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/InstallRubyAndRails">InstallRubyAndRails</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/DownloadSourceCode">DownloadSourceCode</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">PictureIo</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick">RmagickAndDmagick</a>\r
+</li></ul><h3 id="h3-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E3.82.B5.E3.82.A4.E3.83.89">クライアントサイド</h3><ul><li>html4.01 + css2.1 に加え css3, SVG, XML, ActiveX, Flash のうちのいくつか.\r
+<ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ClientSide">ClientSide</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">XbackendReversibleImage</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">XbackendSpeachBalloon</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PngFix">PngFix</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2">HtmlAndCss2</a>\r
+</li></ul></li><li>javascript( jQuery + plugin)\r
+<ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor">JavascriptEditor</a>\r
+</li></ul></li></ul><h3 id="h3-.E3.83.87.E3.83.BC.E3.82.BF.E3.83.99.E3.83.BC.E3.82.B9">データベース</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutModels">AboutModels</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema">DatabaseSchema</a> \r
+</li></ul><h2 id="h2-.E6.A9.9F.E8.83.BD">機能</h2><ul><li>サーバ側の機能 RailsControllers<a href="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers">RailsControllers</a></li><li>JsonAPI Js<a href="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">JsonApi</a></li></ul><h2 id="h2-.E6.94.B9.E5.A4.89.E4.BA.88.E5.91.8A">改変予告</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc">ChangeDoc</a></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">\r
+    <title>XbackendSpeachBalloon</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon</link>\r
+    <dc:identifier>XbackendSpeachBalloon</dc:identifier>\r
+    <dc:date>2012-01-02T01:06:05+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クロスバックエンドな吹きだし表示機能\r
+\r
+ぺったんRの吹きだしは、さまざまな尻尾の向きを持つ吹きだし画像を用意します.[[BR]]\r
+また、吹き出しが巨大になったときに、吹きだしの枠線も太ってしまわないように、枠線のバリエーションも複数用意します.[[BR]]\r
+\r
+吹きだし画像は gif で注意深く用意されるため一枚につき、数キロバイトという軽量なものです.しかしコマの編集時にはユーザーが]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.AD.E3.82.B9.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89.E3.81.AA.E5.90.B9.E3.81.8D.E3.81.A0.E3.81.97.E8.A1.A8.E7.A4.BA.E6.A9.9F.E8.83.BD">クロスバックエンドな吹きだし表示機能</h1><p>ぺったんRの吹きだしは、さまざまな尻尾の向きを持つ吹きだし画像を用意します.[[BR]]\r
+<br />また、吹き出しが巨大になったときに、吹きだしの枠線も太ってしまわないように、枠線のバリエーションも複数用意します.[[BR]]\r
+<br /></p><p>吹きだし画像は gif で注意深く用意されるため一枚につき、数キロバイトという軽量なものです.しかしコマの編集時にはユーザーが操作している間にそのすべてのバリエーションを読み込んでしまう事態になります.[[BR]]\r
+<br />また、マンガという表現スタイルを考えると、キャラクター画像一枚に対して、ひとつ程度の吹き出しが登場する、と仮定するという仮定で、ぺったんのページ読み込み時の全画像アクセスのうち、半分を吹きだし画像が締めることになる試算です.[[BR]]\r
+<br />(もちろん、キャラクター画像の方がはるかにファイルサイズが大きくなります.注意深く容量を抑えて作られた場合でも 10KB ~ 20KB という試算です.)[[BR]]\r
+<br /></p><p>このような、吹きだし画像へのアクセスを抑止して、サービスの安定を図るためベクター画像をサポートするブラウザについては、ブラウザ側で吹きだし画像を用意します.\r
+</p><h1 id="h1-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E6.A9.9F.E8.83.BD.E5.AF.BE.E5.BF.9C.E8.A1.A8">ブラウザ機能対応表</h1><table class="wikitable" border="1"><tbody><tr><td>バックエンド</td><td>ie5~8</td><td>ie9+</td><td>FF</td><td>safari</td><td>chrome</td><td>Opera</td></tr><tr><td>VML</td><td>○</td><td>?</td><td>×</td><td>×</td><td>×</td><td>×</td></tr><tr><td>SVG</td><td>×</td><td>○</td><td>1.5+</td><td>3.0+</td><td>1+</td><td>8+</td></tr></tbody></table>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">\r
+    <title>HowToMakeSpeachBalloon</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon</link>\r
+\r
+    <dc:identifier>HowToMakeSpeachBalloon</dc:identifier>\r
+    <dc:date>2012-01-01T01:59:53+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[== フキダシテンプレート\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/949/640x640_0.png)]]\r
+フキダシテンプレートを追加するには尻尾の向きと枠のサイズのバリエーションがいくつになるかを決定しなければなりません。\r
+尻尾のバリエーション数をtail_limit、枠のバリエーション数を_limitとして決定してください。\r
+そし]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">フキダシテンプレート</h2><img src="http://static.sourceforge.jp/thumb/g/2/949/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9492f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+フキダシテンプレートを追加するには尻尾の向きと枠のサイズのバリエーションがいくつになるかを決定しなければなりません。\r
+尻尾のバリエーション数をtail_limit、枠のバリエーション数を_limitとして決定してください。\r
+そして、それらすべての組み合わせの枠テンプレートとテキストテンプレートを用意してください。一つでも欠けると追加できません。\r
+</p><p>例えば、尻尾が上下左右ならtail_limitが4。サイズが大中小ならで_limitが3で、4*3で合計12の枠テンプレートとテキストテンプレートを用意します。\r
+</p><p>→tail ↓Border\r
+<table class="wikitable" border="1"><tbody><tr><td> </td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>1</td><td>小-上</td><td>小-右</td><td>小-下</td><td>小-左</td></tr><tr><td>2</td><td>中-上</td><td>中-右</td><td>中-下</td><td>中-左</td></tr><tr><td>3</td><td>大-上</td><td>大-右</td><td>大-下</td><td>大-左</td></tr></tbody></table></p><p>フキダシテンプレートに必要な項目は以下です。\r
+<table class="wikitable" border="1"><tbody><tr><td>項目名</td><td>意味</td><td>備考</td></tr><tr><td>name</td><td>フキダシの名前</td><td> </td></tr><tr><td>tail_limit</td><td>尻尾のバリエーション数</td><td> </td></tr><tr><td>border_limit</td><td>サイズのバリエーション数</td><td> </td></tr></tbody></table></p><h2 id="h2-.E6.9E.A0.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">枠テンプレート</h2><p>枠は画像で用意します。フキダシ用の画像を用意して素材として投稿します。\r
+各種フキダシ素材を投稿したらIDをメモします。\r
+</p><p>枠テンプレートに必要な項目は以下です。\r
+<table class="wikitable" border="1"><tbody><tr><td>項目名</td><td>意味</td><td>備考</td></tr><tr><td>resource_picture_id</td><td>フキダシ素材のID</td><td> </td></tr><tr><td>tail</td><td>尻尾の番号</td><td>1から始まりtail_limit-1で終わること</td></tr><tr><td>border</td><td>サイズの番号</td><td>1から始まり_limit-1で終わること</td></tr><tr><td>min_width</td><td>横方向のサイズが小さい方に切り替わる幅</td><td>0のとき、切り替えは発生しない</td></tr><tr><td>max_width</td><td>横方向のサイズが大きい方に切り替わる幅</td><td>0のとき、切り替えは発生しない</td></tr><tr><td>min_height</td><td>縦方向のサイズが小さい方に切り替わる高さ</td><td>0のとき、切り替えは発生しない</td></tr><tr><td>max_height</td><td>縦方向のサイズが大きい方に切り替わる高さ</td><td>0のとき、切り替えは発生しない</td></tr></tbody></table></p><h2 id="h2-.E3.83.86.E3.82.AD.E3.82.B9.E3.83.88.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">テキストテンプレート</h2><p>枠画像のどの位置にテキストを表示するかを決めて座標をメモします。\r
+</p><table class="wikitable" border="1"><tbody><tr><td>項目名</td><td>意味</td><td>備考</td></tr><tr><td>top_offset</td><td>テキストの表示を開始するx座標</td><td> </td></tr><tr><td>left_offset</td><td>テキストの表示を開始するy座標</td><td> </td></tr><tr><td>width</td><td>テキストの表示幅</td><td> </td></tr><tr><td>height</td><td>テキストの表示高さ</td><td> </td></tr></tbody></table><p>offset と width, height ですが、単位は % になりますか??(itozyun)\r
+</p><h3 id="h3-.E3.83.87.E3.83.BC.E3.82.BF.E4.BD.9C.E6.88.90">データ作成</h3><p>これまでのメモからデータを作成します。データはjsonで作成します。\r
+</p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ClientSide">\r
+    <title>ClientSide</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ClientSide</link>\r
+    <dc:identifier>ClientSide</dc:identifier>\r
+    <dc:date>2011-12-31T22:34:44+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= クライアント側\r
\r
+ぺったんR におけるユーザーの行動はマンガの閲覧 と マンガの編集に大きく分けられる.[[BR]]\r
+マンガの閲覧がすべてのユーザーに可能であるのに対し、マンガの編集は原則ログインしたユーザーが可能となる。[[BR]]\r
+またログイン以降のユーザーの操作は、javascriptを有効にする必要がある.[[BR]]\r
+\r
+== マンガの閲覧\r
+ぺったんR において、ブラウ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E5.81.B4">クライアント側</h1><div class="indent">\r
+</div><p>ぺったんR におけるユーザーの行動はマンガの閲覧 と マンガの編集に大きく分けられる.[[BR]]\r
+<br />マンガの閲覧がすべてのユーザーに可能であるのに対し、マンガの編集は原則ログインしたユーザーが可能となる。[[BR]]\r
+<br />またログイン以降のユーザーの操作は、javascriptを有効にする必要がある.[[BR]]\r
+<br /></p><h2 id="h2-.E3.83.9E.E3.83.B3.E3.82.AC.E3.81.AE.E9.96.B2.E8.A6.A7">マンガの閲覧</h2><p>ぺったんR において、ブラウザでのマンガ状コンテンツの閲覧のために、ユーザーは Flash も含めて特別なプラグインを必要としない.\r
+</p><h3 id="h3-html.20.2B.20css2.1">html + css2.1</h3><p>ぺったんと、ぺったんを元にする ぺったんRは、マンガ状のコンテンツの表示に css2.1 でレイアウトする.[[BR]]\r
+<br />以上をサポートするブラウザであれば、ぺったん 及び ぺったんR のコンテンツは閲覧ができる.[[BR]]\r
+<br /></p><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2">HtmlAndCss2</a>\r
+</li></ul><h3 id="h3-javascript">javascript</h3><p>ぺったんR で新たに追加された機能や、ぺったんRサーバへの負荷を抑えるため、javascript に加え css3, SVG といった新しいWeb標準が使われる.[[BR]]\r
+<br />これらをサポートしないブラウザも少なくなく、VML, ActiveX, flash といった非Web標準も利用する.[[BR]]\r
+<br /></p><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">XbackendReversibleImage</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">XbackendSpeachBalloon</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PngFix">PngFix</a>\r
+</li></ul><h2 id="h2-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.81.AE.E7.AE.A1.E7.90.86.E3.83.BB.E7.94.BB.E5.83.8F.E3.81.AE.E7.AE.A1.E7.90.86.E3.83.BB.E3.82.B3.E3.83.9E.E3.81.AE.E7.B7.A8.E9.9B.86.E3.83.BB.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E8.A8.AD.E5.AE.9A">コミックの管理・画像の管理・コマの編集・ユーザー設定</h2><p>これらのログインユーザーのための機能は、javascript が前提となる.[[BR]]\r
+<br />画面は Ajax で用意されるため、サーバ側はユーザのデータの管理とクライアントとの通信に専念できる.[[BR]]\r
+<br /></p><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor">JavascriptEditor</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">JsonApi</a>\r
+</li></ul><h2 id="h2-.E5.AF.BE.E5.BF.9C.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6">対応ブラウザ</h2><h3 id="h3-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E3.82.B7.E3.82.A7.E3.82.A2">ブラウザシェア</h3><p>IE系では、css3 や SVG をサポートしない IE8 以下がまだまだ多く、IE6 でそのシェアは10%近く.ブラウザシェアは国毎にばらつきがあり、お隣の中国・韓国では IE のシェアが多く、IE6 でも 20~30% になる.[[BR]]\r
+<br /></p><blockquote class="citation"><p>今なおブラウザシェア10.1%もあるIE6とどう向き合えばいいのか[[BR]]\r
+<br /><a href="http://weboook.blog22.fc2.com/blog-entry-248.html" class="external" rel="nofollow">http://weboook.blog22.fc2.com/blog-entry-248.html</a>\r
+</p></blockquote><p>javascript を切っているブラウザは 1% ほどらしい.[[BR]]\r
+<br /></p><blockquote class="citation"><p><a href="http://sourceforge.jp/projects/pettanr/wiki/JavaScript">JavaScript</a>をオフにしているブラウザは1%前後。米ヤフー調べ[[BR]]\r
+<br /><a href="http://www.publickey1.jp/blog/10/javascript1.html" class="external" rel="nofollow">http://www.publickey1.jp/blog/10/javascript1.html</a>\r
+</p></blockquote>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PngFix">\r
+    <title>PngFix</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PngFix</link>\r
+    <dc:identifier>PngFix</dc:identifier>\r
+    <dc:date>2011-12-29T16:31:59+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= Internet Exproler 6 以下での PNG 画像の表示について\r
+ie6 以下のブラウザでは 透過情報付の png 画像を正しく表示することができない.[[BR]]\r
+このため ぺったん では、png 画像を非推奨としてきた.[[BR]]\r
+ぺったんRでも それを踏襲することは変わりない.[[BR]]\r
+しかし、可能な限り作者の意図したとおりに作品を閲覧してもらうため、クロスバッ]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-Internet.20Exproler.206.20.E4.BB.A5.E4.B8.8B.E3.81.A7.E3.81.AE.20PNG.20.E7.94.BB.E5.83.8F.E3.81.AE.E8.A1.A8.E7.A4.BA.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">Internet Exproler 6 以下での PNG 画像の表示について</h1><p>ie6 以下のブラウザでは 透過情報付の png 画像を正しく表示することができない.[[BR]]\r
+<br />このため ぺったん では、png 画像を非推奨としてきた.[[BR]]\r
+<br />ぺったんRでも それを踏襲することは変わりない.[[BR]]\r
+<br />しかし、可能な限り作者の意図したとおりに作品を閲覧してもらうため、クロスバックエンドな png 表示サポートを実施する.[[BR]]\r
+<br />とはいえ、必要なプラグイン等がインストールされていない、機能が無効になっている場合、透過情報は正しく反映されない.[[BR]]\r
+<br /></p><h2 id="h2-.E3.81.AF.E3.81.98.E3.82.81.E3.81.AB">はじめに</h2><h2 id="h2-VML">VML</h2><h2 id="h2-ActiveX.20Alpha.20Image.20Loader">ActiveX Alpha Image Loader</h2><h2 id="h2-Flash">Flash</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters">\r
+    <title>ForWebmasters</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters</link>\r
+    <dc:identifier>ForWebmasters</dc:identifier>\r
+\r
+    <dc:date>2011-12-28T09:07:11+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 管理者向け\r
+\r
+== フキダシテンプレートのメンテナンス\r
+ * フキダシテンプレートについて AboutSpeachBalloon\r
+ * フキダシテンプレートの追加 HowToMakeSpeachBalloon\r
+\r
+== ライセンスのメンテナンス\r
+ * ライセンスについて]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E7.AE.A1.E7.90.86.E8.80.85.E5.90.91.E3.81.91">管理者向け</h1><h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E3.81.AE.E3.83.A1.E3.83.B3.E3.83.86.E3.83.8A.E3.83.B3.E3.82.B9">フキダシテンプレートのメンテナンス</h2><ul><li>フキダシテンプレートについて AboutSpeachBalloon\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">AboutSpeachBalloon</a></li><li>フキダシテンプレートの追加 HowToMakeSpeachBalloon\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">HowToMakeSpeachBalloon</a></li></ul><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.AE.E3.83.A1.E3.83.B3.E3.83.86.E3.83.8A.E3.83.B3.E3.82.B9">ライセンスのメンテナンス</h2><ul><li>ライセンスについて</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">\r
+    <title>AboutSpeachBalloon</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon</link>\r
+    <dc:identifier>AboutSpeachBalloon</dc:identifier>\r
+    <dc:date>2011-12-28T08:57:17+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= フキダシテンプレート\r
+フキダシとは、線で囲まれた枠の中に文章が書かれたものです。つまり、枠と文章を合わせたものがフキダシとなるわけです。\r
+\r
+ぺったんでフキダシを作るには、枠の素材をコマに貼り、その上にテキストを貼ります。\r
+\r
+しかし、このような作り方は操作に手数がかかり、扱いも煩雑になります。漫画はフキダシで絵をしゃべらすことで初めて成立するものです。漫画ツールとしては当たり前の機能で]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">フキダシテンプレート</h1><p>フキダシとは、線で囲まれた枠の中に文章が書かれたものです。つまり、枠と文章を合わせたものがフキダシとなるわけです。\r
+</p><p>ぺったんでフキダシを作るには、枠の素材をコマに貼り、その上にテキストを貼ります。\r
+</p><p>しかし、このような作り方は操作に手数がかかり、扱いも煩雑になります。漫画はフキダシで絵をしゃべらすことで初めて成立するものです。漫画ツールとしては当たり前の機能ですから、最小限の操作でフキダシを扱えなければ困ります。そこで、ぺったんはオーソドックスなフキダシをテンプレート化して用意しました。もちろんテンプレートは自由に追加できます。\r
+</p><h1 id="h1-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E3.81.AE.E6.A7.8B.E6.88.90">フキダシテンプレートの構成</h1><p>フキダシテンプレートは次の三つの階層で構成されています。\r
+</p><ul><li>フキダシテンプレート SpeachBalloon\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloon">SpeachBalloon</a></li><li>枠テンプレート BalloonTemplate\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/BalloonTemplate">BalloonTemplate</a></li><li>テキストテンプレート SpeachTemplate\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachTemplate">SpeachTemplate</a></li></ul><p>フキダシは枠とテキストから構成されます。枠テンプレートとテキストテンプレートがそれです。ただし、フキダシには大抵吹き出し口(ぺったんでは尻尾と言います)が付きますから、同じフキダシでもいくつかのバリエーションができます。それをグループ化するのがフキダシテンプレートです。\r
+</p><h2 id="h2-.E6.83.B3.E5.AE.9A.E3.81.99.E3.82.8B.E3.83.90.E3.83.AA.E3.82.A8.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3">想定するバリエーション</h2><p>ぺったんでは次の二つのバリエーションを想定しています。\r
+</p><ul><li>尻尾の向き\r
+</li><li>枠のサイズ\r
+</li></ul><p>尻尾の向きはフキダシの使われ方によって変わりますが、上下左右や角の四隅などに付くことが多いでしょうか。このバリエーションが多いほど融通が利くフキダシになります。\r
+</p><p>ぺったんはコマに貼ったフキダシを自由にサイズ調整できますが、フキダシを極端に拡大あるいは縮小すると、枠の画像によっては線が太ってしまったり、かすれてしまうことがあります。枠の画像には適正なサイズが要求されますので、より良いテンプレートはいくつかのサイズのバリエーションを用意する必要があります。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">\r
+    <title>JsonApi</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/JsonApi</link>\r
+\r
+    <dc:identifier>JsonApi</dc:identifier>\r
+    <dc:date>2011-12-26T19:13:24+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= JsonAPI\r
+ぺったんはjsonを利用したAPIに対応している。というよりRailsの仕様に乗っかっている。Rails知ってる人はよまなくていい。\r
+\r
+JsonAPIを使えば、ブラウザから操作せずとも直接データを操作できる。外部のプログラムからぺったんを楽しめる。\r
+\r
+APIにはCRUD、つまり、create,read,update,deleteがあり、それぞれがHTTPのPOST,G]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-JsonAPI">JsonAPI</h1><p>ぺったんはjsonを利用したAPIに対応している。というよりRailsの仕様に乗っかっている。Rails知ってる人はよまなくていい。\r
+</p><p>JsonAPIを使えば、ブラウザから操作せずとも直接データを操作できる。外部のプログラムからぺったんを楽しめる。\r
+</p><p>APIにはCRUD、つまり、create,read,update,deleteがあり、それぞれがHTTPのPOST,GET,PUT,DELETEに対応しているが、普通のブラウザからはGETしかできないので、手っ取り早くJsonAPIで遊ぶならcurlをインストールすると良い。\r
+</p><p>なお、railsではjsonでのやり取りを次のように規定している。\r
+</p><ul><li>URLの末尾を拡張子のように.jsonする\r
+</li><li>リクエストヘッダはContent-Type: application/jsonとする\r
+</li></ul><h2 id="h2-json.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E5.8F.96.E5.BE.97">jsonデータの取得</h2><p>例えば、ID:2のコマPanelのデータをcurlで取得するには次のようにする。\r
+</p><pre>curl http://hostname/panels/2.json -X GET -H &quot;Content-Type: application/json&quot;\r
+</pre><h2 id="h2-json.E3.81.A7.E3.81.AE.E6.8A.95.E7.A8.BF">jsonでの投稿</h2><p>例えば、コミックをcurlで作成するには次のようにする。このとき、作成するためのjsonデータはcomic_create.jsonファイルに用意されているものとする。\r
+</p><pre>curl http://hostname/comics.json  -X POST -H &quot;Content-Type: application/json&quot; -d @comic_create.json\r
+</pre><h2 id="h2-json.E3.81.A7.E3.81.AE.E6.9B.B4.E6.96.B0">jsonでの更新</h2><p>例えば、コミックをcurlで更新するには次のようにする。このとき、更新するためのjsonデータはcomic_update.jsonファイルに用意されているものとする。\r
+</p><pre>curl http://hostname/comics.json  -X PUT -H &quot;Content-Type: application/json&quot; -d @comic_update.json\r
+</pre><h2 id="h2-json.E3.81.A7.E3.81.AE.E5.89.8A.E9.99.A4">jsonでの削除</h2><p>例えば、コミックをcurlで削除するには次のようにする。このとき、削除するためのjsonデータはcomic_delete.jsonファイルに用意されているものとする。\r
+</p><pre>curl http://hostname/comics.json  -X DELETE -H &quot;Content-Type: application/json&quot; -d @comic_delete.json\r
+</pre><p>※普通に削除するだけならDELETEメソッドだけで削除できる。jsonデータcomic_delete.jsonは必要ないはずだが、誰でも削除できるのはおかしな話なので、大抵の場合は認証がいるだろう。認証に必要なauth_tokenを渡すのだが、auth_tokenについては後述する。\r
+</p><h2 id="h2-json.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E4.BD.9C.E3.82.8A.E6.96.B9">jsonデータの作り方</h2><p>jsonデータがどんなものかはググッてもらうとして、rails風なところを…\r
+</p><p>コミック作成に使ったcomic_create.jsonを例とすると次のようになる。\r
+<pre>{\r
+  &quot;comic&quot;: {\r
+    &quot;title&quot;: &quot;コミック作るテスト&quot;,\r
+    &quot;default_width&quot;: 400,\r
+    &quot;default_height&quot;: 200\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre>comicはコミックのmodel、titleなどはmodelのカラム。モデルの下に必要なカラムをキーにして値を記述する。\r
+</p><p>auth_tokenは認証が必要な操作をする場合に記述する。\r
+</p><h3 id="h3-auth_token">auth_token</h3><p>認証が必要な操作をする場合にはauth_tokenを用意する。auth_tokenはログイン後にプロフィールページを開くと書いてある。今のところは。\r
+</p><h3 id="h3-.E3.83.8D.E3.82.B9.E3.83.88.E3.81.97.E3.81.9F.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E4.BD.9C.E3.82.8A.E6.96.B9">ネストしたデータの作り方</h3><p>コマの投稿など、複数のモデルを一つのトランザクションで更新するような操作はjsonデータも複数のモデルについて記述しなければならない。\r
+</p><p>ネストされている子のデータはモデル名+_attributesをキーとしたハッシュ型の値をペアにして記述する。例えば、コマ絵のモデルpanel_picturesはpanel_pictures_attributesとなる。値側は複数のレコードを含むことが想定されるので、これもハッシュ型とする。こちらのキーは一意であれば何でもよく、値がレコードのデータである。文章じゃよくわからんので、コマ絵panel_pictures一つを含んだコマpanelを作成する場合の実際のデータを示す。\r
+</p><pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;border&quot;: 1,\r
+    &quot;comic_id&quot;: 5,\r
+    &quot;resource_picture_id&quot;: 1,\r
+    &quot;width&quot;: 400,\r
+    &quot;height&quot;: 200,\r
+    &quot;panel_pictures_attributes&quot;: {\r
+      &quot;new1&quot;: {\r
+        &quot;width&quot;: 100,\r
+        &quot;height&quot;: 103,\r
+        &quot;resource_picture_id&quot;: 4,\r
+        &quot;top_offset&quot;: 10,\r
+        &quot;left_offset&quot;: 135,\r
+        &quot;zindex&quot;: 1,\r
+        &quot;v&quot;: 1,\r
+        &quot;h&quot;: 0\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre><p>コマ絵が二枚だと、こんな感じ。\r
+<pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;border&quot;: 1,\r
+    &quot;comic_id&quot;: 5,\r
+    &quot;resource_picture_id&quot;: 1,\r
+    &quot;width&quot;: 400,\r
+    &quot;height&quot;: 200,\r
+    &quot;panel_pictures_attributes&quot;: {\r
+      &quot;new1&quot;: {\r
+        &quot;width&quot;: 100,\r
+        &quot;height&quot;: 103,\r
+        &quot;resource_picture_id&quot;: 4,\r
+        &quot;top_offset&quot;: 10,\r
+        &quot;left_offset&quot;: 135,\r
+        &quot;zindex&quot;: 1,\r
+        &quot;v&quot;: 1,\r
+        &quot;h&quot;: 0\r
+      },\r
+      &quot;new2&quot;: {\r
+        &quot;width&quot;: 50,\r
+        &quot;height&quot;: 75,\r
+        &quot;resource_picture_id&quot;: 1,\r
+        &quot;top_offset&quot;: 30,\r
+        &quot;left_offset&quot;: 14,\r
+        &quot;zindex&quot;: 2,\r
+        &quot;v&quot;: 0,\r
+        &quot;h&quot;: 0\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre></p><p>キーの&quot;new1&quot;と&quot;new2&quot;は適当な命名なんであるが、こんな要領で列挙していけばまとめて作成できる。\r
+</p><p>では、次にコマ絵だけでなくフキダシとセリフも含むデータを作成してみるが、その前に各モデルの関係を整理しておく。\r
+<pre>panel\r
+  panel_pictures\r
+  balloons\r
+    speaches\r
+</pre>だったね。\r
+<pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;border&quot;: 1,\r
+    &quot;comic_id&quot;: 5,\r
+    &quot;resource_picture_id&quot;: 1,\r
+    &quot;width&quot;: 400,\r
+    &quot;height&quot;: 200,\r
+    &quot;panel_pictures_attributes&quot;: {\r
+      &quot;new1&quot;: {\r
+        &quot;width&quot;: 100,\r
+        &quot;height&quot;: 103,\r
+        &quot;resource_picture_id&quot;: 4,\r
+        &quot;top_offset&quot;: 10,\r
+        &quot;left_offset&quot;: 135,\r
+        &quot;zindex&quot;: 3,\r
+        &quot;v&quot;: 1,\r
+        &quot;h&quot;: 0\r
+      }\r
+    },\r
+    &quot;balloons_attributes&quot;: {\r
+      &quot;newf1&quot;: {\r
+        &quot;balloon_template_id&quot;: 1,\r
+        &quot;resource_picture_id&quot;: 2,\r
+        &quot;tail&quot;: 1,\r
+        &quot;border&quot;: 1,\r
+        &quot;zindex&quot;: 5,\r
+        &quot;width&quot;: 81,\r
+        &quot;height&quot;: 63,\r
+        &quot;top_offset&quot;: 120,\r
+        &quot;left_offset&quot;: 35,\r
+        &quot;speaches_attributes&quot;: {\r
+          &quot;newf1s1&quot;: {\r
+            &quot;content&quot;: &quot;test&quot;,\r
+            &quot;width&quot;: 61,\r
+            &quot;height&quot;: 43,\r
+            &quot;top_offset&quot;: 10,\r
+            &quot;left_offset&quot;: 10\r
+          }\r
+        }\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre></p><h3 id="h3-.E3.83.8D.E3.82.B9.E3.83.88.E3.81.97.E3.81.9F.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E6.9B.B4.E6.96.B0">ネストしたデータの更新</h3><p>あるコマのセリフを変更したいとする。セリフはspeachなのでspeaches経由で更新したいところだが、ぺったんの仕様はコマ全体で更新することになっているので、speachesのAPIは用意されていない。コマの変更はpanel経由で行う。このとき、jsonデータでは、どのように変更対象のセリフを指示するのだろうか。\r
+</p><p>結論としてはidをデータに含めて指定する。例えば、セリフのidが3のときは次のようになる。\r
+</p><pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;balloons_attributes&quot;: {\r
+      &quot;b2&quot;: {\r
+        &quot;id&quot;: 2,\r
+        &quot;speaches_attributes&quot;: {\r
+          &quot;s3&quot;: {\r
+            &quot;id&quot;: 3,\r
+            &quot;content&quot;: &quot;modify&quot;\r
+          }\r
+        }\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre><p>idが指定されていないと新規追加となってしまう。\r
+</p><h3 id="h3-.E3.83.8D.E3.82.B9.E3.83.88.E3.81.97.E3.81.9F.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E5.89.8A.E9.99.A4">ネストしたデータの削除</h3><p>削除する場合、更新のときと同じようにidを指定しつつ_destroyにフラグを立てる。例えば、idが2のフキダシをコマから削除する場合、次のようにする。\r
+</p><pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;balloons_attributes&quot;: {\r
+      &quot;b2&quot;: {\r
+        &quot;id&quot;: 2,\r
+        &quot;_destroy&quot;: 1\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre><h2 id="h2-.E7.94.BB.E5.83.8F.E3.81.AE.E6.8A.95.E7.A8.BF">画像の投稿</h2><p>auth_tokenを含みながらのファイル送信がよくわからん。いろんなパターンで試してみたが素直にはいかなかった。苦肉の策が画像データを一度Base64でエンコードしたものをテキストとして送信すること。次の例は当然エンコードテキストは省略されている。\r
+<pre>{\r
+  &quot;original_picture&quot;: {\r
+    &quot;file&quot;: \r
+&quot;iVBORw0KGgoAAAANSUhEUgAAAWIAAAF7CAYAAADohYEpAAAcW0lEQVR4nO3d\r
+  :\r
+  :\r
+ghgAlP0/Bxl7hN5Zu0EAAAAASUVORK5CYII=\r
+&quot;\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre></p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutLisence">\r
+    <title>AboutLisence</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutLisence</link>\r
+    <dc:identifier>AboutLisence</dc:identifier>\r
+    <dc:date>2011-12-25T12:47:25+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= ライセンスについて\r
+※ここはぺったんに投稿された画像の著作権に関する話題です。\r
+\r
+== 選べるライセンス\r
+ぺったんには、あらかじめ一般的なライセンスを用意してあります。パブリックドメインやクリエイティブコモンズなどです。\r
+\r
+絵師は提供する素材にこれらのライセンスを付与して明記することができます。\r
+\r
+== 用意されたライセンス\r
+ * Public Domain\r
+   * ライ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">ライセンスについて</h1><p>※ここはぺったんに投稿された画像の著作権に関する話題です。\r
+</p><h2 id="h2-.E9.81.B8.E3.81.B9.E3.82.8B.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">選べるライセンス</h2><p>ぺったんには、あらかじめ一般的なライセンスを用意してあります。パブリックドメインやクリエイティブコモンズなどです。\r
+</p><p>絵師は提供する素材にこれらのライセンスを付与して明記することができます。\r
+</p><h2 id="h2-.E7.94.A8.E6.84.8F.E3.81.95.E3.82.8C.E3.81.9F.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">用意されたライセンス</h2><ul><li>Public Domain\r
+<ul><li>ライセンス表示 http://ja.wiki<a href="http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3" class="external" rel="nofollow">http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3</a></li></ul></li><li>Creative Commons 3.0(by)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by/3.0/legalcode</a></li></ul></li><li>Creative Commons 3.0(by_sa)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by-sa/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a></li></ul></li><li>Creative Commons 3.0(by_nd)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by-nd/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nd/3.0/legalcode</a></li></ul></li><li>Creative Commons 3.0(by_nc)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by-nc/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nc/3.0/legalcode</a></li></ul></li><li>Creative Commons 3.0(by_nc_sa)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode</a></li></ul></li><li>Creative Commons 3.0(by_nc_nd)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode</a></li></ul></li><li>Unknown\r
+<ul><li>著作権がはっきりしないもの\r
+</li></ul></li></ul><h2 id="h2-.E5.90.88.E3.81.A3.E3.81.9F.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.8C.E3.81.AA.E3.81.84">合ったライセンスがない</h2><p>自前の作品に特殊なライセンスを付与したいと考えるケースもあるでしょう。そういった場合、絵師がライセンスを作成することができます。このような特殊なライセンスをぺったんではオリジナルライセンスと言います。それに対して、ぺったんにあらかじめ用意されたライセンスをコモンライセンスと言います。\r
+</p><p>特に区別したい場合は、コモンライセンス・オリジナルライセンスと言いますが、ただライセンスと言った場合は、両者を合わせたものとなります。\r
+</p><h2 id="h2-.E3.82.B3.E3.83.A2.E3.83.B3.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">コモンライセンス</h2><p>コモンライセンスをメンテナンスできるのは管理者だけです。\r
+</p><h2 id="h2-.E3.82.AA.E3.83.AA.E3.82.B8.E3.83.8A.E3.83.AB.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">オリジナルライセンス</h2><p>絵師はオリジナルライセンスを作成できます。また、自分が作成したオリジナルライセンスを更新できます。\r
+</p><h3 id="h3-.E3.82.B3.E3.83.A2.E3.83.B3.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.B8.E3.81.AE.E6.98.87.E6.A0.BC">コモンライセンスへの昇格</h3><p>何かと信頼の薄いオリジナルライセンスですが、ある程度の評価が得られ、ぺったん管理者が有用性を認めればコモンライセンスへ昇格することもあります。\r
+</p><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.8C.E5.89.8A.E9.99.A4.E3.81.95.E3.82.8C.E3.82.8B.E3.81.A8">ライセンスが削除されると</h2><p>ライセンスを削除してしまうと、そのライセンスを適用した素材はすべてライセンスなしになってしまいます。それを避けるために一枚でも適用されているライセンスは削除できません。\r
+</p><h2 id="h2-.E3.82.AA.E3.83.AA.E3.82.B8.E3.83.8A.E3.83.AB.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.A7.E6.98.8E.E7.A4.BA.E3.81.A7.E3.81.8D.E3.82.8B.E3.81.93.E3.81.A8">オリジナルライセンスで明示できること</h2><ul><li>cc_by\r
+<ul><li>作者の表示\r
+</li></ul></li><li>cc_sa\r
+</li><li>cc_nd\r
+</li><li>cc_nc\r
+</li><li>no_resize\r
+<ul><li>サイズ変更の禁止\r
+</li><li>値が 0のとき無効 1のとき有効\r
+</li><li>素材をコマ上でリサイズしてはならない\r
+</li></ul></li><li>no_flip\r
+<ul><li>反転の禁止\r
+</li><li>値が 0のとき無効 1のとき有効\r
+</li><li>素材をコマ上で垂直反転水平反転してはならない\r
+</li></ul></li><li>keep_aspect_ratio\r
+<ul><li>縦横比変更の禁止\r
+</li><li>値が 0のとき無効 1のとき有効\r
+</li><li>素材をコマ上でリサイズしてもよいが縦横比を変えてはならない\r
+</li></ul></li></ul><p>クリエイティブコモンズの属性はすべて用意しましたが、ぺったん上ではあまり効果を発揮できません。というのも、ぺったんには画像を改変する機能が備わっていませんから、改変しようがないし、投稿された素材が改変されたものであるかを判別する手立てがないのです。非営利についても似たようなもので、web上の配布に営利はありません。もちろんアフィリエイトも禁止されているわけではありません。\r
+</p><p>作者の表示については必ず同一ページ内に表示します。ただし、ぺったんRはオープンソースライセンスですから、ソースコードが改変された場合は、その限りではありません。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">\r
+    <title>CommonLisencesController</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController</link>\r
+    <dc:identifier>CommonLisencesController</dc:identifier>\r
+    <dc:date>2011-12-24T11:03:09+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= CommonLisencesController \r
+管理者以外に用はないから、すべての機能で管理者だけが認証をパスする。\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-CommonLisencesController"><a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">CommonLisencesController</a></h1><p>管理者以外に用はないから、すべての機能で管理者だけが認証をパスする。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/LisencesController">\r
+    <title>LisencesController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/LisencesController</link>\r
+    <dc:identifier>LisencesController</dc:identifier>\r
+\r
+    <dc:date>2011-12-24T10:46:17+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= LisencesController \r
+コモンライセンスとオリジナルライセンスを統合するためだけにある。閲覧のみで操作はできない。変更作業はすべてCommonLisencesControllerとOriginalLisencesController側にある。\r
+\r
+常識で考えれば、こんな冗長な設計はないんだけど、絵師が作家機能を切り捨てた「絵師サーバ」を独自に稼働させる予定なので切り離してお]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-LisencesController"><a href="http://sourceforge.jp/projects/pettanr/wiki/LisencesController">LisencesController</a></h1><p>コモンライセンスとオリジナルライセンスを統合するためだけにある。閲覧のみで操作はできない。変更作業はすべてCommonLisencesControllerとOriginalLisencesController側にある。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">CommonLisencesController</a></p><p>常識で考えれば、こんな冗長な設計はないんだけど、絵師が作家機能を切り捨てた「絵師サーバ」を独自に稼働させる予定なので切り離しておいた。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers">\r
+    <title>RailsControllers</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/RailsControllers</link>\r
+    <dc:identifier>RailsControllers</dc:identifier>\r
+    <dc:date>2011-12-24T10:26:53+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= サーバ側の機能\r
+== コミック関係\r
+ * ComicsController\r
+ * PanelsController\r
+ * PanelPicturesController\r
+ * BalloonsController\r
+ * SpeachsController\r
+== 素材関係\r
+ * OriginalPicturesController\r
+ * ResourcePicturesCont]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B5.E3.83.BC.E3.83.90.E5.81.B4.E3.81.AE.E6.A9.9F.E8.83.BD">サーバ側の機能</h1><h2 id="h2-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E9.96.A2.E4.BF.82">コミック関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicsController">ComicsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelsController">PanelsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController">PanelPicturesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BalloonsController">BalloonsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachsController">SpeachsController</a>\r
+</li></ul><h2 id="h2-.E7.B4.A0.E6.9D.90.E9.96.A2.E4.BF.82">素材関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPicturesController">OriginalPicturesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePicturesController">ResourcePicturesController</a>\r
+</li></ul><h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E9.96.A2.E4.BF.82">フキダシテンプレート関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController">SpeachBalloonsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BallonTemplatesController">BallonTemplatesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachTemplatesController">SpeachTemplatesController</a>\r
+</li></ul><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E9.96.A2.E4.BF.82">ライセンス関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/LisencesController">LisencesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">CommonLisencesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalLisencesController">OriginalLisencesController</a>\r
+</li></ul><h2 id="h2-.E5.BD.B9.E5.89.B2.E9.96.A2.E4.BF.82">役割関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AuthorsController">AuthorsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ArtistsController">ArtistsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AdminsController">AdminsController</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan">\r
+    <title>WhatsPettan</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan</link>\r
+\r
+    <dc:identifier>WhatsPettan</dc:identifier>\r
+    <dc:date>2011-12-24T09:18:24+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ぺったんとは\r
+以下からは一般向け文書。ヘルプとかマニュアルです。\r
+== 絵師\r
+ * GuidanceForArtist\r
+== 作家\r
+ * GuidanceForAuthor\r
+== ライセンス\r
+ * AboutLisence\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93.E3.81.A8.E3.81.AF">ぺったんとは</h1><p>以下からは一般向け文書。ヘルプとかマニュアルです。\r
+</p><h2 id="h2-.E7.B5.B5.E5.B8.AB">絵師</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist">GuidanceForArtist</a>\r
+</li></ul><h2 id="h2-.E4.BD.9C.E5.AE.B6">作家</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor">GuidanceForAuthor</a>\r
+</li></ul><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">ライセンス</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutLisence">AboutLisence</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist">\r
+    <title>GuidanceForArtist</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist</link>\r
+    <dc:identifier>GuidanceForArtist</dc:identifier>\r
+    <dc:date>2011-12-23T17:08:22+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= 絵師さん向け文書?\r
+== 絵師の役割\r
+== 絵師になるには\r
+== 絵のライセンス\r
+\r
+== 絵の活用\r
+ぺったんは投稿された画像を次のように扱います\r
+ * 画像をサーバ内のディスクスペースに保存します\r
+   * この画像を原画と言います\r
+ * 原画を縮小・反転などの加工を施したものをサーバ内のディスクスペースに保存します\r
+   * これらの画像を素材と言います\r
+   * 原画]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E7.B5.B5.E5.B8.AB.E3.81.95.E3.82.93.E5.90.91.E3.81.91.E6.96.87.E6.9B.B8.EF.BC.9F">絵師さん向け文書?</h1><h2 id="h2-.E7.B5.B5.E5.B8.AB.E3.81.AE.E5.BD.B9.E5.89.B2">絵師の役割</h2><h2 id="h2-.E7.B5.B5.E5.B8.AB.E3.81.AB.E3.81.AA.E3.82.8B.E3.81.AB.E3.81.AF">絵師になるには</h2><h2 id="h2-.E7.B5.B5.E3.81.AE.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">絵のライセンス</h2><h2 id="h2-.E7.B5.B5.E3.81.AE.E6.B4.BB.E7.94.A8">絵の活用</h2><p>ぺったんは投稿された画像を次のように扱います\r
+</p><ul><li>画像をサーバ内のディスクスペースに保存します\r
+<ul><li>この画像を原画と言います\r
+</li></ul></li><li>原画を縮小・反転などの加工を施したものをサーバ内のディスクスペースに保存します\r
+<ul><li>これらの画像を素材と言います\r
+</li><li>原画が反転禁止のライセンスを採用しているときは反転画像を保存しません\r
+</li></ul></li><li>素材は作家がコマ上に添付されます\r
+<ul><li>利用するコマエディタの\r
+</li></ul></li></ul><p>コマ上での扱い\r
+</p><ul><li><ul><li>原画が拡縮禁止のライセンスを採用しているときは拡縮画像を保存しません\r
+<ul><li>ただし、サムネイル画像のサイズに収まらない画像については縮小して表示します\r
+</li></ul></li></ul></li></ul><p>素材→コマ絵\r
+</p><h2 id="h2-.E9.85.8D.E5.B8.83.E3.81.AE.E5.81.9C.E6.AD.A2">配布の停止</h2><h2 id="h2-.E7.B4.A0.E6.9D.90.E3.82.B5.E3.83.BC.E3.83.90">素材サーバ</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor">\r
+    <title>GuidanceForAuthor</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor</link>\r
+    <dc:identifier>GuidanceForAuthor</dc:identifier>\r
+    <dc:date>2011-12-23T16:48:50+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 作家さん向け文書?\r
+== 作家とは\r
+ぺったんサーバが提供する素材とフキダシを利用して漫画状のコマを作ることで表現する人を作家と言います。\r
+\r
+作家となるには、サイトへの登録が必要です。\r
+\r
+== 作家ができる表現\r
+ * コマを作る\r
+ * コミックを作る\r
+ * コミックの配布範囲を決める\r
+=== コマを作る\r
+=== コミックを作る\r
+=== コミックの配布範囲を決める\r
+\r
+=]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E4.BD.9C.E5.AE.B6.E3.81.95.E3.82.93.E5.90.91.E3.81.91.E6.96.87.E6.9B.B8.EF.BC.9F">作家さん向け文書?</h1><h2 id="h2-.E4.BD.9C.E5.AE.B6.E3.81.A8.E3.81.AF">作家とは</h2><p>ぺったんサーバが提供する素材とフキダシを利用して漫画状のコマを作ることで表現する人を作家と言います。\r
+</p><p>作家となるには、サイトへの登録が必要です。\r
+</p><h2 id="h2-.E4.BD.9C.E5.AE.B6.E3.81.8C.E3.81.A7.E3.81.8D.E3.82.8B.E8.A1.A8.E7.8F.BE">作家ができる表現</h2><ul><li>コマを作る\r
+</li><li>コミックを作る\r
+</li><li>コミックの配布範囲を決める\r
+</li></ul><h3 id="h3-.E3.82.B3.E3.83.9E.E3.82.92.E4.BD.9C.E3.82.8B">コマを作る</h3><h3 id="h3-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.82.92.E4.BD.9C.E3.82.8B">コミックを作る</h3><h3 id="h3-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.81.AE.E9.85.8D.E5.B8.83.E7.AF.84.E5.9B.B2.E3.82.92.E6.B1.BA.E3.82.81.E3.82.8B">コミックの配布範囲を決める</h3><h2 id="h2-.E7.B4.A0.E6.9D.90.E3.82.92.E7.94.A8.E6.84.8F.E3.81.99.E3.82.8B">素材を用意する</h2><h3 id="h3-.E7.B4.A0.E6.9D.90.E3.81.AE.E5.89.8D.E3.81.AB.E7.B5.B5.E5.B8.AB.E7.99.BB.E9.8C.B2">素材の前に絵師登録</h3><p>作家は素材を投稿することができません。素材は絵師が投稿することになっています。なぜなら、ぺったんはあなたの素材を容易に他のぺったんサイトに提供できるようになっているからです。少々面倒な構成にはなっていますが、心配には及びません。絵師の登録はワンクリック程度で完了します。\r
+</p><p>登録に必要な情報は下記の項目です。\r
+</p><ul><li>ペンネーム デフォルトで作家名が設定されます\r
+</li><li>デフォルトのライセンス\r
+</li></ul><h3 id="h3-.E7.B4.A0.E6.9D.90.E3.81.AE.E6.8A.95.E7.A8.BF">素材の投稿</h3><p>絵師登録が完了すると、素材エクスプローラーに投稿フォームが現れます。\r
+</p><p>素材を投稿するにあたっての注意事項はGuidanceForArtistをご覧下さい。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist">GuidanceForArtist</a></p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements">\r
+    <title>TranslationComicElements</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements</link>\r
+    <dc:identifier>TranslationComicElements</dc:identifier>\r
+\r
+    <dc:date>2011-12-23T11:41:06+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 資料・マンガ要素の日英対訳\r
+ * コーディング中の命名や、国際化対応のための資料にする.\r
+\r
+== マンガの部品名の対訳\r
+ * コママンガ(jp) - comic strip(en)\r
+ * コマ(jp) - panel(en)\r
+ * 枠線(jp) -(en)\r
+ * 吹き出し(jp) - speach balloon, speach bubble(en)\r
+ * ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E8.B3.87.E6.96.99.E3.83.BB.E3.83.9E.E3.83.B3.E3.82.AC.E8.A6.81.E7.B4.A0.E3.81.AE.E6.97.A5.E8.8B.B1.E5.AF.BE.E8.A8.B3">資料・マンガ要素の日英対訳</h1><ul><li>コーディング中の命名や、国際化対応のための資料にする.\r
+</li></ul><h2 id="h2-.E3.83.9E.E3.83.B3.E3.82.AC.E3.81.AE.E9.83.A8.E5.93.81.E5.90.8D.E3.81.AE.E5.AF.BE.E8.A8.B3">マンガの部品名の対訳</h2><ul><li>コママンガ(jp) - comic strip(en)\r
+</li><li>コマ(jp) - panel(en)\r
+</li><li>枠線(jp) -(en)\r
+</li><li>吹き出し(jp) - speach balloon, speach bubble(en)\r
+</li><li></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">\r
+    <title>PictureIo</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PictureIo</link>\r
+    <dc:identifier>PictureIo</dc:identifier>\r
+    <dc:date>2011-12-23T11:28:56+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= PictureIO\r
+== 画像はPictureIOが出し入れする\r
+投稿された素材はデータベースではなく、ファイルに保管される。保管先は大抵の場合ローカルマシンになるが、herokuのようにローカルファイルを触れないホストもあるので、ファイルの入出力は柔軟に切り替わるようにPictureIOとして分離した。\r
+\r
+差し当たってローカルファイル用のLocalPictureIOとAmazonAW]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-PictureIO">PictureIO</h1><h2 id="h2-.E7.94.BB.E5.83.8F.E3.81.AFPictureIO.E3.81.8C.E5.87.BA.E3.81.97.E5.85.A5.E3.82.8C.E3.81.99.E3.82.8B">画像はPictureIOが出し入れする</h2><p>投稿された素材はデータベースではなく、ファイルに保管される。保管先は大抵の場合ローカルマシンになるが、herokuのようにローカルファイルを触れないホストもあるので、ファイルの入出力は柔軟に切り替わるようにPictureIOとして分離した。\r
+</p><p>差し当たってローカルファイル用のLocalPictureIOとAmazonAWS用のS3Pict<a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>意した。\r
+</p><p>デフォルトでは、開発・テスト環境ではLocalPictureIOを使い、本番ではS3PictureIOを使っ<a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>環境に合わせて設定を変える必要がある。設定は下記のファイルを書き換える。\r
+<pre>config/environments/development.rb \r
+config/environments/production.rb\r
+</pre></p><h2 id="h2-LocalPictureIO"><a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>IO</h2><p><a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>IOを使う場合は、config/environments/development.rb で、以下のように書く。\r
+<pre>require 'local_picture'\r
+PictureIO.setup do |config|\r
+  config.original_picture_io = PictureIO::LocalPicture.new '/pettanr/original/'\r
+  config.resource_picture_io = PictureIO::LocalPicture.new  '/pettanr/resource/'\r
+end\r
+</pre></p><p>これで原画は/pettanr/original/に保管され、素材は/pettanr/resource/に保管される。\r
+</p><p>※パス処理がショボいのでスラッシュの有無に大きな違いがある。あと、ディレクトリ掘ってないとコケる。\r
+</p><h2 id="h2-S3PictureIO"><a href="http://sourceforge.jp/projects/pettanr/wiki/S3Picture">S3Picture</a>IO</h2><p>AmazonAWSを使うなら、当然S3が使えるよう、準備しておく。Amazonからキーがもらえるので設定する。\r
+</p><p>まず、config/aws.yaml.orgをコピーする。\r
+<pre>cp config/aws.yaml.org config/aws.yaml\r
+</pre>コピーしたaws.yamlを編集。\r
+<pre>access_key_id: XXXXXXXXXXXXXXXXXXXX\r
+secret_access_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r
+</pre></p><p><a href="http://sourceforge.jp/projects/pettanr/wiki/S3Picture">S3Picture</a>IOを使う場合は、config/environments/production.rbで、以下のように書く。\r
+<pre>require 'aws/s3'\r
+require 'yaml'\r
+\r
+y = YAML.load(open(Rails.root + 'config/aws.yaml').read)\r
+AWS::S3::Base.establish_connection!(\r
+  :access_key_id =&gt; y[&quot;access_key_id&quot;], \r
+  :secret_access_key =&gt; y[&quot;secret_access_key&quot;]\r
+)\r
+require 's3_picture'\r
+PictureIO.setup do |config|\r
+  config.original_picture_io = PictureIO::S3Picture.new 'pettanr-original'\r
+  config.resource_picture_io = PictureIO::S3Picture.new 'pettanr-stable'\r
+end\r
+</pre>これで原画はpettanr-original/に保管され、素材はpettanr-stable/に保管される。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick">\r
+    <title>RmagickAndDmagick</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick</link>\r
+\r
+    <dc:identifier>RmagickAndDmagick</dc:identifier>\r
+    <dc:date>2011-12-23T10:53:11+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= RMagickとDMagick\r
+== 画像処理はRMagick\r
+絵師から預かった素材はRMagickで処理される。主にサムネイル画像の生成などで。\r
+\r
+== RMagickは案外地獄\r
+Windows環境では。\r
+\r
+コンパイラを持たずバイナリインストールしていると、大抵RMagickのインストールでコケる。\r
+\r
+= 仕方ないからDMagick\r
+RMagickなしでは丸で動かないので]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-RMagick.E3.81.A8DMagick">RMagickとDMagick</h1><h2 id="h2-.E7.94.BB.E5.83.8F.E5.87.A6.E7.90.86.E3.81.AFRMagick">画像処理はRMagick</h2><p>絵師から預かった素材はRMagickで処理される。主にサムネイル画像の生成などで。\r
+</p><h2 id="h2-RMagick.E3.81.AF.E6.A1.88.E5.A4.96.E5.9C.B0.E7.8D.84">RMagickは案外地獄</h2><p>Windows環境では。\r
+</p><p>コンパイラを持たずバイナリインストールしていると、大抵RMagickのインストールでコケる。\r
+</p><h1 id="h1-.E4.BB.95.E6.96.B9.E3.81.AA.E3.81.84.E3.81.8B.E3.82.89DMagick">仕方ないからDMagick</h1><p>RMagickなしでは丸で動かないので、あたかもRMagickがあるかのように振る舞う空箱を用意した。それがDMagick。\r
+</p><p>デフォルトでは開発環境でDMagickを使うようにしてあるので、RMagickが使えるなら、config/environments/development.rbを書き換える。\r
+</p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/InstallRubyAndRails">\r
+    <title>InstallRubyAndRails</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/InstallRubyAndRails</link>\r
+    <dc:identifier>InstallRubyAndRails</dc:identifier>\r
+    <dc:date>2011-12-22T18:14:49+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= 環境構築\r
+== Ruby\r
+ruby1.9系が入っていることを確認\r
+&gt; ruby -v[[BR]]\r
+&gt; ruby 1.9.2p290 (2011-07-09) [i386-mingw32]\r
+\r
+== gem\r
+&gt; gem install bundler\r
+\r
+== source code\r
+&gt; git clone git://git.sourceforge.jp]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E7.92.B0.E5.A2.83.E6.A7.8B.E7.AF.89">環境構築</h1><h2 id="h2-Ruby">Ruby</h2><p>ruby1.9系が入っていることを確認\r
+</p><blockquote class="citation"><p>ruby -v<br />\r
+ruby 1.9.2p290 (2011-07-09) <a href="http://sourceforge.jp/projects/pettanr/wiki/i386-mingw32">i386-mingw32</a>\r
+</p></blockquote><h2 id="h2-gem">gem</h2><blockquote class="citation"><p>gem install bundler\r
+</p></blockquote><h2 id="h2-source.20code">source code</h2><blockquote class="citation"><p>git clone git://git.sourceforge.jp/gitroot/pettanr/pettanr.git peta\r
+cd peta\r
+</p></blockquote><h2 id="h2-gem.20library.20install">gem library install</h2><blockquote class="citation"><p>bundle install --without production\r
+</p></blockquote><h2 id="h2-init.20database">init database</h2><blockquote class="citation"><p>rake db:migrate\r
+</p></blockquote><h2 id="h2-create.20admin.20account">create admin account</h2><blockquote class="citation"><p>rails r &quot;Admin.start('admin@mail.adr.ess', 'admin_password')&quot;\r
+</p></blockquote><h2 id="h2-configure.20file.20io">configure file io</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+    </rdf:RDF>\r
diff --git a/0.4.x/wiki/wiki.xsl b/0.4.x/wiki/wiki.xsl
new file mode 100644 (file)
index 0000000..8d60b9f
--- /dev/null
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<xsl:stylesheet version="1.0"\r
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
+  xmlns="http://www.w3.org/1999/xhtml"\r
+  xmlns:rss="http://purl.org/rss/1.0/"\r
+  xmlns:dc="http://purl.org/dc/elements/1.1/"\r
+  xmlns:content="http://purl.org/rss/1.0/modules/content/"\r
+  exclude-result-prefixes="rdf rss dc content"\r
+>\r
+    <xsl:output \r
+        omit-xml-declaration="no" \r
+        encoding="utf-8" \r
+        method="html" \r
+        version="1.0" \r
+        doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" \r
+        doctype-system="http://www.w3.org/TR/html4/loose.dtd" \r
+        indent="yes" />\r
+        \r
+<xsl:template match="rdf:RDF">\r
+  <html xml:lang="ja" lang="ja">\r
+  <head>\r
+                       <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\r
+                       <meta http-equiv="Content-Style-Type" content="text/css" />\r
+                       <meta http-equiv="imagetoolbar" content="no" />\r
+                       <meta name="description">\r
+                               <xsl:attribute name="content">\r
+                                       <xsl:value-of select="rss:channel/rss:description" />\r
+                               </xsl:attribute>\r
+                       </meta>\r
+                       <title><xsl:value-of select="rss:channel/rss:title"/></title>\r
+                       \r
+                       <link rel="stylesheet" href="../common.css" type="text/css" />\r
+                       <link rel="stylesheet" href="wiki.css" type="text/css" />\r
+  </head>\r
+  <body>\r
+                       <div id="general-content">\r
+                               <div id="outer-wrapper">\r
+                                       \r
+                                       <div id="header">\r
+                                               <div class="base-content-width" style="position:relative;">\r
+                                                       <h1><a href="../index.html"><xsl:value-of select="rss:channel/rss:title"/></a></h1>\r
+                                                       <div id="global-navi">\r
+                                                               <noscript id="noscript-alert">You need to have JavaScript enabled.</noscript>\r
+                                                       </div>\r
+                                               </div>\r
+                                       </div>\r
+                                       \r
+                                       <div id="inner-wrapper" class="base-content-width">                                             \r
+                                               <div id="wiki-container" class="clearfix">\r
+                                                       <div id="page-navi-container">\r
+                                                               <div id="page-total">\r
+                                                                       <xsl:value-of select="count(rss:item)"/> pages\r
+                                                               </div>\r
+                                                               <xsl:for-each select="./rss:item">\r
+                                                                       <xsl:variable name="index" select="position()"/>\r
+                                                                       <xsl:variable name="top" select="25*$index"/>\r
+                                                                       <div class="page-navi">\r
+                                                                               <xsl:attribute name="style">\r
+                                                                                       <xsl:value-of select="concat('top:',$top,'px;')"/>\r
+                                                                               </xsl:attribute>\r
+                                                                               <a>\r
+                                                                                       <xsl:attribute name="href">\r
+                                                                                               <xsl:value-of select="concat('#page',$index)"/>\r
+                                                                                       </xsl:attribute>        \r
+                                                                                       <xsl:value-of select="rss:title"/>\r
+                                                                               </a>\r
+                                                                       </div>                                                                          \r
+                                                               </xsl:for-each>\r
+                                                       </div>\r
+                                                       <div id="page-body-container">\r
+                                                               <xsl:for-each select="./rss:item">\r
+                                                                       <div class="page-wrapper">\r
+                                                                               <xsl:variable name="index" select="position()"/>\r
+                                                                               <xsl:variable name="top" select="25*$index"/>\r
+                                                                               <xsl:attribute name="id">\r
+                                                                                       <xsl:value-of select="concat('page',$index)"/>\r
+                                                                               </xsl:attribute>\r
+\r
+                                                                               <div class="page-header clearfix">\r
+                                                                                       <span class="page-title"><xsl:value-of select="rss:title"/></span>\r
+                                                                                       <span class="page-date"><xsl:value-of select="substring(dc:date, 1, 10)" /></span>\r
+                                                                               </div>\r
+                                                                               \r
+                                                                               <div class="page-body clearfix">\r
+                                                                                       <xsl:value-of select="content:encoded" disable-output-escaping="yes"/>\r
+                                                                               </div>\r
+                                                                               <a class="jump-to-top">\r
+                                            <xsl:attribute name="href">\r
+                                                <xsl:value-of select="concat('#page',$index)"/>\r
+                                            </xsl:attribute>\r
+                                            top\r
+                                                                               </a>\r
+                                                                       </div>\r
+                                                               </xsl:for-each>\r
+                                                       </div>\r
+                                               </div>\r
+                                       </div>\r
+                                       \r
+                               </div>\r
+                       </div>\r
+\r
+       \r
+                       <div id="footer-content">\r
+                               <div id="footer">\r
+                                       <div id="footer-item-container" class="base-content-width clearfix">\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>ぺったんR にようこそ</h2>\r
+                                                               <ul>\r
+                                                                       <li>サンプル</li>\r
+                                                                       <li>ぺったんRの特徴</li>\r
+                                                                       <li>沿革</li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>ドキュメント</h2>\r
+                                                               <ul>\r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors" rel="me" target="_blank">作家向けドキュメント</a></li>\r
+                                    <li>絵師向けドキュメント</li>                         \r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers" rel="me" target="_blank">開発者向けドキュメント</a></li>\r
+                                    <li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters" rel="me" target="_blank">編集長向けドキュメント</a></li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper">\r
+                                                       <div class="footer-item">\r
+                                                               <h2>プロトタイプ</h2>\r
+                                                               <ul>\r
+                                                                       <li><a href="http://pettanr.heroku.com/" rel="me" target="_blank">pettanr.heroku.com</a></li>\r
+                                                                       <li><a href="../work.html" rel="console">ユーザーコンソール</a></li>\r
+                                                               </ul>\r
+                                                               <h2>Ajax contents</h2>\r
+                                                               <ul>\r
+                                                                       <li><a href="jp.xml">help | jp</a></li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                               <div class="footer-item-wrapper" style="width:170px;">\r
+                                                       <div class="footer-item" style="padding-right:0;">\r
+                                                               <h2>ぺったんRチーム</h2>\r
+                                                               <ul>\r
+                                                                       <li>わたしたちについて</li>\r
+                                                                       <li>ミッション</li>\r
+                                                                       <li><a href="../diary/itozyun.xml">itozyun's diary</a></li>\r
+                                                                       <li>個人情報保護方針</li>\r
+                                                                       <li>作品の取り扱い</li>\r
+                                                                       <li>お問い合わせ</li>\r
+                                                               </ul>\r
+                                                       </div>\r
+                                               </div>\r
+                                       </div>\r
+                                       <div id="copyright">\r
+                                               Copyright (c) 2011-2012 pettanR team, some rights reserved.\r
+                                       </div>\r
+                               </div>\r
+                       </div>\r
+                       \r
+    <script type="text/javascript" src="wiki.js"></script>\r
+    <script type="text/javascript" src="../common.js"></script>\r
+  </body>\r
+  </html>\r
+</xsl:template>\r
+\r
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/0.4.x/wiki/wiki_120117.xml b/0.4.x/wiki/wiki_120117.xml
new file mode 100644 (file)
index 0000000..feafd6a
--- /dev/null
@@ -0,0 +1,2641 @@
+<?xml version="1.0" encoding="utf-8" ?>\r
+<?xml-stylesheet type="text/xsl" href="wiki.xsl"?>\r
+\r
+<rdf:RDF\r
+  xmlns="http://purl.org/rss/1.0/"\r
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
+  xmlns:content="http://purl.org/rss/1.0/modules/content/"\r
+  xmlns:dc="http://purl.org/dc/elements/1.1/"\r
+ >\r
+<?xml-stylesheet type="text/xsl" href="wiki.xsl"?>\r
+\r
+  <channel rdf:about="http://sourceforge.jp/projects/pettanr/wiki/!feeds/list">\r
+    <title>ぺったんR Wiki</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/!feeds/list</link>\r
+    <description>\r
+      ぺったんR プロジェクト Wiki ページ一覧    </description>\r
+        <dc:date>2012-01-17T19:40:41+09:00</dc:date>\r
+\r
+        <items>\r
+      <rdf:Seq>\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ComicsController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PanelsController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PanelModel" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ComicModel" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/StatusCode" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/FrontPage" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/XmlHttpRequest" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/SystemController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AuthorRegistrationsController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/YasushiIto" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ApiIndex" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ItoZyun" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/HowToInstall" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutModels" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AppendixList" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/BundledPictures" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/LocalWiki" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ClientSide" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PngFix" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/JsonApi" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutLisence" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/LisencesController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PictureIo" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick" />\r
+              </rdf:Seq>\r
+    </items>\r
+  </channel>\r
+\r
+      <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ComicsController">\r
+    <title>ComicsController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ComicsController</link>\r
+    <dc:identifier>ComicsController</dc:identifier>\r
+    <dc:date>2012-01-17T19:40:41+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コミック\r
+ストーリー性を持ったコマの集合体に名前をつけるためのデータ。表紙のようなもの。\r
+\r
+== top\r
+総合トップページ。\r
+=== url\r
+ * http://localhost:3000/\r
+=== リクエスト\r
+||パラメータ||なし||\r
+||権限||作家||\r
+||html||○||\r
+||json||&times;||\r
+||jsonp||&times;||\r
+||me]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF">コミック</h1><p>ストーリー性を持ったコマの集合体に名前をつけるためのデータ。表紙のようなもの。\r
+</p><h2 id="h2-top">top</h2><p>総合トップページ。\r
+</p><h3 id="h3-url">url</h3><ul><li><a href="http://localhost:3000/" class="external" rel="nofollow">http://localhost:3000/</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>×</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC">解説</h3><p>ぺったんRのロゴがクリックされたときに開くページ。コミュニティ関連の入り口となる。コミックとは関係ないが、他に行き場がない。\r
+</p><p>各コンテンツの最新情報が表示される。雑多な情報を扱うのでjsonには対応しない。\r
+</p><hr /><h2 id="h2-index">index</h2><p>一覧形式\r
+</p><h3 id="h3-url-2">url</h3><ul><li><a href="http://localhost:3000/comics" class="external" rel="nofollow">http://localhost:3000/comics</a>\r
+</li><li><a href="http://localhost:3000/comics.json" class="external" rel="nofollow">http://localhost:3000/comics.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-2">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-2">解説</h3><p>新着コミック20件を一覧形式で表示する。ただし、作者によって非公開にされたコミックは含まない。\r
+</p><ul><li>comicのvisible=1な行をposted_at降順で20件分取得する。\r
+</li><li>取得したデータを返す。\r
+<ul><li>htmlなら整形してページを返す。\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB">正常系</h4><ul><li>comic\r
+<ul><li>author\r
+</li></ul></li></ul><p>jsonでは、comicにauthorを含んだデータを返す。\r
+</p><hr /><h2 id="h2-show">show</h2><p>単票形式\r
+</p><h3 id="h3-url-3">url</h3><ul><li><a href="http://localhost:3000/comics/1.json" class="external" rel="nofollow">http://localhost:3000/comics/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-3">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>×</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-3">解説</h3><p>クライアントがコミックの情報を得るために使う機能。\r
+ユーザがコミック情報だけをみても、うれしいことはないので、jsonのみとなる。\r
+</p><ul><li>要求されたidのcomicを取得する。\r
+</li><li>取得したデータを返す。\r
+<ul><li>json形式で返す。\r
+</li></ul></li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-2">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-2">正常系</h4><ul><li>comic\r
+<ul><li>author\r
+</li></ul></li></ul><p>jsonでは、comicにauthorを含んだデータを返す。\r
+</p><hr /><h2 id="h2-play">play</h2><p>コミック閲覧。コミックを読むための機能。\r
+</p><h3 id="h3-url-4">url</h3><ul><li><a href="http://localhost:3000/comics/play/1" class="external" rel="nofollow">http://localhost:3000/comics/play/1</a>\r
+</li><li><a href="http://localhost:3000/comics/play/1.json" class="external" rel="nofollow">http://localhost:3000/comics/play/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-4">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id,offset,count</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF">パラメータ</h3><h4 id="h4-offset">offset</h4><ul><li>指定した数のコマだけ飛ばして表示を始める。\r
+<ul><li>offset=3のときはコミック開始から数えて4コマ目から表示される。\r
+</li></ul></li><li>省略時は0。\r
+</li><li>投稿されたコマ数以上の値が指定されたときは、最後のコマだけが表示される。\r
+</li><li>負の値が指定されたときは、最後のコマから数えてコマを飛ばして表示する。\r
+<ul><li>-4のときは、最後から4つのコマを表示する。\r
+</li></ul></li></ul><h4 id="h4-count">count</h4><ul><li>指定した数だけコマを表示する。\r
+</li><li>省略時は30。\r
+</li><li>最大値は200で、それ以上多い値が指定されたときは、最大値に切り詰められる。\r
+</li><li>負の値が指定されたときは、デフォルト値となる。\r
+</li></ul><h3 id="h3-.E8.A7.A3.E8.AA.AC-4">解説</h3><p>コミックにつながっているコマを指定されたオフセット位置からコマ数だけ時系列t順に表示する。コマ上の部品はまとめて取得する。\r
+</p><ul><li>要求されたidのcomicと関連データを取得する。\r
+</li><li>取得したデータを返す。\r
+<ul><li>htmlなら整形してページを返す。\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><h3 id="h3-.E3.82.B3.E3.83.9E.E3.81.AE.E6.95.B4.E5.BD.A2">コマの整形</h3><p>コマ上の部品であるコマ絵とフキダシは時系列tでソートして返さなければならない。表示的にはすべてが時間で上から下に流れるのがぺったんRの仕様である。しかし、sqlでは二つのテーブルを混ぜてソートはできないので時系列順に配置しなおして(配列のキーをtにして)戻さなければならない。balloons配下のspeachesも同様にtでソートしておく。\r
+<pre>panels:{\r
+  1: balloons: {...},\r
+  2: panel_pictures: {...},\r
+  3: balloons: {speaches: {1: {...}, 2:{...}}},\r
+  4: panel_pictures: {...},\r
+}\r
+</pre></p><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-3">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-3">正常系</h4><ul><li>comic\r
+<ul><li>author\r
+</li><li>panels\r
+<ul><li>panel_pictures\r
+<ul><li>resource_picture\r
+<ul><li>artist\r
+</li><li>lisence\r
+</li></ul></li></ul></li><li>balloons\r
+<ul><li>speaches\r
+</li></ul></li></ul></li></ul></li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>指定されたidが非公開だった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-new">new</h2><p>新規\r
+</p><h3 id="h3-url-5">url</h3><ul><li><a href="http://localhost:3000/comics/new" class="external" rel="nofollow">http://localhost:3000/comics/new</a>\r
+</li><li><a href="http://localhost:3000/comics/new.json" class="external" rel="nofollow">http://localhost:3000/comics/new.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-5">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>post</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-5">解説</h3><p>コミック情報を作成するための入力フォームをまっさらなページで表示する。\r
+</p><p>フォームの表示のみなので、これといった処理はない。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-4">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-4">正常系</h4><ul><li>入力フォームを返す。\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-2">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li></ul><hr /><h2 id="h2-create">create</h2><p>作成\r
+</p><h3 id="h3-url-6">url</h3><ul><li><a href="http://localhost:3000/comics" class="external" rel="nofollow">http://localhost:3000/comics</a>\r
+</li><li><a href="http://localhost:3000/comics.json" class="external" rel="nofollow">http://localhost:3000/comics.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-6">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>json形式で</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>post</td></tr></tbody></table><h3 id="h3-.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF-2">パラメータ</h3><h4 id="h4-comic">comic</h4><ul><li>コミックの情報。<a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>を参照。\r
+</li><li>title\r
+</li><li>width\r
+</li><li>height\r
+</li><li>visible\r
+</li><li>editable\r
+</li></ul><h4 id="h4-auth_token">auth_token</h4><ul><li>jsonで要求する場合、認証処置として認証トークンが必要。\r
+</li></ul><h3 id="h3-.E8.A7.A3.E8.AA.AC-6">解説</h3><p>コミックを新規作成するための機能。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>パラメータからcomicデータを起こす。\r
+</li><li>起こしたデータの足りない部分を補正する。\r
+<ul><li>comic.author_idをログイン中の作家idで補足する。\r
+</li></ul></li><li>comicデータを検証し、dbに保存する。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC">検証</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>の検証を行う。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-5">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-5">正常系</h4><ul><li>作成されたコミックデータを返す。\r
+<ul><li>htmlなら、作成されたコミックの閲覧ページに遷移する。 ex)/comics/1\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><p>json時のデータ階層\r
+</p><ul><li>comic\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-3">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>検証、保存に失敗した\r
+<ul><li>htmlなら、新規ページを描画する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは422 unprocessable_entity\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-edit">edit</h2><p>編集\r
+</p><h3 id="h3-url-7">url</h3><ul><li><a href="http://localhost:3000/comics/edit" class="external" rel="nofollow">http://localhost:3000/comics/edit</a>\r
+</li><li><a href="http://localhost:3000/comics/edit.json" class="external" rel="nofollow">http://localhost:3000/comics/edit.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-7">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>post</td></tr></tbody></table><h3 id="h3-.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF-3">パラメータ</h3><h4 id="h4-auth_token-2">auth_token</h4><ul><li>jsonで要求する場合、認証処置として認証トークンが必要。\r
+</li></ul><h3 id="h3-.E8.A7.A3.E8.AA.AC-7">解説</h3><p>コミック情報を更新するための入力フォームを指定されたidのデータを埋めたページで表示する。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>指定されたidのコミックを取得する。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-6">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-6">正常系</h4><ul><li>入力フォームを返す。\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-4">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>指定されたidが存在しなかった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-update">update</h2><p>更新\r
+</p><h3 id="h3-url-8">url</h3><ul><li><a href="http://localhost:3000/comics/1" class="external" rel="nofollow">http://localhost:3000/comics/1</a>\r
+</li><li><a href="http://localhost:3000/comics/1.json" class="external" rel="nofollow">http://localhost:3000/comics/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-8">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id+jsonまたはフォーム</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>put</td></tr></tbody></table><h3 id="h3-.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF-4">パラメータ</h3><h4 id="h4-comic-2">comic</h4><ul><li>コミックの情報。<a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>を参照。\r
+</li><li>title\r
+</li><li>width\r
+</li><li>height\r
+</li><li>visible\r
+</li><li>editable\r
+</li></ul><h4 id="h4-auth_token-3">auth_token</h4><ul><li>jsonで要求する場合、認証処置として認証トークンが必要。\r
+</li></ul><h3 id="h3-.E8.A7.A3.E8.AA.AC-8">解説</h3><p>コミックデータを修正するための機能。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>指定されたidのコミックを取得する。\r
+</li><li>与えられたパラメータでコミックを更新する。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC-2">検証</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>の検証を行う。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-7">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-7">正常系</h4><ul><li>更新されたコミックデータを返す。\r
+<ul><li>htmlなら、更新されたコミックの閲覧ページに遷移する。 ex)/comics/1\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><p>json時のデータ階層\r
+</p><ul><li>comic\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-5">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>他人のコミックだった。\r
+<ul><li>htmlなら、コミック閲覧ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは403 :forbidden\r
+</li></ul></li></ul></li><li>指定されたidが存在しなかった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li><li>検証、保存に失敗した\r
+<ul><li>htmlなら、編集ページを描画する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは422 unprocessable_entity\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-destroy">destroy</h2><p>削除\r
+</p><h3 id="h3-url-9">url</h3><ul><li><a href="http://localhost:3000/comics/1" class="external" rel="nofollow">http://localhost:3000/comics/1</a>\r
+</li><li><a href="http://localhost:3000/comics/1.json" class="external" rel="nofollow">http://localhost:3000/comics/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-9">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>delete</td></tr></tbody></table><h3 id="h3-.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF-5">パラメータ</h3><h4 id="h4-auth_token-4">auth_token</h4><ul><li>jsonで要求する場合、認証処置として認証トークンが必要。\r
+</li></ul><h3 id="h3-.E8.A7.A3.E8.AA.AC-9">解説</h3><p>指定されたidのコミックを削除する。コミックだけでなく、関連するコマ、コマ絵、フキダシ、セリフも同時に削除される。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>指定されたidのコミックを取得する。\r
+</li><li>そのコミックを削除する。同時に関連するコマ、コマ絵、フキダシ、セリフも削除する。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC-3">検証</h3><ul><li>なし\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-8">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-8">正常系</h4><ul><li>値は返さない。\r
+<ul><li>htmlなら、コミック一覧ページに遷移する。\r
+</li><li>jsonならステータスコード200 :okを返す。\r
+</li></ul></li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-6">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+</li></ul></li><li>他人のコミックだった。\r
+<ul><li>htmlなら、コミック閲覧ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは403 :forbidden\r
+</li></ul></li></ul></li><li>指定されたidが存在しなかった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-list">list</h2><p>管理者のための閲覧リスト。\r
+</p><hr /><h2 id="h2-browse">browse</h2><p>管理者のための詳細閲覧。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PanelsController">\r
+    <title>PanelsController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PanelsController</link>\r
+\r
+    <dc:identifier>PanelsController</dc:identifier>\r
+    <dc:date>2012-01-17T18:13:06+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コマ\r
+ストーリー上のワンシーンを漫画状に表示するための機能。\r
+== index\r
+一覧形式\r
+=== url\r
+ * http://localhost:3000/panels\r
+ * http://localhost:3000/panels.json\r
+=== リクエスト\r
+||パラメータ||なし||\r
+||権限||作家||\r
+||html||○||\r
+||json||○||\r
+||jso]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9E">コマ</h1><p>ストーリー上のワンシーンを漫画状に表示するための機能。\r
+</p><h2 id="h2-index">index</h2><p>一覧形式\r
+</p><h3 id="h3-url">url</h3><ul><li><a href="http://localhost:3000/panels" class="external" rel="nofollow">http://localhost:3000/panels</a>\r
+</li><li><a href="http://localhost:3000/panels.json" class="external" rel="nofollow">http://localhost:3000/panels.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC">解説</h3><p>新着コマ20件を一覧形式で表示する。ただし、作者によって非公開にされたコミックのコマは含まない。\r
+</p><p>新着コマの情報はトップページに表示されるが、量が少ないため「もっと見る」が用意されている。それがクリックされたときに遷るページがここ。\r
+</p><ul><li>comicのvisible=1な行をpanels.updated_at降順で20件分取得する。\r
+</li><li>取得したデータを返す。\r
+<ul><li>htmlなら整形してページを返す。\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><h3 id="h3-.E5.95.8F.E9.A1.8C.E7.82.B9">問題点</h3><p>コマはサイズがバラバラなので、リストアップには向いていない。コマそのものを表示するわけにはいかないので、事実上使いどころのない機能と思われる。改善案を待つ。\r
+</p><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB">正常系</h4><ul><li>panels\r
+<ul><li>comic\r
+</li><li>author\r
+</li></ul></li></ul><hr /><h2 id="h2-show">show</h2><p>コマ表示。ぺったんの超本丸。\r
+</p><h3 id="h3-url-2">url</h3><ul><li><a href="http://localhost:3000/panels/1" class="external" rel="nofollow">http://localhost:3000/panels/1</a>\r
+</li><li><a href="http://localhost:3000/panels/1.json" class="external" rel="nofollow">http://localhost:3000/panels/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-2">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-2">解説</h3><p>コマを表示する、あるいはコマを表示するためのデータを返す機能。\r
+</p><ul><li>要求されたidのpanelを取得する。\r
+</li><li>取得したデータを返す。\r
+<ul><li>htmlなら整形してページを返す。\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><h3 id="h3-.E3.82.B3.E3.83.9E.E3.81.AE.E6.95.B4.E5.BD.A2">コマの整形</h3><p>コマ絵とフキダシは時系列tでソートして返さなければならない。表示的にはすべてが時間で上から下に流れるのがぺったんRの仕様である。しかし、sqlでは二つのテーブルを混ぜてソートはできないので時系列順に配置しなおして(配列のキーをtにして)戻さなければならない。balloons配下のspeachesも同様にtでソートしておく。\r
+<pre>panels:{\r
+  1: balloons: {...},\r
+  2: panel_pictures: {...},\r
+  3: balloons: {speaches: {1: {...}, 2:{...}}},\r
+  4: panel_pictures: {...},\r
+}\r
+</pre></p><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-2">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-2">正常系</h4><ul><li>panels\r
+<ul><li>panel_pictures\r
+<ul><li>resource_picture\r
+<ul><li>artist\r
+</li><li>lisence\r
+</li></ul></li></ul></li><li>balloons\r
+<ul><li>speaches\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-create">create</h2><p>作成\r
+</p><h3 id="h3-url-3">url</h3><ul><li><a href="http://localhost:3000/panels" class="external" rel="nofollow">http://localhost:3000/panels</a>\r
+</li><li><a href="http://localhost:3000/panels.json" class="external" rel="nofollow">http://localhost:3000/panels.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-3">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>json形式で</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>post</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-3">解説</h3><p>コマを新規作成するための機能。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>パラメータからpanelデータを起こす。\r
+</li><li>起こしたデータの足りない部分を補正する。\r
+<ul><li>comic.author_idをログイン中の作家idで補足する。\r
+</li></ul></li><li>panelデータを検証し、dbに一つのトランザクションで保存する。\r
+<ul><li>コマの移動チェック。\r
+<ul><li>コマ順panel.tが変更されていればコマ移動。\r
+</li><li>パラメータにpanel.tが設定されていて、起こしたpanel.tと違うことをいう。\r
+</li><li>コマ移動処理は<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelModel">PanelModel</a>を参照する。\r
+</li></ul></li><li>\r
+</li></ul></li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC">検証</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelModel">PanelModel</a>の検証を行う。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-3">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-3">正常系</h4><ul><li>作成されたパネルデータを返す。\r
+<ul><li>htmlなら、作成されたパネルが所属するコミックの閲覧ページに遷移する。\r
+<ul><li>最新のコマ10件を指定する。\r
+</li></ul></li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><p>json時のデータ階層\r
+</p><ul><li>comic\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>検証、保存に失敗した\r
+<ul><li>htmlなら、コミック閲覧ページを描画する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは422 unprocessable_entity\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-destroy">destroy</h2><p>削除\r
+</p><h3 id="h3-url-4">url</h3><ul><li><a href="http://localhost:3000/panels/1" class="external" rel="nofollow">http://localhost:3000/panels/1</a>\r
+</li><li><a href="http://localhost:3000/panels/1.json" class="external" rel="nofollow">http://localhost:3000/panels/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-4">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>delete</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-4">解説</h3><p>指定されたidのコマを削除する。コマだけでなく、関連するコマ絵、フキダシ、セリフも同時に削除される。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>指定されたidのコマを取得する。\r
+</li><li>そのコマを一つのトランザクションで削除する。\r
+<ul><li>同時に関連するコマ絵、フキダシ、セリフも削除する。\r
+</li><li>後ろのコマを前に詰める。\r
+<ul><li>tが後ろの行すべてをt-1する。\r
+</li></ul></li></ul></li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC-2">検証</h3><ul><li>なし\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-4">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-4">正常系</h4><ul><li>値は返さない。\r
+<ul><li>htmlなら、コマが所属するコミックの閲覧ページに遷移する。\r
+</li><li>jsonならステータスコード200 :okを返す。\r
+</li></ul></li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-2">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+</li></ul></li><li>他人のコミックだった。\r
+<ul><li>htmlなら、コマ閲覧ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは403 :forbidden\r
+</li></ul></li></ul></li><li>指定されたidが存在しなかった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-list">list</h2><p>管理者のための閲覧リスト。\r
+</p><hr /><h2 id="h2-browse">browse</h2><p>管理者のための詳細閲覧。\r
+↓参考コピペ\r
+</p><hr /><h2 id="h2-update">update</h2><p>更新\r
+</p><h3 id="h3-url-5">url</h3><p><a href="http://localhost:3000/comics/1" class="external" rel="nofollow">http://localhost:3000/comics/1</a>\r
+<a href="http://localhost:3000/comics/1.json" class="external" rel="nofollow">http://localhost:3000/comics/1.json</a>\r
+</p><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-5">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id+json形式で</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>put</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-5">解説</h3><p>コミックデータを修正するための機能。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>指定されたidのコミックを取得する。\r
+</li><li>与えられたパラメータでコミックを更新する。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC-3">検証</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>の検証を行う。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-5">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-5">正常系</h4><ul><li>更新されたコミックデータを返す。\r
+<ul><li>htmlなら、更新されたコミックの閲覧ページに遷移する。 ex)/comics/1\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><p>json時のデータ階層\r
+</p><ul><li>comic\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-3">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>他人のコミックだった。\r
+<ul><li>htmlなら、コミック閲覧ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは403 :forbidden\r
+</li></ul></li></ul></li><li>指定されたidが存在しなかった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li><li>検証、保存に失敗した\r
+<ul><li>htmlなら、編集ページを描画する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは422 unprocessable_entity\r
+</li></ul></li></ul></li></ul>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PanelModel">\r
+    <title>PanelModel</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PanelModel</link>\r
+    <dc:identifier>PanelModel</dc:identifier>\r
+    <dc:date>2012-01-17T08:04:02+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= コマ panel\r
+||name||和名||type||default||null||limit||note||\r
+||comic_id||所属コミック||integer|| ||FALSE|| ||||\r
+||resource_picture_id||背景画像 素材id||integer|| || || ||||\r
+||width||コマの幅||integer||200||FALSE|| |]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9E.20panel">コマ panel</h1><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>comic_id</td><td>所属コミック</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>resource_picture_id</td><td>背景画像 素材id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>width</td><td>コマの幅</td><td>integer</td><td>200</td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマの高さ</td><td>integer</td><td>80</td><td>FALSE</td><td> </td><td></td></tr><tr><td>border</td><td>コマの枠線の太さ</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>y</td><td>表示位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>z</td><td>表示優先順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>t</td><td>コマ番号</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>author_id</td><td>コマの投稿者 作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><h2 id="h2-.E6.A4.9C.E8.A8.BC">検証</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">\r
+    <title>ComicModel</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ComicModel</link>\r
+    <dc:identifier>ComicModel</dc:identifier>\r
+    <dc:date>2012-01-17T07:57:27+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コミック comic\r
+||name||和名||type||default||null||limit||note||\r
+||title||作品名||string||100|| || ||||\r
+||width||コマの幅デフォルト値||integer||200||FALSE|| ||||\r
+||height||コマの高さデフォルト値||integer||80||FALSE|| ||||\r
+||]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.20comic">コミック comic</h1><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>title</td><td>作品名</td><td>string</td><td>100</td><td> </td><td> </td><td></td></tr><tr><td>width</td><td>コマの幅デフォルト値</td><td>integer</td><td>200</td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマの高さデフォルト値</td><td>integer</td><td>80</td><td>FALSE</td><td> </td><td></td></tr><tr><td>visible</td><td>公開フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>可視範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>editable</td><td>編集フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>許可範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>author_id</td><td>作者の作家id</td><td>integer</td><td></td><td>false</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><h2 id="h2-.E6.A4.9C.E8.A8.BC">検証</h2><ul><li>title\r
+<ul><li>100文字以内であること\r
+</li></ul></li><li>width\r
+<ul><li>数値であること\r
+</li><li>1以上?未満であること\r
+</li></ul></li><li>height\r
+<ul><li>数値であること\r
+</li><li>1以上?未満であること\r
+</li></ul></li><li>visible\r
+<ul><li>数値であること\r
+</li><li>0以上4未満であること\r
+</li></ul></li><li>editable\r
+<ul><li>数値であること\r
+</li><li>0以上4未満であること\r
+</li></ul></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/StatusCode">\r
+    <title>StatusCode</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/StatusCode</link>\r
+    <dc:identifier>StatusCode</dc:identifier>\r
+\r
+    <dc:date>2012-01-16T18:21:44+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[ここを参照する\r
+\r
+http://www.func09.com/wordpress/archives/1226\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<p>ここを参照する\r
+</p><p><a href="http://www.func09.com/wordpress/archives/1226" class="external" rel="nofollow">http://www.func09.com/wordpress/archives/1226</a>\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/FrontPage">\r
+    <title>FrontPage</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/FrontPage</link>\r
+    <dc:identifier>FrontPage</dc:identifier>\r
+    <dc:date>2012-01-16T18:21:00+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ぺったんRのWiki =\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/926/640x640_0.png)]]\r
+== ぺったんRって何だってばよ?\r
+ぺったんを参考に、より使い勝手の良い漫画作成ツールを作ろうとしている。Rの意味はみなさんで勝手に想像してください。\r
+\r
+参考\r
+ * http://sourceforge.jp/projec]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.E3.81.AEWiki">ぺったんRのWiki</h1><img src="http://static.sourceforge.jp/thumb/g/2/926/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9262f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+</p><h2 id="h2-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.E3.81.A3.E3.81.A6.E4.BD.95.E3.81.A0.E3.81.A3.E3.81.A6.E3.81.B0.E3.82.88.EF.BC.9F">ぺったんRって何だってばよ?</h2><p>ぺったんを参考に、より使い勝手の良い漫画作成ツールを作ろうとしている。Rの意味はみなさんで勝手に想像してください。\r
+</p><p>参考\r
+</p><ul><li><a href="http://sourceforge.jp/projects/pettan/">http://sourceforge.jp/projects/pettan/</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanoss/">http://sourceforge.jp/projects/pettanoss/</a>\r
+</li></ul><p>より詳しくは <a href="http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan">WhatsPettan</a>\r
+</p><h2 id="h2-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.E3.81.AE.E7.9B.AE.E6.A8.99">ぺったんRの目標</h2><h3 id="h3-.E7.B7.8F.E5.90.88.E7.9B.AE.E6.A8.99">総合目標</h3><ul><li>漫画形式の表現がブラウザだけでできる\r
+</li><li>漫画形式のブログを簡単に始められる\r
+</li><li>漫画形式のSNSを簡単に始められる\r
+</li><li>漫画形式の記事をブログに埋め込める\r
+</li><li>その他あらゆるwebページに最小限の労力で漫画を表示できる\r
+</li></ul><h3 id="h3-.E9.96.8B.E7.99.BA.E7.9B.AE.E6.A8.99">開発目標</h3><ul><li>ぺったんR Web API\r
+</li><li>ぺったんR Web API に対応した、ひとつ以上のサーバ側実装\r
+</li><li>ぺったんR Web API に対応した、ひとつ以上のクライアント側実装\r
+</li><li>ぺったんR をお試しできる Web サービスの運営\r
+</li></ul><h2 id="h2-.E7.8F.BE.E5.9C.A8.E3.81.AE.E7.8A.B6.E6.B3.81">現在の状況</h2><ul><li>プロトタイプ作成中。 <a href="http://pettanr.heroku.com/" class="external" rel="nofollow">http://pettanr.heroku.com/</a>\r
+</li><li>プロジェクト Web サイトの制作中 <a href="http://pettanr.sourceforge.jp/index.html" class="external" rel="nofollow">http://pettanr.sourceforge.jp/index.html</a>\r
+</li><li>ユーザーコンソール <a href="http://pettanr.sourceforge.jp/work.html" class="external" rel="nofollow">http://pettanr.sourceforge.jp/work.html</a>\r
+</li></ul><h2 id="h2-.E9.96.8B.E7.99.BA.E8.80.85.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">開発者向けドキュメント</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers">ForDevelopers</a>\r
+</li></ul><h2 id="h2-.E7.B7.A8.E9.9B.86.E9.95.B7.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">編集長向けドキュメント</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters">ForWebmasters</a>\r
+</li></ul><h2 id="h2-.E4.BD.9C.E5.AE.B6.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">作家向けドキュメント</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors">ForAuthors</a>\r
+</li></ul><h2 id="h2-.E5.90.84.E8.87.AA.E3.81.AE.E3.83.A1.E3.83.A2">各自のメモ</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/YasushiIto">YasushiIto</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ItoZyun">ItoZyun</a>\r
+</li></ul><h2 id="h2-.E8.B3.87.E6.96.99.E7.AD.89">資料等</h2><ul><li>マンガ要素の日英対訳 <a href="http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements">TranslationComicElements</a>\r
+</li><li>おまけ <a href="http://sourceforge.jp/projects/pettanr/wiki/AppendixList">AppendixList</a>\r
+</li><li>railsのステータスコード <a href="http://sourceforge.jp/projects/pettanr/wiki/StatusCode">StatusCode</a>\r
+</li></ul><script src="/projects/pettanr/files/compact.js" type="text/javascript" charset="utf-8"></script>\r
+<div class="dashboard-widget"><h3 class="titlebar">最近のチケット一覧</h3><div class="dashboard-body"><div class="noent">(empty)</div></div></div>\r
+]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/XmlHttpRequest">\r
+    <title>XmlHttpRequest</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/XmlHttpRequest</link>\r
+\r
+    <dc:identifier>XmlHttpRequest</dc:identifier>\r
+    <dc:date>2012-01-16T13:39:48+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= XMLHttpRequest\r
+\r
+ * ie 4.0 以降 ie6 以前は ActiveX\r
+ * Firefox 1.0 以降\r
+ * NN 7 以降\r
+ * Opera 7.6 以降\r
+ * Safari 1.2 以降\r
+ * Konqueror 3 以降\r
+\r
+以上は 入門 ajax 増補改訂版より\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-XMLHttpRequest">XMLHttpRequest</h1><ul><li>ie 4.0 以降 ie6 以前は ActiveX\r
+</li><li>Firefox 1.0 以降\r
+</li><li>NN 7 以降\r
+</li><li>Opera 7.6 以降\r
+</li><li>Safari 1.2 以降\r
+</li><li>Konqueror 3 以降\r
+</li></ul><p>以上は 入門 ajax 増補改訂版より\r
+</p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor">\r
+    <title>JavascriptEditor</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor</link>\r
+    <dc:identifier>JavascriptEditor</dc:identifier>\r
+    <dc:date>2012-01-16T08:40:33+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= Javascript\r
+ js は 閲覧時 に使われるもの、ログイン後に使われるもの、その両方で使われるものがある.\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/990/640x640_0.png)]]\r
+== common.js\r
+ * pettnar.\r
+ * pettanr.const\r
+ * pettanr.ua\r
+   * ブラウザ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-Javascript">Javascript</h1><div class="indent">js は 閲覧時 に使われるもの、ログイン後に使われるもの、その両方で使われるものがある.\r
+</div><img src="http://static.sourceforge.jp/thumb/g/2/990/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9902f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+</p><h2 id="h2-common.js">common.js</h2><ul><li>pettnar.\r
+</li><li>pettanr.const\r
+</li><li>pettanr.ua\r
+<ul><li>ブラウザの情報、プラグインの情報\r
+</li></ul></li><li>pettnar.util\r
+<ul><li>\r
+</li></ul></li><li>pettnar.overlay\r
+<ul><li>ポップアップオーバーレイを管理する.\r
+</li></ul></li><li>pettnar.key\r
+<ul><li>キーイベントの発行、テキスト入力エリアの管理\r
+</li></ul></li><li>pettnar.balloon\r
+<ul><li>クロスバックエンドな吹きだし画像のためのラッパーの発行.XbackendSpeachBalloon\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">XbackendSpeachBalloon</a></li><li>SVG, VML といったベクター画像で吹きだし(balloon)を描画する(ベクター画像のサポートがない場合は代替画像を表示する)\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">AboutSpeachBalloon</a>\r
+</li></ul></li><li>pettnar.image\r
+<ul><li>クロスバックエンドな、Reversible Image のためのラッパーを発行.XbackendReversibleImage\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">XbackendReversibleImage</a></li><li>css3, VML, ActiveX, Flash, サーバー側で生成した反転画像 を使用して画像の反転を行う.\r
+</li><li>透過 PNG のサポートが甘い IE6 以下にたいして、VML, Flash, ActiveX+サーバー画像 による描画サポートを行う.PngFix\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/PngFix">PngFix</a></li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">PictureIo</a>\r
+</li></ul></li><li>pettnar.i18n\r
+<ul><li>マルチ言語情報の保持.言語変更イベントの管理.\r
+</li></ul></li><li>pettnar.io\r
+<ul><li>通信\r
+</li><li>xml としてサーバに置かれた ajax なリソースに対して、ajax feed api を使った json リクエスト(xmlより転送量が少ない)などの 複数経路でリクエストを行うラッパー\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">JsonApi</a>\r
+</li></ul></li><li>pettnar.load\r
+<ul><li>work.js と jQuery のロード.min や debag version の切り替え.jQuery version の切り替え.\r
+</li></ul></li></ul><h2 id="h2-work.js">work.js</h2><p>ログイン後のユーザー(管理者)の操作.コミック・画像の管理やコマの作成.\r
+</p><ul><li>pettnar.view\r
+<ul><li>現在のビューを管理する.Window Resize イベントの監視.\r
+</li></ul></li><li>pettnar.editor\r
+<ul><li>コマの編集を行う.\r
+</li></ul></li><li>pettnar.file\r
+<ul><li>サーバから取得したリソース情報を保持し、データの取得やアクセス権のチェック、データのアップデートをラップする.\r
+</li></ul></li><li>pettnar.finder\r
+<ul><li>ファイル(リソース)エクスプローラー\r
+</li><li>コミック、コマ、画像、吹きだし、画像提供絵師情報</li></ul></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/SystemController">\r
+    <title>SystemController</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/SystemController</link>\r
+    <dc:identifier>SystemController</dc:identifier>\r
+    <dc:date>2012-01-15T18:11:40+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= SystemController\r
+管理者機能。\r
+\r
+== index\r
+管理者機能目次。\r
+== start\r
+管理者を作成するための手順を表示するためのページ。\r
+\r
+== browse\r
+dbを閲覧するためのメニュー。\r
+\r
+== auth_token\r
+認証トークンの表示および管理メニュー。\r
+\r
+=== create_token\r
+認証トークンの作成。\r
+\r
+=== delete_]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-SystemController"><a href="http://sourceforge.jp/projects/pettanr/wiki/SystemController">SystemController</a></h1><p>管理者機能。\r
+</p><h2 id="h2-index">index</h2><p>管理者機能目次。\r
+</p><h2 id="h2-start">start</h2><p>管理者を作成するための手順を表示するためのページ。\r
+</p><h2 id="h2-browse">browse</h2><p>dbを閲覧するためのメニュー。\r
+</p><h2 id="h2-auth_token">auth_token</h2><p>認証トークンの表示および管理メニュー。\r
+</p><h3 id="h3-create_token">create_token</h3><p>認証トークンの作成。\r
+</p><h3 id="h3-delete_token">delete_token</h3><p>認証トークンの削除。\r
+</p><h2 id="h2-waiting_list">waiting_list</h2><p>管理者承認。\r
+</p><h3 id="h3-approve">approve</h3><p>管理者承認。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AuthorRegistrationsController">\r
+    <title>AuthorRegistrationsController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AuthorRegistrationsController</link>\r
+    <dc:identifier>AuthorRegistrationsController</dc:identifier>\r
+\r
+    <dc:date>2012-01-15T17:58:47+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= AuthorRegistrationsController\r
+認証エンジンdeviseでサインアップ後のページ遷移をするために必要となった。\r
+\r
+遷移先を定義しただけなので、機能はない。]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-AuthorRegistrationsController"><a href="http://sourceforge.jp/projects/pettanr/wiki/AuthorRegistrationsController">AuthorRegistrationsController</a></h1><p>認証エンジンdeviseでサインアップ後のページ遷移をするために必要となった。\r
+</p><p>遷移先を定義しただけなので、機能はない。</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers">\r
+    <title>RailsControllers</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/RailsControllers</link>\r
+    <dc:identifier>RailsControllers</dc:identifier>\r
+    <dc:date>2012-01-15T17:55:25+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= サーバ側の機能\r
+== コミック関係\r
+ * ComicsController\r
+ * PanelsController\r
+ * PanelPicturesController\r
+ * BalloonsController\r
+ * SpeachsController\r
+== 素材関係\r
+ * OriginalPicturesController\r
+ * ResourcePicturesCont]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B5.E3.83.BC.E3.83.90.E5.81.B4.E3.81.AE.E6.A9.9F.E8.83.BD">サーバ側の機能</h1><h2 id="h2-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E9.96.A2.E4.BF.82">コミック関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicsController">ComicsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelsController">PanelsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController">PanelPicturesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BalloonsController">BalloonsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachsController">SpeachsController</a>\r
+</li></ul><h2 id="h2-.E7.B4.A0.E6.9D.90.E9.96.A2.E4.BF.82">素材関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPicturesController">OriginalPicturesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePicturesController">ResourcePicturesController</a>\r
+</li></ul><h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E9.96.A2.E4.BF.82">フキダシテンプレート関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController">SpeachBalloonsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BallonTemplatesController">BallonTemplatesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachTemplatesController">SpeachTemplatesController</a>\r
+</li></ul><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E9.96.A2.E4.BF.82">ライセンス関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/LisencesController">LisencesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">CommonLisencesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalLisencesController">OriginalLisencesController</a>\r
+</li></ul><h2 id="h2-.E5.BD.B9.E5.89.B2.E9.96.A2.E4.BF.82">役割関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AuthorsController">AuthorsController</a>\r
+<ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AuthorRegistrationsController">AuthorRegistrationsController</a>\r
+</li></ul></li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ArtistsController">ArtistsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HelpController">HelpController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HomeController">HomeController</a>\r
+</li></ul><h2 id="h2-.E3.82.B7.E3.82.B9.E3.83.86.E3.83.A0.E9.96.A2.E4.BF.82">システム関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SystemController">SystemController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SystemPicturesController">SystemPicturesController</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers">\r
+    <title>ForDevelopers</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers</link>\r
+\r
+    <dc:identifier>ForDevelopers</dc:identifier>\r
+    <dc:date>2012-01-15T17:49:02+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 開発者向けドキュメント\r
+== 開発環境\r
+=== サーバーサイド\r
+ * Ruby1.9+Rails3.1\r
+==== 構築\r
+ * HowToInstall\r
+   * PictureIo\r
+   * RmagickAndDmagick\r
+\r
+=== クライアントサイド\r
+ * html4.01 + css2.1 に加え css3, SVG, XML, ActiveX, Flash のうち]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E9.96.8B.E7.99.BA.E8.80.85.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">開発者向けドキュメント</h1><h2 id="h2-.E9.96.8B.E7.99.BA.E7.92.B0.E5.A2.83">開発環境</h2><h3 id="h3-.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E3.82.B5.E3.82.A4.E3.83.89">サーバーサイド</h3><ul><li>Ruby1.9+Rails3.1\r
+</li></ul><h4 id="h4-.E6.A7.8B.E7.AF.89">構築</h4><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HowToInstall">HowToInstall</a>\r
+<ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">PictureIo</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick">RmagickAndDmagick</a>\r
+</li></ul></li></ul><h3 id="h3-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E3.82.B5.E3.82.A4.E3.83.89">クライアントサイド</h3><ul><li>html4.01 + css2.1 に加え css3, SVG, XML, ActiveX, Flash のうちのいくつか.\r
+<ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ClientSide">ClientSide</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">XbackendReversibleImage</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">XbackendSpeachBalloon</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PngFix">PngFix</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2">HtmlAndCss2</a>\r
+</li></ul></li><li>javascript( jQuery + plugin)\r
+<ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor">JavascriptEditor</a>\r
+</li></ul></li></ul><h3 id="h3-.E3.83.87.E3.83.BC.E3.82.BF.E3.83.99.E3.83.BC.E3.82.B9">データベース</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutModels">AboutModels</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema">DatabaseSchema</a> \r
+</li></ul><h2 id="h2-.E6.A9.9F.E8.83.BD">機能</h2><ul><li>サーバ側の機能 RailsControllers<a href="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers">RailsControllers</a></li><li>JsonAPI Js<a href="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">JsonApi</a></li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ApiIndex">ApiIndex</a>\r
+</li></ul><h2 id="h2-.E6.94.B9.E5.A4.89.E4.BA.88.E5.91.8A">改変予告</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc">ChangeDoc</a></li></ul>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/YasushiIto">\r
+    <title>YasushiIto</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/YasushiIto</link>\r
+    <dc:identifier>YasushiIto</dc:identifier>\r
+    <dc:date>2012-01-15T17:39:27+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[コモンライセンスの初期化。パブリックドメインだけは追加。\r
+\r
+md5を採用するとユニーク。同じ画像はアップロードできない。絵師の仕様がかわる?\r
+\r
+フキダシは名前の末尾を@ドメインにする慣習\r
+\r
+クリコモは転載自由なのか?\r
+\r
+jpgは反転できなくてもよくね?\r
+\r
+コミックのオーナーがフラグを変更できるように\r
+\r
+棒人間・ヴェール・ぞゥ\r
+\r
+SNS・ブログ\r
+\r
+フキダシはベクター式]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<p>コモンライセンスの初期化。パブリックドメインだけは追加。\r
+</p><p>md5を採用するとユニーク。同じ画像はアップロードできない。絵師の仕様がかわる?\r
+</p><p>フキダシは名前の末尾を@ドメインにする慣習\r
+</p><p>クリコモは転載自由なのか?\r
+</p><p>jpgは反転できなくてもよくね?\r
+</p><p>コミックのオーナーがフラグを変更できるように\r
+</p><p>棒人間・ヴェール・ぞゥ\r
+</p><p>SNS・ブログ\r
+</p><p>フキダシはベクター式に合わせるが、テンプレートのみも用意\r
+</p><h1 id="h1-w.E3.81.A8h.E3.81.AB.E3.83.9E.E3.82.A4.E3.83.8A.E3.82.B9.E3.81.AF.E3.81.82.E3.82.8A.EF.BC.9F">wとhにマイナスはあり?</h1><ul><li>逆フキダシ\r
+</li><li>min_width→lower_limit\r
+</li><li>フォントなど\r
+<pre>  &lt;property name=&quot;fontSize&quot;/&gt;\r
+       &lt;property name=&quot;fontColor&quot;/&gt;\r
+       &lt;property name=&quot;fontWeight&quot;/&gt;\r
+       &lt;property name=&quot;serif&quot;/&gt;\r
+       &lt;property name=&quot;way&quot;/&gt;\r
+       &lt;property name=&quot;textAlign&quot;/&gt;\r
+</pre></li><li>no_adult ?\r
+</li></ul><ul><li> → \r
+</li><li> → \r
+</li><li> → \r
+</li><li> → \r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ApiIndex">\r
+    <title>ApiIndex</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ApiIndex</link>\r
+    <dc:identifier>ApiIndex</dc:identifier>\r
+    <dc:date>2012-01-15T17:13:21+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クライアントが必要としそうなAPI\r
+何がどんな機能を実行するために、どんなデータが必要かを挙げていってください。体裁はどうでもいいです。\r
+\r
+== ぺったんサーバーの情報\r
+ * API の url\r
+   * 最終的にはここに掲載 RailsControllers\r
+ * 総素材数\r
+   * べらぼうに多い場合、素材一覧の取得を一度にはできない.\r
+     * カウントAPIを用意す]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E3.81.8C.E5.BF.85.E8.A6.81.E3.81.A8.E3.81.97.E3.81.9D.E3.81.86.E3.81.AAAPI">クライアントが必要としそうなAPI</h1><p>何がどんな機能を実行するために、どんなデータが必要かを挙げていってください。体裁はどうでもいいです。\r
+</p><h2 id="h2-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E3.81.AE.E6.83.85.E5.A0.B1">ぺったんサーバーの情報</h2><ul><li>API の url\r
+<ul><li>最終的にはここに掲載 RailsControllers\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers">RailsControllers</a></li></ul></li><li>総素材数\r
+<ul><li>べらぼうに多い場合、素材一覧の取得を一度にはできない.\r
+<ul><li>カウントAPIを用意する\r
+</li><li>たぶん名前はcount\r
+</li></ul></li></ul></li><li>総コミック数\r
+<ul><li>べらぼうに多い場合、、、\r
+</li></ul></li></ul><h2 id="h2-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.82.A8.E3.82.AF.E3.82.B9.E3.83.97.E3.83.AD.E3.83.BC.E3.83.A9">コミックエクスプローラ</h2><h3 id="h3-.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E3.81.AE.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E4.B8.80.E8.A6.A7">ログインユーザーのコミック一覧</h3><ul><li>作家の作業場は/home以下\r
+</li></ul><h3 id="h3-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.20.E3.81.AE.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E4.B8.80.E8.A6.A7">ぺったんR のコミック一覧</h3><ul><li>総合ページは/から。\r
+<ul><li>/にトレンドなデータが表示される\r
+</li></ul></li><li>/comics でコミック一覧\r
+<ul><li>/comics.json でコミック一覧のjsonデータが\r
+<ul><li>更新日時が新しい順に20件\r
+</li></ul></li></ul></li></ul><h3 id="h3-.E3.83.91.E3.83.8D.E3.83.AB.E3.81.AE.E4.B8.A6.E3.81.B3.E6.9B.BF.E3.81.88">パネルの並び替え</h3><ul><li>パネルのパラメータ\r
+</li><li>パネルの並び替えがユーザーに許可されているか?\r
+<ul><li>コマの並び順ということなら、されている。パネルの更新で時系列tを変える\r
+</li></ul></li><li>パネルの編集がユーザーに許可されているか?\r
+<ul><li>作者以外の投稿ということなら、されている。コミックのeditableが1であれば。\r
+</li></ul></li></ul><h2 id="h2-.E7.B4.A0.E6.9D.90.E3.82.A8.E3.82.AF.E3.82.B9.E3.83.97.E3.83.AD.E3.83.BC.E3.83.A9.E3.83.BC">素材エクスプローラー</h2><ul><li>最近投稿された素材 → ResourcePictures#ind<a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictures">ResourcePictures</a></li></ul><h3 id="h3-.E7.B4.A0.E6.9D.90.E4.B8.80.E8.A6.A7.E3.81.AE.E5.8F.96.E5.BE.97">素材一覧の取得</h3><ul><li>全ての素材の全プロパティの取得\r
+<ul><li>images.json\r
+</li><li>さすがに全件取得は無茶。\r
+<ul><li>最新の~、人気の~、最近使った~で絞り込む\r
+</li><li>タグの仕様を詰めないと無理か?\r
+</li></ul></li></ul></li><li>素材データが多い場合、少しづつ取得(って結構めんどくさいかも)\r
+<ul><li>images.json?last=id(最後に貰った素材のID を入れるとその続きから、とか)\r
+</li><li>今のところ20件以内で返す\r
+</li><li>もっと欲しい場合は、pagenateとなるが、あまりcoolとは言えないかも\r
+<ul><li>?page=3 みたいな\r
+</li><li>page=3 を取得中に、新しい素材が追加された場合、index がずれる.→ずれますね\r
+<ul><li>例えば 20 枚でひとつのページを作るけど、最新の ページは必ずしも 20 枚でない、とか?\r
+</li><li>古い素材:page=5 → |20|20|20|20|20|12| ← 新しい素材:page=0 ( 計 112 枚 )\r
+<ul><li>最新順だからpage=5 → |12|20|20|20|20|20| ← page=0 かな。\r
+</li></ul></li></ul></li></ul></li><li>images.json?tag=penjiro\r
+<ul><li><ul><li>ユーザーがペン次郎タグの素材のなかから選びたい場合.\r
+</li></ul></li></ul></li></ul></li></ul><h3 id="h3-.E7.B4.A0.E6.9D.90.E3.81.AE.E6.93.8D.E4.BD.9C">素材の操作</h3><ul><li>素材の追加(アップロード周りは調べます、実はやったことがない、、、)\r
+<ul><li>jsonでやるにはBase64でエンコードしないといかんかも。\r
+</li></ul></li><li>素材の削除  \r
+</li></ul><h3 id="h3-.E7.B4.A0.E6.9D.90.E3.81.AE.E3.83.97.E3.83.AD.E3.83.91.E3.83.86.E3.82.A3.E3.81.AE.E3.82.A2.E3.83.83.E3.83.97.E3.83.87.E3.83.BC.E3.83.88">素材のプロパティのアップデート</h3><ul><li>素材の名前(はとりあえずなしで開発)\r
+</li><li>タグの追加、削除 など\r
+</li></ul><h4 id="h4-.E3.81.B2.E3.81.A8.E3.81.A4.E3.81.AE.E7.B4.A0.E6.9D.90.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E3.82.82.E3.81.A4.E3.83.97.E3.83.AD.E3.83.91.E3.83.86.E3.82.A3">ひとつの素材データのもつプロパティ</h4><ul><li>id\r
+</li><li>filesize\r
+</li><li>tag[]\r
+</li><li>published_at\r
+</li><li>updated_at\r
+</li><li>license\r
+</li></ul><p>→ Re<a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">ResourcePictureModel</a>見る\r
+</p><ul><li>owner ログインユーザーがその素材のオーナーか?\r
+<ul><li>オーナーでないなら、アーティスト の id\r
+</li></ul></li></ul><p>→\r
+</p><ul><li>変更可能なオプションとその変更権がユーザーにあるか?\r
+</li></ul><h2 id="h2-.E3.82.BF.E3.82.B0.E3.81.AE.E6.93.8D.E4.BD.9C">タグの操作</h2><ul><li>タグの追加\r
+</li><li>タグの削除\r
+</li><li>タグの更新\r
+<ul><li>ペン次郎タグがあったけど、ペン太郎に改名したい場合、一つ一つの素材画像のプロパティでなく、タグ自体の名前を変える.\r
+</li></ul></li></ul><h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.82.A8.E3.82.AF.E3.82.B9.E3.83.97.E3.83.AD.E3.83.BC.E3.83.A9.E3.83.BC">フキダシエクスプローラー</h2><ul><li>フキダシリスト → \r
+</li></ul><h2 id="h2-.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E3.81.AE.E6.83.85.E5.A0.B1">ユーザーの情報</h2><h3 id="h3-.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E3.81.AE.E6.83.85.E5.A0.B1.E3.81.AE.E5.8F.96.E5.BE.97">ログインユーザーの情報の取得</h3><ul><li>ユーザー名\r
+</li><li>ユーザーの HP の url\r
+</li><li>デフォルトのライセンス\r
+</li><li>アカウントの状態(作家、絵師、admin)\r
+</li></ul><h3 id="h3-.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E3.81.AE.E6.83.85.E5.A0.B1.E3.81.AE.E3.82.A2.E3.83.83.E3.83.97.E3.83.87.E3.83.BC.E3.83.88">ログインユーザーの情報のアップデート</h3><ul><li>ユーザーの HP の url\r
+</li><li>デフォルトのライセンス\r
+</li></ul><p>→jsonでのやり取りは危険なのでサーバが吐くページのフォームからしかできない。\r
+</p><h3 id="h3-.E3.82.A2.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B9.E3.83.88.E3.81.AE.E6.83.85.E5.A0.B1">アーティストの情報</h3><ul><li>パネルピクチャー を併せてどこかに表示される.\r
+</li><li>アーティスト名\r
+</li><li>アーティストの HP の url\r
+</li></ul><h2 id="h2-.E3.83.91.E3.83.8D.E3.83.AB.E3.82.A8.E3.83.87.E3.82.A3.E3.82.BF">パネルエディタ</h2><ul><li>編集しようとしているパネルデータ\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ItoZyun">\r
+    <title>ItoZyun</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ItoZyun</link>\r
+    <dc:identifier>ItoZyun</dc:identifier>\r
+\r
+    <dc:date>2012-01-14T20:46:33+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クライアント側\r
+ * ユーザーログイン後の操作(マンガ管理・コマ作成・画像管理・設定)は、すべて js 有効 が前提の Ajax ページで行う.\r
+ * ログインしたユーザーのマンガ閲覧も、Ajaxページで行う.画像読み込みを非同期化して、画面外の画像の読み込みを抑止する.\r
+\r
+= javascript のクリーンアップ、圧縮\r
+== クリーンアップ\r
+javascript は、変数宣言時]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E5.81.B4">クライアント側</h1><ul><li>ユーザーログイン後の操作(マンガ管理・コマ作成・画像管理・設定)は、すべて js 有効 が前提の Ajax ページで行う.\r
+</li><li>ログインしたユーザーのマンガ閲覧も、Ajaxページで行う.画像読み込みを非同期化して、画面外の画像の読み込みを抑止する.\r
+</li></ul><h1 id="h1-javascript.20.E3.81.AE.E3.82.AF.E3.83.AA.E3.83.BC.E3.83.B3.E3.82.A2.E3.83.83.E3.83.97.E3.80.81.E5.9C.A7.E7.B8.AE">javascript のクリーンアップ、圧縮</h1><h2 id="h2-.E3.82.AF.E3.83.AA.E3.83.BC.E3.83.B3.E3.82.A2.E3.83.83.E3.83.97">クリーンアップ</h2><p>javascript は、変数宣言時の区切り文字や、行の終わりのセミコロンなどを間違えていても、予期したとおりに動作したりして潜在的な問題を抱えることになる.[[BR]]\r
+<br />以上のものは、Aptana で警告されないものも結構ある.[[BR]]\r
+<br />jsDo.it にアップロードすると、Webコンソールで javascript の警告を教えてくれる.[[BR]]\r
+<br />その警告に従って修正したところ、Aptana2 の構文解析も動くようになった.コード量が増えると勝手に構文解析も止まるのかと思っていたけど、そのようなわけだった、、、[[BR]]\r
+<br /></p><h2 id="h2-.E5.9C.A7.E7.B8.AE">圧縮</h2><p>以上を済ませた後に、圧縮(難読化)を行うことで、js ファイルの読み込みや動作を早くし、負荷を抑えることができる.[[BR]]\r
+<br />圧縮ツールには、Web アプリとして提供されているものもあって便利.[[BR]]\r
+<br /><a href="http://compressorrater.thruhere.net/" class="external" rel="nofollow">http://compressorrater.thruhere.net/</a> が、複数の圧縮エンジンに通した結果を比較表示してくれる.[[BR]]\r
+<br />現在 140KB 程度の js ファイルを 60KB 程度にすることができた.[[BR]]\r
+<br />ただし、その圧縮後のファイルが動かないこともあり(というかほとんど動かない、または操作中に動かなくなる)圧縮ツール用にコードを書く必要がある.[[BR]]\r
+<br />jsは、コードが実行される順番に変数宣言をしていけばいいのだが、圧縮ツール用には、変数の宣言を最初の変数の登場より先にしなくてはならない.[[BR]]\r
+<br /></p><p>変数の宣言がないままに変数が登場すると、\r
+<pre>function createPopup(){\r
+// Popup クラスから Popup インスタンスを作る.\r
+ var _popup = PopupClass.apply( {}, []);\r
+}\r
+~\r
+// Popup クラスの宣言\r
+var PopupClass = function(){};\r
+</pre>圧縮ツールは、最初に登場する PopupClass はそのまま.var PopupCl<a href="http://sourceforge.jp/projects/pettanr/wiki/PopupClass">PopupClass</a>r a= などと圧縮をかける.結果、createPopup() したときに PopupClass が未定義だよ!となる.[[BR]]\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/PopupClass">PopupClass</a><br /></p><ul><li>決定版はこれだ! Javascriptの圧縮、難読化ツール 比較検討 http://gogolounge.blog.shinobi.jp/Entry/4/\r
+<a href="http://gogolounge.blog.shinobi.jp/Entry/4/" class="external" rel="nofollow">http://gogolounge.blog.shinobi.jp/Entry/4/</a></li></ul><h1 id="h1-javascript.20.E3.81.AE.E3.83.A1.E3.83.A2.E3.83.AA.E3.83.AA.E3.83.BC.E3.82.AF">javascript のメモリリーク</h1><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/%E9%96%8B%E7%99%BA">開発</a>IEメモリリークの最後の壁はAjaxのonreadystatechangeやった!! http://d.hatena.ne.jp/AWAWA/20071207<a href="http://d.hatena.ne.jp/AWAWA/20071207/1197036423" class="external" rel="nofollow">http://d.hatena.ne.jp/AWAWA/20071207/1197036423</a></li><li>Internet Explorer リーク パターンを理解して解決する http://msdn.microsoft.com/ja-jp/<a href="http://msdn.microsoft.com/ja-jp/library/bb250448" class="external" rel="nofollow">http://msdn.microsoft.com/ja-jp/library/bb250448</a></li></ul><p>クロージャがまずい.[[BR]]\r
+<br />dom追加は、appendChild を先に.あとからプロパティをセット.[[BR]]\r
+<br />イベントハンドラに、グローバルで定義された 空の function を突っ込んで解除する.\r
+</p><h1 id="h1-.E3.82.B9.E3.82.BF.E3.83.B3.E3.83.89.E3.82.A2.E3.83.AD.E3.83.BC.E3.83.B3.E7.89.88.20IE.20.E3.81.AE.E9.80.9A.E5.B8.B8.E7.89.88.E3.81.A8.E7.95.B0.E3.81.AA.E3.82.8B.E6.8C.99.E5.8B.95">スタンドアローン版 IE の通常版と異なる挙動</h1><p>IETester で 条件付コメントによる、vml のインストールの有無のチェックができない挙動に遭遇.[[BR]]\r
+<br />vml のチェックは、現在は条件付コメントを動的に付与して行っている.(他にいい方法ないかな、、、?)\r
+<pre>VML: ( function(){\r
+       if( isIE === false || ieVersion &gt; 8) return false;\r
+       var globalObjectName = createGrobalObjectName(), script;\r
+       document.writeln( [ '&lt;!--[if gte vml 1]&gt;&lt;script type=&quot;text/javascript&quot;&gt;window.', globalObjectName,'=1;&lt;/script&gt;&lt;![endif]--&gt;'].join( ''));\r
+       if( window[ globalObjectName] === 1){\r
+               window[ globalObjectName] = undefined;\r
+               return true;\r
+       }\r
+       return false;\r
+})(),\r
+</pre></p><p>XPsp3 に IETester をインストールして 6, 7, 8 をテストできる環境にしているが、6 と 7 では、vml のチェックが働かない.[[BR]]\r
+<br />これは、スタンドアローン版 IE は 条件付コメントが働かない、ためと思われる.[[BR]]\r
+<br />一方で、8 で正しく動いているのは、8 が Windows 環境のデフォルトの ie なので通常版であるため、と思う.[[BR]]\r
+<br /></p><p>navigator.ua で取得したバージョンと 動的に書き出した条件付コメント(内でスクリプトを使用)が不一致だったら、スタンドアローン版として処理する.\r
+</p><ul><li>条件付コメント文の誤算 http://bopsublog.blog.<a href="http://bopsublog.blog.shinobi.jp/Entry/15/" class="external" rel="nofollow">http://bopsublog.blog.shinobi.jp/Entry/15/</a></li><li><a href="http://philip.html5.org/data/ccs.html" class="external" rel="nofollow">http://philip.html5.org/data/ccs.html</a>\r
+</li></ul><h1 id="h1-javascript.20.E3.81.AE.E9.81.B8.E6.8A.9E.E7.A6.81.E6.AD.A2">javascript の選択禁止</h1><ul><li>ieでは、unselectable を使う.但しこの指定は継承しないため、全てのテキストを持つ要素に指定する.\r
+<pre>&lt;div unselectable=&quot;on&quot;&gt;テキスト&lt;/div&gt;\r
+</pre></li><li>css を使う場合.\r
+<pre>&lt;div style=&quot;-moz-user-select: none;&quot;&gt;テキスト&lt;/div&gt;\r
+&lt;div style=&quot;-khtml-user-select: none;&quot;&gt;テキスト&lt;/div&gt;\r
+&lt;div style=&quot;-webkit-user-select: none;&quot;&gt;テキスト&lt;/div&gt;\r
+&lt;div style=&quot;user-select: none;&quot;&gt;テキスト&lt;/div&gt; css3 ??\r
+</pre></li><li>js を使う\r
+<pre>&lt;div onMouseMove=&quot;window.getSelection().removeAllRanges();&quot;&gt;テキスト&lt;/div&gt; など\r
+</pre></li><li><a href="http://www.programming-magic.com/20071217225449/" class="external" rel="nofollow">http://www.programming-magic.com/20071217225449/</a>\r
+</li></ul><p>js で自動でテキスト選択を禁止する必要がある.\r
+</p><h1 id="h1-about.20itozyun">about itozyun</h1><ul><li>目立ちたがり屋という点でフロント向き.\r
+</li><li>好奇心に負けて地雷を踏む性格なので、API 設計などを任せてはいけない.</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/HowToInstall">\r
+    <title>HowToInstall</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/HowToInstall</link>\r
+    <dc:identifier>HowToInstall</dc:identifier>\r
+    <dc:date>2012-01-14T13:39:42+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= インストール\r
+== 前提条件\r
+ * Ruby1.9系\r
+ * git\r
+ * ImageMagick\r
+\r
+WindowsならRailsInstaller が楽かも。ただし、この選択はImageMagickを動かせないので、別途Production環境が必要。今のところは本番環境としてherokuを想定している。\r
+\r
+http://railsinstaller.org/\r
+\r
+== ソー]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB">インストール</h1><h2 id="h2-.E5.89.8D.E6.8F.90.E6.9D.A1.E4.BB.B6">前提条件</h2><ul><li>Ruby1.9系\r
+</li><li>git\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ImageMagick">ImageMagick</a>\r
+</li></ul><p>WindowsならRail<a href="http://sourceforge.jp/projects/pettanr/wiki/RailsInstaller">RailsInstaller</a>も。ただし、この選択はImageMagickを動かせないので、別途<a href="http://sourceforge.jp/projects/pettanr/wiki/ImageMagick">ImageMagick</a>境が必要。今のところは本番環境としてherokuを想定している。\r
+</p><p><a href="http://railsinstaller.org/" class="external" rel="nofollow">http://railsinstaller.org/</a>\r
+</p><h2 id="h2-.E3.82.BD.E3.83.BC.E3.82.B9.E3.82.B3.E3.83.BC.E3.83.89.E3.81.AE.E5.8F.96.E5.BE.97">ソースコードの取得</h2><p>ソースコードの取得はgitを使う。ここではRailsInstallerを使うケースで書く。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/RailsInstaller">RailsInstaller</a></p><p><a href="http://sourceforge.jp/projects/pettanr/wiki/RailsInstaller">RailsInstaller</a>をインストールするとRails用コンソールを開けるようになる。そこからgitも使える。\r
+</p><p>最初に起動するときにメアドとパスフレーズを聞かれるので、\r
+<a href="http://sourceforge.jp/projects/pettanr/cvs/">http://sourceforge.jp/projects/pettanr/cvs/</a>\r
+を参考にしながら\r
+<pre>yasushiito@git.sourceforge.jp\r
+</pre></p><p>のようにメアドにして、さらにパスフレーズも記入。コンソールが開くと、ドバっと暗号が出てくるが、公開鍵のファイル名なんかも含まれてるので目を通しておく。コミッタとしてプロジェクトに参加するなら、この公開鍵をsourceforge.jpに追加しておく。\r
+<pre>ssh:\r
+  public_key_location: C:\Documents and Settings\....\r
+</pre></p><pre>c:\sites&gt;git clone yasushiito@git.sourceforge.jp:/gitroot/pettanr/pettanr.git pettanr\r
+</pre><p>でpettanr以下にダウンロードされる。\r
+</p><p>ユーザとしてダウンロードしたいなら\r
+<pre>c:\sites&gt;git clone git://git.sourceforge.jp/gitroot/pettanr/pettanr.git pettanr\r
+</pre>とする。\r
+</p><h2 id="h2-.E7.A8.BC.E5.83.8D.E5.89.8D.E3.81.AE.E6.BA.96.E5.82.99">稼働前の準備</h2><h3 id="h3-gem.E3.81.AE.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB">gemのインストール</h3><pre>c:\sites&gt;cd pettanr\r
+c:\sites\pettanr&gt;bundle install --without production\r
+</pre><h3 id="h3-.E3.83.87.E3.83.BC.E3.82.BF.E3.83.99.E3.83.BC.E3.82.B9.E3.81.AE.E5.88.9D.E6.9C.9F.E5.8C.96">データベースの初期化</h3><pre>c:\sites\pettanr&gt;rake db:migrate \r
+</pre><h3 id="h3-.E7.AE.A1.E7.90.86.E8.80.85.E3.81.AE.E4.BD.9C.E6.88.90">管理者の作成</h3><p>管理者を最低一人は用意しないと動かない。\r
+<pre>c:\sites\pettanr&gt;rails r &quot;Admin.start('admin@mail.adr.ess', 'admin_password')&quot; \r
+</pre>もちろんメールアドレスとパスワードは変えること。\r
+</p><h3 id="h3-.E4.BF.9D.E7.AE.A1.E5.BA.AB.E3.81.AE.E4.BD.9C.E6.88.90">保管庫の作成</h3><p>画像の保存パスを作成しておく。\r
+<pre>c:\sites\pettanr&gt;cd ..\r
+c:\sites&gt;mkdir original\r
+c:\sites&gt;mkdir original\pettanr\r
+c:\sites&gt;mkdir resource\r
+c:\sites&gt;mkdir resource\pettanr\r
+c:\sites&gt;mkdir system\r
+c:\sites&gt;mkdir system\pettanr\r
+</pre>保存先を変えたい場合は、PictureIoを参考にする。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">PictureIo</a></p><h3 id="h3-ImageMagick.E3.81.AE.E8.A8.AD.E5.AE.9A"><a href="http://sourceforge.jp/projects/pettanr/wiki/ImageMagick">ImageMagick</a>の設定</h3><p><a href="http://sourceforge.jp/projects/pettanr/wiki/RailsInstaller">RailsInstaller</a>ではImag<a href="http://sourceforge.jp/projects/pettanr/wiki/ImageMagick">ImageMagick</a>い。そこでDmagickなるものでごまかしてる。詳しくはRmagickAndDmagickにあるが、デフォルトでDmagickを使っているた<a href="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick">RmagickAndDmagick</a>magickを使うように編集してやる。\r
+</p><h2 id="h2-.E8.B5.B7.E5.8B.95">起動</h2><pre>c:\sites\pettanr&gt;rails s\r
+</pre><p>これでhttp:/<a href="http://localhost:3000/%E3%81%8B%E3%82%89%E9%81%8A%E3%81%B9%E3%82%8B" class="external" rel="nofollow">http://localhost:3000/から遊べる</a></p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutModels">\r
+    <title>AboutModels</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutModels</link>\r
+\r
+    <dc:identifier>AboutModels</dc:identifier>\r
+    <dc:date>2012-01-14T11:04:48+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ER図\r
+下記のページを参考にすれば生成できるはずだが、Windows環境では画像に落とせない。\r
+\r
+ * http://sawada0903.blogspot.com/2010/10/rails30er.html\r
+ * http://rails-erd.rubyforge.org/install.html\r
+\r
+出力されるERD.dotはdotっていうグラフ描画ツールのマクロ。\r
+\r
+G]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-ER.E5.9B.B3">ER図</h1><p>下記のページを参考にすれば生成できるはずだが、Windows環境では画像に落とせない。\r
+</p><ul><li><a href="http://sawada0903.blogspot.com/2010/10/rails30er.html" class="external" rel="nofollow">http://sawada0903.blogspot.com/2010/10/rails30er.html</a>\r
+</li><li><a href="http://rails-erd.rubyforge.org/install.html" class="external" rel="nofollow">http://rails-erd.rubyforge.org/install.html</a>\r
+</li></ul><p>出力されるERD.dotはdotっていうグラフ描画ツールのマクロ。\r
+</p><p><a href="http://sourceforge.jp/projects/pettanr/wiki/GraphViz">GraphViz</a>のbinにdot.exeがあるからこれで画像にできる\r
+<pre>dot.exe -Tgif ERD.dot &gt; erd.gif\r
+</pre></p><h1 id="h1-.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E3.81.A8.E3.82.AB.E3.83.A9.E3.83.A0">テーブルとカラム</h1><h2 id="h2-admins.20.E7.AE.A1.E7.90.86.E8.80.85">admins 管理者</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>email</td><td></td><td>string</td><td>  </td><td>FALSE</td><td> </td><td></td></tr><tr><td>encrypted_password</td><td></td><td>string</td><td> </td><td>FALSE</td><td>128</td><td></td></tr><tr><td>reset_password_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>reset_password_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>remember_created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>sign_in_count</td><td></td><td>integer</td><td>0</td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmed_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>approve</td><td>承認</td><td>integer</td><td>0</td><td> </td><td> </td><td>1で承認済</td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AdminModel">AdminModel</a>\r
+</li></ul><h2 id="h2-artists.20.E7.B5.B5.E5.B8.AB">artists 絵師</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>email</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>name</td><td>ペンネーム</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>homepage_url</td><td>ホームページURL</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>api_url</td><td>素材配布APIのURL</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>default_lisence_id</td><td>省略時のライセンスid</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>crowled_at</td><td>素材配布APIの最新呼び出し時刻</td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>author_id</td><td>作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ArtistModel">ArtistModel</a>\r
+</li></ul><h2 id="h2-authors.20.E4.BD.9C.E5.AE.B6">authors 作家</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>name</td><td>ペンネーム</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>email</td><td>メールアドレス</td><td>string</td><td>  </td><td>FALSE</td><td> </td><td></td></tr><tr><td>encrypted_password</td><td></td><td>string</td><td> </td><td>FALSE</td><td>128</td><td></td></tr><tr><td>reset_password_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>reset_password_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>remember_created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>sign_in_count</td><td></td><td>integer</td><td>0</td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>authentication_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmed_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AuthorModel">AuthorModel</a>\r
+</li></ul><h2 id="h2-balloon_templates.20.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E6.9E.A0.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">balloon_templates フキダシ枠テンプレート</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>speach_balloon_id</td><td>フキダシテンプレートid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>system_picture_id</td><td>フキダシ素材id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>tail</td><td>尻尾の向き</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>size</td><td>サイズのバリエーション</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>min_width</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>max_width</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>min_height</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>max_height</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BallonTemplateModel">BallonTemplateModel</a>\r
+</li></ul><h2 id="h2-balloons.20.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7">balloons フキダシ</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>panel_id</td><td>所属パネルid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>balloon_template_id</td><td>フキダシ枠テンプレート種id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>system_picture_id</td><td>フキダシ素材id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>tail</td><td>尻尾の向き</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>size</td><td>サイズのバリエーション</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>z</td><td>表示順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr><tr><td>width</td><td>表示幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>表示高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BalloonModel">BalloonModel</a>\r
+</li></ul><h2 id="h2-comics.20.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF">comics コミック</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>title</td><td>作品名</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>width</td><td>コマの幅デフォルト値</td><td>integer</td><td>200</td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマの高さデフォルト値</td><td>integer</td><td>80</td><td>FALSE</td><td> </td><td></td></tr><tr><td>visible</td><td>公開フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>可視範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>editable</td><td>編集フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>許可範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>author_id</td><td>作者の作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>\r
+</li></ul><h2 id="h2-common_lisences.20.E3.82.B3.E3.83.A2.E3.83.B3.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">common_lisences コモンライセンス</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>lisence_id</td><td>ライセンスid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>name</td><td>ライセンス名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>url</td><td>条項ページURL</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_by</td><td>クリエイティブコモンズBYフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_sa</td><td>クリエイティブコモンズSAフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nd</td><td>クリエイティブコモンズNDフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nc</td><td>クリエイティブコモンズNCフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_resize</td><td>サイズ変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_flip</td><td>反転不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>keep_aspect_ratio</td><td>縦横比変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisenceModel">CommonLisenceModel</a>\r
+</li></ul><h2 id="h2-lisences.20.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">lisences ライセンス</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>name</td><td>ライセンス名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>url</td><td>条項ページURL</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_by</td><td>クリエイティブコモンズBYフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_sa</td><td>クリエイティブコモンズSAフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nd</td><td>クリエイティブコモンズNDフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nc</td><td>クリエイティブコモンズNCフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_resize</td><td>サイズ変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_flip</td><td>反転不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>keep_aspect_ratio</td><td>縦横比変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/LisenceModel">LisenceModel</a>\r
+</li></ul><h2 id="h2-original_lisences.20.E3.82.AA.E3.83.AA.E3.82.B8.E3.83.8A.E3.83.AB.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">original_lisences オリジナルライセンス</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>artist_id</td><td>ライセンス策定者 絵師id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>lisence_id</td><td>ライセンスid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>name</td><td>ライセンス名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>url</td><td>条項ページURL</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_by</td><td>クリエイティブコモンズBYフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_sa</td><td>クリエイティブコモンズSAフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nd</td><td>クリエイティブコモンズNDフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nc</td><td>クリエイティブコモンズNCフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_resize</td><td>サイズ変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_flip</td><td>反転不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>keep_aspect_ratio</td><td>縦横比変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalLisenceModel">OriginalLisenceModel</a>\r
+</li></ul><h2 id="h2-original_pictures.20.E5.8E.9F.E7.94.BB">original_pictures 原画</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>ext</td><td>画像フォーマット</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅ピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>filesize</td><td>画像サイズ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>artist_id</td><td>投稿者 絵師id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>lisence_id</td><td>付与ライセンスid</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPictureModel">OriginalPictureModel</a>\r
+</li></ul><h2 id="h2-system_pictures.20.E3.82.B7.E3.82.B9.E3.83.86.E3.83.A0.E7.94.BB.E5.83.8F">system_pictures システム画像</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>ext</td><td>画像フォーマット</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅ピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>filesize</td><td>画像サイズ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SystemPictureModel">SystemPictureModel</a>\r
+</li></ul><h2 id="h2-panel_pictures.20.E3.82.B3.E3.83.9E.E7.B5.B5">panel_pictures コマ絵</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>panel_id</td><td>所属パネル</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>resource_picture_id</td><td>素材id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>link</td><td>リンク</td><td>string</td><td> </td><td> </td><td>200</td><td>参照するページをリンクできる</td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>z</td><td>表示順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr><tr><td>width</td><td>コマ絵の幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマ絵の高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>flipv</td><td>垂直反転</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>fliph</td><td>水平反転</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel">PanelPictureModel</a>\r
+</li></ul><h2 id="h2-panels.20.E3.82.B3.E3.83.9E">panels コマ</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>comic_id</td><td>所属コミック</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>resource_picture_id</td><td>背景画像 素材id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>width</td><td>コマの幅</td><td>integer</td><td>200</td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマの高さ</td><td>integer</td><td>80</td><td>FALSE</td><td> </td><td></td></tr><tr><td>border</td><td>コマの枠線の太さ</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>y</td><td>表示位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>z</td><td>表示優先順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>t</td><td>コマ番号</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>author_id</td><td>コマの投稿者 作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelModel">PanelModel</a>\r
+</li></ul><h2 id="h2-resource_pictures.20.E7.B4.A0.E6.9D.90">resource_pictures 素材</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>ext</td><td>画像フォーマット</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅ピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>filesize</td><td>画像サイズ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>artist_id</td><td>投稿者 絵師id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>lisence_id</td><td>付与ライセンスid</td><td>integer</td><td> </td><td> </td><td> </td><td><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPicture">OriginalPicture</a>のコピー 変更不可</td></tr><tr><td>original_picture_id</td><td>原画id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">ResourcePictureModel</a>\r
+</li></ul><h2 id="h2-speach_balloons.20.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">speach_balloons フキダシテンプレート</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>name</td><td>フキダシ名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>tail_count</td><td>尻尾の向きの数</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>size_count</td><td>サイズのバリエーション数</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>表示順</td><td>integer</td><td>1</td><td>false</td><td> </td><td>ファイルエクスプローラーなどで</td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonModel">SpeachBalloonModel</a>\r
+</li></ul><h2 id="h2-speach_templates.20.E3.82.BB.E3.83.AA.E3.83.95.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">speach_templates セリフテンプレート</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>balloon_template_id</td><td>フキダシ枠テンプレートid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachTemplateModel">SpeachTemplateModel</a>\r
+</li></ul><h2 id="h2-speaches.20.E3.82.BB.E3.83.AA.E3.83.95">speaches セリフ</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>balloon_id</td><td>フキダシ枠id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>content</td><td>台詞</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr><tr><td>width</td><td>幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachModel">SpeachModel</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons">\r
+    <title>BundledSpeachBalloons</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons</link>\r
+    <dc:identifier>BundledSpeachBalloons</dc:identifier>\r
+    <dc:date>2012-01-14T09:23:10+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= 標準フキダシ\r
+ * ベクターなし\r
+   * ベクター式のプログラムは実装されておらず、テンプレートのみで行う。\r
+ * 楕円\r
+[[embed(http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/fukiMoon1.gif)]]\r
+ * 雲\r
+[[embed(http://sourceforge.]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E6.A8.99.E6.BA.96.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7">標準フキダシ</h1><ul><li>ベクターなし\r
+<ul><li>ベクター式のプログラムは実装されておらず、テンプレートのみで行う。\r
+</li></ul></li><li>楕円\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/fukiMoon1.gif" alt="fukiMoon1.gif" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2ffukiMoon1.gif-1" title="fukiMoon1.gif" class="embed-image"><p>\r
+</p><ul><li>雲\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/omoiFuki1.gif" alt="omoiFuki1.gif" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2fomoiFuki1.gif-1" title="omoiFuki1.gif" class="embed-image"><p>\r
+</p><ul><li>角丸\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/bln1.png" alt="bln1.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2fbln1.png-1" title="bln1.png" class="embed-image"><p>\r
+</p><ul><li>カギ\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/hook.png" alt="hook.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2fhook.png-1" title="hook.png" class="embed-image"><p>\r
+</p><ul><li>プレーン\r
+</li><li>ボックス\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/square4.gif" alt="square4.gif" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2fsquare4.gif-1" title="square4.gif" class="embed-image"><p>\r
+</p><ul><li>ギザ細\r
+</li><li>ギザ粗\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/togeFuki.gif" alt="togeFuki.gif" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2ftogeFuki.gif-1" title="togeFuki.gif" class="embed-image"><p>\r
+</p><ul><li>鳥の巣\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AppendixList">\r
+    <title>AppendixList</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AppendixList</link>\r
+    <dc:identifier>AppendixList</dc:identifier>\r
+    <dc:date>2012-01-14T08:55:44+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= おまけ\r
+ * BundledPictures\r
+ * BundledSpeachBalloons\r
+ * BundledLisences\r
+\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.81.8A.E3.81.BE.E3.81.91">おまけ</h1><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BundledPictures">BundledPictures</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons">BundledSpeachBalloons</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BundledLisences">BundledLisences</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi">\r
+    <title>AboutKinichi</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi</link>\r
+    <dc:identifier>AboutKinichi</dc:identifier>\r
+\r
+    <dc:date>2012-01-12T08:41:56+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= キンイチ\r
+[[Embed(http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/1555.gif)]]\r
+[[Embed(http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/bac.png)]]\r
+[[Embed(http://sourcefo]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AD.E3.83.B3.E3.82.A4.E3.83.81">キンイチ</h1><img src="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/1555.gif" alt="1555.gif" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutKinichi2fattach2f1555.gif-1" title="1555.gif" class="embed-image"><p>\r
+<img src="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/bac.png" alt="bac.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutKinichi2fattach2fbac.png-1" title="bac.png" class="embed-image">\r
+<img src="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/kijck.png" alt="kijck.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutKinichi2fattach2fkijck.png-1" title="kijck.png" class="embed-image">\r
+<img src="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/ccc.png" alt="ccc.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutKinichi2fattach2fccc.png-1" title="ccc.png" class="embed-image">\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/BundledPictures">\r
+    <title>BundledPictures</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/BundledPictures</link>\r
+    <dc:identifier>BundledPictures</dc:identifier>\r
+    <dc:date>2012-01-12T08:35:43+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= おまけ素材\r
+ * AboutPenjiro\r
+ * AboutKinichi]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.81.8A.E3.81.BE.E3.81.91.E7.B4.A0.E6.9D.90">おまけ素材</h1><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro">AboutPenjiro</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi">AboutKinichi</a></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro">\r
+    <title>AboutPenjiro</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro</link>\r
+\r
+    <dc:identifier>AboutPenjiro</dc:identifier>\r
+    <dc:date>2012-01-12T08:35:00+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ペン次郎\r
+[[Embed(http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro/attach/129.png)]]\r
+[[Embed(http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro/attach/ge.png)]]\r
+[[Embed(http://sourceforg]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.83.9A.E3.83.B3.E6.AC.A1.E9.83.8E">ペン次郎</h1><img src="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro/attach/129.png" alt="129.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutPenjiro2fattach2f129.png-1" title="129.png" class="embed-image"><p>\r
+<img src="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro/attach/ge.png" alt="ge.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutPenjiro2fattach2fge.png-1" title="ge.png" class="embed-image">\r
+<img src="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro/attach/up.png" alt="up.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutPenjiro2fattach2fup.png-1" title="up.png" class="embed-image"></p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2">\r
+    <title>HtmlAndCss2</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2</link>\r
+    <dc:identifier>HtmlAndCss2</dc:identifier>\r
+    <dc:date>2012-01-10T01:12:37+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= Html + css2.1\r
+ぺったんR は、html4.01 + css2.1 をサポートするブラウザで作者の意図したとおりのコンテンツの表示を目指す.[[BR]]\r
+しかし、これは最低限の環境であるため、ぺったんR が用意する便利でパワフルな機能の恩恵のすべてを必ずしも享けられるわけではない.\r
+\r
+== マンガの表示に使用する css プロパティ\r
+ * overflow:hidden\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-Html.20.2B.20css2.1">Html + css2.1</h1><p>ぺったんR は、html4.01 + css2.1 をサポートするブラウザで作者の意図したとおりのコンテンツの表示を目指す.[[BR]]\r
+<br />しかし、これは最低限の環境であるため、ぺったんR が用意する便利でパワフルな機能の恩恵のすべてを必ずしも享けられるわけではない.\r
+</p><h2 id="h2-.E3.83.9E.E3.83.B3.E3.82.AC.E3.81.AE.E8.A1.A8.E7.A4.BA.E3.81.AB.E4.BD.BF.E7.94.A8.E3.81.99.E3.82.8B.20css.20.E3.83.97.E3.83.AD.E3.83.91.E3.83.86.E3.82.A3">マンガの表示に使用する css プロパティ</h2><ul><li>overflow:hidden\r
+<ul><li>コマの外にはみ出してしまう部分を隠す.コマの枠となる div に指定.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_001.html" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_001.html</a>\r
+</li></ul></li><li>position:absolute, left, top\r
+<ul><li>コミック要素(画像や吹きだし)の配置に使用.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_property.html#position" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_property.html#position</a>\r
+</li></ul></li><li>z-index\r
+<ul><li>html要素の順を無視して、コミック要素の重ね順を変更するときに使用.\r
+</li><li>html要素は意味順(時系列順)に並ぶが、コミックでは演出によって、最後に起こったことが奥に行くことも手前に来ることもある.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_position_003.html" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_position_003.html</a>\r
+</li></ul></li><li>display:table, display:teble-cell\r
+<ul><li>吹きだし内テキストの上下中央配置に使用を考えたが、、、ぺったんでは、table 要素を使用していた.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_003.html" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_003.html</a>\r
+</li></ul></li></ul><h2 id="h2-.E5.AF.BE.E5.BF.9C.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6">対応ブラウザ</h2><table class="wikitable" border="1"><tbody><tr><td>プロパティ</td><td>ie</td><td>NN</td><td>firefox</td><td>safari</td><td>chrome</td><td>opera</td></tr><tr><td>overflow:hidden</td><td>5+</td><td>6+</td><td>1+</td><td>?</td><td>1+</td><td>6+</td></tr><tr><td>position:absolute, top, left</td><td>position&amp;top:4+, left:5+</td><td>4+</td><td>1+</td><td>?</td><td>1+</td><td>6+</td></tr><tr><td>z-index</td><td>4+</td><td>4+</td><td>1+</td><td>4+</td><td>1+</td><td>6+</td></tr><tr><td>display:table,table-cell</td><td>8+</td><td>6+</td><td>2+</td><td>2+</td><td>1+</td><td>9+</td></tr></tbody></table><h3 id="h3-.E5.90.B9.E3.81.8D.E3.81.A0.E3.81.97.E5.86.85.E3.83.86.E3.82.AD.E3.82.B9.E3.83.88.E3.81.AE.E4.B8.8A.E4.B8.8B.E4.B8.AD.E5.A4.AE.E9.85.8D.E7.BD.AE">吹きだし内テキストの上下中央配置</h3><p>display:table, display:table-cell は、吹きだし内のテキストの上下中央配置に使用が検討されるが...[[BR]]\r
+<br />ie7 以下については、条件付コメントで、tableタグを使用.\r
+</p><p>html中\r
+<pre>&lt;!--[if lte IE 7]&gt;&lt;a href=&quot;#&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;\r
+ &lt;span&gt;Hello&lt;/span&gt;\r
+&lt;!--[if lte IE 7]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/a&gt;&lt;![endif]--&gt;\r
+</pre></p><p>xsl中で使うと\r
+<pre>&lt;xsl:comment&gt;&lt;![CDATA[[if lte IE 7]&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]]]&gt;&lt;/xsl:comment&gt;\r
+ &lt;span&gt;&lt;xsl:apply-templates/&gt;&lt;/span&gt;\r
+&lt;xsl:comment&gt;&lt;![CDATA[[if lte IE 7]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;![endif]]]&gt;&lt;/xsl:comment&gt;\r
+</pre></p><p>また、firefox3.5 について、display:table 周りのバグについて報告されている.\r
+</p><blockquote class="citation"><p>Project IE: Firefox 3.5 の display: table;(table-row; table-cell;) 関連の挙動について[[BR]]\r
+<br /><a href="http://ie-style.blogspot.com/2009/08/firefox-35-display-tabletable-row-table.html" class="external" rel="nofollow">http://ie-style.blogspot.com/2009/08/firefox-35-display-tabletable-row-table.html</a><br />\r
+CSSで display: table-cell; を指定してマルチカラムレイアウトを行っている場合に Firefox 3.5 だとまれにカラム落ちしてしまうという現象が起きてしまいます。\r
+</p></blockquote><p>記事によると、display:table-cell に対して、display:table でなく、display:table-row を使っておくのがいいそうだ.</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/LocalWiki">\r
+    <title>LocalWiki</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/LocalWiki</link>\r
+    <dc:identifier>LocalWiki</dc:identifier>\r
+    <dc:date>2012-01-10T01:06:42+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ローカルでの wiki の閲覧 と Wiki のバックアップ\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/980/640x640_0.png)]]\r
+\r
+== ネットが無い環境でも wiki を見る\r
+\r
+=== 動作確認ブラウザ\r
+ie8, firefox3.6\r
+\r
+=== 用意\r
+ * clientJs.git を落として、client]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.83.AD.E3.83.BC.E3.82.AB.E3.83.AB.E3.81.A7.E3.81.AE.20wiki.20.E3.81.AE.E9.96.B2.E8.A6.A7.20.E3.81.A8.20Wiki.20.E3.81.AE.E3.83.90.E3.83.83.E3.82.AF.E3.82.A2.E3.83.83.E3.83.97">ローカルでの wiki の閲覧 と Wiki のバックアップ</h1><img src="http://static.sourceforge.jp/thumb/g/2/980/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9802f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+</p><h2 id="h2-.E3.83.8D.E3.83.83.E3.83.88.E3.81.8C.E7.84.A1.E3.81.84.E7.92.B0.E5.A2.83.E3.81.A7.E3.82.82.20wiki.20.E3.82.92.E8.A6.8B.E3.82.8B">ネットが無い環境でも wiki を見る</h2><h3 id="h3-.E5.8B.95.E4.BD.9C.E7.A2.BA.E8.AA.8D.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6">動作確認ブラウザ</h3><p>ie8, firefox3.6\r
+</p><h3 id="h3-.E7.94.A8.E6.84.8F">用意</h3><ul><li>clientJs.git を落として、clientJs/0.3.0/wiki/wiki.xml をブラウザで開く.但し、wiki.xml が最新でない場合に注意!\r
+</li><li>または、以下を見て必要最小限のファイルを DL して配置.\r
+</li></ul><p>公開フィード一覧にある <a href="http://sourceforge.jp/projects/pettanr/feeds/">http://sourceforge.jp/projects/pettanr/feeds/</a>\r
+wiki 全文 をDLして、wiki.xml という名前で保存. <a href="http://sourceforge.jp/projects/pettanr/wiki/!feeds/list">http://sourceforge.jp/projects/pettanr/wiki/!feeds/list</a>\r
+</p><p>.xml の 2行目に .xsl へのリンクを追加.\r
+<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;\r
+&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;wiki.xsl&quot;?&gt;\r
+</pre></p><p>さらに、以下のファイル を DL.\r
+</p><ul><li>wiki/wiki.xsl\r
+<ul><li><a href="http://pettanr.sourceforge.jp/wiki/wiki.xsl" class="external" rel="nofollow">http://pettanr.sourceforge.jp/wiki/wiki.xsl</a>\r
+</li></ul></li><li>wiki/wiki.css\r
+<ul><li><a href="http://pettanr.sourceforge.jp/wiki/wiki.css" class="external" rel="nofollow">http://pettanr.sourceforge.jp/wiki/wiki.css</a>\r
+</li></ul></li><li>wiki/wiki.js\r
+<ul><li><a href="http://pettanr.sourceforge.jp/wiki/wiki.js" class="external" rel="nofollow">http://pettanr.sourceforge.jp/wiki/wiki.js</a>\r
+</li></ul></li><li>common.css pettanR 共通 css\r
+<ul><li><a href="http://pettanr.sourceforge.jp/common.css" class="external" rel="nofollow">http://pettanr.sourceforge.jp/common.css</a>\r
+</li></ul></li><li>common.css pettanR 共通 js\r
+<ul><li><a href="http://pettanr.sourceforge.jp/common.js" class="external" rel="nofollow">http://pettanr.sourceforge.jp/common.js</a>\r
+</li></ul></li></ul><p>以下のように配置する.\r
+</p><ul><li>common.css\r
+</li><li>common.js\r
+</li><li>wiki フォルダ\r
+<ul><li>wiki.xml\r
+</li><li>wiki.xsl\r
+</li><li>wiki.css\r
+</li><li>wiki.js\r
+</li></ul></li></ul><h3 id="h3-.E6.B3.A8.E6.84.8F">注意</h3><p>ブラウザは、Firefox と IE で確認. 他のブラウザだと、ブラウザが独自の .xsl をあててしまう.<br />\r
+また .xml が web 上にあると、ブラウザが独自の .xsl をあててしまう.<br />\r
+外部のリンクは赤く、wiki の他のページへのリンクは 緑 で表示.<br />\r
+</p><h2 id="h2-Wiki.20.E3.81.AE.E3.83.90.E3.83.83.E3.82.AF.E3.82.A2.E3.83.83.E3.83.97">Wiki のバックアップ</h2><p>wiki 全文配信フィードの <a href="http://sourceforge.jp/projects/pettanr/wiki/!feeds/list">http://sourceforge.jp/projects/pettanr/wiki/!feeds/list</a> を Google リーダーに登録しておく.</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors">\r
+    <title>ForAuthors</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ForAuthors</link>\r
+    <dc:identifier>ForAuthors</dc:identifier>\r
+\r
+    <dc:date>2012-01-06T19:53:55+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[== 奥行きzと時間軸t\r
+コミックの各コマには奥行きと時間軸があります。\r
+\r
+奥行きとは、キャラクターの重なり順序とも言いかえることができて、CSS上ではzindexと同じ意味です。\r
+\r
+時間軸はストーリー上での時間の流れの順序で、読者がフキダシやキャラクターを目で追う順序とも言えます。コマのデータを時間軸順に並べれば、台本を読むのと同じになるイメージです。\r
+\r
+これらをコミック上で正しく]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h2 id="h2-.E5.A5.A5.E8.A1.8C.E3.81.8Dz.E3.81.A8.E6.99.82.E9.96.93.E8.BB.B8t">奥行きzと時間軸t</h2><p>コミックの各コマには奥行きと時間軸があります。\r
+</p><p>奥行きとは、キャラクターの重なり順序とも言いかえることができて、CSS上ではzindexと同じ意味です。\r
+</p><p>時間軸はストーリー上での時間の流れの順序で、読者がフキダシやキャラクターを目で追う順序とも言えます。コマのデータを時間軸順に並べれば、台本を読むのと同じになるイメージです。\r
+</p><p>これらをコミック上で正しく並べるために、奥行きzと時間軸tが用意してあります。奥行きに関してはエディタでビジュアルに操作している限り問題ありません。しかし、コマの外観だけを見て制作すると、時間軸は必ず正しく並ぶというわけではありません。時間軸を意識することで、より違和感のない漫画ができるとぺったんRでは考えています。画像がきれいに表示されない環境や読み上げソフトなどを使った場合は、特に効果があるはずです。\r
+</p><h2 id="h2-.E3.83.A6.E3.83.8B.E3.83.BC.E3.82.AF.E3.81.AA.E5.A5.A5.E8.A1.8C.E3.81.8D.E3.83.87.E3.83.BC.E3.82.BF.E4.BD.9C.E6.88.90">ユニークな奥行きデータ作成</h2><p>ページ内で同じzindexを持っては意味がありません。そこでzが重ならないようにデータをユニークに作成する必要があります。\r
+</p><h2 id="h2-.E3.83.A6.E3.83.8B.E3.83.BC.E3.82.AF.E3.81.AA.E6.99.82.E9.96.93.E8.BB.B8.E3.83.87.E3.83.BC.E3.82.BF.E4.BD.9C.E6.88.90">ユニークな時間軸データ作成</h2><ul><li>コマ単位でtを順序づけ。\r
+<ul><li>コミック表示など複数のコマが表示される場合は、コマ番号tからのオフセット\r
+</li><li>例えば、コマ1にオブジェクトが4つあるとき、コマ2のtは4から始まる。\r
+</li><li>コマ2に6つのオブジェクトがあるなら、コマ3のtは10から始まる。\r
+</li><li>コマ3に添付されたコマ絵のtが2なら、コマ3のt(オフセット)10+2で12\r
+<ul><li>まぁ、ここはクライアントが好きにしていい話か。別に1-2とか2-3で管理してもいいけど。\r
+</li></ul></li></ul></li><li>tは0から始まる\r
+</li><li>コマpanels内でコマ絵panel_picturesとフキダシ枠speach_balloonのtは重なっちゃだめ。両者は同じレベル。\r
+<ul><li>ただし、フキダシ枠speach_balloonの中にあるセリフspeachesは一つレベルが下。セリフspeachesのtは一つのフキダシ枠speach_balloonの中でユニーク。ほとんどのフキダシにはセリフスペースは一個しかないから、多段フキダシを除けばspeaches.tは常に0。\r
+</li></ul></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">\r
+    <title>XbackendReversibleImage</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage</link>\r
+    <dc:identifier>XbackendReversibleImage</dc:identifier>\r
+    <dc:date>2012-01-06T08:09:10+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クロスバックエンドな反転画像機能\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/933/640x640_0.png)]]\r
+ぺったん運営時から、画像を反転させて使用したい、という要望はあった.[[BR]]\r
+とくにキャラクター画像を左右に反転させたい、という要望だ.[[BR]]\r
+\r
+ぺったんR では、その反転に取り組む.[[BR]]\r
+サーバ]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.AD.E3.82.B9.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89.E3.81.AA.E5.8F.8D.E8.BB.A2.E7.94.BB.E5.83.8F.E6.A9.9F.E8.83.BD">クロスバックエンドな反転画像機能</h1><img src="http://static.sourceforge.jp/thumb/g/2/933/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9332f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+ぺったん運営時から、画像を反転させて使用したい、という要望はあった.[[BR]]\r
+<br />とくにキャラクター画像を左右に反転させたい、という要望だ.[[BR]]\r
+<br /></p><p>ぺったんR では、その反転に取り組む.[[BR]]\r
+<br />サーバー側での反転画像の準備と、ブラウザでのクロスバックエンドな対応、という二段構えだ.[[BR]]\r
+<br /></p><h2 id="h2-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E5.81.B4.E3.81.A7.E3.81.AE.E3.82.AF.E3.83.AD.E3.82.B9.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89.E3.81.AA.E5.8F.8D.E8.BB.A2.E8.A1.A8.E7.A4.BA">ブラウザ側でのクロスバックエンドな反転表示</h2><h3 id="h3-.E3.81.AF.E3.81.98.E3.82.81.E3.81.AB">はじめに</h3><p>ブラウザのネイティブな反転表示機能(css3)および、ブラウザの独自拡張や Flash 等のプラグインを使用する.[[BR]]\r
+<br />これらの機能をサポートしない、または切っているブラウザは、サーバー側で生成した画像を利用することになる.[[BR]]\r
+<br />ブラウザ側でなるべく画像を用意しサーバーへの負荷を極力抑えます.\r
+</p><h3 id="h3-.E4.BD.BF.E7.94.A8.E3.81.99.E3.82.8B.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89">使用するバックエンド</h3><h4 id="h4-css3">css3</h4><p>例\r
+<pre>img.img-flip-v { /* 上下反転 */\r
+       transform:              scale( 1, -1);\r
+       -o-transform:           scale( 1, -1);\r
+       -ms-transform:          scale( 1, -1);\r
+       -moz-transform:         scale( 1, -1);\r
+       -webkit-transform:      scale( 1, -1);\r
+}      \r
+img.img-flip-h { /* 左右反転 */\r
+       transform:              scale( -1, 1);\r
+       -o-transform:           scale( -1, 1);\r
+       -ms-transform:          scale( -1, 1);\r
+       -moz-transform:         scale( -1, 1);\r
+       -webkit-transform:      scale( -1, 1);\r
+}\r
+img.img-flip-vh { /* 上下左右反転 */\r
+       transform:              scale( -1, -1);\r
+       -o-transform:           scale( -1, -1);\r
+       -ms-transform:          scale( -1, -1);\r
+       -moz-transform:         scale( -1, -1);\r
+       -webkit-transform:      scale( -1, -1);\r
+}\r
+</pre></p><h4 id="h4-VML">VML</h4><p>例\r
+<pre>v\:image.img-flip-v {\r
+       flip:                   y; /* vml */\r
+}\r
+v\:image.img-flip-h {\r
+       flip:                   x; /* vml */\r
+}v\:image.img-flip-vh {\r
+       rotation :              180; /* vml */\r
+}\r
+</pre>ie独自拡張の VML が ie6~8 での反転画像の本命となる.上記のように vml 用の css も使える.(ただし js による css の適用にくせがある.)[[BR]]\r
+<br />VML で表示された画像は、ie6 以下にある透過 png の問題も解消される.(但し ie6 のみ.ie5.5 以下では透過表示が不十分)[[BR]]\r
+<br /></p><blockquote class="citation"><p>Windows版 IE 5以降の VMLレンダラで半透明、透過PNGを表示する[[BR]]\r
+<br /><a href="http://www.minc.ne.jp/~konda/new/png/urawaza04.html" class="external" rel="nofollow">http://www.minc.ne.jp/~konda/new/png/urawaza04.html</a><br />\r
+IE 5 及び 5.5 (5.50.4133.200)の vgx.dll(Microsoft Vector Graphics Rendering(VML))は、Beta バージョンですから 半透明系は、以下の画像の様に擬似半透明表示(ディザリング)されます\r
+</p></blockquote><pre>&lt;!--[if !gte vml 1]&gt;&lt;!--&gt;&lt;img src=&quot;*.png&quot; width=&quot;*&quot; height=&quot;*&quot; alt=&quot;*&quot; /&gt;&lt;!--&lt;![endif]--&gt;\r
+&lt;!--[if gte vml 1]&gt;&lt;v:image src=&quot;*.png&quot; style=&quot;width: *px; height: *px; behavior: url(#default#vml)&quot; alt=&quot;*&quot; /&gt;&lt;![endif]--&gt;\r
+</pre><p>さらに、ActiveX よりも動作が速い(らしい).[[BR]]\r
+<br />但し VML は windows の構成によってはインストールされていない場合があり、必ずしも使えるわけではない.[[BR]]\r
+<br />itozyun の環境のひとつでも VML が使えなかった.nlite で削ってしまったためと思われる.\r
+</p><h3 id="h3-SVG">SVG</h3><p>svg な xml を js で作って data スキームで読み込む。Opera8+ でも画像反転できるかも。Opera9.6 で静的に埋め込んだ以上の html では反転表示ができた。ただし Firefox3.6 Chrome8 では表示できない。[[BR]]\r
+<br />dataスキームになった svg に対しては、画像の url を絶対座標で与える。\r
+svg を html に直接埋め込む方式では、なぜか手元で一度も成功していない。\r
+<pre>&lt;?xml version=&quot;1.0&quot;?&gt;\r
+&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;\r
+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; version=&quot;1.1&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;200&quot; height=&quot;200&quot;&gt;\r
+&lt;image x=&quot;0&quot; y=&quot;0&quot; width=&quot;200&quot; height=&quot;200&quot; xlink:href=&quot;1.gif&quot; transform=&quot;scale(-1,1) translate(-200,0)&quot; /&gt;\r
+&lt;/svg&gt;\r
+</pre></p><ul><li><a href="http://software.hixie.ch/utilities/cgi/data/data" class="external" rel="nofollow">http://software.hixie.ch/utilities/cgi/data/data</a>\r
+</li><li>サイトの表示スピードを改善!dataスキームURIを使った画像の埋め込み http://labs.cybridge.jp/2011/12/data-uri.html\r
+<a href="http://labs.cybridge.jp/2011/12/data-uri.html" class="external" rel="nofollow">http://labs.cybridge.jp/2011/12/data-uri.html</a><ul><li>データスキーム対応ブラウザ \r
+</li><li>Firefox2+\r
+</li><li>Safari\r
+</li><li>Chrome\r
+</li><li>Opera7.2+\r
+</li><li>IE8+\r
+</li></ul></li></ul><pre>&lt;img src=&quot;data:image/svg+xml;charset=utf-8,%3c%3fxml%20version%3d%221.0%22%3f%3e%3c!DOCTYPE%20svg%20PUBLIC%20%22-%2f%2fW3C%2f%2fDTD%20SVG%201.1%2f%2fEN%22%20%22http%3a%2f%2fwww.w3.org%2fGraphics%2fSVG%2f1.1%2fDTD%2fsvg11.dtd%22%3e%3csvg%20xmlns%3d%22http%3a%2f%2fwww.w3.org%2f2000%2fsvg%22%20version%3d%221.1%22%20xmlns%3axlink%3d%22http%3a%2f%2fwww.w3.org%2f1999%2fxlink%22%20width%3d%22200%22%20height%3d%22200%22%3e%3cimage%20x%3d%220%22%20y%3d%220%22%20width%3d%22200%22%20height%3d%22200%22%20xlink%3ahref%3d%22http%3a%2f%2fstatic.sourceforge.jp%2fthumb%2fg%2f2%2f930%2f640x640_0.png%22%20transform%3d%22scale(-1%2c1)%20translate(-200%2c0)%22%20%2f%3e%3c%2fsvg%3e&quot;&gt;\r
+</pre><h4 id="h4-ActiveX">ActiveX</h4><pre>img.img-flip-v { /* 上下反転 */\r
+       filter:                 progid:DXImageTransform.Microsoft.BasicImage( Mirror=1, Rotation=2);\r
+       -ms-filter:             progid:DXImageTransform.Microsoft.BasicImage( Mirror=1, Rotation=2);\r
+}\r
+img.img-flip-h { /* 左右反転 */\r
+       filter:                 progid:DXImageTransform.Microsoft.BasicImage( Mirror=1);\r
+       -ms-filter:             progid:DXImageTransform.Microsoft.BasicImage( Mirror=1);\r
+}\r
+img.img-flip-vh { /* 上下左右反転 */\r
+       filter:                 progid:DXImageTransform.Microsoft.BasicImage( Rotation=2);\r
+       -ms-filter:             progid:DXImageTransform.Microsoft.BasicImage( Rotation=2);\r
+}\r
+</pre><p>ActiveX は、ie6 以下のための pngfix にも使いたいが、反転とAlpha Image Loader を同時に使用することはできない.[[BR]]\r
+<br />ie6では、ActiveX による反転は、png 画像に対しては使用できない.\r
+</p><h4 id="h4-Flash">Flash</h4><p>クロスドメインな画像に対しても、読み込み、反転表示は行える.[[BR]]\r
+<br />なるべく バージョンの古い Flash で用意してサポート範囲を広くしたいが、js と連携する ExternalInterface が使えなくなったりと多難かもしれない.\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/ExternalInterface">ExternalInterface</a></p><h4 id="h4-Canvas">Canvas</h4><p>同一ドメインの画像のみになるが、画像のピクセルデータを取得し反転しつつ描画することができる.[[BR]]\r
+<br /></p><blockquote class="citation"><p>Canvasによる画像ファイル(img要素)の読み書き[[BR]]\r
+<br /><a href="http://www.programmingmat.jp/webhtml_lab/canvas_image.html" class="external" rel="nofollow">http://www.programmingmat.jp/webhtml_lab/canvas_image.html</a>\r
+</p></blockquote><h4 id="h4-Silverlight">Silverlight</h4><h4 id="h4-.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E3.82.B5.E3.82.A4.E3.83.89.E7.94.BB.E5.83.8F">サーバーサイド画像</h4><p>サーバー側で反転画像を用する.このサーバ画像へのアクセスを極力減らすのが、X Backend Imageの目的のひとつ.\r
+<pre>picture/001.png\r
+picture/v/001.png\r
+picture/h/001.png\r
+picture/vh/001.png\r
+</pre></p><h3 id="h3-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E6.A9.9F.E8.83.BD.E5.AF.BE.E5.BF.9C.E8.A1.A8">ブラウザ機能対応表</h3><table class="wikitable" border="1"><tbody><tr><td>バックエンド</td><td>ie5+5.5</td><td>ie6</td><td>ie7 &amp; 8</td><td>ie9+</td><td>FF</td><td>Safari</td><td>Chrome</td><td>Opera</td></tr><tr><td>CSS3:transform</td><td>×</td><td>×</td><td>×</td><td>○</td><td>3.5+</td><td>3.1+(?)</td><td>1+</td><td>10.5+</td></tr><tr><td>VML</td><td>▲透過pngの表示が汚い</td><td>△</td><td>△環境による</td><td>?</td><td>×</td><td>×</td><td>×</td><td>×</td></tr><tr><td>Canvas</td><td>×</td><td>×</td><td>×</td><td>○</td><td>1.5+</td><td>1.3+</td><td>1+</td><td>9+</td></tr><tr><td>SVG +DATAスキーム</td><td>×</td><td>×</td><td>×</td><td>?</td><td>?</td><td>?</td><td>?</td><td>8+(?)</td></tr><tr><td>サーバー画像</td><td>△</td><td>△要pngfix</td><td>○</td><td>○</td><td>○</td><td>○</td><td>○</td><td>○</td></tr></tbody></table>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc">\r
+    <title>ChangeDoc</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc</link>\r
+\r
+    <dc:identifier>ChangeDoc</dc:identifier>\r
+    <dc:date>2012-01-04T18:19:48+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 改変予告\r
+== モデルの変名\r
+\r
+balloon_templates\r
+ * border &rarr; size\r
+ * min_width &rarr; \r
+ * max_width &rarr; \r
+ * min_height &rarr; \r
+ * max_height &rarr; \r
+balloons \r
+ * border &rarr; size\r
+ * zindex &ra]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E6.94.B9.E5.A4.89.E4.BA.88.E5.91.8A">改変予告</h1><h2 id="h2-.E3.83.A2.E3.83.87.E3.83.AB.E3.81.AE.E5.A4.89.E5.90.8D">モデルの変名</h2><p>balloon_templates\r
+</p><ul><li>border → size\r
+</li><li>min_width → \r
+</li><li>max_width → \r
+</li><li>min_height → \r
+</li><li>max_height → \r
+</li></ul><p>balloons \r
+</p><ul><li>border → size\r
+</li><li>zindex → z\r
+</li><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>width → \r
+</li><li>height → \r
+</li></ul><p>comics \r
+</p><ul><li>default_width → width\r
+</li><li>default_height → height\r
+</li></ul><p>original_pictures\r
+</p><ul><li>width → \r
+</li><li>height → \r
+</li></ul><p>panel_pictures\r
+</p><ul><li>width → \r
+</li><li>height → \r
+</li><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>zindex → z\r
+</li><li>v → flipv\r
+</li><li>h → fliph\r
+</li></ul><p>panels\r
+</p><ul><li>width → \r
+</li><li>height → \r
+</li><li>seqno → t\r
+</li></ul><p>speach_balloons\r
+</p><ul><li>tail_limit → tail_count\r
+</li><li>border_limit → size_count\r
+</li></ul><p>speach_templates\r
+</p><ul><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>width → \r
+</li><li>height → \r
+</li></ul><p>speaches\r
+</p><ul><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>width → \r
+</li><li>height → \r
+</li></ul><p>balloons \r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ストーリー上の順序も品質に関わるため\r
+</p><p>speaches\r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ストーリー上の順序も品質に関わるため\r
+</p><p>panels\r
+<table class="wikitable" border="1"><tbody><tr><td>x</td><td>表示位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>y</td><td>表示位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>z</td><td>表示優先順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:将来の拡張に備えるため\r
+</p><p>panel_pictures\r
+<table class="wikitable" border="1"><tbody><tr><td>url</td><td>リンク</td><td>string</td><td> </td><td> </td><td>200</td><td>参照するページをリンクできる</td></tr></tbody></table></p><p>追加理由:本家から取り込んでなかった\r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ストーリー上の順序も品質に関わるため\r
+</p><p>lisences\r
+<table class="wikitable" border="1"><tbody><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ie6がpng透過できないためgif変換の必要ができたため\r
+</p><p>common_lisences\r
+<table class="wikitable" border="1"><tbody><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ie6がpng透過できないためgif変換の必要ができたため\r
+</p><p>original_lisences\r
+<table class="wikitable" border="1"><tbody><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ie6がpng透過できないためgif変換の必要ができたため\r
+</p><p>comics\r
+<table class="wikitable" border="1"><tbody><tr><td>visible</td><td>公開フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>可視範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>editable</td><td>編集フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>許可範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr></tbody></table></p><p>追加理由:本家から取り込んでなかった\r
+</p><p>speach_balloons\r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>表示順</td><td>integer</td><td>1</td><td>false</td><td> </td><td>ファイルエクスプローラーなどで</td></tr></tbody></table></p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema">\r
+    <title>DatabaseSchema</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema</link>\r
+    <dc:identifier>DatabaseSchema</dc:identifier>\r
+    <dc:date>2012-01-04T18:05:04+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= 定義\r
+超やっつけだけど、無いよりはマシか。\r
+\r
+{{{\r
+ActiveRecord::Schema.define(:version =&gt; 20120102071851) do\r
+\r
+  create_table &quot;admins&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;email&quot;,        ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E5.AE.9A.E7.BE.A9">定義</h1><p>超やっつけだけど、無いよりはマシか。\r
+</p><pre>ActiveRecord::Schema.define(:version =&gt; 20120102071851) do\r
+\r
+  create_table &quot;admins&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;email&quot;,                                 :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;encrypted_password&quot;,     :limit =&gt; 128, :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;reset_password_token&quot;\r
+    t.datetime &quot;reset_password_sent_at&quot;\r
+    t.datetime &quot;remember_created_at&quot;\r
+    t.integer  &quot;sign_in_count&quot;,                         :default =&gt; 0\r
+    t.datetime &quot;current_sign_in_at&quot;\r
+    t.datetime &quot;last_sign_in_at&quot;\r
+    t.string   &quot;current_sign_in_ip&quot;\r
+    t.string   &quot;last_sign_in_ip&quot;\r
+    t.string   &quot;confirmation_token&quot;\r
+    t.datetime &quot;confirmed_at&quot;\r
+    t.datetime &quot;confirmation_sent_at&quot;\r
+    t.string   &quot;authentication_token&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;admins&quot;, [&quot;authentication_token&quot;], :name =&gt; &quot;index_admins_on_authentication_token&quot;, :unique =&gt; true\r
+  add_index &quot;admins&quot;, [&quot;confirmation_token&quot;], :name =&gt; &quot;index_admins_on_confirmation_token&quot;, :unique =&gt; true\r
+  add_index &quot;admins&quot;, [&quot;email&quot;], :name =&gt; &quot;index_admins_on_email&quot;, :unique =&gt; true\r
+  add_index &quot;admins&quot;, [&quot;reset_password_token&quot;], :name =&gt; &quot;index_admins_on_reset_password_token&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;artists&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;email&quot;\r
+    t.string   &quot;name&quot;\r
+    t.string   &quot;homepage_url&quot;\r
+    t.string   &quot;api_url&quot;\r
+    t.integer  &quot;default_lisence_id&quot;\r
+    t.datetime &quot;crowled_at&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+    t.integer  &quot;author_id&quot;\r
+  end\r
+\r
+  create_table &quot;authors&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;name&quot;\r
+    t.string   &quot;email&quot;,                                 :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;encrypted_password&quot;,     :limit =&gt; 128, :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;reset_password_token&quot;\r
+    t.datetime &quot;reset_password_sent_at&quot;\r
+    t.datetime &quot;remember_created_at&quot;\r
+    t.integer  &quot;sign_in_count&quot;,                         :default =&gt; 0\r
+    t.datetime &quot;current_sign_in_at&quot;\r
+    t.datetime &quot;last_sign_in_at&quot;\r
+    t.string   &quot;current_sign_in_ip&quot;\r
+    t.string   &quot;last_sign_in_ip&quot;\r
+    t.string   &quot;authentication_token&quot;\r
+    t.string   &quot;confirmation_token&quot;\r
+    t.datetime &quot;confirmed_at&quot;\r
+    t.datetime &quot;confirmation_sent_at&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;authors&quot;, [&quot;authentication_token&quot;], :name =&gt; &quot;index_authors_on_authentication_token&quot;, :unique =&gt; true\r
+  add_index &quot;authors&quot;, [&quot;confirmation_token&quot;], :name =&gt; &quot;index_authors_on_confirmation_token&quot;, :unique =&gt; true\r
+  add_index &quot;authors&quot;, [&quot;email&quot;], :name =&gt; &quot;index_authors_on_email&quot;, :unique =&gt; true\r
+  add_index &quot;authors&quot;, [&quot;reset_password_token&quot;], :name =&gt; &quot;index_authors_on_reset_password_token&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;balloon_templates&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;speach_balloon_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;system_picture_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;tail&quot;,              :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;size&quot;,              :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;min_width&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;max_width&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;min_height&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;max_height&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;balloon_templates&quot;, [&quot;speach_balloon_id&quot;, &quot;tail&quot;, &quot;size&quot;], :name =&gt; &quot;balloon_templates_idts&quot;, :unique =&gt; true\r
+  add_index &quot;balloon_templates&quot;, [&quot;speach_balloon_id&quot;], :name =&gt; &quot;index_balloon_templates_on_speach_balloon_id&quot;\r
+\r
+  create_table &quot;balloons&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;panel_id&quot;,                           :null =&gt; false\r
+    t.integer  &quot;balloon_template_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;system_picture_id&quot;,                  :null =&gt; false\r
+    t.integer  &quot;tail&quot;,                :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;size&quot;,                :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;x&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;z&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;t&quot;,                   :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                              :null =&gt; false\r
+    t.integer  &quot;height&quot;,                             :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;balloons&quot;, [&quot;panel_id&quot;, &quot;t&quot;], :name =&gt; &quot;balloon_idt&quot;, :unique =&gt; true\r
+  add_index &quot;balloons&quot;, [&quot;panel_id&quot;], :name =&gt; &quot;index_balloons_on_panel_id&quot;\r
+\r
+  create_table &quot;comics&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;title&quot;\r
+    t.integer  &quot;width&quot;,      :default =&gt; 200, :null =&gt; false\r
+    t.integer  &quot;height&quot;,     :default =&gt; 80,  :null =&gt; false\r
+    t.integer  &quot;visible&quot;,    :default =&gt; 0,   :null =&gt; false\r
+    t.integer  &quot;editable&quot;,   :default =&gt; 0,   :null =&gt; false\r
+    t.integer  &quot;author_id&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;comics&quot;, [&quot;author_id&quot;], :name =&gt; &quot;index_comics_on_author_id&quot;\r
+\r
+  create_table &quot;common_lisences&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;lisence_id&quot;,                       :null =&gt; false\r
+    t.string   &quot;name&quot;,                             :null =&gt; false\r
+    t.string   &quot;url&quot;,                              :null =&gt; false\r
+    t.integer  &quot;cc_by&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_sa&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nd&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nc&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_resize&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_flip&quot;,           :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_convert&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;keep_aspect_ratio&quot;, :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  create_table &quot;lisences&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;name&quot;,                             :null =&gt; false\r
+    t.string   &quot;url&quot;,                              :null =&gt; false\r
+    t.integer  &quot;cc_by&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_sa&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nd&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nc&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_resize&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_flip&quot;,           :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_convert&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;keep_aspect_ratio&quot;, :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;lisences&quot;, [&quot;url&quot;], :name =&gt; &quot;index_lisences_on_url&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;original_lisences&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;artist_id&quot;,                        :null =&gt; false\r
+    t.integer  &quot;lisence_id&quot;,                       :null =&gt; false\r
+    t.string   &quot;name&quot;,                             :null =&gt; false\r
+    t.string   &quot;url&quot;,                              :null =&gt; false\r
+    t.integer  &quot;cc_by&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_sa&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nd&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nc&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_resize&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_flip&quot;,           :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_convert&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;keep_aspect_ratio&quot;, :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  create_table &quot;original_pictures&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;ext&quot;,        :null =&gt; false\r
+    t.integer  &quot;width&quot;,      :null =&gt; false\r
+    t.integer  &quot;height&quot;,     :null =&gt; false\r
+    t.integer  &quot;filesize&quot;,   :null =&gt; false\r
+    t.integer  &quot;artist_id&quot;\r
+    t.integer  &quot;lisence_id&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;original_pictures&quot;, [&quot;artist_id&quot;], :name =&gt; &quot;index_original_pictures_on_artist_id&quot;\r
+\r
+  create_table &quot;panel_pictures&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;panel_id&quot;,                                          :null =&gt; false\r
+    t.integer  &quot;resource_picture_id&quot;,                               :null =&gt; false\r
+    t.string   &quot;url&quot;,                 :limit =&gt; 200\r
+    t.integer  &quot;x&quot;,                                                 :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                                 :null =&gt; false\r
+    t.integer  &quot;z&quot;,                                                 :null =&gt; false\r
+    t.integer  &quot;t&quot;,                                  :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                                             :null =&gt; false\r
+    t.integer  &quot;height&quot;,                                            :null =&gt; false\r
+    t.integer  &quot;flipv&quot;,                              :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;fliph&quot;,                              :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;panel_pictures&quot;, [&quot;panel_id&quot;, &quot;t&quot;], :name =&gt; &quot;panel_pictures_idt&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;panels&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;comic_id&quot;,                             :null =&gt; false\r
+    t.integer  &quot;resource_picture_id&quot;\r
+    t.integer  &quot;width&quot;,               :default =&gt; 200, :null =&gt; false\r
+    t.integer  &quot;height&quot;,              :default =&gt; 80,  :null =&gt; false\r
+    t.integer  &quot;border&quot;,              :default =&gt; 1,   :null =&gt; false\r
+    t.integer  &quot;x&quot;,                                    :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                    :null =&gt; false\r
+    t.integer  &quot;z&quot;,                                    :null =&gt; false\r
+    t.integer  &quot;t&quot;,                   :default =&gt; 1,   :null =&gt; false\r
+    t.integer  &quot;author_id&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;panels&quot;, [&quot;author_id&quot;], :name =&gt; &quot;index_panels_on_author_id&quot;\r
+  add_index &quot;panels&quot;, [&quot;comic_id&quot;, &quot;t&quot;], :name =&gt; &quot;panels_idt&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;resource_pictures&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;ext&quot;,                 :null =&gt; false\r
+    t.integer  &quot;width&quot;,               :null =&gt; false\r
+    t.integer  &quot;height&quot;,              :null =&gt; false\r
+    t.integer  &quot;filesize&quot;,            :null =&gt; false\r
+    t.integer  &quot;artist_id&quot;\r
+    t.integer  &quot;lisence_id&quot;\r
+    t.integer  &quot;original_picture_id&quot;, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  create_table &quot;speach_balloons&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;name&quot;,                      :null =&gt; false\r
+    t.integer  &quot;tail_count&quot;, :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;size_count&quot;, :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;t&quot;,          :default =&gt; 1, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;speach_balloons&quot;, [&quot;t&quot;], :name =&gt; &quot;speach_balloons_t&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;speach_templates&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;balloon_template_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;x&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;t&quot;,                   :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                              :null =&gt; false\r
+    t.integer  &quot;height&quot;,                             :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;speach_templates&quot;, [&quot;balloon_template_id&quot;, &quot;t&quot;], :name =&gt; &quot;speach_templates_idt&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;speaches&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;balloon_id&quot;,                :null =&gt; false\r
+    t.string   &quot;content&quot;\r
+    t.integer  &quot;x&quot;,                         :null =&gt; false\r
+    t.integer  &quot;y&quot;,                         :null =&gt; false\r
+    t.integer  &quot;t&quot;,          :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                     :null =&gt; false\r
+    t.integer  &quot;height&quot;,                    :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;speaches&quot;, [&quot;balloon_id&quot;, &quot;t&quot;], :name =&gt; &quot;speaches_bt&quot;, :unique =&gt; true\r
+  add_index &quot;speaches&quot;, [&quot;balloon_id&quot;], :name =&gt; &quot;index_speaches_on_balloon_id&quot;\r
+\r
+  create_table &quot;system_pictures&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;ext&quot;,        :null =&gt; false\r
+    t.integer  &quot;width&quot;,      :null =&gt; false\r
+    t.integer  &quot;height&quot;,     :null =&gt; false\r
+    t.integer  &quot;filesize&quot;,   :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+end\r
+\r
+</pre>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController">\r
+    <title>SpeachBalloonsController</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController</link>\r
+    <dc:identifier>SpeachBalloonsController</dc:identifier>\r
+    <dc:date>2012-01-04T07:58:05+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= フキダシテンプレート\r
+コマ上に添付するためのフキダシ見本と、それを管理する処理。主に二つの使われ方をする。\r
+\r
+ * 作家が使うエディタ上のフキダシエクスプローラーで見本として表示するための情報をjsonで返す。\r
+ * 管理者がフキダシの基礎情報をメンテナンスする。\r
+\r
+メンテナンスはjson経由で行うことが多い。枠テンプレートとセリフテンプレートのすべての情報を同時に更新する必要があ]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">フキダシテンプレート</h1><p>コマ上に添付するためのフキダシ見本と、それを管理する処理。主に二つの使われ方をする。\r
+</p><ul><li>作家が使うエディタ上のフキダシエクスプローラーで見本として表示するための情報をjsonで返す。\r
+</li><li>管理者がフキダシの基礎情報をメンテナンスする。\r
+</li></ul><p>メンテナンスはjson経由で行うことが多い。枠テンプレートとセリフテンプレートのすべての情報を同時に更新する必要があるためである。詳しくはAboutSpeachBalloon。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">AboutSpeachBalloon</a></p><p>参考:Spea<a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonModel">SpeachBalloonModel</a></p><h2 id="h2-index">index</h2><p>一覧形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家/管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>○</td></tr></tbody></table></p><p>主にクライアントのエディタがフキダシリストを得るために使う。全レコードがt順で返る。\r
+</p><p>html形式では、管理者がメンテナンスのために閲覧する。重要なカラムの情報が一覧で表示されるほか、showへの誘導と、削除のボタンが配置される。\r
+</p><h2 id="h2-show">show</h2><p>単票形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>管理者がメンテナンスのために閲覧する機能。\r
+</p><h2 id="h2-create">create</h2><p>作成\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>json形式で</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>×</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>管理者がフキダシを追加するための機能。\r
+</p><p>jsonデータを元にフキダシテンプレートを作成する。データ作成方法はHowToMakeSpeachBalloonを見る。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">HowToMakeSpeachBalloon</a></p><h2 id="h2-update">update</h2><p>更新\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>×</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>管理者がフキダシを修正するための機能。\r
+</p><p>指定されたidのフキダシテンプレートを、jsonデータを元に更新する。データ作成方法はHowToMakeSpeachBalloonを見る。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">HowToMakeSpeachBalloon</a></p><h3 id="h3-.E4.BE.8B.E5.A4.96">例外</h3><p>権限がないアカウントで要求された場合は、処理を中断し、サインインを促すページに遷移する。\r
+指定されたidが存在しない場合は、404エラーコードが返る。\r
+</p><h2 id="h2-destroy">destroy</h2><p>削除\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>指定されたidのフキダシテンプレートを削除する。フキダシテンプレートだけでなく、枠テンプレートとセリフテンプレートも同時に削除される。\r
+</p><h3 id="h3-.E4.BE.8B.E5.A4.96-2">例外</h3><p>権限がないアカウントで要求された場合は、処理を中断し、サインインを促すページに遷移する。\r
+指定されたidが存在しない場合は、404エラーコードが返る。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel">\r
+    <title>PanelPictureModel</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel</link>\r
+    <dc:identifier>PanelPictureModel</dc:identifier>\r
+\r
+    <dc:date>2012-01-03T12:34:36+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コマ絵\r
+コマ上に添付された素材に関するデータ。\r
+\r
+参考:PanelPicturesController\r
+\r
+== カラム\r
+\r
+== 作成手順\r
+コマ絵は常にパネル経由で作成されるため、PanelsControllerからjsonフォーマットで送信する。\r
+\r
+コマ絵は素材のコピーなので、素材ResourcePictureModelのデータを元に作成する。行の新規作成時はデフォルト値と]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9E.E7.B5.B5">コマ絵</h1><p>コマ上に添付された素材に関するデータ。\r
+</p><p>参考:Pane<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController">PanelPicturesController</a></p><h2 id="h2-.E3.82.AB.E3.83.A9.E3.83.A0">カラム</h2><h2 id="h2-.E4.BD.9C.E6.88.90.E6.89.8B.E9.A0.86">作成手順</h2><p>コマ絵は常にパネル経由で作成されるため、PanelsControllerからjsonフォーマットで送信する。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelsController">PanelsController</a></p><p>コマ絵は素材のコピーなので、素材ResourcePictureModelのデータを元に作成する。<a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">ResourcePictureModel</a>のように値をコピーすること。\r
+</p><table class="wikitable" border="1"><tbody><tr><td><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPicture">PanelPicture</a></td><td><a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePicture">ResourcePicture</a></td></tr><tr><td>width</td><td>width</td></tr></tbody></table>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">\r
+    <title>ResourcePictureModel</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel</link>\r
+    <dc:identifier>ResourcePictureModel</dc:identifier>\r
+    <dc:date>2012-01-03T11:56:43+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 素材\r
+絵師から提供された原画OriginalPictureModelをコマPanel上で扱いやすいように整えた画像に関するデータ。\r
+\r
+参考:ResourcePicturesController\r
+\r
+== カラム\r
+\r
+== 作成手順\r
+]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E7.B4.A0.E6.9D.90">素材</h1><p>絵師から提供された原画OriginalPictureModelをコ<a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPictureModel">OriginalPictureModel</a>像に関するデータ。\r
+</p><p>参考:Reso<a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePicturesController">ResourcePicturesController</a></p><h2 id="h2-.E3.82.AB.E3.83.A9.E3.83.A0">カラム</h2><h2 id="h2-.E4.BD.9C.E6.88.90.E6.89.8B.E9.A0.86">作成手順</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController">\r
+    <title>PanelPicturesController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController</link>\r
+\r
+    <dc:identifier>PanelPicturesController</dc:identifier>\r
+    <dc:date>2012-01-03T11:39:51+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コマ絵\r
+コマ上に添付された素材に関する処理。\r
+\r
+コマ絵の操作はパネル経由でしか許可されていないので、処理することはない。かろうじて管理者がレコード値を閲覧できるのみである。\r
+\r
+参考:PanelPictureModel\r
+\r
+== index\r
+一覧形式\r
+||パラメータ||なし||\r
+||権限||管理者||\r
+\r
+== show\r
+単票形式\r
+||パラメータ||id||\r
+||権限|]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9E.E7.B5.B5">コマ絵</h1><p>コマ上に添付された素材に関する処理。\r
+</p><p>コマ絵の操作はパネル経由でしか許可されていないので、処理することはない。かろうじて管理者がレコード値を閲覧できるのみである。\r
+</p><p>参考:Pane<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel">PanelPictureModel</a></p><h2 id="h2-index">index</h2><p>一覧形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>管理者</td></tr></tbody></table></p><h2 id="h2-show">show</h2><p>単票形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr></tbody></table></p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">\r
+    <title>XbackendSpeachBalloon</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon</link>\r
+    <dc:identifier>XbackendSpeachBalloon</dc:identifier>\r
+    <dc:date>2012-01-02T01:06:05+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= クロスバックエンドな吹きだし表示機能\r
+\r
+ぺったんRの吹きだしは、さまざまな尻尾の向きを持つ吹きだし画像を用意します.[[BR]]\r
+また、吹き出しが巨大になったときに、吹きだしの枠線も太ってしまわないように、枠線のバリエーションも複数用意します.[[BR]]\r
+\r
+吹きだし画像は gif で注意深く用意されるため一枚につき、数キロバイトという軽量なものです.しかしコマの編集時にはユーザーが]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.AD.E3.82.B9.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89.E3.81.AA.E5.90.B9.E3.81.8D.E3.81.A0.E3.81.97.E8.A1.A8.E7.A4.BA.E6.A9.9F.E8.83.BD">クロスバックエンドな吹きだし表示機能</h1><p>ぺったんRの吹きだしは、さまざまな尻尾の向きを持つ吹きだし画像を用意します.[[BR]]\r
+<br />また、吹き出しが巨大になったときに、吹きだしの枠線も太ってしまわないように、枠線のバリエーションも複数用意します.[[BR]]\r
+<br /></p><p>吹きだし画像は gif で注意深く用意されるため一枚につき、数キロバイトという軽量なものです.しかしコマの編集時にはユーザーが操作している間にそのすべてのバリエーションを読み込んでしまう事態になります.[[BR]]\r
+<br />また、マンガという表現スタイルを考えると、キャラクター画像一枚に対して、ひとつ程度の吹き出しが登場する、と仮定するという仮定で、ぺったんのページ読み込み時の全画像アクセスのうち、半分を吹きだし画像が締めることになる試算です.[[BR]]\r
+<br />(もちろん、キャラクター画像の方がはるかにファイルサイズが大きくなります.注意深く容量を抑えて作られた場合でも 10KB ~ 20KB という試算です.)[[BR]]\r
+<br /></p><p>このような、吹きだし画像へのアクセスを抑止して、サービスの安定を図るためベクター画像をサポートするブラウザについては、ブラウザ側で吹きだし画像を用意します.\r
+</p><h1 id="h1-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E6.A9.9F.E8.83.BD.E5.AF.BE.E5.BF.9C.E8.A1.A8">ブラウザ機能対応表</h1><table class="wikitable" border="1"><tbody><tr><td>バックエンド</td><td>ie5~8</td><td>ie9+</td><td>FF</td><td>safari</td><td>chrome</td><td>Opera</td></tr><tr><td>VML</td><td>○</td><td>?</td><td>×</td><td>×</td><td>×</td><td>×</td></tr><tr><td>SVG</td><td>×</td><td>○</td><td>1.5+</td><td>3.0+</td><td>1+</td><td>8+</td></tr></tbody></table>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">\r
+    <title>HowToMakeSpeachBalloon</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon</link>\r
+    <dc:identifier>HowToMakeSpeachBalloon</dc:identifier>\r
+    <dc:date>2012-01-01T01:59:53+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[== フキダシテンプレート\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/949/640x640_0.png)]]\r
+フキダシテンプレートを追加するには尻尾の向きと枠のサイズのバリエーションがいくつになるかを決定しなければなりません。\r
+尻尾のバリエーション数をtail_limit、枠のバリエーション数を_limitとして決定してください。\r
+そし]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">フキダシテンプレート</h2><img src="http://static.sourceforge.jp/thumb/g/2/949/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9492f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+フキダシテンプレートを追加するには尻尾の向きと枠のサイズのバリエーションがいくつになるかを決定しなければなりません。\r
+尻尾のバリエーション数をtail_limit、枠のバリエーション数を_limitとして決定してください。\r
+そして、それらすべての組み合わせの枠テンプレートとテキストテンプレートを用意してください。一つでも欠けると追加できません。\r
+</p><p>例えば、尻尾が上下左右ならtail_limitが4。サイズが大中小ならで_limitが3で、4*3で合計12の枠テンプレートとテキストテンプレートを用意します。\r
+</p><p>→tail ↓Border\r
+<table class="wikitable" border="1"><tbody><tr><td> </td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>1</td><td>小-上</td><td>小-右</td><td>小-下</td><td>小-左</td></tr><tr><td>2</td><td>中-上</td><td>中-右</td><td>中-下</td><td>中-左</td></tr><tr><td>3</td><td>大-上</td><td>大-右</td><td>大-下</td><td>大-左</td></tr></tbody></table></p><p>フキダシテンプレートに必要な項目は以下です。\r
+<table class="wikitable" border="1"><tbody><tr><td>項目名</td><td>意味</td><td>備考</td></tr><tr><td>name</td><td>フキダシの名前</td><td> </td></tr><tr><td>tail_limit</td><td>尻尾のバリエーション数</td><td> </td></tr><tr><td>border_limit</td><td>サイズのバリエーション数</td><td> </td></tr></tbody></table></p><h2 id="h2-.E6.9E.A0.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">枠テンプレート</h2><p>枠は画像で用意します。フキダシ用の画像を用意して素材として投稿します。\r
+各種フキダシ素材を投稿したらIDをメモします。\r
+</p><p>枠テンプレートに必要な項目は以下です。\r
+<table class="wikitable" border="1"><tbody><tr><td>項目名</td><td>意味</td><td>備考</td></tr><tr><td>resource_picture_id</td><td>フキダシ素材のID</td><td> </td></tr><tr><td>tail</td><td>尻尾の番号</td><td>1から始まりtail_limit-1で終わること</td></tr><tr><td>border</td><td>サイズの番号</td><td>1から始まり_limit-1で終わること</td></tr><tr><td>min_width</td><td>横方向のサイズが小さい方に切り替わる幅</td><td>0のとき、切り替えは発生しない</td></tr><tr><td>max_width</td><td>横方向のサイズが大きい方に切り替わる幅</td><td>0のとき、切り替えは発生しない</td></tr><tr><td>min_height</td><td>縦方向のサイズが小さい方に切り替わる高さ</td><td>0のとき、切り替えは発生しない</td></tr><tr><td>max_height</td><td>縦方向のサイズが大きい方に切り替わる高さ</td><td>0のとき、切り替えは発生しない</td></tr></tbody></table></p><h2 id="h2-.E3.83.86.E3.82.AD.E3.82.B9.E3.83.88.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">テキストテンプレート</h2><p>枠画像のどの位置にテキストを表示するかを決めて座標をメモします。\r
+</p><table class="wikitable" border="1"><tbody><tr><td>項目名</td><td>意味</td><td>備考</td></tr><tr><td>top_offset</td><td>テキストの表示を開始するx座標</td><td> </td></tr><tr><td>left_offset</td><td>テキストの表示を開始するy座標</td><td> </td></tr><tr><td>width</td><td>テキストの表示幅</td><td> </td></tr><tr><td>height</td><td>テキストの表示高さ</td><td> </td></tr></tbody></table><p>offset と width, height ですが、単位は % になりますか??(itozyun)\r
+</p><h3 id="h3-.E3.83.87.E3.83.BC.E3.82.BF.E4.BD.9C.E6.88.90">データ作成</h3><p>これまでのメモからデータを作成します。データはjsonで作成します。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ClientSide">\r
+    <title>ClientSide</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ClientSide</link>\r
+    <dc:identifier>ClientSide</dc:identifier>\r
+\r
+    <dc:date>2011-12-31T22:34:44+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クライアント側\r
\r
+ぺったんR におけるユーザーの行動はマンガの閲覧 と マンガの編集に大きく分けられる.[[BR]]\r
+マンガの閲覧がすべてのユーザーに可能であるのに対し、マンガの編集は原則ログインしたユーザーが可能となる。[[BR]]\r
+またログイン以降のユーザーの操作は、javascriptを有効にする必要がある.[[BR]]\r
+\r
+== マンガの閲覧\r
+ぺったんR において、ブラウ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E5.81.B4">クライアント側</h1><div class="indent">\r
+</div><p>ぺったんR におけるユーザーの行動はマンガの閲覧 と マンガの編集に大きく分けられる.[[BR]]\r
+<br />マンガの閲覧がすべてのユーザーに可能であるのに対し、マンガの編集は原則ログインしたユーザーが可能となる。[[BR]]\r
+<br />またログイン以降のユーザーの操作は、javascriptを有効にする必要がある.[[BR]]\r
+<br /></p><h2 id="h2-.E3.83.9E.E3.83.B3.E3.82.AC.E3.81.AE.E9.96.B2.E8.A6.A7">マンガの閲覧</h2><p>ぺったんR において、ブラウザでのマンガ状コンテンツの閲覧のために、ユーザーは Flash も含めて特別なプラグインを必要としない.\r
+</p><h3 id="h3-html.20.2B.20css2.1">html + css2.1</h3><p>ぺったんと、ぺったんを元にする ぺったんRは、マンガ状のコンテンツの表示に css2.1 でレイアウトする.[[BR]]\r
+<br />以上をサポートするブラウザであれば、ぺったん 及び ぺったんR のコンテンツは閲覧ができる.[[BR]]\r
+<br /></p><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2">HtmlAndCss2</a>\r
+</li></ul><h3 id="h3-javascript">javascript</h3><p>ぺったんR で新たに追加された機能や、ぺったんRサーバへの負荷を抑えるため、javascript に加え css3, SVG といった新しいWeb標準が使われる.[[BR]]\r
+<br />これらをサポートしないブラウザも少なくなく、VML, ActiveX, flash といった非Web標準も利用する.[[BR]]\r
+<br /></p><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">XbackendReversibleImage</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">XbackendSpeachBalloon</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PngFix">PngFix</a>\r
+</li></ul><h2 id="h2-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.81.AE.E7.AE.A1.E7.90.86.E3.83.BB.E7.94.BB.E5.83.8F.E3.81.AE.E7.AE.A1.E7.90.86.E3.83.BB.E3.82.B3.E3.83.9E.E3.81.AE.E7.B7.A8.E9.9B.86.E3.83.BB.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E8.A8.AD.E5.AE.9A">コミックの管理・画像の管理・コマの編集・ユーザー設定</h2><p>これらのログインユーザーのための機能は、javascript が前提となる.[[BR]]\r
+<br />画面は Ajax で用意されるため、サーバ側はユーザのデータの管理とクライアントとの通信に専念できる.[[BR]]\r
+<br /></p><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor">JavascriptEditor</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">JsonApi</a>\r
+</li></ul><h2 id="h2-.E5.AF.BE.E5.BF.9C.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6">対応ブラウザ</h2><h3 id="h3-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E3.82.B7.E3.82.A7.E3.82.A2">ブラウザシェア</h3><p>IE系では、css3 や SVG をサポートしない IE8 以下がまだまだ多く、IE6 でそのシェアは10%近く.ブラウザシェアは国毎にばらつきがあり、お隣の中国・韓国では IE のシェアが多く、IE6 でも 20~30% になる.[[BR]]\r
+<br /></p><blockquote class="citation"><p>今なおブラウザシェア10.1%もあるIE6とどう向き合えばいいのか[[BR]]\r
+<br /><a href="http://weboook.blog22.fc2.com/blog-entry-248.html" class="external" rel="nofollow">http://weboook.blog22.fc2.com/blog-entry-248.html</a>\r
+</p></blockquote><p>javascript を切っているブラウザは 1% ほどらしい.[[BR]]\r
+<br /></p><blockquote class="citation"><p><a href="http://sourceforge.jp/projects/pettanr/wiki/JavaScript">JavaScript</a>をオフにしているブラウザは1%前後。米ヤフー調べ[[BR]]\r
+<br /><a href="http://www.publickey1.jp/blog/10/javascript1.html" class="external" rel="nofollow">http://www.publickey1.jp/blog/10/javascript1.html</a>\r
+</p></blockquote>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PngFix">\r
+    <title>PngFix</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PngFix</link>\r
+    <dc:identifier>PngFix</dc:identifier>\r
+    <dc:date>2011-12-29T16:31:59+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= Internet Exproler 6 以下での PNG 画像の表示について\r
+ie6 以下のブラウザでは 透過情報付の png 画像を正しく表示することができない.[[BR]]\r
+このため ぺったん では、png 画像を非推奨としてきた.[[BR]]\r
+ぺったんRでも それを踏襲することは変わりない.[[BR]]\r
+しかし、可能な限り作者の意図したとおりに作品を閲覧してもらうため、クロスバッ]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-Internet.20Exproler.206.20.E4.BB.A5.E4.B8.8B.E3.81.A7.E3.81.AE.20PNG.20.E7.94.BB.E5.83.8F.E3.81.AE.E8.A1.A8.E7.A4.BA.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">Internet Exproler 6 以下での PNG 画像の表示について</h1><p>ie6 以下のブラウザでは 透過情報付の png 画像を正しく表示することができない.[[BR]]\r
+<br />このため ぺったん では、png 画像を非推奨としてきた.[[BR]]\r
+<br />ぺったんRでも それを踏襲することは変わりない.[[BR]]\r
+<br />しかし、可能な限り作者の意図したとおりに作品を閲覧してもらうため、クロスバックエンドな png 表示サポートを実施する.[[BR]]\r
+<br />とはいえ、必要なプラグイン等がインストールされていない、機能が無効になっている場合、透過情報は正しく反映されない.[[BR]]\r
+<br /></p><h2 id="h2-.E3.81.AF.E3.81.98.E3.82.81.E3.81.AB">はじめに</h2><h2 id="h2-VML">VML</h2><h2 id="h2-ActiveX.20Alpha.20Image.20Loader">ActiveX Alpha Image Loader</h2><h2 id="h2-Flash">Flash</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters">\r
+    <title>ForWebmasters</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters</link>\r
+\r
+    <dc:identifier>ForWebmasters</dc:identifier>\r
+    <dc:date>2011-12-28T09:07:11+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 管理者向け\r
+\r
+== フキダシテンプレートのメンテナンス\r
+ * フキダシテンプレートについて AboutSpeachBalloon\r
+ * フキダシテンプレートの追加 HowToMakeSpeachBalloon\r
+\r
+== ライセンスのメンテナンス\r
+ * ライセンスについて]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E7.AE.A1.E7.90.86.E8.80.85.E5.90.91.E3.81.91">管理者向け</h1><h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E3.81.AE.E3.83.A1.E3.83.B3.E3.83.86.E3.83.8A.E3.83.B3.E3.82.B9">フキダシテンプレートのメンテナンス</h2><ul><li>フキダシテンプレートについて AboutSpeachBalloon\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">AboutSpeachBalloon</a></li><li>フキダシテンプレートの追加 HowToMakeSpeachBalloon\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">HowToMakeSpeachBalloon</a></li></ul><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.AE.E3.83.A1.E3.83.B3.E3.83.86.E3.83.8A.E3.83.B3.E3.82.B9">ライセンスのメンテナンス</h2><ul><li>ライセンスについて</li></ul>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">\r
+    <title>AboutSpeachBalloon</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon</link>\r
+    <dc:identifier>AboutSpeachBalloon</dc:identifier>\r
+    <dc:date>2011-12-28T08:57:17+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= フキダシテンプレート\r
+フキダシとは、線で囲まれた枠の中に文章が書かれたものです。つまり、枠と文章を合わせたものがフキダシとなるわけです。\r
+\r
+ぺったんでフキダシを作るには、枠の素材をコマに貼り、その上にテキストを貼ります。\r
+\r
+しかし、このような作り方は操作に手数がかかり、扱いも煩雑になります。漫画はフキダシで絵をしゃべらすことで初めて成立するものです。漫画ツールとしては当たり前の機能で]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">フキダシテンプレート</h1><p>フキダシとは、線で囲まれた枠の中に文章が書かれたものです。つまり、枠と文章を合わせたものがフキダシとなるわけです。\r
+</p><p>ぺったんでフキダシを作るには、枠の素材をコマに貼り、その上にテキストを貼ります。\r
+</p><p>しかし、このような作り方は操作に手数がかかり、扱いも煩雑になります。漫画はフキダシで絵をしゃべらすことで初めて成立するものです。漫画ツールとしては当たり前の機能ですから、最小限の操作でフキダシを扱えなければ困ります。そこで、ぺったんはオーソドックスなフキダシをテンプレート化して用意しました。もちろんテンプレートは自由に追加できます。\r
+</p><h1 id="h1-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E3.81.AE.E6.A7.8B.E6.88.90">フキダシテンプレートの構成</h1><p>フキダシテンプレートは次の三つの階層で構成されています。\r
+</p><ul><li>フキダシテンプレート SpeachBalloon\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloon">SpeachBalloon</a></li><li>枠テンプレート BalloonTemplate\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/BalloonTemplate">BalloonTemplate</a></li><li>テキストテンプレート SpeachTemplate\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachTemplate">SpeachTemplate</a></li></ul><p>フキダシは枠とテキストから構成されます。枠テンプレートとテキストテンプレートがそれです。ただし、フキダシには大抵吹き出し口(ぺったんでは尻尾と言います)が付きますから、同じフキダシでもいくつかのバリエーションができます。それをグループ化するのがフキダシテンプレートです。\r
+</p><h2 id="h2-.E6.83.B3.E5.AE.9A.E3.81.99.E3.82.8B.E3.83.90.E3.83.AA.E3.82.A8.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3">想定するバリエーション</h2><p>ぺったんでは次の二つのバリエーションを想定しています。\r
+</p><ul><li>尻尾の向き\r
+</li><li>枠のサイズ\r
+</li></ul><p>尻尾の向きはフキダシの使われ方によって変わりますが、上下左右や角の四隅などに付くことが多いでしょうか。このバリエーションが多いほど融通が利くフキダシになります。\r
+</p><p>ぺったんはコマに貼ったフキダシを自由にサイズ調整できますが、フキダシを極端に拡大あるいは縮小すると、枠の画像によっては線が太ってしまったり、かすれてしまうことがあります。枠の画像には適正なサイズが要求されますので、より良いテンプレートはいくつかのサイズのバリエーションを用意する必要があります。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">\r
+    <title>JsonApi</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/JsonApi</link>\r
+    <dc:identifier>JsonApi</dc:identifier>\r
+    <dc:date>2011-12-26T19:13:24+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= JsonAPI\r
+ぺったんはjsonを利用したAPIに対応している。というよりRailsの仕様に乗っかっている。Rails知ってる人はよまなくていい。\r
+\r
+JsonAPIを使えば、ブラウザから操作せずとも直接データを操作できる。外部のプログラムからぺったんを楽しめる。\r
+\r
+APIにはCRUD、つまり、create,read,update,deleteがあり、それぞれがHTTPのPOST,G]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-JsonAPI">JsonAPI</h1><p>ぺったんはjsonを利用したAPIに対応している。というよりRailsの仕様に乗っかっている。Rails知ってる人はよまなくていい。\r
+</p><p>JsonAPIを使えば、ブラウザから操作せずとも直接データを操作できる。外部のプログラムからぺったんを楽しめる。\r
+</p><p>APIにはCRUD、つまり、create,read,update,deleteがあり、それぞれがHTTPのPOST,GET,PUT,DELETEに対応しているが、普通のブラウザからはGETしかできないので、手っ取り早くJsonAPIで遊ぶならcurlをインストールすると良い。\r
+</p><p>なお、railsではjsonでのやり取りを次のように規定している。\r
+</p><ul><li>URLの末尾を拡張子のように.jsonする\r
+</li><li>リクエストヘッダはContent-Type: application/jsonとする\r
+</li></ul><h2 id="h2-json.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E5.8F.96.E5.BE.97">jsonデータの取得</h2><p>例えば、ID:2のコマPanelのデータをcurlで取得するには次のようにする。\r
+</p><pre>curl http://hostname/panels/2.json -X GET -H &quot;Content-Type: application/json&quot;\r
+</pre><h2 id="h2-json.E3.81.A7.E3.81.AE.E6.8A.95.E7.A8.BF">jsonでの投稿</h2><p>例えば、コミックをcurlで作成するには次のようにする。このとき、作成するためのjsonデータはcomic_create.jsonファイルに用意されているものとする。\r
+</p><pre>curl http://hostname/comics.json  -X POST -H &quot;Content-Type: application/json&quot; -d @comic_create.json\r
+</pre><h2 id="h2-json.E3.81.A7.E3.81.AE.E6.9B.B4.E6.96.B0">jsonでの更新</h2><p>例えば、コミックをcurlで更新するには次のようにする。このとき、更新するためのjsonデータはcomic_update.jsonファイルに用意されているものとする。\r
+</p><pre>curl http://hostname/comics.json  -X PUT -H &quot;Content-Type: application/json&quot; -d @comic_update.json\r
+</pre><h2 id="h2-json.E3.81.A7.E3.81.AE.E5.89.8A.E9.99.A4">jsonでの削除</h2><p>例えば、コミックをcurlで削除するには次のようにする。このとき、削除するためのjsonデータはcomic_delete.jsonファイルに用意されているものとする。\r
+</p><pre>curl http://hostname/comics.json  -X DELETE -H &quot;Content-Type: application/json&quot; -d @comic_delete.json\r
+</pre><p>※普通に削除するだけならDELETEメソッドだけで削除できる。jsonデータcomic_delete.jsonは必要ないはずだが、誰でも削除できるのはおかしな話なので、大抵の場合は認証がいるだろう。認証に必要なauth_tokenを渡すのだが、auth_tokenについては後述する。\r
+</p><h2 id="h2-json.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E4.BD.9C.E3.82.8A.E6.96.B9">jsonデータの作り方</h2><p>jsonデータがどんなものかはググッてもらうとして、rails風なところを…\r
+</p><p>コミック作成に使ったcomic_create.jsonを例とすると次のようになる。\r
+<pre>{\r
+  &quot;comic&quot;: {\r
+    &quot;title&quot;: &quot;コミック作るテスト&quot;,\r
+    &quot;default_width&quot;: 400,\r
+    &quot;default_height&quot;: 200\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre>comicはコミックのmodel、titleなどはmodelのカラム。モデルの下に必要なカラムをキーにして値を記述する。\r
+</p><p>auth_tokenは認証が必要な操作をする場合に記述する。\r
+</p><h3 id="h3-auth_token">auth_token</h3><p>認証が必要な操作をする場合にはauth_tokenを用意する。auth_tokenはログイン後にプロフィールページを開くと書いてある。今のところは。\r
+</p><h3 id="h3-.E3.83.8D.E3.82.B9.E3.83.88.E3.81.97.E3.81.9F.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E4.BD.9C.E3.82.8A.E6.96.B9">ネストしたデータの作り方</h3><p>コマの投稿など、複数のモデルを一つのトランザクションで更新するような操作はjsonデータも複数のモデルについて記述しなければならない。\r
+</p><p>ネストされている子のデータはモデル名+_attributesをキーとしたハッシュ型の値をペアにして記述する。例えば、コマ絵のモデルpanel_picturesはpanel_pictures_attributesとなる。値側は複数のレコードを含むことが想定されるので、これもハッシュ型とする。こちらのキーは一意であれば何でもよく、値がレコードのデータである。文章じゃよくわからんので、コマ絵panel_pictures一つを含んだコマpanelを作成する場合の実際のデータを示す。\r
+</p><pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;border&quot;: 1,\r
+    &quot;comic_id&quot;: 5,\r
+    &quot;resource_picture_id&quot;: 1,\r
+    &quot;width&quot;: 400,\r
+    &quot;height&quot;: 200,\r
+    &quot;panel_pictures_attributes&quot;: {\r
+      &quot;new1&quot;: {\r
+        &quot;width&quot;: 100,\r
+        &quot;height&quot;: 103,\r
+        &quot;resource_picture_id&quot;: 4,\r
+        &quot;top_offset&quot;: 10,\r
+        &quot;left_offset&quot;: 135,\r
+        &quot;zindex&quot;: 1,\r
+        &quot;v&quot;: 1,\r
+        &quot;h&quot;: 0\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre><p>コマ絵が二枚だと、こんな感じ。\r
+<pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;border&quot;: 1,\r
+    &quot;comic_id&quot;: 5,\r
+    &quot;resource_picture_id&quot;: 1,\r
+    &quot;width&quot;: 400,\r
+    &quot;height&quot;: 200,\r
+    &quot;panel_pictures_attributes&quot;: {\r
+      &quot;new1&quot;: {\r
+        &quot;width&quot;: 100,\r
+        &quot;height&quot;: 103,\r
+        &quot;resource_picture_id&quot;: 4,\r
+        &quot;top_offset&quot;: 10,\r
+        &quot;left_offset&quot;: 135,\r
+        &quot;zindex&quot;: 1,\r
+        &quot;v&quot;: 1,\r
+        &quot;h&quot;: 0\r
+      },\r
+      &quot;new2&quot;: {\r
+        &quot;width&quot;: 50,\r
+        &quot;height&quot;: 75,\r
+        &quot;resource_picture_id&quot;: 1,\r
+        &quot;top_offset&quot;: 30,\r
+        &quot;left_offset&quot;: 14,\r
+        &quot;zindex&quot;: 2,\r
+        &quot;v&quot;: 0,\r
+        &quot;h&quot;: 0\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre></p><p>キーの&quot;new1&quot;と&quot;new2&quot;は適当な命名なんであるが、こんな要領で列挙していけばまとめて作成できる。\r
+</p><p>では、次にコマ絵だけでなくフキダシとセリフも含むデータを作成してみるが、その前に各モデルの関係を整理しておく。\r
+<pre>panel\r
+  panel_pictures\r
+  balloons\r
+    speaches\r
+</pre>だったね。\r
+<pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;border&quot;: 1,\r
+    &quot;comic_id&quot;: 5,\r
+    &quot;resource_picture_id&quot;: 1,\r
+    &quot;width&quot;: 400,\r
+    &quot;height&quot;: 200,\r
+    &quot;panel_pictures_attributes&quot;: {\r
+      &quot;new1&quot;: {\r
+        &quot;width&quot;: 100,\r
+        &quot;height&quot;: 103,\r
+        &quot;resource_picture_id&quot;: 4,\r
+        &quot;top_offset&quot;: 10,\r
+        &quot;left_offset&quot;: 135,\r
+        &quot;zindex&quot;: 3,\r
+        &quot;v&quot;: 1,\r
+        &quot;h&quot;: 0\r
+      }\r
+    },\r
+    &quot;balloons_attributes&quot;: {\r
+      &quot;newf1&quot;: {\r
+        &quot;balloon_template_id&quot;: 1,\r
+        &quot;resource_picture_id&quot;: 2,\r
+        &quot;tail&quot;: 1,\r
+        &quot;border&quot;: 1,\r
+        &quot;zindex&quot;: 5,\r
+        &quot;width&quot;: 81,\r
+        &quot;height&quot;: 63,\r
+        &quot;top_offset&quot;: 120,\r
+        &quot;left_offset&quot;: 35,\r
+        &quot;speaches_attributes&quot;: {\r
+          &quot;newf1s1&quot;: {\r
+            &quot;content&quot;: &quot;test&quot;,\r
+            &quot;width&quot;: 61,\r
+            &quot;height&quot;: 43,\r
+            &quot;top_offset&quot;: 10,\r
+            &quot;left_offset&quot;: 10\r
+          }\r
+        }\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre></p><h3 id="h3-.E3.83.8D.E3.82.B9.E3.83.88.E3.81.97.E3.81.9F.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E6.9B.B4.E6.96.B0">ネストしたデータの更新</h3><p>あるコマのセリフを変更したいとする。セリフはspeachなのでspeaches経由で更新したいところだが、ぺったんの仕様はコマ全体で更新することになっているので、speachesのAPIは用意されていない。コマの変更はpanel経由で行う。このとき、jsonデータでは、どのように変更対象のセリフを指示するのだろうか。\r
+</p><p>結論としてはidをデータに含めて指定する。例えば、セリフのidが3のときは次のようになる。\r
+</p><pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;balloons_attributes&quot;: {\r
+      &quot;b2&quot;: {\r
+        &quot;id&quot;: 2,\r
+        &quot;speaches_attributes&quot;: {\r
+          &quot;s3&quot;: {\r
+            &quot;id&quot;: 3,\r
+            &quot;content&quot;: &quot;modify&quot;\r
+          }\r
+        }\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre><p>idが指定されていないと新規追加となってしまう。\r
+</p><h3 id="h3-.E3.83.8D.E3.82.B9.E3.83.88.E3.81.97.E3.81.9F.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E5.89.8A.E9.99.A4">ネストしたデータの削除</h3><p>削除する場合、更新のときと同じようにidを指定しつつ_destroyにフラグを立てる。例えば、idが2のフキダシをコマから削除する場合、次のようにする。\r
+</p><pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;balloons_attributes&quot;: {\r
+      &quot;b2&quot;: {\r
+        &quot;id&quot;: 2,\r
+        &quot;_destroy&quot;: 1\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre><h2 id="h2-.E7.94.BB.E5.83.8F.E3.81.AE.E6.8A.95.E7.A8.BF">画像の投稿</h2><p>auth_tokenを含みながらのファイル送信がよくわからん。いろんなパターンで試してみたが素直にはいかなかった。苦肉の策が画像データを一度Base64でエンコードしたものをテキストとして送信すること。次の例は当然エンコードテキストは省略されている。\r
+<pre>{\r
+  &quot;original_picture&quot;: {\r
+    &quot;file&quot;: \r
+&quot;iVBORw0KGgoAAAANSUhEUgAAAWIAAAF7CAYAAADohYEpAAAcW0lEQVR4nO3d\r
+  :\r
+  :\r
+ghgAlP0/Bxl7hN5Zu0EAAAAASUVORK5CYII=\r
+&quot;\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre></p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutLisence">\r
+    <title>AboutLisence</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutLisence</link>\r
+    <dc:identifier>AboutLisence</dc:identifier>\r
+\r
+    <dc:date>2011-12-25T12:47:25+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ライセンスについて\r
+※ここはぺったんに投稿された画像の著作権に関する話題です。\r
+\r
+== 選べるライセンス\r
+ぺったんには、あらかじめ一般的なライセンスを用意してあります。パブリックドメインやクリエイティブコモンズなどです。\r
+\r
+絵師は提供する素材にこれらのライセンスを付与して明記することができます。\r
+\r
+== 用意されたライセンス\r
+ * Public Domain\r
+   * ライ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">ライセンスについて</h1><p>※ここはぺったんに投稿された画像の著作権に関する話題です。\r
+</p><h2 id="h2-.E9.81.B8.E3.81.B9.E3.82.8B.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">選べるライセンス</h2><p>ぺったんには、あらかじめ一般的なライセンスを用意してあります。パブリックドメインやクリエイティブコモンズなどです。\r
+</p><p>絵師は提供する素材にこれらのライセンスを付与して明記することができます。\r
+</p><h2 id="h2-.E7.94.A8.E6.84.8F.E3.81.95.E3.82.8C.E3.81.9F.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">用意されたライセンス</h2><ul><li>Public Domain\r
+<ul><li>ライセンス表示 http://ja.wiki<a href="http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3" class="external" rel="nofollow">http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3</a></li></ul></li><li>Creative Commons 3.0(by)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by/3.0/legalcode</a></li></ul></li><li>Creative Commons 3.0(by_sa)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by-sa/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a></li></ul></li><li>Creative Commons 3.0(by_nd)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by-nd/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nd/3.0/legalcode</a></li></ul></li><li>Creative Commons 3.0(by_nc)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by-nc/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nc/3.0/legalcode</a></li></ul></li><li>Creative Commons 3.0(by_nc_sa)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode</a></li></ul></li><li>Creative Commons 3.0(by_nc_nd)\r
+<ul><li>ライセンス表示 http://creativ<a href="http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode</a></li></ul></li><li>Unknown\r
+<ul><li>著作権がはっきりしないもの\r
+</li></ul></li></ul><h2 id="h2-.E5.90.88.E3.81.A3.E3.81.9F.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.8C.E3.81.AA.E3.81.84">合ったライセンスがない</h2><p>自前の作品に特殊なライセンスを付与したいと考えるケースもあるでしょう。そういった場合、絵師がライセンスを作成することができます。このような特殊なライセンスをぺったんではオリジナルライセンスと言います。それに対して、ぺったんにあらかじめ用意されたライセンスをコモンライセンスと言います。\r
+</p><p>特に区別したい場合は、コモンライセンス・オリジナルライセンスと言いますが、ただライセンスと言った場合は、両者を合わせたものとなります。\r
+</p><h2 id="h2-.E3.82.B3.E3.83.A2.E3.83.B3.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">コモンライセンス</h2><p>コモンライセンスをメンテナンスできるのは管理者だけです。\r
+</p><h2 id="h2-.E3.82.AA.E3.83.AA.E3.82.B8.E3.83.8A.E3.83.AB.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">オリジナルライセンス</h2><p>絵師はオリジナルライセンスを作成できます。また、自分が作成したオリジナルライセンスを更新できます。\r
+</p><h3 id="h3-.E3.82.B3.E3.83.A2.E3.83.B3.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.B8.E3.81.AE.E6.98.87.E6.A0.BC">コモンライセンスへの昇格</h3><p>何かと信頼の薄いオリジナルライセンスですが、ある程度の評価が得られ、ぺったん管理者が有用性を認めればコモンライセンスへ昇格することもあります。\r
+</p><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.8C.E5.89.8A.E9.99.A4.E3.81.95.E3.82.8C.E3.82.8B.E3.81.A8">ライセンスが削除されると</h2><p>ライセンスを削除してしまうと、そのライセンスを適用した素材はすべてライセンスなしになってしまいます。それを避けるために一枚でも適用されているライセンスは削除できません。\r
+</p><h2 id="h2-.E3.82.AA.E3.83.AA.E3.82.B8.E3.83.8A.E3.83.AB.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.A7.E6.98.8E.E7.A4.BA.E3.81.A7.E3.81.8D.E3.82.8B.E3.81.93.E3.81.A8">オリジナルライセンスで明示できること</h2><ul><li>cc_by\r
+<ul><li>作者の表示\r
+</li></ul></li><li>cc_sa\r
+</li><li>cc_nd\r
+</li><li>cc_nc\r
+</li><li>no_resize\r
+<ul><li>サイズ変更の禁止\r
+</li><li>値が 0のとき無効 1のとき有効\r
+</li><li>素材をコマ上でリサイズしてはならない\r
+</li></ul></li><li>no_flip\r
+<ul><li>反転の禁止\r
+</li><li>値が 0のとき無効 1のとき有効\r
+</li><li>素材をコマ上で垂直反転水平反転してはならない\r
+</li></ul></li><li>keep_aspect_ratio\r
+<ul><li>縦横比変更の禁止\r
+</li><li>値が 0のとき無効 1のとき有効\r
+</li><li>素材をコマ上でリサイズしてもよいが縦横比を変えてはならない\r
+</li></ul></li></ul><p>クリエイティブコモンズの属性はすべて用意しましたが、ぺったん上ではあまり効果を発揮できません。というのも、ぺったんには画像を改変する機能が備わっていませんから、改変しようがないし、投稿された素材が改変されたものであるかを判別する手立てがないのです。非営利についても似たようなもので、web上の配布に営利はありません。もちろんアフィリエイトも禁止されているわけではありません。\r
+</p><p>作者の表示については必ず同一ページ内に表示します。ただし、ぺったんRはオープンソースライセンスですから、ソースコードが改変された場合は、その限りではありません。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">\r
+    <title>CommonLisencesController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController</link>\r
+    <dc:identifier>CommonLisencesController</dc:identifier>\r
+    <dc:date>2011-12-24T11:03:09+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= CommonLisencesController \r
+管理者以外に用はないから、すべての機能で管理者だけが認証をパスする。\r
+]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-CommonLisencesController"><a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">CommonLisencesController</a></h1><p>管理者以外に用はないから、すべての機能で管理者だけが認証をパスする。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/LisencesController">\r
+    <title>LisencesController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/LisencesController</link>\r
+\r
+    <dc:identifier>LisencesController</dc:identifier>\r
+    <dc:date>2011-12-24T10:46:17+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= LisencesController \r
+コモンライセンスとオリジナルライセンスを統合するためだけにある。閲覧のみで操作はできない。変更作業はすべてCommonLisencesControllerとOriginalLisencesController側にある。\r
+\r
+常識で考えれば、こんな冗長な設計はないんだけど、絵師が作家機能を切り捨てた「絵師サーバ」を独自に稼働させる予定なので切り離してお]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-LisencesController"><a href="http://sourceforge.jp/projects/pettanr/wiki/LisencesController">LisencesController</a></h1><p>コモンライセンスとオリジナルライセンスを統合するためだけにある。閲覧のみで操作はできない。変更作業はすべてCommonLisencesControllerとOriginalLisencesController側にある。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">CommonLisencesController</a></p><p>常識で考えれば、こんな冗長な設計はないんだけど、絵師が作家機能を切り捨てた「絵師サーバ」を独自に稼働させる予定なので切り離しておいた。\r
+</p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan">\r
+    <title>WhatsPettan</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan</link>\r
+    <dc:identifier>WhatsPettan</dc:identifier>\r
+    <dc:date>2011-12-24T09:18:24+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= ぺったんとは\r
+以下からは一般向け文書。ヘルプとかマニュアルです。\r
+== 絵師\r
+ * GuidanceForArtist\r
+== 作家\r
+ * GuidanceForAuthor\r
+== ライセンス\r
+ * AboutLisence\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93.E3.81.A8.E3.81.AF">ぺったんとは</h1><p>以下からは一般向け文書。ヘルプとかマニュアルです。\r
+</p><h2 id="h2-.E7.B5.B5.E5.B8.AB">絵師</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist">GuidanceForArtist</a>\r
+</li></ul><h2 id="h2-.E4.BD.9C.E5.AE.B6">作家</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor">GuidanceForAuthor</a>\r
+</li></ul><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">ライセンス</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutLisence">AboutLisence</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist">\r
+    <title>GuidanceForArtist</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist</link>\r
+    <dc:identifier>GuidanceForArtist</dc:identifier>\r
+    <dc:date>2011-12-23T17:08:22+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 絵師さん向け文書?\r
+== 絵師の役割\r
+== 絵師になるには\r
+== 絵のライセンス\r
+\r
+== 絵の活用\r
+ぺったんは投稿された画像を次のように扱います\r
+ * 画像をサーバ内のディスクスペースに保存します\r
+   * この画像を原画と言います\r
+ * 原画を縮小・反転などの加工を施したものをサーバ内のディスクスペースに保存します\r
+   * これらの画像を素材と言います\r
+   * 原画]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E7.B5.B5.E5.B8.AB.E3.81.95.E3.82.93.E5.90.91.E3.81.91.E6.96.87.E6.9B.B8.EF.BC.9F">絵師さん向け文書?</h1><h2 id="h2-.E7.B5.B5.E5.B8.AB.E3.81.AE.E5.BD.B9.E5.89.B2">絵師の役割</h2><h2 id="h2-.E7.B5.B5.E5.B8.AB.E3.81.AB.E3.81.AA.E3.82.8B.E3.81.AB.E3.81.AF">絵師になるには</h2><h2 id="h2-.E7.B5.B5.E3.81.AE.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">絵のライセンス</h2><h2 id="h2-.E7.B5.B5.E3.81.AE.E6.B4.BB.E7.94.A8">絵の活用</h2><p>ぺったんは投稿された画像を次のように扱います\r
+</p><ul><li>画像をサーバ内のディスクスペースに保存します\r
+<ul><li>この画像を原画と言います\r
+</li></ul></li><li>原画を縮小・反転などの加工を施したものをサーバ内のディスクスペースに保存します\r
+<ul><li>これらの画像を素材と言います\r
+</li><li>原画が反転禁止のライセンスを採用しているときは反転画像を保存しません\r
+</li></ul></li><li>素材は作家がコマ上に添付されます\r
+<ul><li>利用するコマエディタの\r
+</li></ul></li></ul><p>コマ上での扱い\r
+</p><ul><li><ul><li>原画が拡縮禁止のライセンスを採用しているときは拡縮画像を保存しません\r
+<ul><li>ただし、サムネイル画像のサイズに収まらない画像については縮小して表示します\r
+</li></ul></li></ul></li></ul><p>素材→コマ絵\r
+</p><h2 id="h2-.E9.85.8D.E5.B8.83.E3.81.AE.E5.81.9C.E6.AD.A2">配布の停止</h2><h2 id="h2-.E7.B4.A0.E6.9D.90.E3.82.B5.E3.83.BC.E3.83.90">素材サーバ</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor">\r
+    <title>GuidanceForAuthor</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor</link>\r
+    <dc:identifier>GuidanceForAuthor</dc:identifier>\r
+\r
+    <dc:date>2011-12-23T16:48:50+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 作家さん向け文書?\r
+== 作家とは\r
+ぺったんサーバが提供する素材とフキダシを利用して漫画状のコマを作ることで表現する人を作家と言います。\r
+\r
+作家となるには、サイトへの登録が必要です。\r
+\r
+== 作家ができる表現\r
+ * コマを作る\r
+ * コミックを作る\r
+ * コミックの配布範囲を決める\r
+=== コマを作る\r
+=== コミックを作る\r
+=== コミックの配布範囲を決める\r
+\r
+=]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E4.BD.9C.E5.AE.B6.E3.81.95.E3.82.93.E5.90.91.E3.81.91.E6.96.87.E6.9B.B8.EF.BC.9F">作家さん向け文書?</h1><h2 id="h2-.E4.BD.9C.E5.AE.B6.E3.81.A8.E3.81.AF">作家とは</h2><p>ぺったんサーバが提供する素材とフキダシを利用して漫画状のコマを作ることで表現する人を作家と言います。\r
+</p><p>作家となるには、サイトへの登録が必要です。\r
+</p><h2 id="h2-.E4.BD.9C.E5.AE.B6.E3.81.8C.E3.81.A7.E3.81.8D.E3.82.8B.E8.A1.A8.E7.8F.BE">作家ができる表現</h2><ul><li>コマを作る\r
+</li><li>コミックを作る\r
+</li><li>コミックの配布範囲を決める\r
+</li></ul><h3 id="h3-.E3.82.B3.E3.83.9E.E3.82.92.E4.BD.9C.E3.82.8B">コマを作る</h3><h3 id="h3-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.82.92.E4.BD.9C.E3.82.8B">コミックを作る</h3><h3 id="h3-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.81.AE.E9.85.8D.E5.B8.83.E7.AF.84.E5.9B.B2.E3.82.92.E6.B1.BA.E3.82.81.E3.82.8B">コミックの配布範囲を決める</h3><h2 id="h2-.E7.B4.A0.E6.9D.90.E3.82.92.E7.94.A8.E6.84.8F.E3.81.99.E3.82.8B">素材を用意する</h2><h3 id="h3-.E7.B4.A0.E6.9D.90.E3.81.AE.E5.89.8D.E3.81.AB.E7.B5.B5.E5.B8.AB.E7.99.BB.E9.8C.B2">素材の前に絵師登録</h3><p>作家は素材を投稿することができません。素材は絵師が投稿することになっています。なぜなら、ぺったんはあなたの素材を容易に他のぺったんサイトに提供できるようになっているからです。少々面倒な構成にはなっていますが、心配には及びません。絵師の登録はワンクリック程度で完了します。\r
+</p><p>登録に必要な情報は下記の項目です。\r
+</p><ul><li>ペンネーム デフォルトで作家名が設定されます\r
+</li><li>デフォルトのライセンス\r
+</li></ul><h3 id="h3-.E7.B4.A0.E6.9D.90.E3.81.AE.E6.8A.95.E7.A8.BF">素材の投稿</h3><p>絵師登録が完了すると、素材エクスプローラーに投稿フォームが現れます。\r
+</p><p>素材を投稿するにあたっての注意事項はGuidanceForArtistをご覧下さい。\r
+<a href="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist">GuidanceForArtist</a></p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements">\r
+    <title>TranslationComicElements</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements</link>\r
+    <dc:identifier>TranslationComicElements</dc:identifier>\r
+    <dc:date>2011-12-23T11:41:06+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 資料・マンガ要素の日英対訳\r
+ * コーディング中の命名や、国際化対応のための資料にする.\r
+\r
+== マンガの部品名の対訳\r
+ * コママンガ(jp) - comic strip(en)\r
+ * コマ(jp) - panel(en)\r
+ * 枠線(jp) -(en)\r
+ * 吹き出し(jp) - speach balloon, speach bubble(en)\r
+ * ]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E8.B3.87.E6.96.99.E3.83.BB.E3.83.9E.E3.83.B3.E3.82.AC.E8.A6.81.E7.B4.A0.E3.81.AE.E6.97.A5.E8.8B.B1.E5.AF.BE.E8.A8.B3">資料・マンガ要素の日英対訳</h1><ul><li>コーディング中の命名や、国際化対応のための資料にする.\r
+</li></ul><h2 id="h2-.E3.83.9E.E3.83.B3.E3.82.AC.E3.81.AE.E9.83.A8.E5.93.81.E5.90.8D.E3.81.AE.E5.AF.BE.E8.A8.B3">マンガの部品名の対訳</h2><ul><li>コママンガ(jp) - comic strip(en)\r
+</li><li>コマ(jp) - panel(en)\r
+</li><li>枠線(jp) -(en)\r
+</li><li>吹き出し(jp) - speach balloon, speach bubble(en)\r
+</li><li></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">\r
+    <title>PictureIo</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PictureIo</link>\r
+\r
+    <dc:identifier>PictureIo</dc:identifier>\r
+    <dc:date>2011-12-23T11:28:56+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= PictureIO\r
+== 画像はPictureIOが出し入れする\r
+投稿された素材はデータベースではなく、ファイルに保管される。保管先は大抵の場合ローカルマシンになるが、herokuのようにローカルファイルを触れないホストもあるので、ファイルの入出力は柔軟に切り替わるようにPictureIOとして分離した。\r
+\r
+差し当たってローカルファイル用のLocalPictureIOとAmazonAW]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-PictureIO">PictureIO</h1><h2 id="h2-.E7.94.BB.E5.83.8F.E3.81.AFPictureIO.E3.81.8C.E5.87.BA.E3.81.97.E5.85.A5.E3.82.8C.E3.81.99.E3.82.8B">画像はPictureIOが出し入れする</h2><p>投稿された素材はデータベースではなく、ファイルに保管される。保管先は大抵の場合ローカルマシンになるが、herokuのようにローカルファイルを触れないホストもあるので、ファイルの入出力は柔軟に切り替わるようにPictureIOとして分離した。\r
+</p><p>差し当たってローカルファイル用のLocalPictureIOとAmazonAWS用のS3Pict<a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>意した。\r
+</p><p>デフォルトでは、開発・テスト環境ではLocalPictureIOを使い、本番ではS3PictureIOを使っ<a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>環境に合わせて設定を変える必要がある。設定は下記のファイルを書き換える。\r
+<pre>config/environments/development.rb \r
+config/environments/production.rb\r
+</pre></p><h2 id="h2-LocalPictureIO"><a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>IO</h2><p><a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>IOを使う場合は、config/environments/development.rb で、以下のように書く。\r
+<pre>require 'local_picture'\r
+PictureIO.setup do |config|\r
+  config.original_picture_io = PictureIO::LocalPicture.new '/pettanr/original/'\r
+  config.resource_picture_io = PictureIO::LocalPicture.new  '/pettanr/resource/'\r
+end\r
+</pre></p><p>これで原画は/pettanr/original/に保管され、素材は/pettanr/resource/に保管される。\r
+</p><p>※パス処理がショボいのでスラッシュの有無に大きな違いがある。あと、ディレクトリ掘ってないとコケる。\r
+</p><h2 id="h2-S3PictureIO"><a href="http://sourceforge.jp/projects/pettanr/wiki/S3Picture">S3Picture</a>IO</h2><p>AmazonAWSを使うなら、当然S3が使えるよう、準備しておく。Amazonからキーがもらえるので設定する。\r
+</p><p>まず、config/aws.yaml.orgをコピーする。\r
+<pre>cp config/aws.yaml.org config/aws.yaml\r
+</pre>コピーしたaws.yamlを編集。\r
+<pre>access_key_id: XXXXXXXXXXXXXXXXXXXX\r
+secret_access_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r
+</pre></p><p><a href="http://sourceforge.jp/projects/pettanr/wiki/S3Picture">S3Picture</a>IOを使う場合は、config/environments/production.rbで、以下のように書く。\r
+<pre>require 'aws/s3'\r
+require 'yaml'\r
+\r
+y = YAML.load(open(Rails.root + 'config/aws.yaml').read)\r
+AWS::S3::Base.establish_connection!(\r
+  :access_key_id =&gt; y[&quot;access_key_id&quot;], \r
+  :secret_access_key =&gt; y[&quot;secret_access_key&quot;]\r
+)\r
+require 's3_picture'\r
+PictureIO.setup do |config|\r
+  config.original_picture_io = PictureIO::S3Picture.new 'pettanr-original'\r
+  config.resource_picture_io = PictureIO::S3Picture.new 'pettanr-stable'\r
+end\r
+</pre>これで原画はpettanr-original/に保管され、素材はpettanr-stable/に保管される。\r
+</p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick">\r
+    <title>RmagickAndDmagick</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick</link>\r
+    <dc:identifier>RmagickAndDmagick</dc:identifier>\r
+    <dc:date>2011-12-23T10:53:11+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= RMagickとDMagick\r
+== 画像処理はRMagick\r
+絵師から預かった素材はRMagickで処理される。主にサムネイル画像の生成などで。\r
+\r
+== RMagickは案外地獄\r
+Windows環境では。\r
+\r
+コンパイラを持たずバイナリインストールしていると、大抵RMagickのインストールでコケる。\r
+\r
+= 仕方ないからDMagick\r
+RMagickなしでは丸で動かないので]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-RMagick.E3.81.A8DMagick">RMagickとDMagick</h1><h2 id="h2-.E7.94.BB.E5.83.8F.E5.87.A6.E7.90.86.E3.81.AFRMagick">画像処理はRMagick</h2><p>絵師から預かった素材はRMagickで処理される。主にサムネイル画像の生成などで。\r
+</p><h2 id="h2-RMagick.E3.81.AF.E6.A1.88.E5.A4.96.E5.9C.B0.E7.8D.84">RMagickは案外地獄</h2><p>Windows環境では。\r
+</p><p>コンパイラを持たずバイナリインストールしていると、大抵RMagickのインストールでコケる。\r
+</p><h1 id="h1-.E4.BB.95.E6.96.B9.E3.81.AA.E3.81.84.E3.81.8B.E3.82.89DMagick">仕方ないからDMagick</h1><p>RMagickなしでは丸で動かないので、あたかもRMagickがあるかのように振る舞う空箱を用意した。それがDMagick。\r
+</p><p>デフォルトでは開発環境でDMagickを使うようにしてあるので、RMagickが使えるなら、config/environments/development.rbを書き換える。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+    </rdf:RDF>\r
diff --git a/0.4.x/wiki/wiki_120119.xml b/0.4.x/wiki/wiki_120119.xml
new file mode 100644 (file)
index 0000000..5039d77
--- /dev/null
@@ -0,0 +1,2689 @@
+<?xml version="1.0" encoding="utf-8" ?>\r
+<?xml-stylesheet type="text/xsl" href="wiki.xsl"?>\r
+\r
+<rdf:RDF\r
+  xmlns="http://purl.org/rss/1.0/"\r
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
+  xmlns:content="http://purl.org/rss/1.0/modules/content/"\r
+  xmlns:dc="http://purl.org/dc/elements/1.1/"\r
+ >\r
+\r
+  <channel rdf:about="http://sourceforge.jp/projects/pettanr/wiki/!feeds/list">\r
+    <title>ぺったんR Wiki</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/!feeds/list</link>\r
+    <description>\r
+      ぺったんR プロジェクト Wiki ページ一覧    </description>\r
+        <dc:date>2012-01-18T17:02:43+09:00</dc:date>\r
+\r
+        <items>\r
+      <rdf:Seq>\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PanelModel" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PanelsController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ComicsController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ComicModel" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/StatusCode" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/FrontPage" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/XmlHttpRequest" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/SystemController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AuthorRegistrationsController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/YasushiIto" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ApiIndex" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ItoZyun" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/HowToInstall" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutModels" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AppendixList" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/BundledPictures" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/LocalWiki" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ClientSide" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PngFix" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/JsonApi" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/AboutLisence" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/LisencesController" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan" />\r
+\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/PictureIo" />\r
+                <rdf:li rdf:resource="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick" />\r
+              </rdf:Seq>\r
+    </items>\r
+  </channel>\r
+\r
+      <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PanelModel">\r
+    <title>PanelModel</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PanelModel</link>\r
+    <dc:identifier>PanelModel</dc:identifier>\r
+    <dc:date>2012-01-18T17:02:43+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コマ panel\r
+||name||和名||type||default||null||limit||note||\r
+||comic_id||所属コミック||integer|| ||FALSE|| ||||\r
+||resource_picture_id||背景画像 素材id||integer|| || || ||||\r
+||width||コマの幅||integer||200||FALSE|| |]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9E.20panel">コマ panel</h1><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>comic_id</td><td>所属コミック</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>resource_picture_id</td><td>背景画像 素材id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>width</td><td>コマの幅</td><td>integer</td><td>200</td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマの高さ</td><td>integer</td><td>80</td><td>FALSE</td><td> </td><td></td></tr><tr><td>border</td><td>コマの枠線の太さ</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>y</td><td>表示位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>z</td><td>表示優先順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>t</td><td>コマ番号</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>author_id</td><td>コマの投稿者 作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><h2 id="h2-.E6.A4.9C.E8.A8.BC">検証</h2><h3 id="h3-comic_id">comic_id</h3><ul><li>必須項目\r
+</li><li>idのコミックが存在していること。\r
+</li></ul><h3 id="h3-resource_picture_id">resource_picture_id</h3><ul><li>idの素材が存在していること。\r
+</li></ul><h3 id="h3-width">width</h3><ul><li>正の整数であること。\r
+</li><li>省略時はコミックのwidth\r
+</li></ul><h3 id="h3-height">height</h3><ul><li>正の整数であること。\r
+</li><li>省略時はコミックのheight\r
+</li></ul><h3 id="h3-border">border</h3><ul><li>0以上の整数であること。\r
+</li><li>省略時は0。\r
+</li></ul><h3 id="h3-x">x</h3><ul><li>正の整数であること。\r
+</li></ul><h3 id="h3-y">y</h3><ul><li>正の整数であること。\r
+</li></ul><h3 id="h3-z">z</h3><ul><li>正の整数であること。\r
+</li></ul><h3 id="h3-t">t</h3><ul><li>必須項目\r
+</li><li>0以上の整数であること。\r
+</li><li>重複の禁止。\r
+<ul><li>comic_idとtでユニークであること。\r
+</li></ul></li></ul><h3 id="h3-author_id">author_id</h3><ul><li>必須項目\r
+</li><li>設定しないこと。\r
+<ul><li>サーバがログイン中の作家idを補充する。\r
+</li></ul></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PanelsController">\r
+    <title>PanelsController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PanelsController</link>\r
+\r
+    <dc:identifier>PanelsController</dc:identifier>\r
+    <dc:date>2012-01-18T08:27:53+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コマ\r
+ストーリー上のワンシーンを漫画状に表示するための機能。\r
+== index\r
+一覧形式\r
+=== url\r
+ * http://localhost:3000/panels\r
+ * http://localhost:3000/panels.json\r
+=== リクエスト\r
+||パラメータ||なし||\r
+||権限||作家||\r
+||html||○||\r
+||json||○||\r
+||jso]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9E">コマ</h1><p>ストーリー上のワンシーンを漫画状に表示するための機能。\r
+</p><h2 id="h2-index">index</h2><p>一覧形式\r
+</p><h3 id="h3-url">url</h3><ul><li><a href="http://localhost:3000/panels" class="external" rel="nofollow">http://localhost:3000/panels</a>\r
+</li><li><a href="http://localhost:3000/panels.json" class="external" rel="nofollow">http://localhost:3000/panels.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC">解説</h3><p>新着コマ20件を一覧形式で表示する。ただし、作者によって非公開にされたコミックのコマは含まない。\r
+</p><p>新着コマの情報はトップページに表示されるが、量が少ないため「もっと見る」が用意されている。それがクリックされたときに遷るページがここ。\r
+</p><ul><li>comicのvisible=1な行をpanels.updated_at降順で20件分取得する。\r
+</li><li>取得したデータを返す。\r
+<ul><li>htmlなら整形してページを返す。\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><h3 id="h3-.E5.95.8F.E9.A1.8C.E7.82.B9">問題点</h3><p>コマはサイズがバラバラなので、リストアップには向いていない。コマそのものを表示するわけにはいかないので、事実上使いどころのない機能と思われる。改善案を待つ。\r
+</p><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB">正常系</h4><ul><li>panels\r
+<ul><li>comic\r
+</li><li>author\r
+</li></ul></li></ul><hr /><h2 id="h2-show">show</h2><p>コマ表示。ぺったんの超本丸。\r
+</p><h3 id="h3-url-2">url</h3><ul><li><a href="http://localhost:3000/panels/1" class="external" rel="nofollow">http://localhost:3000/panels/1</a>\r
+</li><li><a href="http://localhost:3000/panels/1.json" class="external" rel="nofollow">http://localhost:3000/panels/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-2">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-2">解説</h3><p>コマを表示する、あるいはコマを表示するためのデータを返す機能。\r
+</p><ul><li>要求されたidのpanelを取得する。\r
+</li><li>取得したデータを返す。\r
+<ul><li>htmlなら整形してページを返す。\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><h3 id="h3-.E3.82.B3.E3.83.9E.E3.81.AE.E6.95.B4.E5.BD.A2">コマの整形</h3><p>コマ絵とフキダシは時系列tでソートして返さなければならない。表示的にはすべてが時間で上から下に流れるのがぺったんRの仕様である。しかし、sqlでは二つのテーブルを混ぜてソートはできないので時系列順に配置しなおして(配列のキーをtにして)戻さなければならない。balloons配下のspeachesも同様にtでソートしておく。\r
+<pre>panels:{\r
+  1: balloons: {...},\r
+  2: panel_pictures: {...},\r
+  3: balloons: {speaches: {1: {...}, 2:{...}}},\r
+  4: panel_pictures: {...},\r
+}\r
+</pre></p><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-2">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-2">正常系</h4><ul><li>panels\r
+<ul><li>panel_pictures\r
+<ul><li>resource_picture\r
+<ul><li>artist\r
+</li><li>lisence\r
+</li></ul></li></ul></li><li>balloons\r
+<ul><li>speaches\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-create">create</h2><p>作成\r
+</p><h3 id="h3-url-3">url</h3><ul><li><a href="http://localhost:3000/panels" class="external" rel="nofollow">http://localhost:3000/panels</a>\r
+</li><li><a href="http://localhost:3000/panels.json" class="external" rel="nofollow">http://localhost:3000/panels.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-3">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>json形式で</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>post</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-3">解説</h3><p>コマを新規作成するための機能。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>パラメータからpanelデータを起こす。\r
+</li><li>起こしたデータの足りない部分を補正する。\r
+<ul><li>comic.author_idをログイン中の作家idで補足する。\r
+</li></ul></li><li>panelデータを検証し、dbに一つのトランザクションで保存する。\r
+<ul><li>コマの移動チェック。\r
+<ul><li>コマ順panel.tが変更されていればコマ移動。\r
+</li><li>パラメータにpanel.tが設定されていて、起こしたpanel.tと違うことをいう。\r
+</li><li>コマ移動処理は<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelModel">PanelModel</a>を参照する。\r
+</li></ul></li><li>\r
+</li></ul></li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC">検証</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelModel">PanelModel</a>の検証を行う。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-3">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-3">正常系</h4><ul><li>作成されたパネルデータを返す。\r
+<ul><li>htmlなら、作成されたパネルが所属するコミックの閲覧ページに遷移する。\r
+<ul><li>最新のコマ10件を指定する。\r
+</li></ul></li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><p>json時のデータ階層\r
+</p><ul><li>comic\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>他人のコミックで一般投稿editableが不可だった。\r
+<ul><li>htmlなら、コミック閲覧ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは403 :forbidden \r
+</li></ul></li></ul></li><li>検証、保存に失敗した\r
+<ul><li>htmlなら、コミック閲覧ページを描画する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは422 unprocessable_entity\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-update">update</h2><p>更新\r
+</p><h3 id="h3-url-4">url</h3><ul><li><a href="http://localhost:3000/panels/1" class="external" rel="nofollow">http://localhost:3000/panels/1</a>\r
+</li><li><a href="http://localhost:3000/panels/1.json" class="external" rel="nofollow">http://localhost:3000/panels/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-4">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id+json形式で</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>put</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-4">解説</h3><p>コマを修正するための機能。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>パラメータからpanelデータを起こす。\r
+</li><li>起こしたデータの足りない部分を補正する。\r
+<ul><li>comic.author_idをログイン中の作家idで補足する。\r
+</li></ul></li><li>panelデータを検証し、dbに一つのトランザクションで保存する。\r
+<ul><li>コマの移動チェック。\r
+<ul><li>コマ順panel.tが変更されていればコマ移動。\r
+</li><li>パラメータにpanel.tが設定されていて、起こしたpanel.tと違うことをいう。\r
+</li><li>コマ移動処理は<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelModel">PanelModel</a>を参照する。\r
+</li></ul></li><li>\r
+</li></ul></li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC-2">検証</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>の検証を行う。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-4">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-4">正常系</h4><ul><li>作成されたパネルデータを返す。\r
+<ul><li>htmlなら、作成されたパネルが所属するコミックの閲覧ページに遷移する。\r
+<ul><li>最新のコマ10件を指定する。\r
+</li></ul></li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><p>json時のデータ階層\r
+</p><ul><li>comic\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-2">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>指定されたidが存在しなかった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li><li>他人のコマだった。\r
+<ul><li>htmlなら、コミック閲覧ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは403 :forbidden \r
+</li></ul></li></ul></li><li>検証、保存に失敗した\r
+<ul><li>htmlなら、コミック閲覧ページを描画する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは422 unprocessable_entity\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-destroy">destroy</h2><p>削除\r
+</p><h3 id="h3-url-5">url</h3><ul><li><a href="http://localhost:3000/panels/1" class="external" rel="nofollow">http://localhost:3000/panels/1</a>\r
+</li><li><a href="http://localhost:3000/panels/1.json" class="external" rel="nofollow">http://localhost:3000/panels/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-5">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>delete</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-5">解説</h3><p>指定されたidのコマを削除する。コマだけでなく、関連するコマ絵、フキダシ、セリフも同時に削除される。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>指定されたidのコマを取得する。\r
+</li><li>そのコマを一つのトランザクションで削除する。\r
+<ul><li>同時に関連するコマ絵、フキダシ、セリフも削除する。\r
+</li><li>後ろのコマを前に詰める。\r
+<ul><li>tが後ろの行すべてをt-1する。\r
+</li></ul></li></ul></li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC-3">検証</h3><ul><li>なし\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-5">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-5">正常系</h4><ul><li>値は返さない。\r
+<ul><li>htmlなら、コマが所属するコミックの閲覧ページに遷移する。\r
+</li><li>jsonならステータスコード200 :okを返す。\r
+</li></ul></li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-3">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+</li></ul></li><li>他人のコマだった。\r
+<ul><li>htmlなら、コマ閲覧ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは403 :forbidden\r
+</li></ul></li></ul></li><li>指定されたidが存在しなかった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-list">list</h2><p>管理者のための閲覧リスト。\r
+</p><hr /><h2 id="h2-browse">browse</h2><p>管理者のための詳細閲覧。\r
+</p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ComicsController">\r
+    <title>ComicsController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ComicsController</link>\r
+    <dc:identifier>ComicsController</dc:identifier>\r
+    <dc:date>2012-01-17T19:40:41+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= コミック\r
+ストーリー性を持ったコマの集合体に名前をつけるためのデータ。表紙のようなもの。\r
+\r
+== top\r
+総合トップページ。\r
+=== url\r
+ * http://localhost:3000/\r
+=== リクエスト\r
+||パラメータ||なし||\r
+||権限||作家||\r
+||html||○||\r
+||json||&times;||\r
+||jsonp||&times;||\r
+||me]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF">コミック</h1><p>ストーリー性を持ったコマの集合体に名前をつけるためのデータ。表紙のようなもの。\r
+</p><h2 id="h2-top">top</h2><p>総合トップページ。\r
+</p><h3 id="h3-url">url</h3><ul><li><a href="http://localhost:3000/" class="external" rel="nofollow">http://localhost:3000/</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>×</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC">解説</h3><p>ぺったんRのロゴがクリックされたときに開くページ。コミュニティ関連の入り口となる。コミックとは関係ないが、他に行き場がない。\r
+</p><p>各コンテンツの最新情報が表示される。雑多な情報を扱うのでjsonには対応しない。\r
+</p><hr /><h2 id="h2-index">index</h2><p>一覧形式\r
+</p><h3 id="h3-url-2">url</h3><ul><li><a href="http://localhost:3000/comics" class="external" rel="nofollow">http://localhost:3000/comics</a>\r
+</li><li><a href="http://localhost:3000/comics.json" class="external" rel="nofollow">http://localhost:3000/comics.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-2">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-2">解説</h3><p>新着コミック20件を一覧形式で表示する。ただし、作者によって非公開にされたコミックは含まない。\r
+</p><ul><li>comicのvisible=1な行をposted_at降順で20件分取得する。\r
+</li><li>取得したデータを返す。\r
+<ul><li>htmlなら整形してページを返す。\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB">正常系</h4><ul><li>comic\r
+<ul><li>author\r
+</li></ul></li></ul><p>jsonでは、comicにauthorを含んだデータを返す。\r
+</p><hr /><h2 id="h2-show">show</h2><p>単票形式\r
+</p><h3 id="h3-url-3">url</h3><ul><li><a href="http://localhost:3000/comics/1.json" class="external" rel="nofollow">http://localhost:3000/comics/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-3">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>×</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-3">解説</h3><p>クライアントがコミックの情報を得るために使う機能。\r
+ユーザがコミック情報だけをみても、うれしいことはないので、jsonのみとなる。\r
+</p><ul><li>要求されたidのcomicを取得する。\r
+</li><li>取得したデータを返す。\r
+<ul><li>json形式で返す。\r
+</li></ul></li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-2">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-2">正常系</h4><ul><li>comic\r
+<ul><li>author\r
+</li></ul></li></ul><p>jsonでは、comicにauthorを含んだデータを返す。\r
+</p><hr /><h2 id="h2-play">play</h2><p>コミック閲覧。コミックを読むための機能。\r
+</p><h3 id="h3-url-4">url</h3><ul><li><a href="http://localhost:3000/comics/play/1" class="external" rel="nofollow">http://localhost:3000/comics/play/1</a>\r
+</li><li><a href="http://localhost:3000/comics/play/1.json" class="external" rel="nofollow">http://localhost:3000/comics/play/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-4">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id,offset,count</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>get</td></tr></tbody></table><h3 id="h3-.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF">パラメータ</h3><h4 id="h4-offset">offset</h4><ul><li>指定した数のコマだけ飛ばして表示を始める。\r
+<ul><li>offset=3のときはコミック開始から数えて4コマ目から表示される。\r
+</li></ul></li><li>省略時は0。\r
+</li><li>投稿されたコマ数以上の値が指定されたときは、最後のコマだけが表示される。\r
+</li><li>負の値が指定されたときは、最後のコマから数えてコマを飛ばして表示する。\r
+<ul><li>-4のときは、最後から4つのコマを表示する。\r
+</li></ul></li></ul><h4 id="h4-count">count</h4><ul><li>指定した数だけコマを表示する。\r
+</li><li>省略時は30。\r
+</li><li>最大値は200で、それ以上多い値が指定されたときは、最大値に切り詰められる。\r
+</li><li>負の値が指定されたときは、デフォルト値となる。\r
+</li></ul><h3 id="h3-.E8.A7.A3.E8.AA.AC-4">解説</h3><p>コミックにつながっているコマを指定されたオフセット位置からコマ数だけ時系列t順に表示する。コマ上の部品はまとめて取得する。\r
+</p><ul><li>要求されたidのcomicと関連データを取得する。\r
+</li><li>取得したデータを返す。\r
+<ul><li>htmlなら整形してページを返す。\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><h3 id="h3-.E3.82.B3.E3.83.9E.E3.81.AE.E6.95.B4.E5.BD.A2">コマの整形</h3><p>コマ上の部品であるコマ絵とフキダシは時系列tでソートして返さなければならない。表示的にはすべてが時間で上から下に流れるのがぺったんRの仕様である。しかし、sqlでは二つのテーブルを混ぜてソートはできないので時系列順に配置しなおして(配列のキーをtにして)戻さなければならない。balloons配下のspeachesも同様にtでソートしておく。\r
+<pre>panels:{\r
+  1: balloons: {...},\r
+  2: panel_pictures: {...},\r
+  3: balloons: {speaches: {1: {...}, 2:{...}}},\r
+  4: panel_pictures: {...},\r
+}\r
+</pre></p><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-3">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-3">正常系</h4><ul><li>comic\r
+<ul><li>author\r
+</li><li>panels\r
+<ul><li>panel_pictures\r
+<ul><li>resource_picture\r
+<ul><li>artist\r
+</li><li>lisence\r
+</li></ul></li></ul></li><li>balloons\r
+<ul><li>speaches\r
+</li></ul></li></ul></li></ul></li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>指定されたidが非公開だった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-new">new</h2><p>新規\r
+</p><h3 id="h3-url-5">url</h3><ul><li><a href="http://localhost:3000/comics/new" class="external" rel="nofollow">http://localhost:3000/comics/new</a>\r
+</li><li><a href="http://localhost:3000/comics/new.json" class="external" rel="nofollow">http://localhost:3000/comics/new.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-5">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>post</td></tr></tbody></table><h3 id="h3-.E8.A7.A3.E8.AA.AC-5">解説</h3><p>コミック情報を作成するための入力フォームをまっさらなページで表示する。\r
+</p><p>フォームの表示のみなので、これといった処理はない。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-4">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-4">正常系</h4><ul><li>入力フォームを返す。\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-2">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li></ul><hr /><h2 id="h2-create">create</h2><p>作成\r
+</p><h3 id="h3-url-6">url</h3><ul><li><a href="http://localhost:3000/comics" class="external" rel="nofollow">http://localhost:3000/comics</a>\r
+</li><li><a href="http://localhost:3000/comics.json" class="external" rel="nofollow">http://localhost:3000/comics.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-6">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>json形式で</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>post</td></tr></tbody></table><h3 id="h3-.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF-2">パラメータ</h3><h4 id="h4-comic">comic</h4><ul><li>コミックの情報。<a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>を参照。\r
+</li><li>title\r
+</li><li>width\r
+</li><li>height\r
+</li><li>visible\r
+</li><li>editable\r
+</li></ul><h4 id="h4-auth_token">auth_token</h4><ul><li>jsonで要求する場合、認証処置として認証トークンが必要。\r
+</li></ul><h3 id="h3-.E8.A7.A3.E8.AA.AC-6">解説</h3><p>コミックを新規作成するための機能。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>パラメータからcomicデータを起こす。\r
+</li><li>起こしたデータの足りない部分を補正する。\r
+<ul><li>comic.author_idをログイン中の作家idで補足する。\r
+</li></ul></li><li>comicデータを検証し、dbに保存する。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC">検証</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>の検証を行う。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-5">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-5">正常系</h4><ul><li>作成されたコミックデータを返す。\r
+<ul><li>htmlなら、作成されたコミックの閲覧ページに遷移する。 ex)/comics/1\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><p>json時のデータ階層\r
+</p><ul><li>comic\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-3">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>検証、保存に失敗した\r
+<ul><li>htmlなら、新規ページを描画する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは422 unprocessable_entity\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-edit">edit</h2><p>編集\r
+</p><h3 id="h3-url-7">url</h3><ul><li><a href="http://localhost:3000/comics/edit" class="external" rel="nofollow">http://localhost:3000/comics/edit</a>\r
+</li><li><a href="http://localhost:3000/comics/edit.json" class="external" rel="nofollow">http://localhost:3000/comics/edit.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-7">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>post</td></tr></tbody></table><h3 id="h3-.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF-3">パラメータ</h3><h4 id="h4-auth_token-2">auth_token</h4><ul><li>jsonで要求する場合、認証処置として認証トークンが必要。\r
+</li></ul><h3 id="h3-.E8.A7.A3.E8.AA.AC-7">解説</h3><p>コミック情報を更新するための入力フォームを指定されたidのデータを埋めたページで表示する。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>指定されたidのコミックを取得する。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-6">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-6">正常系</h4><ul><li>入力フォームを返す。\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-4">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>指定されたidが存在しなかった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-update">update</h2><p>更新\r
+</p><h3 id="h3-url-8">url</h3><ul><li><a href="http://localhost:3000/comics/1" class="external" rel="nofollow">http://localhost:3000/comics/1</a>\r
+</li><li><a href="http://localhost:3000/comics/1.json" class="external" rel="nofollow">http://localhost:3000/comics/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-8">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id+jsonまたはフォーム</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>put</td></tr></tbody></table><h3 id="h3-.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF-4">パラメータ</h3><h4 id="h4-comic-2">comic</h4><ul><li>コミックの情報。<a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>を参照。\r
+</li><li>title\r
+</li><li>width\r
+</li><li>height\r
+</li><li>visible\r
+</li><li>editable\r
+</li></ul><h4 id="h4-auth_token-3">auth_token</h4><ul><li>jsonで要求する場合、認証処置として認証トークンが必要。\r
+</li></ul><h3 id="h3-.E8.A7.A3.E8.AA.AC-8">解説</h3><p>コミックデータを修正するための機能。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>指定されたidのコミックを取得する。\r
+</li><li>与えられたパラメータでコミックを更新する。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC-2">検証</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>の検証を行う。\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-7">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-7">正常系</h4><ul><li>更新されたコミックデータを返す。\r
+<ul><li>htmlなら、更新されたコミックの閲覧ページに遷移する。 ex)/comics/1\r
+</li><li>jsonならjson形式で返す。\r
+</li></ul></li></ul><p>json時のデータ階層\r
+</p><ul><li>comic\r
+</li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-5">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonならエラーメッセージを返す。\r
+</li></ul></li><li>他人のコミックだった。\r
+<ul><li>htmlなら、コミック閲覧ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは403 :forbidden\r
+</li></ul></li></ul></li><li>指定されたidが存在しなかった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li><li>検証、保存に失敗した\r
+<ul><li>htmlなら、編集ページを描画する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは422 unprocessable_entity\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-destroy">destroy</h2><p>削除\r
+</p><h3 id="h3-url-9">url</h3><ul><li><a href="http://localhost:3000/comics/1" class="external" rel="nofollow">http://localhost:3000/comics/1</a>\r
+</li><li><a href="http://localhost:3000/comics/1.json" class="external" rel="nofollow">http://localhost:3000/comics/1.json</a>\r
+</li></ul><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88-9">リクエスト</h3><table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>作家</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr><tr><td>method</td><td>delete</td></tr></tbody></table><h3 id="h3-.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF-5">パラメータ</h3><h4 id="h4-auth_token-4">auth_token</h4><ul><li>jsonで要求する場合、認証処置として認証トークンが必要。\r
+</li></ul><h3 id="h3-.E8.A7.A3.E8.AA.AC-9">解説</h3><p>指定されたidのコミックを削除する。コミックだけでなく、関連するコマ、コマ絵、フキダシ、セリフも同時に削除される。\r
+</p><ul><li>権限をチェックする。\r
+</li><li>指定されたidのコミックを取得する。\r
+</li><li>そのコミックを削除する。同時に関連するコマ、コマ絵、フキダシ、セリフも削除する。\r
+</li><li>作業結果をクライアントに戻す。\r
+</li></ul><h3 id="h3-.E6.A4.9C.E8.A8.BC-3">検証</h3><ul><li>なし\r
+</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-8">戻り値</h3><h4 id="h4-.E6.AD.A3.E5.B8.B8.E7.B3.BB-8">正常系</h4><ul><li>値は返さない。\r
+<ul><li>htmlなら、コミック一覧ページに遷移する。\r
+</li><li>jsonならステータスコード200 :okを返す。\r
+</li></ul></li></ul><h4 id="h4-.E4.BE.8B.E5.A4.96.E7.B3.BB-6">例外系</h4><ul><li>作家アカウントでサインインしてなかった。\r
+<ul><li>htmlなら、サインインを促すページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+</li></ul></li><li>他人のコミックだった。\r
+<ul><li>htmlなら、コミック閲覧ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは403 :forbidden\r
+</li></ul></li></ul></li><li>指定されたidが存在しなかった。\r
+<ul><li>htmlなら、404ページへ遷移する。\r
+</li><li>jsonなら、エラーメッセージを返す。\r
+<ul><li>ステータスコードは404 :not_found\r
+</li></ul></li></ul></li></ul><hr /><h2 id="h2-list">list</h2><p>管理者のための閲覧リスト。\r
+</p><hr /><h2 id="h2-browse">browse</h2><p>管理者のための詳細閲覧。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">\r
+    <title>ComicModel</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ComicModel</link>\r
+    <dc:identifier>ComicModel</dc:identifier>\r
+    <dc:date>2012-01-17T07:57:27+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コミック comic\r
+||name||和名||type||default||null||limit||note||\r
+||title||作品名||string||100|| || ||||\r
+||width||コマの幅デフォルト値||integer||200||FALSE|| ||||\r
+||height||コマの高さデフォルト値||integer||80||FALSE|| ||||\r
+||]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.20comic">コミック comic</h1><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>title</td><td>作品名</td><td>string</td><td>100</td><td> </td><td> </td><td></td></tr><tr><td>width</td><td>コマの幅デフォルト値</td><td>integer</td><td>200</td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマの高さデフォルト値</td><td>integer</td><td>80</td><td>FALSE</td><td> </td><td></td></tr><tr><td>visible</td><td>公開フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>可視範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>editable</td><td>編集フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>許可範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>author_id</td><td>作者の作家id</td><td>integer</td><td></td><td>false</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><h2 id="h2-.E6.A4.9C.E8.A8.BC">検証</h2><ul><li>title\r
+<ul><li>100文字以内であること\r
+</li></ul></li><li>width\r
+<ul><li>数値であること\r
+</li><li>1以上?未満であること\r
+</li></ul></li><li>height\r
+<ul><li>数値であること\r
+</li><li>1以上?未満であること\r
+</li></ul></li><li>visible\r
+<ul><li>数値であること\r
+</li><li>0以上4未満であること\r
+</li></ul></li><li>editable\r
+<ul><li>数値であること\r
+</li><li>0以上4未満であること\r
+</li></ul></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/StatusCode">\r
+    <title>StatusCode</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/StatusCode</link>\r
+    <dc:identifier>StatusCode</dc:identifier>\r
+\r
+    <dc:date>2012-01-16T18:21:44+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[ここを参照する\r
+\r
+http://www.func09.com/wordpress/archives/1226\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<p>ここを参照する\r
+</p><p><a href="http://www.func09.com/wordpress/archives/1226" class="external" rel="nofollow">http://www.func09.com/wordpress/archives/1226</a>\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/FrontPage">\r
+    <title>FrontPage</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/FrontPage</link>\r
+    <dc:identifier>FrontPage</dc:identifier>\r
+    <dc:date>2012-01-16T18:21:00+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ぺったんRのWiki =\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/926/640x640_0.png)]]\r
+== ぺったんRって何だってばよ?\r
+ぺったんを参考に、より使い勝手の良い漫画作成ツールを作ろうとしている。Rの意味はみなさんで勝手に想像してください。\r
+\r
+参考\r
+ * http://sourceforge.jp/projec]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.E3.81.AEWiki">ぺったんRのWiki</h1><img src="http://static.sourceforge.jp/thumb/g/2/926/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9262f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+</p><h2 id="h2-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.E3.81.A3.E3.81.A6.E4.BD.95.E3.81.A0.E3.81.A3.E3.81.A6.E3.81.B0.E3.82.88.EF.BC.9F">ぺったんRって何だってばよ?</h2><p>ぺったんを参考に、より使い勝手の良い漫画作成ツールを作ろうとしている。Rの意味はみなさんで勝手に想像してください。\r
+</p><p>参考\r
+</p><ul><li><a href="http://sourceforge.jp/projects/pettan/">http://sourceforge.jp/projects/pettan/</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanoss/">http://sourceforge.jp/projects/pettanoss/</a>\r
+</li></ul><p>より詳しくは <a href="http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan">WhatsPettan</a>\r
+</p><h2 id="h2-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.E3.81.AE.E7.9B.AE.E6.A8.99">ぺったんRの目標</h2><h3 id="h3-.E7.B7.8F.E5.90.88.E7.9B.AE.E6.A8.99">総合目標</h3><ul><li>漫画形式の表現がブラウザだけでできる\r
+</li><li>漫画形式のブログを簡単に始められる\r
+</li><li>漫画形式のSNSを簡単に始められる\r
+</li><li>漫画形式の記事をブログに埋め込める\r
+</li><li>その他あらゆるwebページに最小限の労力で漫画を表示できる\r
+</li></ul><h3 id="h3-.E9.96.8B.E7.99.BA.E7.9B.AE.E6.A8.99">開発目標</h3><ul><li>ぺったんR Web API\r
+</li><li>ぺったんR Web API に対応した、ひとつ以上のサーバ側実装\r
+</li><li>ぺったんR Web API に対応した、ひとつ以上のクライアント側実装\r
+</li><li>ぺったんR をお試しできる Web サービスの運営\r
+</li></ul><h2 id="h2-.E7.8F.BE.E5.9C.A8.E3.81.AE.E7.8A.B6.E6.B3.81">現在の状況</h2><ul><li>プロトタイプ作成中。 <a href="http://pettanr.heroku.com/" class="external" rel="nofollow">http://pettanr.heroku.com/</a>\r
+</li><li>プロジェクト Web サイトの制作中 <a href="http://pettanr.sourceforge.jp/index.html" class="external" rel="nofollow">http://pettanr.sourceforge.jp/index.html</a>\r
+</li><li>ユーザーコンソール <a href="http://pettanr.sourceforge.jp/work.html" class="external" rel="nofollow">http://pettanr.sourceforge.jp/work.html</a>\r
+</li></ul><h2 id="h2-.E9.96.8B.E7.99.BA.E8.80.85.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">開発者向けドキュメント</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers">ForDevelopers</a>\r
+</li></ul><h2 id="h2-.E7.B7.A8.E9.9B.86.E9.95.B7.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">編集長向けドキュメント</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters">ForWebmasters</a>\r
+</li></ul><h2 id="h2-.E4.BD.9C.E5.AE.B6.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">作家向けドキュメント</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors">ForAuthors</a>\r
+</li></ul><h2 id="h2-.E5.90.84.E8.87.AA.E3.81.AE.E3.83.A1.E3.83.A2">各自のメモ</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/YasushiIto">YasushiIto</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ItoZyun">ItoZyun</a>\r
+</li></ul><h2 id="h2-.E8.B3.87.E6.96.99.E7.AD.89">資料等</h2><ul><li>マンガ要素の日英対訳 <a href="http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements">TranslationComicElements</a>\r
+</li><li>おまけ <a href="http://sourceforge.jp/projects/pettanr/wiki/AppendixList">AppendixList</a>\r
+</li><li>railsのステータスコード <a href="http://sourceforge.jp/projects/pettanr/wiki/StatusCode">StatusCode</a>\r
+</li></ul><script src="/projects/pettanr/files/compact.js" type="text/javascript" charset="utf-8"></script>\r
+<div class="dashboard-widget"><h3 class="titlebar">最近のチケット一覧</h3><div class="dashboard-body"><table class="event-list"><tr class="row-even"><td><a href="/ticket/browse.php?group_id=6674&amp;tid=27153">コマ背景の仕様が稚拙</a></td><td class="date">2012-01-18 09:13</td></tr><tr class="row-even"><td class="extrainfo">コマに背景が設定できる。\r
+panel.resource_picture_idで素材を使うが、素材を指定するしかできない。これでは反転などができ...</td><td class="userinfo"><a href="/users/yasushiito/" class="user-link"><img width="9" height="12" src="http://static.sourceforge.jp/thumb/u/1/989/12x12_0.png" border="0" class="user-image user-image-type-icon" alt="">yasushiito</a></td></tr></table><div class="list_link"><a href="/projects/pettanr/ticket/">チケット一覧を確認</a></div></div></div>\r
+]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/XmlHttpRequest">\r
+    <title>XmlHttpRequest</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/XmlHttpRequest</link>\r
+\r
+    <dc:identifier>XmlHttpRequest</dc:identifier>\r
+    <dc:date>2012-01-16T13:39:48+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= XMLHttpRequest\r
+\r
+ * ie 4.0 以降 ie6 以前は ActiveX\r
+ * Firefox 1.0 以降\r
+ * NN 7 以降\r
+ * Opera 7.6 以降\r
+ * Safari 1.2 以降\r
+ * Konqueror 3 以降\r
+\r
+以上は 入門 ajax 増補改訂版より\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-XMLHttpRequest">XMLHttpRequest</h1><ul><li>ie 4.0 以降 ie6 以前は ActiveX\r
+</li><li>Firefox 1.0 以降\r
+</li><li>NN 7 以降\r
+</li><li>Opera 7.6 以降\r
+</li><li>Safari 1.2 以降\r
+</li><li>Konqueror 3 以降\r
+</li></ul><p>以上は 入門 ajax 増補改訂版より\r
+</p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor">\r
+    <title>JavascriptEditor</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor</link>\r
+    <dc:identifier>JavascriptEditor</dc:identifier>\r
+    <dc:date>2012-01-16T08:40:33+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= Javascript\r
+ js は 閲覧時 に使われるもの、ログイン後に使われるもの、その両方で使われるものがある.\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/990/640x640_0.png)]]\r
+== common.js\r
+ * pettnar.\r
+ * pettanr.const\r
+ * pettanr.ua\r
+   * ブラウザ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-Javascript">Javascript</h1><div class="indent">js は 閲覧時 に使われるもの、ログイン後に使われるもの、その両方で使われるものがある.\r
+</div><img src="http://static.sourceforge.jp/thumb/g/2/990/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9902f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+</p><h2 id="h2-common.js">common.js</h2><ul><li>pettnar.\r
+</li><li>pettanr.const\r
+</li><li>pettanr.ua\r
+<ul><li>ブラウザの情報、プラグインの情報\r
+</li></ul></li><li>pettnar.util\r
+<ul><li>\r
+</li></ul></li><li>pettnar.overlay\r
+<ul><li>ポップアップオーバーレイを管理する.\r
+</li></ul></li><li>pettnar.key\r
+<ul><li>キーイベントの発行、テキスト入力エリアの管理\r
+</li></ul></li><li>pettnar.balloon\r
+<ul><li>クロスバックエンドな吹きだし画像のためのラッパーの発行.<a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">XbackendSpeachBalloon</a>\r
+</li><li>SVG, VML といったベクター画像で吹きだし(balloon)を描画する(ベクター画像のサポートがない場合は代替画像を表示する)\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">AboutSpeachBalloon</a>\r
+</li></ul></li><li>pettnar.image\r
+<ul><li>クロスバックエンドな、Reversible Image のためのラッパーを発行.<a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">XbackendReversibleImage</a>\r
+</li><li>css3, VML, ActiveX, Flash, サーバー側で生成した反転画像 を使用して画像の反転を行う.\r
+</li><li>透過 PNG のサポートが甘い IE6 以下にたいして、VML, Flash, ActiveX+サーバー画像 による描画サポートを行う.<a href="http://sourceforge.jp/projects/pettanr/wiki/PngFix">PngFix</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">PictureIo</a>\r
+</li></ul></li><li>pettnar.i18n\r
+<ul><li>マルチ言語情報の保持.言語変更イベントの管理.\r
+</li></ul></li><li>pettnar.io\r
+<ul><li>通信\r
+</li><li>xml としてサーバに置かれた ajax なリソースに対して、ajax feed api を使った json リクエスト(xmlより転送量が少ない)などの 複数経路でリクエストを行うラッパー\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">JsonApi</a>\r
+</li></ul></li><li>pettnar.load\r
+<ul><li>work.js と jQuery のロード.min や debag version の切り替え.jQuery version の切り替え.\r
+</li></ul></li></ul><h2 id="h2-work.js">work.js</h2><p>ログイン後のユーザー(管理者)の操作.コミック・画像の管理やコマの作成.\r
+</p><ul><li>pettnar.view\r
+<ul><li>現在のビューを管理する.Window Resize イベントの監視.\r
+</li></ul></li><li>pettnar.editor\r
+<ul><li>コマの編集を行う.\r
+</li></ul></li><li>pettnar.file\r
+<ul><li>サーバから取得したリソース情報を保持し、データの取得やアクセス権のチェック、データのアップデートをラップする.\r
+</li></ul></li><li>pettnar.finder\r
+<ul><li>ファイル(リソース)エクスプローラー\r
+</li><li>コミック、コマ、画像、吹きだし、画像提供絵師情報</li></ul></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/SystemController">\r
+    <title>SystemController</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/SystemController</link>\r
+    <dc:identifier>SystemController</dc:identifier>\r
+    <dc:date>2012-01-15T18:11:40+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= SystemController\r
+管理者機能。\r
+\r
+== index\r
+管理者機能目次。\r
+== start\r
+管理者を作成するための手順を表示するためのページ。\r
+\r
+== browse\r
+dbを閲覧するためのメニュー。\r
+\r
+== auth_token\r
+認証トークンの表示および管理メニュー。\r
+\r
+=== create_token\r
+認証トークンの作成。\r
+\r
+=== delete_]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-SystemController"><a href="http://sourceforge.jp/projects/pettanr/wiki/SystemController">SystemController</a></h1><p>管理者機能。\r
+</p><h2 id="h2-index">index</h2><p>管理者機能目次。\r
+</p><h2 id="h2-start">start</h2><p>管理者を作成するための手順を表示するためのページ。\r
+</p><h2 id="h2-browse">browse</h2><p>dbを閲覧するためのメニュー。\r
+</p><h2 id="h2-auth_token">auth_token</h2><p>認証トークンの表示および管理メニュー。\r
+</p><h3 id="h3-create_token">create_token</h3><p>認証トークンの作成。\r
+</p><h3 id="h3-delete_token">delete_token</h3><p>認証トークンの削除。\r
+</p><h2 id="h2-waiting_list">waiting_list</h2><p>管理者承認。\r
+</p><h3 id="h3-approve">approve</h3><p>管理者承認。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AuthorRegistrationsController">\r
+    <title>AuthorRegistrationsController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AuthorRegistrationsController</link>\r
+    <dc:identifier>AuthorRegistrationsController</dc:identifier>\r
+\r
+    <dc:date>2012-01-15T17:58:47+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= AuthorRegistrationsController\r
+認証エンジンdeviseでサインアップ後のページ遷移をするために必要となった。\r
+\r
+遷移先を定義しただけなので、機能はない。]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-AuthorRegistrationsController"><a href="http://sourceforge.jp/projects/pettanr/wiki/AuthorRegistrationsController">AuthorRegistrationsController</a></h1><p>認証エンジンdeviseでサインアップ後のページ遷移をするために必要となった。\r
+</p><p>遷移先を定義しただけなので、機能はない。</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers">\r
+    <title>RailsControllers</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/RailsControllers</link>\r
+    <dc:identifier>RailsControllers</dc:identifier>\r
+    <dc:date>2012-01-15T17:55:25+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= サーバ側の機能\r
+== コミック関係\r
+ * ComicsController\r
+ * PanelsController\r
+ * PanelPicturesController\r
+ * BalloonsController\r
+ * SpeachsController\r
+== 素材関係\r
+ * OriginalPicturesController\r
+ * ResourcePicturesCont]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B5.E3.83.BC.E3.83.90.E5.81.B4.E3.81.AE.E6.A9.9F.E8.83.BD">サーバ側の機能</h1><h2 id="h2-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E9.96.A2.E4.BF.82">コミック関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicsController">ComicsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelsController">PanelsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController">PanelPicturesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BalloonsController">BalloonsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachsController">SpeachsController</a>\r
+</li></ul><h2 id="h2-.E7.B4.A0.E6.9D.90.E9.96.A2.E4.BF.82">素材関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPicturesController">OriginalPicturesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePicturesController">ResourcePicturesController</a>\r
+</li></ul><h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E9.96.A2.E4.BF.82">フキダシテンプレート関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController">SpeachBalloonsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BallonTemplatesController">BallonTemplatesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachTemplatesController">SpeachTemplatesController</a>\r
+</li></ul><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E9.96.A2.E4.BF.82">ライセンス関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/LisencesController">LisencesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">CommonLisencesController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalLisencesController">OriginalLisencesController</a>\r
+</li></ul><h2 id="h2-.E5.BD.B9.E5.89.B2.E9.96.A2.E4.BF.82">役割関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AuthorsController">AuthorsController</a>\r
+<ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AuthorRegistrationsController">AuthorRegistrationsController</a>\r
+</li></ul></li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ArtistsController">ArtistsController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HelpController">HelpController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HomeController">HomeController</a>\r
+</li></ul><h2 id="h2-.E3.82.B7.E3.82.B9.E3.83.86.E3.83.A0.E9.96.A2.E4.BF.82">システム関係</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SystemController">SystemController</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SystemPicturesController">SystemPicturesController</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers">\r
+    <title>ForDevelopers</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ForDevelopers</link>\r
+\r
+    <dc:identifier>ForDevelopers</dc:identifier>\r
+    <dc:date>2012-01-15T17:49:02+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 開発者向けドキュメント\r
+== 開発環境\r
+=== サーバーサイド\r
+ * Ruby1.9+Rails3.1\r
+==== 構築\r
+ * HowToInstall\r
+   * PictureIo\r
+   * RmagickAndDmagick\r
+\r
+=== クライアントサイド\r
+ * html4.01 + css2.1 に加え css3, SVG, XML, ActiveX, Flash のうち]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E9.96.8B.E7.99.BA.E8.80.85.E5.90.91.E3.81.91.E3.83.89.E3.82.AD.E3.83.A5.E3.83.A1.E3.83.B3.E3.83.88">開発者向けドキュメント</h1><h2 id="h2-.E9.96.8B.E7.99.BA.E7.92.B0.E5.A2.83">開発環境</h2><h3 id="h3-.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E3.82.B5.E3.82.A4.E3.83.89">サーバーサイド</h3><ul><li>Ruby1.9+Rails3.1\r
+</li></ul><h4 id="h4-.E6.A7.8B.E7.AF.89">構築</h4><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HowToInstall">HowToInstall</a>\r
+<ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">PictureIo</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick">RmagickAndDmagick</a>\r
+</li></ul></li></ul><h3 id="h3-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E3.82.B5.E3.82.A4.E3.83.89">クライアントサイド</h3><ul><li>html4.01 + css2.1 に加え css3, SVG, XML, ActiveX, Flash のうちのいくつか.\r
+<ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ClientSide">ClientSide</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">XbackendReversibleImage</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">XbackendSpeachBalloon</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PngFix">PngFix</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2">HtmlAndCss2</a>\r
+</li></ul></li><li>javascript( jQuery + plugin)\r
+<ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor">JavascriptEditor</a>\r
+</li></ul></li></ul><h3 id="h3-.E3.83.87.E3.83.BC.E3.82.BF.E3.83.99.E3.83.BC.E3.82.B9">データベース</h3><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutModels">AboutModels</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema">DatabaseSchema</a> \r
+</li></ul><h2 id="h2-.E6.A9.9F.E8.83.BD">機能</h2><ul><li>サーバ側の機能 <a href="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers">RailsControllers</a>\r
+</li><li>JsonAPI <a href="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">JsonApi</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ApiIndex">ApiIndex</a>\r
+</li></ul><h2 id="h2-.E6.94.B9.E5.A4.89.E4.BA.88.E5.91.8A">改変予告</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc">ChangeDoc</a></li></ul>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/YasushiIto">\r
+    <title>YasushiIto</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/YasushiIto</link>\r
+    <dc:identifier>YasushiIto</dc:identifier>\r
+    <dc:date>2012-01-15T17:39:27+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[コモンライセンスの初期化。パブリックドメインだけは追加。\r
+\r
+md5を採用するとユニーク。同じ画像はアップロードできない。絵師の仕様がかわる?\r
+\r
+フキダシは名前の末尾を@ドメインにする慣習\r
+\r
+クリコモは転載自由なのか?\r
+\r
+jpgは反転できなくてもよくね?\r
+\r
+コミックのオーナーがフラグを変更できるように\r
+\r
+棒人間・ヴェール・ぞゥ\r
+\r
+SNS・ブログ\r
+\r
+フキダシはベクター式]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<p>コモンライセンスの初期化。パブリックドメインだけは追加。\r
+</p><p>md5を採用するとユニーク。同じ画像はアップロードできない。絵師の仕様がかわる?\r
+</p><p>フキダシは名前の末尾を@ドメインにする慣習\r
+</p><p>クリコモは転載自由なのか?\r
+</p><p>jpgは反転できなくてもよくね?\r
+</p><p>コミックのオーナーがフラグを変更できるように\r
+</p><p>棒人間・ヴェール・ぞゥ\r
+</p><p>SNS・ブログ\r
+</p><p>フキダシはベクター式に合わせるが、テンプレートのみも用意\r
+</p><h1 id="h1-w.E3.81.A8h.E3.81.AB.E3.83.9E.E3.82.A4.E3.83.8A.E3.82.B9.E3.81.AF.E3.81.82.E3.82.8A.EF.BC.9F">wとhにマイナスはあり?</h1><ul><li>逆フキダシ\r
+</li><li>min_width→lower_limit\r
+</li><li>フォントなど\r
+<pre>  &lt;property name=&quot;fontSize&quot;/&gt;\r
+       &lt;property name=&quot;fontColor&quot;/&gt;\r
+       &lt;property name=&quot;fontWeight&quot;/&gt;\r
+       &lt;property name=&quot;serif&quot;/&gt;\r
+       &lt;property name=&quot;way&quot;/&gt;\r
+       &lt;property name=&quot;textAlign&quot;/&gt;\r
+</pre></li><li>no_adult ?\r
+</li></ul><ul><li> → \r
+</li><li> → \r
+</li><li> → \r
+</li><li> → \r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ApiIndex">\r
+    <title>ApiIndex</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ApiIndex</link>\r
+    <dc:identifier>ApiIndex</dc:identifier>\r
+    <dc:date>2012-01-15T17:13:21+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クライアントが必要としそうなAPI\r
+何がどんな機能を実行するために、どんなデータが必要かを挙げていってください。体裁はどうでもいいです。\r
+\r
+== ぺったんサーバーの情報\r
+ * API の url\r
+   * 最終的にはここに掲載 RailsControllers\r
+ * 総素材数\r
+   * べらぼうに多い場合、素材一覧の取得を一度にはできない.\r
+     * カウントAPIを用意す]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E3.81.8C.E5.BF.85.E8.A6.81.E3.81.A8.E3.81.97.E3.81.9D.E3.81.86.E3.81.AAAPI">クライアントが必要としそうなAPI</h1><p>何がどんな機能を実行するために、どんなデータが必要かを挙げていってください。体裁はどうでもいいです。\r
+</p><h2 id="h2-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E3.81.AE.E6.83.85.E5.A0.B1">ぺったんサーバーの情報</h2><ul><li>API の url\r
+<ul><li>最終的にはここに掲載 <a href="http://sourceforge.jp/projects/pettanr/wiki/RailsControllers">RailsControllers</a>\r
+</li></ul></li><li>総素材数\r
+<ul><li>べらぼうに多い場合、素材一覧の取得を一度にはできない.\r
+<ul><li>カウントAPIを用意する\r
+</li><li>たぶん名前はcount\r
+</li></ul></li></ul></li><li>総コミック数\r
+<ul><li>べらぼうに多い場合、、、\r
+</li></ul></li></ul><h2 id="h2-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.82.A8.E3.82.AF.E3.82.B9.E3.83.97.E3.83.AD.E3.83.BC.E3.83.A9">コミックエクスプローラ</h2><h3 id="h3-.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E3.81.AE.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E4.B8.80.E8.A6.A7">ログインユーザーのコミック一覧</h3><ul><li>作家の作業場は/home以下\r
+</li></ul><h3 id="h3-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93R.20.E3.81.AE.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E4.B8.80.E8.A6.A7">ぺったんR のコミック一覧</h3><ul><li>総合ページは/から。\r
+<ul><li>/にトレンドなデータが表示される\r
+</li></ul></li><li>/comics でコミック一覧\r
+<ul><li>/comics.json でコミック一覧のjsonデータが\r
+<ul><li>更新日時が新しい順に20件\r
+</li></ul></li></ul></li></ul><h3 id="h3-.E3.83.91.E3.83.8D.E3.83.AB.E3.81.AE.E4.B8.A6.E3.81.B3.E6.9B.BF.E3.81.88">パネルの並び替え</h3><ul><li>パネルのパラメータ\r
+</li><li>パネルの並び替えがユーザーに許可されているか?\r
+<ul><li>コマの並び順ということなら、されている。パネルの更新で時系列tを変える\r
+</li></ul></li><li>パネルの編集がユーザーに許可されているか?\r
+<ul><li>作者以外の投稿ということなら、されている。コミックのeditableが1であれば。\r
+</li></ul></li></ul><h2 id="h2-.E7.B4.A0.E6.9D.90.E3.82.A8.E3.82.AF.E3.82.B9.E3.83.97.E3.83.AD.E3.83.BC.E3.83.A9.E3.83.BC">素材エクスプローラー</h2><ul><li>最近投稿された素材 → <a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictures">ResourcePictures</a>#index\r
+</li></ul><h3 id="h3-.E7.B4.A0.E6.9D.90.E4.B8.80.E8.A6.A7.E3.81.AE.E5.8F.96.E5.BE.97">素材一覧の取得</h3><ul><li>全ての素材の全プロパティの取得\r
+<ul><li>images.json\r
+</li><li>さすがに全件取得は無茶。\r
+<ul><li>最新の~、人気の~、最近使った~で絞り込む\r
+</li><li>タグの仕様を詰めないと無理か?\r
+</li></ul></li></ul></li><li>素材データが多い場合、少しづつ取得(って結構めんどくさいかも)\r
+<ul><li>images.json?last=id(最後に貰った素材のID を入れるとその続きから、とか)\r
+</li><li>今のところ20件以内で返す\r
+</li><li>もっと欲しい場合は、pagenateとなるが、あまりcoolとは言えないかも\r
+<ul><li>?page=3 みたいな\r
+</li><li>page=3 を取得中に、新しい素材が追加された場合、index がずれる.→ずれますね\r
+<ul><li>例えば 20 枚でひとつのページを作るけど、最新の ページは必ずしも 20 枚でない、とか?\r
+</li><li>古い素材:page=5 → |20|20|20|20|20|12| ← 新しい素材:page=0 ( 計 112 枚 )\r
+<ul><li>最新順だからpage=5 → |12|20|20|20|20|20| ← page=0 かな。\r
+</li></ul></li></ul></li></ul></li><li>images.json?tag=penjiro\r
+<ul><li><ul><li>ユーザーがペン次郎タグの素材のなかから選びたい場合.\r
+</li></ul></li></ul></li></ul></li></ul><h3 id="h3-.E7.B4.A0.E6.9D.90.E3.81.AE.E6.93.8D.E4.BD.9C">素材の操作</h3><ul><li>素材の追加(アップロード周りは調べます、実はやったことがない、、、)\r
+<ul><li>jsonでやるにはBase64でエンコードしないといかんかも。\r
+</li></ul></li><li>素材の削除  \r
+</li></ul><h3 id="h3-.E7.B4.A0.E6.9D.90.E3.81.AE.E3.83.97.E3.83.AD.E3.83.91.E3.83.86.E3.82.A3.E3.81.AE.E3.82.A2.E3.83.83.E3.83.97.E3.83.87.E3.83.BC.E3.83.88">素材のプロパティのアップデート</h3><ul><li>素材の名前(はとりあえずなしで開発)\r
+</li><li>タグの追加、削除 など\r
+</li></ul><h4 id="h4-.E3.81.B2.E3.81.A8.E3.81.A4.E3.81.AE.E7.B4.A0.E6.9D.90.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E3.82.82.E3.81.A4.E3.83.97.E3.83.AD.E3.83.91.E3.83.86.E3.82.A3">ひとつの素材データのもつプロパティ</h4><ul><li>id\r
+</li><li>filesize\r
+</li><li>tag[]\r
+</li><li>published_at\r
+</li><li>updated_at\r
+</li><li>license\r
+</li></ul><p>→ <a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">ResourcePictureModel</a> を見る\r
+</p><ul><li>owner ログインユーザーがその素材のオーナーか?\r
+<ul><li>オーナーでないなら、アーティスト の id\r
+</li></ul></li></ul><p>→\r
+</p><ul><li>変更可能なオプションとその変更権がユーザーにあるか?\r
+</li></ul><h2 id="h2-.E3.82.BF.E3.82.B0.E3.81.AE.E6.93.8D.E4.BD.9C">タグの操作</h2><ul><li>タグの追加\r
+</li><li>タグの削除\r
+</li><li>タグの更新\r
+<ul><li>ペン次郎タグがあったけど、ペン太郎に改名したい場合、一つ一つの素材画像のプロパティでなく、タグ自体の名前を変える.\r
+</li></ul></li></ul><h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.82.A8.E3.82.AF.E3.82.B9.E3.83.97.E3.83.AD.E3.83.BC.E3.83.A9.E3.83.BC">フキダシエクスプローラー</h2><ul><li>フキダシリスト → \r
+</li></ul><h2 id="h2-.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E3.81.AE.E6.83.85.E5.A0.B1">ユーザーの情報</h2><h3 id="h3-.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E3.81.AE.E6.83.85.E5.A0.B1.E3.81.AE.E5.8F.96.E5.BE.97">ログインユーザーの情報の取得</h3><ul><li>ユーザー名\r
+</li><li>ユーザーの HP の url\r
+</li><li>デフォルトのライセンス\r
+</li><li>アカウントの状態(作家、絵師、admin)\r
+</li></ul><h3 id="h3-.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E3.81.AE.E6.83.85.E5.A0.B1.E3.81.AE.E3.82.A2.E3.83.83.E3.83.97.E3.83.87.E3.83.BC.E3.83.88">ログインユーザーの情報のアップデート</h3><ul><li>ユーザーの HP の url\r
+</li><li>デフォルトのライセンス\r
+</li></ul><p>→jsonでのやり取りは危険なのでサーバが吐くページのフォームからしかできない。\r
+</p><h3 id="h3-.E3.82.A2.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B9.E3.83.88.E3.81.AE.E6.83.85.E5.A0.B1">アーティストの情報</h3><ul><li>パネルピクチャー を併せてどこかに表示される.\r
+</li><li>アーティスト名\r
+</li><li>アーティストの HP の url\r
+</li></ul><h2 id="h2-.E3.83.91.E3.83.8D.E3.83.AB.E3.82.A8.E3.83.87.E3.82.A3.E3.82.BF">パネルエディタ</h2><ul><li>編集しようとしているパネルデータ\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ItoZyun">\r
+    <title>ItoZyun</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ItoZyun</link>\r
+    <dc:identifier>ItoZyun</dc:identifier>\r
+\r
+    <dc:date>2012-01-14T20:46:33+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クライアント側\r
+ * ユーザーログイン後の操作(マンガ管理・コマ作成・画像管理・設定)は、すべて js 有効 が前提の Ajax ページで行う.\r
+ * ログインしたユーザーのマンガ閲覧も、Ajaxページで行う.画像読み込みを非同期化して、画面外の画像の読み込みを抑止する.\r
+\r
+= javascript のクリーンアップ、圧縮\r
+== クリーンアップ\r
+javascript は、変数宣言時]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E5.81.B4">クライアント側</h1><ul><li>ユーザーログイン後の操作(マンガ管理・コマ作成・画像管理・設定)は、すべて js 有効 が前提の Ajax ページで行う.\r
+</li><li>ログインしたユーザーのマンガ閲覧も、Ajaxページで行う.画像読み込みを非同期化して、画面外の画像の読み込みを抑止する.\r
+</li></ul><h1 id="h1-javascript.20.E3.81.AE.E3.82.AF.E3.83.AA.E3.83.BC.E3.83.B3.E3.82.A2.E3.83.83.E3.83.97.E3.80.81.E5.9C.A7.E7.B8.AE">javascript のクリーンアップ、圧縮</h1><h2 id="h2-.E3.82.AF.E3.83.AA.E3.83.BC.E3.83.B3.E3.82.A2.E3.83.83.E3.83.97">クリーンアップ</h2><p>javascript は、変数宣言時の区切り文字や、行の終わりのセミコロンなどを間違えていても、予期したとおりに動作したりして潜在的な問題を抱えることになる.<br />\r
+以上のものは、Aptana で警告されないものも結構ある.<br />\r
+jsDo.it にアップロードすると、Webコンソールで javascript の警告を教えてくれる.<br />\r
+その警告に従って修正したところ、Aptana2 の構文解析も動くようになった.コード量が増えると勝手に構文解析も止まるのかと思っていたけど、そのようなわけだった、、、<br />\r
+</p><h2 id="h2-.E5.9C.A7.E7.B8.AE">圧縮</h2><p>以上を済ませた後に、圧縮(難読化)を行うことで、js ファイルの読み込みや動作を早くし、負荷を抑えることができる.<br />\r
+圧縮ツールには、Web アプリとして提供されているものもあって便利.<br />\r
+<a href="http://compressorrater.thruhere.net/" class="external" rel="nofollow">http://compressorrater.thruhere.net/</a> が、複数の圧縮エンジンに通した結果を比較表示してくれる.<br />\r
+現在 140KB 程度の js ファイルを 60KB 程度にすることができた.<br />\r
+ただし、その圧縮後のファイルが動かないこともあり(というかほとんど動かない、または操作中に動かなくなる)圧縮ツール用にコードを書く必要がある.<br />\r
+jsは、コードが実行される順番に変数宣言をしていけばいいのだが、圧縮ツール用には、変数の宣言を最初の変数の登場より先にしなくてはならない.<br />\r
+</p><p>変数の宣言がないままに変数が登場すると、\r
+<pre>function createPopup(){\r
+// Popup クラスから Popup インスタンスを作る.\r
+ var _popup = PopupClass.apply( {}, []);\r
+}\r
+~\r
+// Popup クラスの宣言\r
+var PopupClass = function(){};\r
+</pre>圧縮ツールは、最初に登場する <a href="http://sourceforge.jp/projects/pettanr/wiki/PopupClass">PopupClass</a> はそのまま.var <a href="http://sourceforge.jp/projects/pettanr/wiki/PopupClass">PopupClass</a>= のみ、var a= などと圧縮をかける.結果、createPopup() したときに <a href="http://sourceforge.jp/projects/pettanr/wiki/PopupClass">PopupClass</a> が未定義だよ!となる.<br />\r
+</p><ul><li>決定版はこれだ! Javascriptの圧縮、難読化ツール 比較検討 <a href="http://gogolounge.blog.shinobi.jp/Entry/4/" class="external" rel="nofollow">http://gogolounge.blog.shinobi.jp/Entry/4/</a>\r
+</li></ul><h1 id="h1-javascript.20.E3.81.AE.E3.83.A1.E3.83.A2.E3.83.AA.E3.83.AA.E3.83.BC.E3.82.AF">javascript のメモリリーク</h1><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/%E9%96%8B%E7%99%BA">開発</a>IEメモリリークの最後の壁はAjaxのonreadystatechangeやった!! <a href="http://d.hatena.ne.jp/AWAWA/20071207/1197036423" class="external" rel="nofollow">http://d.hatena.ne.jp/AWAWA/20071207/1197036423</a>\r
+</li><li>Internet Explorer リーク パターンを理解して解決する <a href="http://msdn.microsoft.com/ja-jp/library/bb250448" class="external" rel="nofollow">http://msdn.microsoft.com/ja-jp/library/bb250448</a>\r
+</li></ul><p>クロージャがまずい.<br />\r
+dom追加は、appendChild を先に.あとからプロパティをセット.<br />\r
+イベントハンドラに、グローバルで定義された 空の function を突っ込んで解除する.\r
+</p><h1 id="h1-.E3.82.B9.E3.82.BF.E3.83.B3.E3.83.89.E3.82.A2.E3.83.AD.E3.83.BC.E3.83.B3.E7.89.88.20IE.20.E3.81.AE.E9.80.9A.E5.B8.B8.E7.89.88.E3.81.A8.E7.95.B0.E3.81.AA.E3.82.8B.E6.8C.99.E5.8B.95">スタンドアローン版 IE の通常版と異なる挙動</h1><p>IETester で 条件付コメントによる、vml のインストールの有無のチェックができない挙動に遭遇.<br />\r
+vml のチェックは、現在は条件付コメントを動的に付与して行っている.(他にいい方法ないかな、、、?)\r
+<pre>VML: ( function(){\r
+       if( isIE === false || ieVersion &gt; 8) return false;\r
+       var globalObjectName = createGrobalObjectName(), script;\r
+       document.writeln( [ '&lt;!--[if gte vml 1]&gt;&lt;script type=&quot;text/javascript&quot;&gt;window.', globalObjectName,'=1;&lt;/script&gt;&lt;![endif]--&gt;'].join( ''));\r
+       if( window[ globalObjectName] === 1){\r
+               window[ globalObjectName] = undefined;\r
+               return true;\r
+       }\r
+       return false;\r
+})(),\r
+</pre></p><p>XPsp3 に IETester をインストールして 6, 7, 8 をテストできる環境にしているが、6 と 7 では、vml のチェックが働かない.<br />\r
+これは、スタンドアローン版 IE は 条件付コメントが働かない、ためと思われる.<br />\r
+一方で、8 で正しく動いているのは、8 が Windows 環境のデフォルトの ie なので通常版であるため、と思う.<br />\r
+</p><p>navigator.ua で取得したバージョンと 動的に書き出した条件付コメント(内でスクリプトを使用)が不一致だったら、スタンドアローン版として処理する.\r
+</p><ul><li>条件付コメント文の誤算 <a href="http://bopsublog.blog.shinobi.jp/Entry/15/" class="external" rel="nofollow">http://bopsublog.blog.shinobi.jp/Entry/15/</a>\r
+</li><li><a href="http://philip.html5.org/data/ccs.html" class="external" rel="nofollow">http://philip.html5.org/data/ccs.html</a>\r
+</li></ul><h1 id="h1-javascript.20.E3.81.AE.E9.81.B8.E6.8A.9E.E7.A6.81.E6.AD.A2">javascript の選択禁止</h1><ul><li>ieでは、unselectable を使う.但しこの指定は継承しないため、全てのテキストを持つ要素に指定する.\r
+<pre>&lt;div unselectable=&quot;on&quot;&gt;テキスト&lt;/div&gt;\r
+</pre></li><li>css を使う場合.\r
+<pre>&lt;div style=&quot;-moz-user-select: none;&quot;&gt;テキスト&lt;/div&gt;\r
+&lt;div style=&quot;-khtml-user-select: none;&quot;&gt;テキスト&lt;/div&gt;\r
+&lt;div style=&quot;-webkit-user-select: none;&quot;&gt;テキスト&lt;/div&gt;\r
+&lt;div style=&quot;user-select: none;&quot;&gt;テキスト&lt;/div&gt; css3 ??\r
+</pre></li><li>js を使う\r
+<pre>&lt;div onMouseMove=&quot;window.getSelection().removeAllRanges();&quot;&gt;テキスト&lt;/div&gt; など\r
+</pre></li><li><a href="http://www.programming-magic.com/20071217225449/" class="external" rel="nofollow">http://www.programming-magic.com/20071217225449/</a>\r
+</li></ul><p>js で自動でテキスト選択を禁止する必要がある.\r
+</p><h1 id="h1-about.20itozyun">about itozyun</h1><ul><li>目立ちたがり屋という点でフロント向き.\r
+</li><li>好奇心に負けて地雷を踏む性格なので、API 設計などを任せてはいけない.</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/HowToInstall">\r
+    <title>HowToInstall</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/HowToInstall</link>\r
+    <dc:identifier>HowToInstall</dc:identifier>\r
+    <dc:date>2012-01-14T13:39:42+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= インストール\r
+== 前提条件\r
+ * Ruby1.9系\r
+ * git\r
+ * ImageMagick\r
+\r
+WindowsならRailsInstaller が楽かも。ただし、この選択はImageMagickを動かせないので、別途Production環境が必要。今のところは本番環境としてherokuを想定している。\r
+\r
+http://railsinstaller.org/\r
+\r
+== ソー]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB">インストール</h1><h2 id="h2-.E5.89.8D.E6.8F.90.E6.9D.A1.E4.BB.B6">前提条件</h2><ul><li>Ruby1.9系\r
+</li><li>git\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ImageMagick">ImageMagick</a>\r
+</li></ul><p>Windowsなら<a href="http://sourceforge.jp/projects/pettanr/wiki/RailsInstaller">RailsInstaller</a> が楽かも。ただし、この選択は<a href="http://sourceforge.jp/projects/pettanr/wiki/ImageMagick">ImageMagick</a>を動かせないので、別途Production環境が必要。今のところは本番環境としてherokuを想定している。\r
+</p><p><a href="http://railsinstaller.org/" class="external" rel="nofollow">http://railsinstaller.org/</a>\r
+</p><h2 id="h2-.E3.82.BD.E3.83.BC.E3.82.B9.E3.82.B3.E3.83.BC.E3.83.89.E3.81.AE.E5.8F.96.E5.BE.97">ソースコードの取得</h2><p>ソースコードの取得はgitを使う。ここでは<a href="http://sourceforge.jp/projects/pettanr/wiki/RailsInstaller">RailsInstaller</a>を使うケースで書く。\r
+</p><p><a href="http://sourceforge.jp/projects/pettanr/wiki/RailsInstaller">RailsInstaller</a>をインストールするとRails用コンソールを開けるようになる。そこからgitも使える。\r
+</p><p>最初に起動するときにメアドとパスフレーズを聞かれるので、\r
+<a href="http://sourceforge.jp/projects/pettanr/cvs/">http://sourceforge.jp/projects/pettanr/cvs/</a>\r
+を参考にしながら\r
+<pre>yasushiito@git.sourceforge.jp\r
+</pre></p><p>のようにメアドにして、さらにパスフレーズも記入。コンソールが開くと、ドバっと暗号が出てくるが、公開鍵のファイル名なんかも含まれてるので目を通しておく。コミッタとしてプロジェクトに参加するなら、この公開鍵をsourceforge.jpに追加しておく。\r
+<pre>ssh:\r
+  public_key_location: C:\Documents and Settings\....\r
+</pre></p><pre>c:\sites&gt;git clone yasushiito@git.sourceforge.jp:/gitroot/pettanr/pettanr.git pettanr\r
+</pre><p>でpettanr以下にダウンロードされる。\r
+</p><p>ユーザとしてダウンロードしたいなら\r
+<pre>c:\sites&gt;git clone git://git.sourceforge.jp/gitroot/pettanr/pettanr.git pettanr\r
+</pre>とする。\r
+</p><h2 id="h2-.E7.A8.BC.E5.83.8D.E5.89.8D.E3.81.AE.E6.BA.96.E5.82.99">稼働前の準備</h2><h3 id="h3-gem.E3.81.AE.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB">gemのインストール</h3><pre>c:\sites&gt;cd pettanr\r
+c:\sites\pettanr&gt;bundle install --without production\r
+</pre><h3 id="h3-.E3.83.87.E3.83.BC.E3.82.BF.E3.83.99.E3.83.BC.E3.82.B9.E3.81.AE.E5.88.9D.E6.9C.9F.E5.8C.96">データベースの初期化</h3><pre>c:\sites\pettanr&gt;rake db:migrate \r
+</pre><h3 id="h3-.E7.AE.A1.E7.90.86.E8.80.85.E3.81.AE.E4.BD.9C.E6.88.90">管理者の作成</h3><p>管理者を最低一人は用意しないと動かない。\r
+<pre>c:\sites\pettanr&gt;rails r &quot;Admin.start('admin@mail.adr.ess', 'admin_password')&quot; \r
+</pre>もちろんメールアドレスとパスワードは変えること。\r
+</p><h3 id="h3-.E4.BF.9D.E7.AE.A1.E5.BA.AB.E3.81.AE.E4.BD.9C.E6.88.90">保管庫の作成</h3><p>画像の保存パスを作成しておく。\r
+<pre>c:\sites\pettanr&gt;cd ..\r
+c:\sites&gt;mkdir original\r
+c:\sites&gt;mkdir original\pettanr\r
+c:\sites&gt;mkdir resource\r
+c:\sites&gt;mkdir resource\pettanr\r
+c:\sites&gt;mkdir system\r
+c:\sites&gt;mkdir system\pettanr\r
+</pre>保存先を変えたい場合は、<a href="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">PictureIo</a>を参考にする。\r
+</p><h3 id="h3-ImageMagick.E3.81.AE.E8.A8.AD.E5.AE.9A"><a href="http://sourceforge.jp/projects/pettanr/wiki/ImageMagick">ImageMagick</a>の設定</h3><p><a href="http://sourceforge.jp/projects/pettanr/wiki/RailsInstaller">RailsInstaller</a>では<a href="http://sourceforge.jp/projects/pettanr/wiki/ImageMagick">ImageMagick</a>が動かない。そこでDmagickなるものでごまかしてる。詳しくは<a href="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick">RmagickAndDmagick</a>にあるが、デフォルトでDmagickを使っているため、Rmagickがある環境ではRmagickを使うように編集してやる。\r
+</p><h2 id="h2-.E8.B5.B7.E5.8B.95">起動</h2><pre>c:\sites\pettanr&gt;rails s\r
+</pre><p>これで<a href="http://localhost:3000/%E3%81%8B%E3%82%89%E9%81%8A%E3%81%B9%E3%82%8B" class="external" rel="nofollow">http://localhost:3000/から遊べる</a>\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutModels">\r
+    <title>AboutModels</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutModels</link>\r
+\r
+    <dc:identifier>AboutModels</dc:identifier>\r
+    <dc:date>2012-01-14T11:04:48+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ER図\r
+下記のページを参考にすれば生成できるはずだが、Windows環境では画像に落とせない。\r
+\r
+ * http://sawada0903.blogspot.com/2010/10/rails30er.html\r
+ * http://rails-erd.rubyforge.org/install.html\r
+\r
+出力されるERD.dotはdotっていうグラフ描画ツールのマクロ。\r
+\r
+G]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-ER.E5.9B.B3">ER図</h1><p>下記のページを参考にすれば生成できるはずだが、Windows環境では画像に落とせない。\r
+</p><ul><li><a href="http://sawada0903.blogspot.com/2010/10/rails30er.html" class="external" rel="nofollow">http://sawada0903.blogspot.com/2010/10/rails30er.html</a>\r
+</li><li><a href="http://rails-erd.rubyforge.org/install.html" class="external" rel="nofollow">http://rails-erd.rubyforge.org/install.html</a>\r
+</li></ul><p>出力されるERD.dotはdotっていうグラフ描画ツールのマクロ。\r
+</p><p><a href="http://sourceforge.jp/projects/pettanr/wiki/GraphViz">GraphViz</a>のbinにdot.exeがあるからこれで画像にできる\r
+<pre>dot.exe -Tgif ERD.dot &gt; erd.gif\r
+</pre></p><h1 id="h1-.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E3.81.A8.E3.82.AB.E3.83.A9.E3.83.A0">テーブルとカラム</h1><h2 id="h2-admins.20.E7.AE.A1.E7.90.86.E8.80.85">admins 管理者</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>email</td><td></td><td>string</td><td>  </td><td>FALSE</td><td> </td><td></td></tr><tr><td>encrypted_password</td><td></td><td>string</td><td> </td><td>FALSE</td><td>128</td><td></td></tr><tr><td>reset_password_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>reset_password_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>remember_created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>sign_in_count</td><td></td><td>integer</td><td>0</td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmed_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>approve</td><td>承認</td><td>integer</td><td>0</td><td> </td><td> </td><td>1で承認済</td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AdminModel">AdminModel</a>\r
+</li></ul><h2 id="h2-artists.20.E7.B5.B5.E5.B8.AB">artists 絵師</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>email</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>name</td><td>ペンネーム</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>homepage_url</td><td>ホームページURL</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>api_url</td><td>素材配布APIのURL</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>default_lisence_id</td><td>省略時のライセンスid</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>crowled_at</td><td>素材配布APIの最新呼び出し時刻</td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>author_id</td><td>作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ArtistModel">ArtistModel</a>\r
+</li></ul><h2 id="h2-authors.20.E4.BD.9C.E5.AE.B6">authors 作家</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>name</td><td>ペンネーム</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>email</td><td>メールアドレス</td><td>string</td><td>  </td><td>FALSE</td><td> </td><td></td></tr><tr><td>encrypted_password</td><td></td><td>string</td><td> </td><td>FALSE</td><td>128</td><td></td></tr><tr><td>reset_password_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>reset_password_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>remember_created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>sign_in_count</td><td></td><td>integer</td><td>0</td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>current_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>last_sign_in_ip</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>authentication_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_token</td><td></td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmed_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>confirmation_sent_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AuthorModel">AuthorModel</a>\r
+</li></ul><h2 id="h2-balloon_templates.20.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E6.9E.A0.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">balloon_templates フキダシ枠テンプレート</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>speach_balloon_id</td><td>フキダシテンプレートid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>system_picture_id</td><td>フキダシ素材id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>tail</td><td>尻尾の向き</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>size</td><td>サイズのバリエーション</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>min_width</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>max_width</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>min_height</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>max_height</td><td>サイズ切り替えしきい値</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BallonTemplateModel">BallonTemplateModel</a>\r
+</li></ul><h2 id="h2-balloons.20.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7">balloons フキダシ</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>panel_id</td><td>所属パネルid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>balloon_template_id</td><td>フキダシ枠テンプレート種id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>system_picture_id</td><td>フキダシ素材id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>tail</td><td>尻尾の向き</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>size</td><td>サイズのバリエーション</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>z</td><td>表示順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr><tr><td>width</td><td>表示幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>表示高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BalloonModel">BalloonModel</a>\r
+</li></ul><h2 id="h2-comics.20.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF">comics コミック</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>title</td><td>作品名</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>width</td><td>コマの幅デフォルト値</td><td>integer</td><td>200</td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマの高さデフォルト値</td><td>integer</td><td>80</td><td>FALSE</td><td> </td><td></td></tr><tr><td>visible</td><td>公開フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>可視範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>editable</td><td>編集フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>許可範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>author_id</td><td>作者の作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ComicModel">ComicModel</a>\r
+</li></ul><h2 id="h2-common_lisences.20.E3.82.B3.E3.83.A2.E3.83.B3.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">common_lisences コモンライセンス</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>lisence_id</td><td>ライセンスid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>name</td><td>ライセンス名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>url</td><td>条項ページURL</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_by</td><td>クリエイティブコモンズBYフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_sa</td><td>クリエイティブコモンズSAフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nd</td><td>クリエイティブコモンズNDフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nc</td><td>クリエイティブコモンズNCフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_resize</td><td>サイズ変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_flip</td><td>反転不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>keep_aspect_ratio</td><td>縦横比変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisenceModel">CommonLisenceModel</a>\r
+</li></ul><h2 id="h2-lisences.20.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">lisences ライセンス</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>name</td><td>ライセンス名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>url</td><td>条項ページURL</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_by</td><td>クリエイティブコモンズBYフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_sa</td><td>クリエイティブコモンズSAフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nd</td><td>クリエイティブコモンズNDフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nc</td><td>クリエイティブコモンズNCフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_resize</td><td>サイズ変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_flip</td><td>反転不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>keep_aspect_ratio</td><td>縦横比変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/LisenceModel">LisenceModel</a>\r
+</li></ul><h2 id="h2-original_lisences.20.E3.82.AA.E3.83.AA.E3.82.B8.E3.83.8A.E3.83.AB.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">original_lisences オリジナルライセンス</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>artist_id</td><td>ライセンス策定者 絵師id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>lisence_id</td><td>ライセンスid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>name</td><td>ライセンス名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>url</td><td>条項ページURL</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_by</td><td>クリエイティブコモンズBYフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_sa</td><td>クリエイティブコモンズSAフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nd</td><td>クリエイティブコモンズNDフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>cc_nc</td><td>クリエイティブコモンズNCフラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_resize</td><td>サイズ変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_flip</td><td>反転不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>keep_aspect_ratio</td><td>縦横比変更不可フラグ</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalLisenceModel">OriginalLisenceModel</a>\r
+</li></ul><h2 id="h2-original_pictures.20.E5.8E.9F.E7.94.BB">original_pictures 原画</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>ext</td><td>画像フォーマット</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅ピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>filesize</td><td>画像サイズ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>artist_id</td><td>投稿者 絵師id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>lisence_id</td><td>付与ライセンスid</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPictureModel">OriginalPictureModel</a>\r
+</li></ul><h2 id="h2-system_pictures.20.E3.82.B7.E3.82.B9.E3.83.86.E3.83.A0.E7.94.BB.E5.83.8F">system_pictures システム画像</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>ext</td><td>画像フォーマット</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅ピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>filesize</td><td>画像サイズ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SystemPictureModel">SystemPictureModel</a>\r
+</li></ul><h2 id="h2-panel_pictures.20.E3.82.B3.E3.83.9E.E7.B5.B5">panel_pictures コマ絵</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>panel_id</td><td>所属パネル</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>resource_picture_id</td><td>素材id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>link</td><td>リンク</td><td>string</td><td> </td><td> </td><td>200</td><td>参照するページをリンクできる</td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>z</td><td>表示順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr><tr><td>width</td><td>コマ絵の幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマ絵の高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>flipv</td><td>垂直反転</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>fliph</td><td>水平反転</td><td>integer</td><td>0</td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel">PanelPictureModel</a>\r
+</li></ul><h2 id="h2-panels.20.E3.82.B3.E3.83.9E">panels コマ</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>comic_id</td><td>所属コミック</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>resource_picture_id</td><td>背景画像 素材id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>width</td><td>コマの幅</td><td>integer</td><td>200</td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>コマの高さ</td><td>integer</td><td>80</td><td>FALSE</td><td> </td><td></td></tr><tr><td>border</td><td>コマの枠線の太さ</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>y</td><td>表示位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>z</td><td>表示優先順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>t</td><td>コマ番号</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>author_id</td><td>コマの投稿者 作家id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelModel">PanelModel</a>\r
+</li></ul><h2 id="h2-resource_pictures.20.E7.B4.A0.E6.9D.90">resource_pictures 素材</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>ext</td><td>画像フォーマット</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅ピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さピクセル数</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>filesize</td><td>画像サイズ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>artist_id</td><td>投稿者 絵師id</td><td>integer</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>lisence_id</td><td>付与ライセンスid</td><td>integer</td><td> </td><td> </td><td> </td><td><a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPicture">OriginalPicture</a>のコピー 変更不可</td></tr><tr><td>original_picture_id</td><td>原画id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">ResourcePictureModel</a>\r
+</li></ul><h2 id="h2-speach_balloons.20.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">speach_balloons フキダシテンプレート</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>name</td><td>フキダシ名</td><td>string</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>tail_count</td><td>尻尾の向きの数</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>size_count</td><td>サイズのバリエーション数</td><td>integer</td><td>1</td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>表示順</td><td>integer</td><td>1</td><td>false</td><td> </td><td>ファイルエクスプローラーなどで</td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonModel">SpeachBalloonModel</a>\r
+</li></ul><h2 id="h2-speach_templates.20.E3.82.BB.E3.83.AA.E3.83.95.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">speach_templates セリフテンプレート</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>balloon_template_id</td><td>フキダシ枠テンプレートid</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>width</td><td>幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachTemplateModel">SpeachTemplateModel</a>\r
+</li></ul><h2 id="h2-speaches.20.E3.82.BB.E3.83.AA.E3.83.95">speaches セリフ</h2><table class="wikitable" border="1"><tbody><tr><td>name</td><td>和名</td><td>type</td><td>default</td><td>null</td><td>limit</td><td>note</td></tr><tr><td>balloon_id</td><td>フキダシ枠id</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>content</td><td>台詞</td><td>string</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>x</td><td>表示開始位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>y</td><td>表示開始位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr><tr><td>width</td><td>幅</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>height</td><td>高さ</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td></td></tr><tr><td>created_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr><tr><td>updated_at</td><td></td><td>datetime</td><td> </td><td> </td><td> </td><td></td></tr></tbody></table><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachModel">SpeachModel</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons">\r
+    <title>BundledSpeachBalloons</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons</link>\r
+    <dc:identifier>BundledSpeachBalloons</dc:identifier>\r
+    <dc:date>2012-01-14T09:23:10+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= 標準フキダシ\r
+ * ベクターなし\r
+   * ベクター式のプログラムは実装されておらず、テンプレートのみで行う。\r
+ * 楕円\r
+[[embed(http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/fukiMoon1.gif)]]\r
+ * 雲\r
+[[embed(http://sourceforge.]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E6.A8.99.E6.BA.96.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7">標準フキダシ</h1><ul><li>ベクターなし\r
+<ul><li>ベクター式のプログラムは実装されておらず、テンプレートのみで行う。\r
+</li></ul></li><li>楕円\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/fukiMoon1.gif" alt="fukiMoon1.gif" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2ffukiMoon1.gif-1" title="fukiMoon1.gif" class="embed-image"><p>\r
+</p><ul><li>雲\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/omoiFuki1.gif" alt="omoiFuki1.gif" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2fomoiFuki1.gif-1" title="omoiFuki1.gif" class="embed-image"><p>\r
+</p><ul><li>角丸\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/bln1.png" alt="bln1.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2fbln1.png-1" title="bln1.png" class="embed-image"><p>\r
+</p><ul><li>カギ\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/hook.png" alt="hook.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2fhook.png-1" title="hook.png" class="embed-image"><p>\r
+</p><ul><li>プレーン\r
+</li><li>ボックス\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/square4.gif" alt="square4.gif" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2fsquare4.gif-1" title="square4.gif" class="embed-image"><p>\r
+</p><ul><li>ギザ細\r
+</li><li>ギザ粗\r
+</li></ul><img src="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons/attach/togeFuki.gif" alt="togeFuki.gif" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fBundledSpeachBalloons2fattach2ftogeFuki.gif-1" title="togeFuki.gif" class="embed-image"><p>\r
+</p><ul><li>鳥の巣\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AppendixList">\r
+    <title>AppendixList</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AppendixList</link>\r
+    <dc:identifier>AppendixList</dc:identifier>\r
+    <dc:date>2012-01-14T08:55:44+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= おまけ\r
+ * BundledPictures\r
+ * BundledSpeachBalloons\r
+ * BundledLisences\r
+\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.81.8A.E3.81.BE.E3.81.91">おまけ</h1><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BundledPictures">BundledPictures</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BundledSpeachBalloons">BundledSpeachBalloons</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/BundledLisences">BundledLisences</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi">\r
+    <title>AboutKinichi</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi</link>\r
+    <dc:identifier>AboutKinichi</dc:identifier>\r
+\r
+    <dc:date>2012-01-12T08:41:56+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= キンイチ\r
+[[Embed(http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/1555.gif)]]\r
+[[Embed(http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/bac.png)]]\r
+[[Embed(http://sourcefo]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AD.E3.83.B3.E3.82.A4.E3.83.81">キンイチ</h1><img src="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/1555.gif" alt="1555.gif" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutKinichi2fattach2f1555.gif-1" title="1555.gif" class="embed-image"><p>\r
+<img src="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/bac.png" alt="bac.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutKinichi2fattach2fbac.png-1" title="bac.png" class="embed-image">\r
+<img src="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/kijck.png" alt="kijck.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutKinichi2fattach2fkijck.png-1" title="kijck.png" class="embed-image">\r
+<img src="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi/attach/ccc.png" alt="ccc.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutKinichi2fattach2fccc.png-1" title="ccc.png" class="embed-image">\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/BundledPictures">\r
+    <title>BundledPictures</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/BundledPictures</link>\r
+    <dc:identifier>BundledPictures</dc:identifier>\r
+    <dc:date>2012-01-12T08:35:43+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= おまけ素材\r
+ * AboutPenjiro\r
+ * AboutKinichi]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.81.8A.E3.81.BE.E3.81.91.E7.B4.A0.E6.9D.90">おまけ素材</h1><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro">AboutPenjiro</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutKinichi">AboutKinichi</a></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro">\r
+    <title>AboutPenjiro</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro</link>\r
+\r
+    <dc:identifier>AboutPenjiro</dc:identifier>\r
+    <dc:date>2012-01-12T08:35:00+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ペン次郎\r
+[[Embed(http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro/attach/129.png)]]\r
+[[Embed(http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro/attach/ge.png)]]\r
+[[Embed(http://sourceforg]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.83.9A.E3.83.B3.E6.AC.A1.E9.83.8E">ペン次郎</h1><img src="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro/attach/129.png" alt="129.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutPenjiro2fattach2f129.png-1" title="129.png" class="embed-image"><p>\r
+<img src="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro/attach/ge.png" alt="ge.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutPenjiro2fattach2fge.png-1" title="ge.png" class="embed-image">\r
+<img src="http://sourceforge.jp/projects/pettanr/wiki/AboutPenjiro/attach/up.png" alt="up.png" id="emb-http:2f2fsourceforge.jp2fprojects2fpettanr2fwiki2fAboutPenjiro2fattach2fup.png-1" title="up.png" class="embed-image"></p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2">\r
+    <title>HtmlAndCss2</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2</link>\r
+    <dc:identifier>HtmlAndCss2</dc:identifier>\r
+    <dc:date>2012-01-10T01:12:37+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= Html + css2.1\r
+ぺったんR は、html4.01 + css2.1 をサポートするブラウザで作者の意図したとおりのコンテンツの表示を目指す.[[BR]]\r
+しかし、これは最低限の環境であるため、ぺったんR が用意する便利でパワフルな機能の恩恵のすべてを必ずしも享けられるわけではない.\r
+\r
+== マンガの表示に使用する css プロパティ\r
+ * overflow:hidden\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-Html.20.2B.20css2.1">Html + css2.1</h1><p>ぺったんR は、html4.01 + css2.1 をサポートするブラウザで作者の意図したとおりのコンテンツの表示を目指す.<br />\r
+しかし、これは最低限の環境であるため、ぺったんR が用意する便利でパワフルな機能の恩恵のすべてを必ずしも享けられるわけではない.\r
+</p><h2 id="h2-.E3.83.9E.E3.83.B3.E3.82.AC.E3.81.AE.E8.A1.A8.E7.A4.BA.E3.81.AB.E4.BD.BF.E7.94.A8.E3.81.99.E3.82.8B.20css.20.E3.83.97.E3.83.AD.E3.83.91.E3.83.86.E3.82.A3">マンガの表示に使用する css プロパティ</h2><ul><li>overflow:hidden\r
+<ul><li>コマの外にはみ出してしまう部分を隠す.コマの枠となる div に指定.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_001.html" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_001.html</a>\r
+</li></ul></li><li>position:absolute, left, top\r
+<ul><li>コミック要素(画像や吹きだし)の配置に使用.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_property.html#position" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_property.html#position</a>\r
+</li></ul></li><li>z-index\r
+<ul><li>html要素の順を無視して、コミック要素の重ね順を変更するときに使用.\r
+</li><li>html要素は意味順(時系列順)に並ぶが、コミックでは演出によって、最後に起こったことが奥に行くことも手前に来ることもある.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_position_003.html" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_position_003.html</a>\r
+</li></ul></li><li>display:table, display:teble-cell\r
+<ul><li>吹きだし内テキストの上下中央配置に使用を考えたが、、、ぺったんでは、table 要素を使用していた.\r
+</li><li><a href="http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_003.html" class="external" rel="nofollow">http://www5e.biglobe.ne.jp/~access_r/hp/css/css_look_003.html</a>\r
+</li></ul></li></ul><h2 id="h2-.E5.AF.BE.E5.BF.9C.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6">対応ブラウザ</h2><table class="wikitable" border="1"><tbody><tr><td>プロパティ</td><td>ie</td><td>NN</td><td>firefox</td><td>safari</td><td>chrome</td><td>opera</td></tr><tr><td>overflow:hidden</td><td>5+</td><td>6+</td><td>1+</td><td>?</td><td>1+</td><td>6+</td></tr><tr><td>position:absolute, top, left</td><td>position&amp;top:4+, left:5+</td><td>4+</td><td>1+</td><td>?</td><td>1+</td><td>6+</td></tr><tr><td>z-index</td><td>4+</td><td>4+</td><td>1+</td><td>4+</td><td>1+</td><td>6+</td></tr><tr><td>display:table,table-cell</td><td>8+</td><td>6+</td><td>2+</td><td>2+</td><td>1+</td><td>9+</td></tr></tbody></table><h3 id="h3-.E5.90.B9.E3.81.8D.E3.81.A0.E3.81.97.E5.86.85.E3.83.86.E3.82.AD.E3.82.B9.E3.83.88.E3.81.AE.E4.B8.8A.E4.B8.8B.E4.B8.AD.E5.A4.AE.E9.85.8D.E7.BD.AE">吹きだし内テキストの上下中央配置</h3><p>display:table, display:table-cell は、吹きだし内のテキストの上下中央配置に使用が検討されるが...<br />\r
+ie7 以下については、条件付コメントで、tableタグを使用.\r
+</p><p>html中\r
+<pre>&lt;!--[if lte IE 7]&gt;&lt;a href=&quot;#&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;\r
+ &lt;span&gt;Hello&lt;/span&gt;\r
+&lt;!--[if lte IE 7]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/a&gt;&lt;![endif]--&gt;\r
+</pre></p><p>xsl中で使うと\r
+<pre>&lt;xsl:comment&gt;&lt;![CDATA[[if lte IE 7]&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]]]&gt;&lt;/xsl:comment&gt;\r
+ &lt;span&gt;&lt;xsl:apply-templates/&gt;&lt;/span&gt;\r
+&lt;xsl:comment&gt;&lt;![CDATA[[if lte IE 7]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;![endif]]]&gt;&lt;/xsl:comment&gt;\r
+</pre></p><p>また、firefox3.5 について、display:table 周りのバグについて報告されている.\r
+</p><blockquote class="citation"><p>Project IE: Firefox 3.5 の display: table;(table-row; table-cell;) 関連の挙動について<br />\r
+<a href="http://ie-style.blogspot.com/2009/08/firefox-35-display-tabletable-row-table.html" class="external" rel="nofollow">http://ie-style.blogspot.com/2009/08/firefox-35-display-tabletable-row-table.html</a><br />\r
+CSSで display: table-cell; を指定してマルチカラムレイアウトを行っている場合に Firefox 3.5 だとまれにカラム落ちしてしまうという現象が起きてしまいます。\r
+</p></blockquote><p>記事によると、display:table-cell に対して、display:table でなく、display:table-row を使っておくのがいいそうだ.</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/LocalWiki">\r
+    <title>LocalWiki</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/LocalWiki</link>\r
+    <dc:identifier>LocalWiki</dc:identifier>\r
+    <dc:date>2012-01-10T01:06:42+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ローカルでの wiki の閲覧 と Wiki のバックアップ\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/980/640x640_0.png)]]\r
+\r
+== ネットが無い環境でも wiki を見る\r
+\r
+=== 動作確認ブラウザ\r
+ie8, firefox3.6\r
+\r
+=== 用意\r
+ * clientJs.git を落として、client]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.83.AD.E3.83.BC.E3.82.AB.E3.83.AB.E3.81.A7.E3.81.AE.20wiki.20.E3.81.AE.E9.96.B2.E8.A6.A7.20.E3.81.A8.20Wiki.20.E3.81.AE.E3.83.90.E3.83.83.E3.82.AF.E3.82.A2.E3.83.83.E3.83.97">ローカルでの wiki の閲覧 と Wiki のバックアップ</h1><img src="http://static.sourceforge.jp/thumb/g/2/980/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9802f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+</p><h2 id="h2-.E3.83.8D.E3.83.83.E3.83.88.E3.81.8C.E7.84.A1.E3.81.84.E7.92.B0.E5.A2.83.E3.81.A7.E3.82.82.20wiki.20.E3.82.92.E8.A6.8B.E3.82.8B">ネットが無い環境でも wiki を見る</h2><h3 id="h3-.E5.8B.95.E4.BD.9C.E7.A2.BA.E8.AA.8D.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6">動作確認ブラウザ</h3><p>ie8, firefox3.6\r
+</p><h3 id="h3-.E7.94.A8.E6.84.8F">用意</h3><ul><li>clientJs.git を落として、clientJs/0.3.0/wiki/wiki.xml をブラウザで開く.但し、wiki.xml が最新でない場合に注意!\r
+</li><li>または、以下を見て必要最小限のファイルを DL して配置.\r
+</li></ul><p>公開フィード一覧にある <a href="http://sourceforge.jp/projects/pettanr/feeds/">http://sourceforge.jp/projects/pettanr/feeds/</a>\r
+wiki 全文 をDLして、wiki.xml という名前で保存. <a href="http://sourceforge.jp/projects/pettanr/wiki/!feeds/list">http://sourceforge.jp/projects/pettanr/wiki/!feeds/list</a>\r
+</p><p>.xml の 2行目に .xsl へのリンクを追加.\r
+<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;\r
+&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;wiki.xsl&quot;?&gt;\r
+</pre></p><p>さらに、以下のファイル を DL.\r
+</p><ul><li>wiki/wiki.xsl\r
+<ul><li><a href="http://pettanr.sourceforge.jp/wiki/wiki.xsl" class="external" rel="nofollow">http://pettanr.sourceforge.jp/wiki/wiki.xsl</a>\r
+</li></ul></li><li>wiki/wiki.css\r
+<ul><li><a href="http://pettanr.sourceforge.jp/wiki/wiki.css" class="external" rel="nofollow">http://pettanr.sourceforge.jp/wiki/wiki.css</a>\r
+</li></ul></li><li>wiki/wiki.js\r
+<ul><li><a href="http://pettanr.sourceforge.jp/wiki/wiki.js" class="external" rel="nofollow">http://pettanr.sourceforge.jp/wiki/wiki.js</a>\r
+</li></ul></li><li>common.css pettanR 共通 css\r
+<ul><li><a href="http://pettanr.sourceforge.jp/common.css" class="external" rel="nofollow">http://pettanr.sourceforge.jp/common.css</a>\r
+</li></ul></li><li>common.css pettanR 共通 js\r
+<ul><li><a href="http://pettanr.sourceforge.jp/common.js" class="external" rel="nofollow">http://pettanr.sourceforge.jp/common.js</a>\r
+</li></ul></li></ul><p>以下のように配置する.\r
+</p><ul><li>common.css\r
+</li><li>common.js\r
+</li><li>wiki フォルダ\r
+<ul><li>wiki.xml\r
+</li><li>wiki.xsl\r
+</li><li>wiki.css\r
+</li><li>wiki.js\r
+</li></ul></li></ul><h3 id="h3-.E6.B3.A8.E6.84.8F">注意</h3><p>ブラウザは、Firefox と IE で確認. 他のブラウザだと、ブラウザが独自の .xsl をあててしまう.<br />\r
+また .xml が web 上にあると、ブラウザが独自の .xsl をあててしまう.<br />\r
+外部のリンクは赤く、wiki の他のページへのリンクは 緑 で表示.<br />\r
+</p><h2 id="h2-Wiki.20.E3.81.AE.E3.83.90.E3.83.83.E3.82.AF.E3.82.A2.E3.83.83.E3.83.97">Wiki のバックアップ</h2><p>wiki 全文配信フィードの <a href="http://sourceforge.jp/projects/pettanr/wiki/!feeds/list">http://sourceforge.jp/projects/pettanr/wiki/!feeds/list</a> を Google リーダーに登録しておく.</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ForAuthors">\r
+    <title>ForAuthors</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ForAuthors</link>\r
+    <dc:identifier>ForAuthors</dc:identifier>\r
+\r
+    <dc:date>2012-01-06T19:53:55+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[== 奥行きzと時間軸t\r
+コミックの各コマには奥行きと時間軸があります。\r
+\r
+奥行きとは、キャラクターの重なり順序とも言いかえることができて、CSS上ではzindexと同じ意味です。\r
+\r
+時間軸はストーリー上での時間の流れの順序で、読者がフキダシやキャラクターを目で追う順序とも言えます。コマのデータを時間軸順に並べれば、台本を読むのと同じになるイメージです。\r
+\r
+これらをコミック上で正しく]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h2 id="h2-.E5.A5.A5.E8.A1.8C.E3.81.8Dz.E3.81.A8.E6.99.82.E9.96.93.E8.BB.B8t">奥行きzと時間軸t</h2><p>コミックの各コマには奥行きと時間軸があります。\r
+</p><p>奥行きとは、キャラクターの重なり順序とも言いかえることができて、CSS上ではzindexと同じ意味です。\r
+</p><p>時間軸はストーリー上での時間の流れの順序で、読者がフキダシやキャラクターを目で追う順序とも言えます。コマのデータを時間軸順に並べれば、台本を読むのと同じになるイメージです。\r
+</p><p>これらをコミック上で正しく並べるために、奥行きzと時間軸tが用意してあります。奥行きに関してはエディタでビジュアルに操作している限り問題ありません。しかし、コマの外観だけを見て制作すると、時間軸は必ず正しく並ぶというわけではありません。時間軸を意識することで、より違和感のない漫画ができるとぺったんRでは考えています。画像がきれいに表示されない環境や読み上げソフトなどを使った場合は、特に効果があるはずです。\r
+</p><h2 id="h2-.E3.83.A6.E3.83.8B.E3.83.BC.E3.82.AF.E3.81.AA.E5.A5.A5.E8.A1.8C.E3.81.8D.E3.83.87.E3.83.BC.E3.82.BF.E4.BD.9C.E6.88.90">ユニークな奥行きデータ作成</h2><p>ページ内で同じzindexを持っては意味がありません。そこでzが重ならないようにデータをユニークに作成する必要があります。\r
+</p><h2 id="h2-.E3.83.A6.E3.83.8B.E3.83.BC.E3.82.AF.E3.81.AA.E6.99.82.E9.96.93.E8.BB.B8.E3.83.87.E3.83.BC.E3.82.BF.E4.BD.9C.E6.88.90">ユニークな時間軸データ作成</h2><ul><li>コマ単位でtを順序づけ。\r
+<ul><li>コミック表示など複数のコマが表示される場合は、コマ番号tからのオフセット\r
+</li><li>例えば、コマ1にオブジェクトが4つあるとき、コマ2のtは4から始まる。\r
+</li><li>コマ2に6つのオブジェクトがあるなら、コマ3のtは10から始まる。\r
+</li><li>コマ3に添付されたコマ絵のtが2なら、コマ3のt(オフセット)10+2で12\r
+<ul><li>まぁ、ここはクライアントが好きにしていい話か。別に1-2とか2-3で管理してもいいけど。\r
+</li></ul></li></ul></li><li>tは0から始まる\r
+</li><li>コマpanels内でコマ絵panel_picturesとフキダシ枠speach_balloonのtは重なっちゃだめ。両者は同じレベル。\r
+<ul><li>ただし、フキダシ枠speach_balloonの中にあるセリフspeachesは一つレベルが下。セリフspeachesのtは一つのフキダシ枠speach_balloonの中でユニーク。ほとんどのフキダシにはセリフスペースは一個しかないから、多段フキダシを除けばspeaches.tは常に0。\r
+</li></ul></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">\r
+    <title>XbackendReversibleImage</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage</link>\r
+    <dc:identifier>XbackendReversibleImage</dc:identifier>\r
+    <dc:date>2012-01-06T08:09:10+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クロスバックエンドな反転画像機能\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/933/640x640_0.png)]]\r
+ぺったん運営時から、画像を反転させて使用したい、という要望はあった.[[BR]]\r
+とくにキャラクター画像を左右に反転させたい、という要望だ.[[BR]]\r
+\r
+ぺったんR では、その反転に取り組む.[[BR]]\r
+サーバ]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.AD.E3.82.B9.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89.E3.81.AA.E5.8F.8D.E8.BB.A2.E7.94.BB.E5.83.8F.E6.A9.9F.E8.83.BD">クロスバックエンドな反転画像機能</h1><img src="http://static.sourceforge.jp/thumb/g/2/933/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9332f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+ぺったん運営時から、画像を反転させて使用したい、という要望はあった.<br />\r
+とくにキャラクター画像を左右に反転させたい、という要望だ.<br />\r
+</p><p>ぺったんR では、その反転に取り組む.<br />\r
+サーバー側での反転画像の準備と、ブラウザでのクロスバックエンドな対応、という二段構えだ.<br />\r
+</p><h2 id="h2-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E5.81.B4.E3.81.A7.E3.81.AE.E3.82.AF.E3.83.AD.E3.82.B9.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89.E3.81.AA.E5.8F.8D.E8.BB.A2.E8.A1.A8.E7.A4.BA">ブラウザ側でのクロスバックエンドな反転表示</h2><h3 id="h3-.E3.81.AF.E3.81.98.E3.82.81.E3.81.AB">はじめに</h3><p>ブラウザのネイティブな反転表示機能(css3)および、ブラウザの独自拡張や Flash 等のプラグインを使用する.<br />\r
+これらの機能をサポートしない、または切っているブラウザは、サーバー側で生成した画像を利用することになる.<br />\r
+ブラウザ側でなるべく画像を用意しサーバーへの負荷を極力抑えます.\r
+</p><h3 id="h3-.E4.BD.BF.E7.94.A8.E3.81.99.E3.82.8B.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89">使用するバックエンド</h3><h4 id="h4-css3">css3</h4><p>例\r
+<pre>img.img-flip-v { /* 上下反転 */\r
+       transform:              scale( 1, -1);\r
+       -o-transform:           scale( 1, -1);\r
+       -ms-transform:          scale( 1, -1);\r
+       -moz-transform:         scale( 1, -1);\r
+       -webkit-transform:      scale( 1, -1);\r
+}      \r
+img.img-flip-h { /* 左右反転 */\r
+       transform:              scale( -1, 1);\r
+       -o-transform:           scale( -1, 1);\r
+       -ms-transform:          scale( -1, 1);\r
+       -moz-transform:         scale( -1, 1);\r
+       -webkit-transform:      scale( -1, 1);\r
+}\r
+img.img-flip-vh { /* 上下左右反転 */\r
+       transform:              scale( -1, -1);\r
+       -o-transform:           scale( -1, -1);\r
+       -ms-transform:          scale( -1, -1);\r
+       -moz-transform:         scale( -1, -1);\r
+       -webkit-transform:      scale( -1, -1);\r
+}\r
+</pre></p><h4 id="h4-VML">VML</h4><p>例\r
+<pre>v\:image.img-flip-v {\r
+       flip:                   y; /* vml */\r
+}\r
+v\:image.img-flip-h {\r
+       flip:                   x; /* vml */\r
+}v\:image.img-flip-vh {\r
+       rotation :              180; /* vml */\r
+}\r
+</pre>ie独自拡張の VML が ie6~8 での反転画像の本命となる.上記のように vml 用の css も使える.(ただし js による css の適用にくせがある.)<br />\r
+VML で表示された画像は、ie6 以下にある透過 png の問題も解消される.(但し ie6 のみ.ie5.5 以下では透過表示が不十分)<br />\r
+</p><blockquote class="citation"><p>Windows版 IE 5以降の VMLレンダラで半透明、透過PNGを表示する<br />\r
+<a href="http://www.minc.ne.jp/~konda/new/png/urawaza04.html" class="external" rel="nofollow">http://www.minc.ne.jp/~konda/new/png/urawaza04.html</a><br />\r
+IE 5 及び 5.5 (5.50.4133.200)の vgx.dll(Microsoft Vector Graphics Rendering(VML))は、Beta バージョンですから 半透明系は、以下の画像の様に擬似半透明表示(ディザリング)されます\r
+</p></blockquote><pre>&lt;!--[if !gte vml 1]&gt;&lt;!--&gt;&lt;img src=&quot;*.png&quot; width=&quot;*&quot; height=&quot;*&quot; alt=&quot;*&quot; /&gt;&lt;!--&lt;![endif]--&gt;\r
+&lt;!--[if gte vml 1]&gt;&lt;v:image src=&quot;*.png&quot; style=&quot;width: *px; height: *px; behavior: url(#default#vml)&quot; alt=&quot;*&quot; /&gt;&lt;![endif]--&gt;\r
+</pre><p>さらに、ActiveX よりも動作が速い(らしい).<br />\r
+但し VML は windows の構成によってはインストールされていない場合があり、必ずしも使えるわけではない.<br />\r
+itozyun の環境のひとつでも VML が使えなかった.nlite で削ってしまったためと思われる.\r
+</p><h3 id="h3-SVG">SVG</h3><p>svg な xml を js で作って data スキームで読み込む。Opera8+ でも画像反転できるかも。Opera9.6 で静的に埋め込んだ以上の html では反転表示ができた。ただし Firefox3.6 Chrome8 では表示できない。<br />\r
+dataスキームになった svg に対しては、画像の url を絶対座標で与える。\r
+svg を html に直接埋め込む方式では、なぜか手元で一度も成功していない。\r
+<pre>&lt;?xml version=&quot;1.0&quot;?&gt;\r
+&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;\r
+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; version=&quot;1.1&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;200&quot; height=&quot;200&quot;&gt;\r
+&lt;image x=&quot;0&quot; y=&quot;0&quot; width=&quot;200&quot; height=&quot;200&quot; xlink:href=&quot;1.gif&quot; transform=&quot;scale(-1,1) translate(-200,0)&quot; /&gt;\r
+&lt;/svg&gt;\r
+</pre></p><ul><li><a href="http://software.hixie.ch/utilities/cgi/data/data" class="external" rel="nofollow">http://software.hixie.ch/utilities/cgi/data/data</a>\r
+</li><li>サイトの表示スピードを改善!dataスキームURIを使った画像の埋め込み <a href="http://labs.cybridge.jp/2011/12/data-uri.html" class="external" rel="nofollow">http://labs.cybridge.jp/2011/12/data-uri.html</a>\r
+<ul><li>データスキーム対応ブラウザ \r
+</li><li>Firefox2+\r
+</li><li>Safari\r
+</li><li>Chrome\r
+</li><li>Opera7.2+\r
+</li><li>IE8+\r
+</li></ul></li></ul><pre>&lt;img src=&quot;data:image/svg+xml;charset=utf-8,%3c%3fxml%20version%3d%221.0%22%3f%3e%3c!DOCTYPE%20svg%20PUBLIC%20%22-%2f%2fW3C%2f%2fDTD%20SVG%201.1%2f%2fEN%22%20%22http%3a%2f%2fwww.w3.org%2fGraphics%2fSVG%2f1.1%2fDTD%2fsvg11.dtd%22%3e%3csvg%20xmlns%3d%22http%3a%2f%2fwww.w3.org%2f2000%2fsvg%22%20version%3d%221.1%22%20xmlns%3axlink%3d%22http%3a%2f%2fwww.w3.org%2f1999%2fxlink%22%20width%3d%22200%22%20height%3d%22200%22%3e%3cimage%20x%3d%220%22%20y%3d%220%22%20width%3d%22200%22%20height%3d%22200%22%20xlink%3ahref%3d%22http%3a%2f%2fstatic.sourceforge.jp%2fthumb%2fg%2f2%2f930%2f640x640_0.png%22%20transform%3d%22scale(-1%2c1)%20translate(-200%2c0)%22%20%2f%3e%3c%2fsvg%3e&quot;&gt;\r
+</pre><h4 id="h4-ActiveX">ActiveX</h4><pre>img.img-flip-v { /* 上下反転 */\r
+       filter:                 progid:DXImageTransform.Microsoft.BasicImage( Mirror=1, Rotation=2);\r
+       -ms-filter:             progid:DXImageTransform.Microsoft.BasicImage( Mirror=1, Rotation=2);\r
+}\r
+img.img-flip-h { /* 左右反転 */\r
+       filter:                 progid:DXImageTransform.Microsoft.BasicImage( Mirror=1);\r
+       -ms-filter:             progid:DXImageTransform.Microsoft.BasicImage( Mirror=1);\r
+}\r
+img.img-flip-vh { /* 上下左右反転 */\r
+       filter:                 progid:DXImageTransform.Microsoft.BasicImage( Rotation=2);\r
+       -ms-filter:             progid:DXImageTransform.Microsoft.BasicImage( Rotation=2);\r
+}\r
+</pre><p>ActiveX は、ie6 以下のための pngfix にも使いたいが、反転とAlpha Image Loader を同時に使用することはできない.<br />\r
+ie6では、ActiveX による反転は、png 画像に対しては使用できない.\r
+</p><h4 id="h4-Flash">Flash</h4><p>クロスドメインな画像に対しても、読み込み、反転表示は行える.<br />\r
+なるべく バージョンの古い Flash で用意してサポート範囲を広くしたいが、js と連携する <a href="http://sourceforge.jp/projects/pettanr/wiki/ExternalInterface">ExternalInterface</a> が使えなくなったりと多難かもしれない.\r
+</p><h4 id="h4-Canvas">Canvas</h4><p>同一ドメインの画像のみになるが、画像のピクセルデータを取得し反転しつつ描画することができる.<br />\r
+</p><blockquote class="citation"><p>Canvasによる画像ファイル(img要素)の読み書き<br />\r
+<a href="http://www.programmingmat.jp/webhtml_lab/canvas_image.html" class="external" rel="nofollow">http://www.programmingmat.jp/webhtml_lab/canvas_image.html</a>\r
+</p></blockquote><h4 id="h4-Silverlight">Silverlight</h4><h4 id="h4-.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E3.82.B5.E3.82.A4.E3.83.89.E7.94.BB.E5.83.8F">サーバーサイド画像</h4><p>サーバー側で反転画像を用する.このサーバ画像へのアクセスを極力減らすのが、X Backend Imageの目的のひとつ.\r
+<pre>picture/001.png\r
+picture/v/001.png\r
+picture/h/001.png\r
+picture/vh/001.png\r
+</pre></p><h3 id="h3-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E6.A9.9F.E8.83.BD.E5.AF.BE.E5.BF.9C.E8.A1.A8">ブラウザ機能対応表</h3><table class="wikitable" border="1"><tbody><tr><td>バックエンド</td><td>ie5+5.5</td><td>ie6</td><td>ie7 &amp; 8</td><td>ie9+</td><td>FF</td><td>Safari</td><td>Chrome</td><td>Opera</td></tr><tr><td>CSS3:transform</td><td>×</td><td>×</td><td>×</td><td>○</td><td>3.5+</td><td>3.1+(?)</td><td>1+</td><td>10.5+</td></tr><tr><td>VML</td><td>▲透過pngの表示が汚い</td><td>△</td><td>△環境による</td><td>?</td><td>×</td><td>×</td><td>×</td><td>×</td></tr><tr><td>Canvas</td><td>×</td><td>×</td><td>×</td><td>○</td><td>1.5+</td><td>1.3+</td><td>1+</td><td>9+</td></tr><tr><td>SVG +DATAスキーム</td><td>×</td><td>×</td><td>×</td><td>?</td><td>?</td><td>?</td><td>?</td><td>8+(?)</td></tr><tr><td>サーバー画像</td><td>△</td><td>△要pngfix</td><td>○</td><td>○</td><td>○</td><td>○</td><td>○</td><td>○</td></tr></tbody></table>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc">\r
+    <title>ChangeDoc</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ChangeDoc</link>\r
+\r
+    <dc:identifier>ChangeDoc</dc:identifier>\r
+    <dc:date>2012-01-04T18:19:48+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 改変予告\r
+== モデルの変名\r
+\r
+balloon_templates\r
+ * border &rarr; size\r
+ * min_width &rarr; \r
+ * max_width &rarr; \r
+ * min_height &rarr; \r
+ * max_height &rarr; \r
+balloons \r
+ * border &rarr; size\r
+ * zindex &ra]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E6.94.B9.E5.A4.89.E4.BA.88.E5.91.8A">改変予告</h1><h2 id="h2-.E3.83.A2.E3.83.87.E3.83.AB.E3.81.AE.E5.A4.89.E5.90.8D">モデルの変名</h2><p>balloon_templates\r
+</p><ul><li>border → size\r
+</li><li>min_width → \r
+</li><li>max_width → \r
+</li><li>min_height → \r
+</li><li>max_height → \r
+</li></ul><p>balloons \r
+</p><ul><li>border → size\r
+</li><li>zindex → z\r
+</li><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>width → \r
+</li><li>height → \r
+</li></ul><p>comics \r
+</p><ul><li>default_width → width\r
+</li><li>default_height → height\r
+</li></ul><p>original_pictures\r
+</p><ul><li>width → \r
+</li><li>height → \r
+</li></ul><p>panel_pictures\r
+</p><ul><li>width → \r
+</li><li>height → \r
+</li><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>zindex → z\r
+</li><li>v → flipv\r
+</li><li>h → fliph\r
+</li></ul><p>panels\r
+</p><ul><li>width → \r
+</li><li>height → \r
+</li><li>seqno → t\r
+</li></ul><p>speach_balloons\r
+</p><ul><li>tail_limit → tail_count\r
+</li><li>border_limit → size_count\r
+</li></ul><p>speach_templates\r
+</p><ul><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>width → \r
+</li><li>height → \r
+</li></ul><p>speaches\r
+</p><ul><li>top_offset → y\r
+</li><li>left_offset → x\r
+</li><li>width → \r
+</li><li>height → \r
+</li></ul><p>balloons \r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ストーリー上の順序も品質に関わるため\r
+</p><p>speaches\r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ストーリー上の順序も品質に関わるため\r
+</p><p>panels\r
+<table class="wikitable" border="1"><tbody><tr><td>x</td><td>表示位置x</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>y</td><td>表示位置y</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr><tr><td>z</td><td>表示優先順位</td><td>integer</td><td> </td><td>FALSE</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:将来の拡張に備えるため\r
+</p><p>panel_pictures\r
+<table class="wikitable" border="1"><tbody><tr><td>url</td><td>リンク</td><td>string</td><td> </td><td> </td><td>200</td><td>参照するページをリンクできる</td></tr></tbody></table></p><p>追加理由:本家から取り込んでなかった\r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>時間軸 順序</td><td>integer</td><td>1</td><td>false</td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ストーリー上の順序も品質に関わるため\r
+</p><p>lisences\r
+<table class="wikitable" border="1"><tbody><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ie6がpng透過できないためgif変換の必要ができたため\r
+</p><p>common_lisences\r
+<table class="wikitable" border="1"><tbody><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ie6がpng透過できないためgif変換の必要ができたため\r
+</p><p>original_lisences\r
+<table class="wikitable" border="1"><tbody><tr><td>no_convert</td><td>フォーマット・色合い変換の禁止</td><td>integer</td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table></p><p>追加理由:ie6がpng透過できないためgif変換の必要ができたため\r
+</p><p>comics\r
+<table class="wikitable" border="1"><tbody><tr><td>visible</td><td>公開フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>可視範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr><tr><td>editable</td><td>編集フラグ</td><td>integer</td><td>0</td><td>false</td><td> </td><td>許可範囲 0:本人のみ 1:友人まで 2:ユーザまで 3:誰でも</td></tr></tbody></table></p><p>追加理由:本家から取り込んでなかった\r
+</p><p>speach_balloons\r
+<table class="wikitable" border="1"><tbody><tr><td>t</td><td>表示順</td><td>integer</td><td>1</td><td>false</td><td> </td><td>ファイルエクスプローラーなどで</td></tr></tbody></table></p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema">\r
+    <title>DatabaseSchema</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/DatabaseSchema</link>\r
+    <dc:identifier>DatabaseSchema</dc:identifier>\r
+    <dc:date>2012-01-04T18:05:04+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= 定義\r
+超やっつけだけど、無いよりはマシか。\r
+\r
+{{{\r
+ActiveRecord::Schema.define(:version =&gt; 20120102071851) do\r
+\r
+  create_table &quot;admins&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;email&quot;,        ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E5.AE.9A.E7.BE.A9">定義</h1><p>超やっつけだけど、無いよりはマシか。\r
+</p><pre>ActiveRecord::Schema.define(:version =&gt; 20120102071851) do\r
+\r
+  create_table &quot;admins&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;email&quot;,                                 :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;encrypted_password&quot;,     :limit =&gt; 128, :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;reset_password_token&quot;\r
+    t.datetime &quot;reset_password_sent_at&quot;\r
+    t.datetime &quot;remember_created_at&quot;\r
+    t.integer  &quot;sign_in_count&quot;,                         :default =&gt; 0\r
+    t.datetime &quot;current_sign_in_at&quot;\r
+    t.datetime &quot;last_sign_in_at&quot;\r
+    t.string   &quot;current_sign_in_ip&quot;\r
+    t.string   &quot;last_sign_in_ip&quot;\r
+    t.string   &quot;confirmation_token&quot;\r
+    t.datetime &quot;confirmed_at&quot;\r
+    t.datetime &quot;confirmation_sent_at&quot;\r
+    t.string   &quot;authentication_token&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;admins&quot;, [&quot;authentication_token&quot;], :name =&gt; &quot;index_admins_on_authentication_token&quot;, :unique =&gt; true\r
+  add_index &quot;admins&quot;, [&quot;confirmation_token&quot;], :name =&gt; &quot;index_admins_on_confirmation_token&quot;, :unique =&gt; true\r
+  add_index &quot;admins&quot;, [&quot;email&quot;], :name =&gt; &quot;index_admins_on_email&quot;, :unique =&gt; true\r
+  add_index &quot;admins&quot;, [&quot;reset_password_token&quot;], :name =&gt; &quot;index_admins_on_reset_password_token&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;artists&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;email&quot;\r
+    t.string   &quot;name&quot;\r
+    t.string   &quot;homepage_url&quot;\r
+    t.string   &quot;api_url&quot;\r
+    t.integer  &quot;default_lisence_id&quot;\r
+    t.datetime &quot;crowled_at&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+    t.integer  &quot;author_id&quot;\r
+  end\r
+\r
+  create_table &quot;authors&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;name&quot;\r
+    t.string   &quot;email&quot;,                                 :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;encrypted_password&quot;,     :limit =&gt; 128, :default =&gt; &quot;&quot;, :null =&gt; false\r
+    t.string   &quot;reset_password_token&quot;\r
+    t.datetime &quot;reset_password_sent_at&quot;\r
+    t.datetime &quot;remember_created_at&quot;\r
+    t.integer  &quot;sign_in_count&quot;,                         :default =&gt; 0\r
+    t.datetime &quot;current_sign_in_at&quot;\r
+    t.datetime &quot;last_sign_in_at&quot;\r
+    t.string   &quot;current_sign_in_ip&quot;\r
+    t.string   &quot;last_sign_in_ip&quot;\r
+    t.string   &quot;authentication_token&quot;\r
+    t.string   &quot;confirmation_token&quot;\r
+    t.datetime &quot;confirmed_at&quot;\r
+    t.datetime &quot;confirmation_sent_at&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;authors&quot;, [&quot;authentication_token&quot;], :name =&gt; &quot;index_authors_on_authentication_token&quot;, :unique =&gt; true\r
+  add_index &quot;authors&quot;, [&quot;confirmation_token&quot;], :name =&gt; &quot;index_authors_on_confirmation_token&quot;, :unique =&gt; true\r
+  add_index &quot;authors&quot;, [&quot;email&quot;], :name =&gt; &quot;index_authors_on_email&quot;, :unique =&gt; true\r
+  add_index &quot;authors&quot;, [&quot;reset_password_token&quot;], :name =&gt; &quot;index_authors_on_reset_password_token&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;balloon_templates&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;speach_balloon_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;system_picture_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;tail&quot;,              :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;size&quot;,              :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;min_width&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;max_width&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;min_height&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;max_height&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;balloon_templates&quot;, [&quot;speach_balloon_id&quot;, &quot;tail&quot;, &quot;size&quot;], :name =&gt; &quot;balloon_templates_idts&quot;, :unique =&gt; true\r
+  add_index &quot;balloon_templates&quot;, [&quot;speach_balloon_id&quot;], :name =&gt; &quot;index_balloon_templates_on_speach_balloon_id&quot;\r
+\r
+  create_table &quot;balloons&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;panel_id&quot;,                           :null =&gt; false\r
+    t.integer  &quot;balloon_template_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;system_picture_id&quot;,                  :null =&gt; false\r
+    t.integer  &quot;tail&quot;,                :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;size&quot;,                :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;x&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;z&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;t&quot;,                   :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                              :null =&gt; false\r
+    t.integer  &quot;height&quot;,                             :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;balloons&quot;, [&quot;panel_id&quot;, &quot;t&quot;], :name =&gt; &quot;balloon_idt&quot;, :unique =&gt; true\r
+  add_index &quot;balloons&quot;, [&quot;panel_id&quot;], :name =&gt; &quot;index_balloons_on_panel_id&quot;\r
+\r
+  create_table &quot;comics&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;title&quot;\r
+    t.integer  &quot;width&quot;,      :default =&gt; 200, :null =&gt; false\r
+    t.integer  &quot;height&quot;,     :default =&gt; 80,  :null =&gt; false\r
+    t.integer  &quot;visible&quot;,    :default =&gt; 0,   :null =&gt; false\r
+    t.integer  &quot;editable&quot;,   :default =&gt; 0,   :null =&gt; false\r
+    t.integer  &quot;author_id&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;comics&quot;, [&quot;author_id&quot;], :name =&gt; &quot;index_comics_on_author_id&quot;\r
+\r
+  create_table &quot;common_lisences&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;lisence_id&quot;,                       :null =&gt; false\r
+    t.string   &quot;name&quot;,                             :null =&gt; false\r
+    t.string   &quot;url&quot;,                              :null =&gt; false\r
+    t.integer  &quot;cc_by&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_sa&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nd&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nc&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_resize&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_flip&quot;,           :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_convert&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;keep_aspect_ratio&quot;, :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  create_table &quot;lisences&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;name&quot;,                             :null =&gt; false\r
+    t.string   &quot;url&quot;,                              :null =&gt; false\r
+    t.integer  &quot;cc_by&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_sa&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nd&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nc&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_resize&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_flip&quot;,           :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_convert&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;keep_aspect_ratio&quot;, :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;lisences&quot;, [&quot;url&quot;], :name =&gt; &quot;index_lisences_on_url&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;original_lisences&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;artist_id&quot;,                        :null =&gt; false\r
+    t.integer  &quot;lisence_id&quot;,                       :null =&gt; false\r
+    t.string   &quot;name&quot;,                             :null =&gt; false\r
+    t.string   &quot;url&quot;,                              :null =&gt; false\r
+    t.integer  &quot;cc_by&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_sa&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nd&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;cc_nc&quot;,             :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_resize&quot;,         :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_flip&quot;,           :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;no_convert&quot;,        :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;keep_aspect_ratio&quot;, :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  create_table &quot;original_pictures&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;ext&quot;,        :null =&gt; false\r
+    t.integer  &quot;width&quot;,      :null =&gt; false\r
+    t.integer  &quot;height&quot;,     :null =&gt; false\r
+    t.integer  &quot;filesize&quot;,   :null =&gt; false\r
+    t.integer  &quot;artist_id&quot;\r
+    t.integer  &quot;lisence_id&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;original_pictures&quot;, [&quot;artist_id&quot;], :name =&gt; &quot;index_original_pictures_on_artist_id&quot;\r
+\r
+  create_table &quot;panel_pictures&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;panel_id&quot;,                                          :null =&gt; false\r
+    t.integer  &quot;resource_picture_id&quot;,                               :null =&gt; false\r
+    t.string   &quot;url&quot;,                 :limit =&gt; 200\r
+    t.integer  &quot;x&quot;,                                                 :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                                 :null =&gt; false\r
+    t.integer  &quot;z&quot;,                                                 :null =&gt; false\r
+    t.integer  &quot;t&quot;,                                  :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                                             :null =&gt; false\r
+    t.integer  &quot;height&quot;,                                            :null =&gt; false\r
+    t.integer  &quot;flipv&quot;,                              :default =&gt; 0, :null =&gt; false\r
+    t.integer  &quot;fliph&quot;,                              :default =&gt; 0, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;panel_pictures&quot;, [&quot;panel_id&quot;, &quot;t&quot;], :name =&gt; &quot;panel_pictures_idt&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;panels&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;comic_id&quot;,                             :null =&gt; false\r
+    t.integer  &quot;resource_picture_id&quot;\r
+    t.integer  &quot;width&quot;,               :default =&gt; 200, :null =&gt; false\r
+    t.integer  &quot;height&quot;,              :default =&gt; 80,  :null =&gt; false\r
+    t.integer  &quot;border&quot;,              :default =&gt; 1,   :null =&gt; false\r
+    t.integer  &quot;x&quot;,                                    :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                    :null =&gt; false\r
+    t.integer  &quot;z&quot;,                                    :null =&gt; false\r
+    t.integer  &quot;t&quot;,                   :default =&gt; 1,   :null =&gt; false\r
+    t.integer  &quot;author_id&quot;\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;panels&quot;, [&quot;author_id&quot;], :name =&gt; &quot;index_panels_on_author_id&quot;\r
+  add_index &quot;panels&quot;, [&quot;comic_id&quot;, &quot;t&quot;], :name =&gt; &quot;panels_idt&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;resource_pictures&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;ext&quot;,                 :null =&gt; false\r
+    t.integer  &quot;width&quot;,               :null =&gt; false\r
+    t.integer  &quot;height&quot;,              :null =&gt; false\r
+    t.integer  &quot;filesize&quot;,            :null =&gt; false\r
+    t.integer  &quot;artist_id&quot;\r
+    t.integer  &quot;lisence_id&quot;\r
+    t.integer  &quot;original_picture_id&quot;, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  create_table &quot;speach_balloons&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;name&quot;,                      :null =&gt; false\r
+    t.integer  &quot;tail_count&quot;, :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;size_count&quot;, :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;t&quot;,          :default =&gt; 1, :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;speach_balloons&quot;, [&quot;t&quot;], :name =&gt; &quot;speach_balloons_t&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;speach_templates&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;balloon_template_id&quot;,                :null =&gt; false\r
+    t.integer  &quot;x&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;y&quot;,                                  :null =&gt; false\r
+    t.integer  &quot;t&quot;,                   :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                              :null =&gt; false\r
+    t.integer  &quot;height&quot;,                             :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;speach_templates&quot;, [&quot;balloon_template_id&quot;, &quot;t&quot;], :name =&gt; &quot;speach_templates_idt&quot;, :unique =&gt; true\r
+\r
+  create_table &quot;speaches&quot;, :force =&gt; true do |t|\r
+    t.integer  &quot;balloon_id&quot;,                :null =&gt; false\r
+    t.string   &quot;content&quot;\r
+    t.integer  &quot;x&quot;,                         :null =&gt; false\r
+    t.integer  &quot;y&quot;,                         :null =&gt; false\r
+    t.integer  &quot;t&quot;,          :default =&gt; 1, :null =&gt; false\r
+    t.integer  &quot;width&quot;,                     :null =&gt; false\r
+    t.integer  &quot;height&quot;,                    :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+\r
+  add_index &quot;speaches&quot;, [&quot;balloon_id&quot;, &quot;t&quot;], :name =&gt; &quot;speaches_bt&quot;, :unique =&gt; true\r
+  add_index &quot;speaches&quot;, [&quot;balloon_id&quot;], :name =&gt; &quot;index_speaches_on_balloon_id&quot;\r
+\r
+  create_table &quot;system_pictures&quot;, :force =&gt; true do |t|\r
+    t.string   &quot;ext&quot;,        :null =&gt; false\r
+    t.integer  &quot;width&quot;,      :null =&gt; false\r
+    t.integer  &quot;height&quot;,     :null =&gt; false\r
+    t.integer  &quot;filesize&quot;,   :null =&gt; false\r
+    t.datetime &quot;created_at&quot;\r
+    t.datetime &quot;updated_at&quot;\r
+  end\r
+end\r
+\r
+</pre>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController">\r
+    <title>SpeachBalloonsController</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonsController</link>\r
+    <dc:identifier>SpeachBalloonsController</dc:identifier>\r
+    <dc:date>2012-01-04T07:58:05+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= フキダシテンプレート\r
+コマ上に添付するためのフキダシ見本と、それを管理する処理。主に二つの使われ方をする。\r
+\r
+ * 作家が使うエディタ上のフキダシエクスプローラーで見本として表示するための情報をjsonで返す。\r
+ * 管理者がフキダシの基礎情報をメンテナンスする。\r
+\r
+メンテナンスはjson経由で行うことが多い。枠テンプレートとセリフテンプレートのすべての情報を同時に更新する必要があ]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">フキダシテンプレート</h1><p>コマ上に添付するためのフキダシ見本と、それを管理する処理。主に二つの使われ方をする。\r
+</p><ul><li>作家が使うエディタ上のフキダシエクスプローラーで見本として表示するための情報をjsonで返す。\r
+</li><li>管理者がフキダシの基礎情報をメンテナンスする。\r
+</li></ul><p>メンテナンスはjson経由で行うことが多い。枠テンプレートとセリフテンプレートのすべての情報を同時に更新する必要があるためである。詳しくは<a href="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">AboutSpeachBalloon</a>。\r
+</p><p>参考:<a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloonModel">SpeachBalloonModel</a>\r
+</p><h2 id="h2-index">index</h2><p>一覧形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>作家/管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>○</td></tr></tbody></table></p><p>主にクライアントのエディタがフキダシリストを得るために使う。全レコードがt順で返る。\r
+</p><p>html形式では、管理者がメンテナンスのために閲覧する。重要なカラムの情報が一覧で表示されるほか、showへの誘導と、削除のボタンが配置される。\r
+</p><h2 id="h2-show">show</h2><p>単票形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>管理者がメンテナンスのために閲覧する機能。\r
+</p><h2 id="h2-create">create</h2><p>作成\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>json形式で</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>×</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>管理者がフキダシを追加するための機能。\r
+</p><p>jsonデータを元にフキダシテンプレートを作成する。データ作成方法は<a href="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">HowToMakeSpeachBalloon</a>を見る。\r
+</p><h2 id="h2-update">update</h2><p>更新\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>×</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>管理者がフキダシを修正するための機能。\r
+</p><p>指定されたidのフキダシテンプレートを、jsonデータを元に更新する。データ作成方法は<a href="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">HowToMakeSpeachBalloon</a>を見る。\r
+</p><h3 id="h3-.E4.BE.8B.E5.A4.96">例外</h3><p>権限がないアカウントで要求された場合は、処理を中断し、サインインを促すページに遷移する。\r
+指定されたidが存在しない場合は、404エラーコードが返る。\r
+</p><h2 id="h2-destroy">destroy</h2><p>削除\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr><tr><td>html</td><td>○</td></tr><tr><td>json</td><td>○</td></tr><tr><td>jsonp</td><td>×</td></tr></tbody></table></p><p>指定されたidのフキダシテンプレートを削除する。フキダシテンプレートだけでなく、枠テンプレートとセリフテンプレートも同時に削除される。\r
+</p><h3 id="h3-.E4.BE.8B.E5.A4.96-2">例外</h3><p>権限がないアカウントで要求された場合は、処理を中断し、サインインを促すページに遷移する。\r
+指定されたidが存在しない場合は、404エラーコードが返る。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel">\r
+    <title>PanelPictureModel</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel</link>\r
+    <dc:identifier>PanelPictureModel</dc:identifier>\r
+\r
+    <dc:date>2012-01-03T12:34:36+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コマ絵\r
+コマ上に添付された素材に関するデータ。\r
+\r
+参考:PanelPicturesController\r
+\r
+== カラム\r
+\r
+== 作成手順\r
+コマ絵は常にパネル経由で作成されるため、PanelsControllerからjsonフォーマットで送信する。\r
+\r
+コマ絵は素材のコピーなので、素材ResourcePictureModelのデータを元に作成する。行の新規作成時はデフォルト値と]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9E.E7.B5.B5">コマ絵</h1><p>コマ上に添付された素材に関するデータ。\r
+</p><p>参考:<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController">PanelPicturesController</a>\r
+</p><h2 id="h2-.E3.82.AB.E3.83.A9.E3.83.A0">カラム</h2><h2 id="h2-.E4.BD.9C.E6.88.90.E6.89.8B.E9.A0.86">作成手順</h2><p>コマ絵は常にパネル経由で作成されるため、<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelsController">PanelsController</a>からjsonフォーマットで送信する。\r
+</p><p>コマ絵は素材のコピーなので、素材<a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">ResourcePictureModel</a>のデータを元に作成する。行の新規作成時はデフォルト値として、以下のように値をコピーすること。\r
+</p><table class="wikitable" border="1"><tbody><tr><td><a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPicture">PanelPicture</a></td><td><a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePicture">ResourcePicture</a></td></tr><tr><td>width</td><td>width</td></tr></tbody></table>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel">\r
+    <title>ResourcePictureModel</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ResourcePictureModel</link>\r
+    <dc:identifier>ResourcePictureModel</dc:identifier>\r
+    <dc:date>2012-01-03T11:56:43+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 素材\r
+絵師から提供された原画OriginalPictureModelをコマPanel上で扱いやすいように整えた画像に関するデータ。\r
+\r
+参考:ResourcePicturesController\r
+\r
+== カラム\r
+\r
+== 作成手順\r
+]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E7.B4.A0.E6.9D.90">素材</h1><p>絵師から提供された原画<a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalPictureModel">OriginalPictureModel</a>をコマPanel上で扱いやすいように整えた画像に関するデータ。\r
+</p><p>参考:<a href="http://sourceforge.jp/projects/pettanr/wiki/ResourcePicturesController">ResourcePicturesController</a>\r
+</p><h2 id="h2-.E3.82.AB.E3.83.A9.E3.83.A0">カラム</h2><h2 id="h2-.E4.BD.9C.E6.88.90.E6.89.8B.E9.A0.86">作成手順</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController">\r
+    <title>PanelPicturesController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PanelPicturesController</link>\r
+\r
+    <dc:identifier>PanelPicturesController</dc:identifier>\r
+    <dc:date>2012-01-03T11:39:51+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= コマ絵\r
+コマ上に添付された素材に関する処理。\r
+\r
+コマ絵の操作はパネル経由でしか許可されていないので、処理することはない。かろうじて管理者がレコード値を閲覧できるのみである。\r
+\r
+参考:PanelPictureModel\r
+\r
+== index\r
+一覧形式\r
+||パラメータ||なし||\r
+||権限||管理者||\r
+\r
+== show\r
+単票形式\r
+||パラメータ||id||\r
+||権限|]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.B3.E3.83.9E.E7.B5.B5">コマ絵</h1><p>コマ上に添付された素材に関する処理。\r
+</p><p>コマ絵の操作はパネル経由でしか許可されていないので、処理することはない。かろうじて管理者がレコード値を閲覧できるのみである。\r
+</p><p>参考:<a href="http://sourceforge.jp/projects/pettanr/wiki/PanelPictureModel">PanelPictureModel</a>\r
+</p><h2 id="h2-index">index</h2><p>一覧形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>なし</td></tr><tr><td>権限</td><td>管理者</td></tr></tbody></table></p><h2 id="h2-show">show</h2><p>単票形式\r
+<table class="wikitable" border="1"><tbody><tr><td>パラメータ</td><td>id</td></tr><tr><td>権限</td><td>管理者</td></tr></tbody></table></p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">\r
+    <title>XbackendSpeachBalloon</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon</link>\r
+    <dc:identifier>XbackendSpeachBalloon</dc:identifier>\r
+    <dc:date>2012-01-02T01:06:05+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= クロスバックエンドな吹きだし表示機能\r
+\r
+ぺったんRの吹きだしは、さまざまな尻尾の向きを持つ吹きだし画像を用意します.[[BR]]\r
+また、吹き出しが巨大になったときに、吹きだしの枠線も太ってしまわないように、枠線のバリエーションも複数用意します.[[BR]]\r
+\r
+吹きだし画像は gif で注意深く用意されるため一枚につき、数キロバイトという軽量なものです.しかしコマの編集時にはユーザーが]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.AD.E3.82.B9.E3.83.90.E3.83.83.E3.82.AF.E3.82.A8.E3.83.B3.E3.83.89.E3.81.AA.E5.90.B9.E3.81.8D.E3.81.A0.E3.81.97.E8.A1.A8.E7.A4.BA.E6.A9.9F.E8.83.BD">クロスバックエンドな吹きだし表示機能</h1><p>ぺったんRの吹きだしは、さまざまな尻尾の向きを持つ吹きだし画像を用意します.<br />\r
+また、吹き出しが巨大になったときに、吹きだしの枠線も太ってしまわないように、枠線のバリエーションも複数用意します.<br />\r
+</p><p>吹きだし画像は gif で注意深く用意されるため一枚につき、数キロバイトという軽量なものです.しかしコマの編集時にはユーザーが操作している間にそのすべてのバリエーションを読み込んでしまう事態になります.<br />\r
+また、マンガという表現スタイルを考えると、キャラクター画像一枚に対して、ひとつ程度の吹き出しが登場する、と仮定するという仮定で、ぺったんのページ読み込み時の全画像アクセスのうち、半分を吹きだし画像が締めることになる試算です.<br />\r
+(もちろん、キャラクター画像の方がはるかにファイルサイズが大きくなります.注意深く容量を抑えて作られた場合でも 10KB ~ 20KB という試算です.)<br />\r
+</p><p>このような、吹きだし画像へのアクセスを抑止して、サービスの安定を図るためベクター画像をサポートするブラウザについては、ブラウザ側で吹きだし画像を用意します.\r
+</p><h1 id="h1-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E6.A9.9F.E8.83.BD.E5.AF.BE.E5.BF.9C.E8.A1.A8">ブラウザ機能対応表</h1><table class="wikitable" border="1"><tbody><tr><td>バックエンド</td><td>ie5~8</td><td>ie9+</td><td>FF</td><td>safari</td><td>chrome</td><td>Opera</td></tr><tr><td>VML</td><td>○</td><td>?</td><td>×</td><td>×</td><td>×</td><td>×</td></tr><tr><td>SVG</td><td>×</td><td>○</td><td>1.5+</td><td>3.0+</td><td>1+</td><td>8+</td></tr></tbody></table>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">\r
+    <title>HowToMakeSpeachBalloon</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon</link>\r
+    <dc:identifier>HowToMakeSpeachBalloon</dc:identifier>\r
+    <dc:date>2012-01-01T01:59:53+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[== フキダシテンプレート\r
+[[Embed(http://static.sourceforge.jp/thumb/g/2/949/640x640_0.png)]]\r
+フキダシテンプレートを追加するには尻尾の向きと枠のサイズのバリエーションがいくつになるかを決定しなければなりません。\r
+尻尾のバリエーション数をtail_limit、枠のバリエーション数を_limitとして決定してください。\r
+そし]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">フキダシテンプレート</h2><img src="http://static.sourceforge.jp/thumb/g/2/949/640x640_0.png" alt="640x640_0.png" id="emb-http:2f2fstatic.sourceforge.jp2fthumb2fg2f22f9492f640x640_0.png-1" title="640x640_0.png" class="embed-image"><p>\r
+フキダシテンプレートを追加するには尻尾の向きと枠のサイズのバリエーションがいくつになるかを決定しなければなりません。\r
+尻尾のバリエーション数をtail_limit、枠のバリエーション数を_limitとして決定してください。\r
+そして、それらすべての組み合わせの枠テンプレートとテキストテンプレートを用意してください。一つでも欠けると追加できません。\r
+</p><p>例えば、尻尾が上下左右ならtail_limitが4。サイズが大中小ならで_limitが3で、4*3で合計12の枠テンプレートとテキストテンプレートを用意します。\r
+</p><p>→tail ↓Border\r
+<table class="wikitable" border="1"><tbody><tr><td> </td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>1</td><td>小-上</td><td>小-右</td><td>小-下</td><td>小-左</td></tr><tr><td>2</td><td>中-上</td><td>中-右</td><td>中-下</td><td>中-左</td></tr><tr><td>3</td><td>大-上</td><td>大-右</td><td>大-下</td><td>大-左</td></tr></tbody></table></p><p>フキダシテンプレートに必要な項目は以下です。\r
+<table class="wikitable" border="1"><tbody><tr><td>項目名</td><td>意味</td><td>備考</td></tr><tr><td>name</td><td>フキダシの名前</td><td> </td></tr><tr><td>tail_limit</td><td>尻尾のバリエーション数</td><td> </td></tr><tr><td>border_limit</td><td>サイズのバリエーション数</td><td> </td></tr></tbody></table></p><h2 id="h2-.E6.9E.A0.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">枠テンプレート</h2><p>枠は画像で用意します。フキダシ用の画像を用意して素材として投稿します。\r
+各種フキダシ素材を投稿したらIDをメモします。\r
+</p><p>枠テンプレートに必要な項目は以下です。\r
+<table class="wikitable" border="1"><tbody><tr><td>項目名</td><td>意味</td><td>備考</td></tr><tr><td>resource_picture_id</td><td>フキダシ素材のID</td><td> </td></tr><tr><td>tail</td><td>尻尾の番号</td><td>1から始まりtail_limit-1で終わること</td></tr><tr><td>border</td><td>サイズの番号</td><td>1から始まり_limit-1で終わること</td></tr><tr><td>min_width</td><td>横方向のサイズが小さい方に切り替わる幅</td><td>0のとき、切り替えは発生しない</td></tr><tr><td>max_width</td><td>横方向のサイズが大きい方に切り替わる幅</td><td>0のとき、切り替えは発生しない</td></tr><tr><td>min_height</td><td>縦方向のサイズが小さい方に切り替わる高さ</td><td>0のとき、切り替えは発生しない</td></tr><tr><td>max_height</td><td>縦方向のサイズが大きい方に切り替わる高さ</td><td>0のとき、切り替えは発生しない</td></tr></tbody></table></p><h2 id="h2-.E3.83.86.E3.82.AD.E3.82.B9.E3.83.88.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">テキストテンプレート</h2><p>枠画像のどの位置にテキストを表示するかを決めて座標をメモします。\r
+</p><table class="wikitable" border="1"><tbody><tr><td>項目名</td><td>意味</td><td>備考</td></tr><tr><td>top_offset</td><td>テキストの表示を開始するx座標</td><td> </td></tr><tr><td>left_offset</td><td>テキストの表示を開始するy座標</td><td> </td></tr><tr><td>width</td><td>テキストの表示幅</td><td> </td></tr><tr><td>height</td><td>テキストの表示高さ</td><td> </td></tr></tbody></table><p>offset と width, height ですが、単位は % になりますか??(itozyun)\r
+</p><h3 id="h3-.E3.83.87.E3.83.BC.E3.82.BF.E4.BD.9C.E6.88.90">データ作成</h3><p>これまでのメモからデータを作成します。データはjsonで作成します。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ClientSide">\r
+    <title>ClientSide</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ClientSide</link>\r
+    <dc:identifier>ClientSide</dc:identifier>\r
+\r
+    <dc:date>2011-12-31T22:34:44+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= クライアント側\r
\r
+ぺったんR におけるユーザーの行動はマンガの閲覧 と マンガの編集に大きく分けられる.[[BR]]\r
+マンガの閲覧がすべてのユーザーに可能であるのに対し、マンガの編集は原則ログインしたユーザーが可能となる。[[BR]]\r
+またログイン以降のユーザーの操作は、javascriptを有効にする必要がある.[[BR]]\r
+\r
+== マンガの閲覧\r
+ぺったんR において、ブラウ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88.E5.81.B4">クライアント側</h1><div class="indent">\r
+</div><p>ぺったんR におけるユーザーの行動はマンガの閲覧 と マンガの編集に大きく分けられる.<br />\r
+マンガの閲覧がすべてのユーザーに可能であるのに対し、マンガの編集は原則ログインしたユーザーが可能となる。<br />\r
+またログイン以降のユーザーの操作は、javascriptを有効にする必要がある.<br />\r
+</p><h2 id="h2-.E3.83.9E.E3.83.B3.E3.82.AC.E3.81.AE.E9.96.B2.E8.A6.A7">マンガの閲覧</h2><p>ぺったんR において、ブラウザでのマンガ状コンテンツの閲覧のために、ユーザーは Flash も含めて特別なプラグインを必要としない.\r
+</p><h3 id="h3-html.20.2B.20css2.1">html + css2.1</h3><p>ぺったんと、ぺったんを元にする ぺったんRは、マンガ状のコンテンツの表示に css2.1 でレイアウトする.<br />\r
+以上をサポートするブラウザであれば、ぺったん 及び ぺったんR のコンテンツは閲覧ができる.<br />\r
+</p><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/HtmlAndCss2">HtmlAndCss2</a>\r
+</li></ul><h3 id="h3-javascript">javascript</h3><p>ぺったんR で新たに追加された機能や、ぺったんRサーバへの負荷を抑えるため、javascript に加え css3, SVG といった新しいWeb標準が使われる.<br />\r
+これらをサポートしないブラウザも少なくなく、VML, ActiveX, flash といった非Web標準も利用する.<br />\r
+</p><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendReversibleImage">XbackendReversibleImage</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/XbackendSpeachBalloon">XbackendSpeachBalloon</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/PngFix">PngFix</a>\r
+</li></ul><h2 id="h2-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.81.AE.E7.AE.A1.E7.90.86.E3.83.BB.E7.94.BB.E5.83.8F.E3.81.AE.E7.AE.A1.E7.90.86.E3.83.BB.E3.82.B3.E3.83.9E.E3.81.AE.E7.B7.A8.E9.9B.86.E3.83.BB.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E8.A8.AD.E5.AE.9A">コミックの管理・画像の管理・コマの編集・ユーザー設定</h2><p>これらのログインユーザーのための機能は、javascript が前提となる.<br />\r
+画面は Ajax で用意されるため、サーバ側はユーザのデータの管理とクライアントとの通信に専念できる.<br />\r
+</p><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JavascriptEditor">JavascriptEditor</a>\r
+</li><li><a href="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">JsonApi</a>\r
+</li></ul><h2 id="h2-.E5.AF.BE.E5.BF.9C.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6">対応ブラウザ</h2><h3 id="h3-.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E3.82.B7.E3.82.A7.E3.82.A2">ブラウザシェア</h3><p>IE系では、css3 や SVG をサポートしない IE8 以下がまだまだ多く、IE6 でそのシェアは10%近く.ブラウザシェアは国毎にばらつきがあり、お隣の中国・韓国では IE のシェアが多く、IE6 でも 20~30% になる.<br />\r
+</p><blockquote class="citation"><p>今なおブラウザシェア10.1%もあるIE6とどう向き合えばいいのか<br />\r
+<a href="http://weboook.blog22.fc2.com/blog-entry-248.html" class="external" rel="nofollow">http://weboook.blog22.fc2.com/blog-entry-248.html</a>\r
+</p></blockquote><p>javascript を切っているブラウザは 1% ほどらしい.<br />\r
+</p><blockquote class="citation"><p><a href="http://sourceforge.jp/projects/pettanr/wiki/JavaScript">JavaScript</a>をオフにしているブラウザは1%前後。米ヤフー調べ<br />\r
+<a href="http://www.publickey1.jp/blog/10/javascript1.html" class="external" rel="nofollow">http://www.publickey1.jp/blog/10/javascript1.html</a>\r
+</p></blockquote>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PngFix">\r
+    <title>PngFix</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PngFix</link>\r
+    <dc:identifier>PngFix</dc:identifier>\r
+    <dc:date>2011-12-29T16:31:59+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= Internet Exproler 6 以下での PNG 画像の表示について\r
+ie6 以下のブラウザでは 透過情報付の png 画像を正しく表示することができない.[[BR]]\r
+このため ぺったん では、png 画像を非推奨としてきた.[[BR]]\r
+ぺったんRでも それを踏襲することは変わりない.[[BR]]\r
+しかし、可能な限り作者の意図したとおりに作品を閲覧してもらうため、クロスバッ]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-Internet.20Exproler.206.20.E4.BB.A5.E4.B8.8B.E3.81.A7.E3.81.AE.20PNG.20.E7.94.BB.E5.83.8F.E3.81.AE.E8.A1.A8.E7.A4.BA.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">Internet Exproler 6 以下での PNG 画像の表示について</h1><p>ie6 以下のブラウザでは 透過情報付の png 画像を正しく表示することができない.<br />\r
+このため ぺったん では、png 画像を非推奨としてきた.<br />\r
+ぺったんRでも それを踏襲することは変わりない.<br />\r
+しかし、可能な限り作者の意図したとおりに作品を閲覧してもらうため、クロスバックエンドな png 表示サポートを実施する.<br />\r
+とはいえ、必要なプラグイン等がインストールされていない、機能が無効になっている場合、透過情報は正しく反映されない.<br />\r
+</p><h2 id="h2-.E3.81.AF.E3.81.98.E3.82.81.E3.81.AB">はじめに</h2><h2 id="h2-VML">VML</h2><h2 id="h2-ActiveX.20Alpha.20Image.20Loader">ActiveX Alpha Image Loader</h2><h2 id="h2-Flash">Flash</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters">\r
+    <title>ForWebmasters</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/ForWebmasters</link>\r
+\r
+    <dc:identifier>ForWebmasters</dc:identifier>\r
+    <dc:date>2011-12-28T09:07:11+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 管理者向け\r
+\r
+== フキダシテンプレートのメンテナンス\r
+ * フキダシテンプレートについて AboutSpeachBalloon\r
+ * フキダシテンプレートの追加 HowToMakeSpeachBalloon\r
+\r
+== ライセンスのメンテナンス\r
+ * ライセンスについて]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E7.AE.A1.E7.90.86.E8.80.85.E5.90.91.E3.81.91">管理者向け</h1><h2 id="h2-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E3.81.AE.E3.83.A1.E3.83.B3.E3.83.86.E3.83.8A.E3.83.B3.E3.82.B9">フキダシテンプレートのメンテナンス</h2><ul><li>フキダシテンプレートについて <a href="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">AboutSpeachBalloon</a>\r
+</li><li>フキダシテンプレートの追加 <a href="http://sourceforge.jp/projects/pettanr/wiki/HowToMakeSpeachBalloon">HowToMakeSpeachBalloon</a>\r
+</li></ul><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.AE.E3.83.A1.E3.83.B3.E3.83.86.E3.83.8A.E3.83.B3.E3.82.B9">ライセンスのメンテナンス</h2><ul><li>ライセンスについて</li></ul>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon">\r
+    <title>AboutSpeachBalloon</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutSpeachBalloon</link>\r
+    <dc:identifier>AboutSpeachBalloon</dc:identifier>\r
+    <dc:date>2011-12-28T08:57:17+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= フキダシテンプレート\r
+フキダシとは、線で囲まれた枠の中に文章が書かれたものです。つまり、枠と文章を合わせたものがフキダシとなるわけです。\r
+\r
+ぺったんでフキダシを作るには、枠の素材をコマに貼り、その上にテキストを貼ります。\r
+\r
+しかし、このような作り方は操作に手数がかかり、扱いも煩雑になります。漫画はフキダシで絵をしゃべらすことで初めて成立するものです。漫画ツールとしては当たり前の機能で]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88">フキダシテンプレート</h1><p>フキダシとは、線で囲まれた枠の中に文章が書かれたものです。つまり、枠と文章を合わせたものがフキダシとなるわけです。\r
+</p><p>ぺったんでフキダシを作るには、枠の素材をコマに貼り、その上にテキストを貼ります。\r
+</p><p>しかし、このような作り方は操作に手数がかかり、扱いも煩雑になります。漫画はフキダシで絵をしゃべらすことで初めて成立するものです。漫画ツールとしては当たり前の機能ですから、最小限の操作でフキダシを扱えなければ困ります。そこで、ぺったんはオーソドックスなフキダシをテンプレート化して用意しました。もちろんテンプレートは自由に追加できます。\r
+</p><h1 id="h1-.E3.83.95.E3.82.AD.E3.83.80.E3.82.B7.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E3.81.AE.E6.A7.8B.E6.88.90">フキダシテンプレートの構成</h1><p>フキダシテンプレートは次の三つの階層で構成されています。\r
+</p><ul><li>フキダシテンプレート <a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachBalloon">SpeachBalloon</a>\r
+</li><li>枠テンプレート <a href="http://sourceforge.jp/projects/pettanr/wiki/BalloonTemplate">BalloonTemplate</a>\r
+</li><li>テキストテンプレート <a href="http://sourceforge.jp/projects/pettanr/wiki/SpeachTemplate">SpeachTemplate</a>\r
+</li></ul><p>フキダシは枠とテキストから構成されます。枠テンプレートとテキストテンプレートがそれです。ただし、フキダシには大抵吹き出し口(ぺったんでは尻尾と言います)が付きますから、同じフキダシでもいくつかのバリエーションができます。それをグループ化するのがフキダシテンプレートです。\r
+</p><h2 id="h2-.E6.83.B3.E5.AE.9A.E3.81.99.E3.82.8B.E3.83.90.E3.83.AA.E3.82.A8.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3">想定するバリエーション</h2><p>ぺったんでは次の二つのバリエーションを想定しています。\r
+</p><ul><li>尻尾の向き\r
+</li><li>枠のサイズ\r
+</li></ul><p>尻尾の向きはフキダシの使われ方によって変わりますが、上下左右や角の四隅などに付くことが多いでしょうか。このバリエーションが多いほど融通が利くフキダシになります。\r
+</p><p>ぺったんはコマに貼ったフキダシを自由にサイズ調整できますが、フキダシを極端に拡大あるいは縮小すると、枠の画像によっては線が太ってしまったり、かすれてしまうことがあります。枠の画像には適正なサイズが要求されますので、より良いテンプレートはいくつかのサイズのバリエーションを用意する必要があります。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/JsonApi">\r
+    <title>JsonApi</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/JsonApi</link>\r
+    <dc:identifier>JsonApi</dc:identifier>\r
+    <dc:date>2011-12-26T19:13:24+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= JsonAPI\r
+ぺったんはjsonを利用したAPIに対応している。というよりRailsの仕様に乗っかっている。Rails知ってる人はよまなくていい。\r
+\r
+JsonAPIを使えば、ブラウザから操作せずとも直接データを操作できる。外部のプログラムからぺったんを楽しめる。\r
+\r
+APIにはCRUD、つまり、create,read,update,deleteがあり、それぞれがHTTPのPOST,G]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-JsonAPI">JsonAPI</h1><p>ぺったんはjsonを利用したAPIに対応している。というよりRailsの仕様に乗っかっている。Rails知ってる人はよまなくていい。\r
+</p><p>JsonAPIを使えば、ブラウザから操作せずとも直接データを操作できる。外部のプログラムからぺったんを楽しめる。\r
+</p><p>APIにはCRUD、つまり、create,read,update,deleteがあり、それぞれがHTTPのPOST,GET,PUT,DELETEに対応しているが、普通のブラウザからはGETしかできないので、手っ取り早くJsonAPIで遊ぶならcurlをインストールすると良い。\r
+</p><p>なお、railsではjsonでのやり取りを次のように規定している。\r
+</p><ul><li>URLの末尾を拡張子のように.jsonする\r
+</li><li>リクエストヘッダはContent-Type: application/jsonとする\r
+</li></ul><h2 id="h2-json.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E5.8F.96.E5.BE.97">jsonデータの取得</h2><p>例えば、ID:2のコマPanelのデータをcurlで取得するには次のようにする。\r
+</p><pre>curl http://hostname/panels/2.json -X GET -H &quot;Content-Type: application/json&quot;\r
+</pre><h2 id="h2-json.E3.81.A7.E3.81.AE.E6.8A.95.E7.A8.BF">jsonでの投稿</h2><p>例えば、コミックをcurlで作成するには次のようにする。このとき、作成するためのjsonデータはcomic_create.jsonファイルに用意されているものとする。\r
+</p><pre>curl http://hostname/comics.json  -X POST -H &quot;Content-Type: application/json&quot; -d @comic_create.json\r
+</pre><h2 id="h2-json.E3.81.A7.E3.81.AE.E6.9B.B4.E6.96.B0">jsonでの更新</h2><p>例えば、コミックをcurlで更新するには次のようにする。このとき、更新するためのjsonデータはcomic_update.jsonファイルに用意されているものとする。\r
+</p><pre>curl http://hostname/comics.json  -X PUT -H &quot;Content-Type: application/json&quot; -d @comic_update.json\r
+</pre><h2 id="h2-json.E3.81.A7.E3.81.AE.E5.89.8A.E9.99.A4">jsonでの削除</h2><p>例えば、コミックをcurlで削除するには次のようにする。このとき、削除するためのjsonデータはcomic_delete.jsonファイルに用意されているものとする。\r
+</p><pre>curl http://hostname/comics.json  -X DELETE -H &quot;Content-Type: application/json&quot; -d @comic_delete.json\r
+</pre><p>※普通に削除するだけならDELETEメソッドだけで削除できる。jsonデータcomic_delete.jsonは必要ないはずだが、誰でも削除できるのはおかしな話なので、大抵の場合は認証がいるだろう。認証に必要なauth_tokenを渡すのだが、auth_tokenについては後述する。\r
+</p><h2 id="h2-json.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E4.BD.9C.E3.82.8A.E6.96.B9">jsonデータの作り方</h2><p>jsonデータがどんなものかはググッてもらうとして、rails風なところを…\r
+</p><p>コミック作成に使ったcomic_create.jsonを例とすると次のようになる。\r
+<pre>{\r
+  &quot;comic&quot;: {\r
+    &quot;title&quot;: &quot;コミック作るテスト&quot;,\r
+    &quot;default_width&quot;: 400,\r
+    &quot;default_height&quot;: 200\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre>comicはコミックのmodel、titleなどはmodelのカラム。モデルの下に必要なカラムをキーにして値を記述する。\r
+</p><p>auth_tokenは認証が必要な操作をする場合に記述する。\r
+</p><h3 id="h3-auth_token">auth_token</h3><p>認証が必要な操作をする場合にはauth_tokenを用意する。auth_tokenはログイン後にプロフィールページを開くと書いてある。今のところは。\r
+</p><h3 id="h3-.E3.83.8D.E3.82.B9.E3.83.88.E3.81.97.E3.81.9F.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E4.BD.9C.E3.82.8A.E6.96.B9">ネストしたデータの作り方</h3><p>コマの投稿など、複数のモデルを一つのトランザクションで更新するような操作はjsonデータも複数のモデルについて記述しなければならない。\r
+</p><p>ネストされている子のデータはモデル名+_attributesをキーとしたハッシュ型の値をペアにして記述する。例えば、コマ絵のモデルpanel_picturesはpanel_pictures_attributesとなる。値側は複数のレコードを含むことが想定されるので、これもハッシュ型とする。こちらのキーは一意であれば何でもよく、値がレコードのデータである。文章じゃよくわからんので、コマ絵panel_pictures一つを含んだコマpanelを作成する場合の実際のデータを示す。\r
+</p><pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;border&quot;: 1,\r
+    &quot;comic_id&quot;: 5,\r
+    &quot;resource_picture_id&quot;: 1,\r
+    &quot;width&quot;: 400,\r
+    &quot;height&quot;: 200,\r
+    &quot;panel_pictures_attributes&quot;: {\r
+      &quot;new1&quot;: {\r
+        &quot;width&quot;: 100,\r
+        &quot;height&quot;: 103,\r
+        &quot;resource_picture_id&quot;: 4,\r
+        &quot;top_offset&quot;: 10,\r
+        &quot;left_offset&quot;: 135,\r
+        &quot;zindex&quot;: 1,\r
+        &quot;v&quot;: 1,\r
+        &quot;h&quot;: 0\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre><p>コマ絵が二枚だと、こんな感じ。\r
+<pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;border&quot;: 1,\r
+    &quot;comic_id&quot;: 5,\r
+    &quot;resource_picture_id&quot;: 1,\r
+    &quot;width&quot;: 400,\r
+    &quot;height&quot;: 200,\r
+    &quot;panel_pictures_attributes&quot;: {\r
+      &quot;new1&quot;: {\r
+        &quot;width&quot;: 100,\r
+        &quot;height&quot;: 103,\r
+        &quot;resource_picture_id&quot;: 4,\r
+        &quot;top_offset&quot;: 10,\r
+        &quot;left_offset&quot;: 135,\r
+        &quot;zindex&quot;: 1,\r
+        &quot;v&quot;: 1,\r
+        &quot;h&quot;: 0\r
+      },\r
+      &quot;new2&quot;: {\r
+        &quot;width&quot;: 50,\r
+        &quot;height&quot;: 75,\r
+        &quot;resource_picture_id&quot;: 1,\r
+        &quot;top_offset&quot;: 30,\r
+        &quot;left_offset&quot;: 14,\r
+        &quot;zindex&quot;: 2,\r
+        &quot;v&quot;: 0,\r
+        &quot;h&quot;: 0\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre></p><p>キーの&quot;new1&quot;と&quot;new2&quot;は適当な命名なんであるが、こんな要領で列挙していけばまとめて作成できる。\r
+</p><p>では、次にコマ絵だけでなくフキダシとセリフも含むデータを作成してみるが、その前に各モデルの関係を整理しておく。\r
+<pre>panel\r
+  panel_pictures\r
+  balloons\r
+    speaches\r
+</pre>だったね。\r
+<pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;border&quot;: 1,\r
+    &quot;comic_id&quot;: 5,\r
+    &quot;resource_picture_id&quot;: 1,\r
+    &quot;width&quot;: 400,\r
+    &quot;height&quot;: 200,\r
+    &quot;panel_pictures_attributes&quot;: {\r
+      &quot;new1&quot;: {\r
+        &quot;width&quot;: 100,\r
+        &quot;height&quot;: 103,\r
+        &quot;resource_picture_id&quot;: 4,\r
+        &quot;top_offset&quot;: 10,\r
+        &quot;left_offset&quot;: 135,\r
+        &quot;zindex&quot;: 3,\r
+        &quot;v&quot;: 1,\r
+        &quot;h&quot;: 0\r
+      }\r
+    },\r
+    &quot;balloons_attributes&quot;: {\r
+      &quot;newf1&quot;: {\r
+        &quot;balloon_template_id&quot;: 1,\r
+        &quot;resource_picture_id&quot;: 2,\r
+        &quot;tail&quot;: 1,\r
+        &quot;border&quot;: 1,\r
+        &quot;zindex&quot;: 5,\r
+        &quot;width&quot;: 81,\r
+        &quot;height&quot;: 63,\r
+        &quot;top_offset&quot;: 120,\r
+        &quot;left_offset&quot;: 35,\r
+        &quot;speaches_attributes&quot;: {\r
+          &quot;newf1s1&quot;: {\r
+            &quot;content&quot;: &quot;test&quot;,\r
+            &quot;width&quot;: 61,\r
+            &quot;height&quot;: 43,\r
+            &quot;top_offset&quot;: 10,\r
+            &quot;left_offset&quot;: 10\r
+          }\r
+        }\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre></p><h3 id="h3-.E3.83.8D.E3.82.B9.E3.83.88.E3.81.97.E3.81.9F.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E6.9B.B4.E6.96.B0">ネストしたデータの更新</h3><p>あるコマのセリフを変更したいとする。セリフはspeachなのでspeaches経由で更新したいところだが、ぺったんの仕様はコマ全体で更新することになっているので、speachesのAPIは用意されていない。コマの変更はpanel経由で行う。このとき、jsonデータでは、どのように変更対象のセリフを指示するのだろうか。\r
+</p><p>結論としてはidをデータに含めて指定する。例えば、セリフのidが3のときは次のようになる。\r
+</p><pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;balloons_attributes&quot;: {\r
+      &quot;b2&quot;: {\r
+        &quot;id&quot;: 2,\r
+        &quot;speaches_attributes&quot;: {\r
+          &quot;s3&quot;: {\r
+            &quot;id&quot;: 3,\r
+            &quot;content&quot;: &quot;modify&quot;\r
+          }\r
+        }\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre><p>idが指定されていないと新規追加となってしまう。\r
+</p><h3 id="h3-.E3.83.8D.E3.82.B9.E3.83.88.E3.81.97.E3.81.9F.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E5.89.8A.E9.99.A4">ネストしたデータの削除</h3><p>削除する場合、更新のときと同じようにidを指定しつつ_destroyにフラグを立てる。例えば、idが2のフキダシをコマから削除する場合、次のようにする。\r
+</p><pre>{\r
+  &quot;panel&quot;: {\r
+    &quot;balloons_attributes&quot;: {\r
+      &quot;b2&quot;: {\r
+        &quot;id&quot;: 2,\r
+        &quot;_destroy&quot;: 1\r
+      }\r
+    }\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre><h2 id="h2-.E7.94.BB.E5.83.8F.E3.81.AE.E6.8A.95.E7.A8.BF">画像の投稿</h2><p>auth_tokenを含みながらのファイル送信がよくわからん。いろんなパターンで試してみたが素直にはいかなかった。苦肉の策が画像データを一度Base64でエンコードしたものをテキストとして送信すること。次の例は当然エンコードテキストは省略されている。\r
+<pre>{\r
+  &quot;original_picture&quot;: {\r
+    &quot;file&quot;: \r
+&quot;iVBORw0KGgoAAAANSUhEUgAAAWIAAAF7CAYAAADohYEpAAAcW0lEQVR4nO3d\r
+  :\r
+  :\r
+ghgAlP0/Bxl7hN5Zu0EAAAAASUVORK5CYII=\r
+&quot;\r
+  },\r
+  &quot;auth_token&quot;: &quot;XXXXXXXXXXXXXXXX&quot;\r
+}\r
+</pre></p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/AboutLisence">\r
+    <title>AboutLisence</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/AboutLisence</link>\r
+    <dc:identifier>AboutLisence</dc:identifier>\r
+\r
+    <dc:date>2011-12-25T12:47:25+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= ライセンスについて\r
+※ここはぺったんに投稿された画像の著作権に関する話題です。\r
+\r
+== 選べるライセンス\r
+ぺったんには、あらかじめ一般的なライセンスを用意してあります。パブリックドメインやクリエイティブコモンズなどです。\r
+\r
+絵師は提供する素材にこれらのライセンスを付与して明記することができます。\r
+\r
+== 用意されたライセンス\r
+ * Public Domain\r
+   * ライ]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">ライセンスについて</h1><p>※ここはぺったんに投稿された画像の著作権に関する話題です。\r
+</p><h2 id="h2-.E9.81.B8.E3.81.B9.E3.82.8B.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">選べるライセンス</h2><p>ぺったんには、あらかじめ一般的なライセンスを用意してあります。パブリックドメインやクリエイティブコモンズなどです。\r
+</p><p>絵師は提供する素材にこれらのライセンスを付与して明記することができます。\r
+</p><h2 id="h2-.E7.94.A8.E6.84.8F.E3.81.95.E3.82.8C.E3.81.9F.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">用意されたライセンス</h2><ul><li>Public Domain\r
+<ul><li>ライセンス表示 <a href="http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3" class="external" rel="nofollow">http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3</a>\r
+</li></ul></li><li>Creative Commons 3.0(by)\r
+<ul><li>ライセンス表示 <a href="http://creativecommons.org/licenses/by/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by/3.0/legalcode</a>\r
+</li></ul></li><li>Creative Commons 3.0(by_sa)\r
+<ul><li>ライセンス表示 <a href="http://creativecommons.org/licenses/by-sa/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a>\r
+</li></ul></li><li>Creative Commons 3.0(by_nd)\r
+<ul><li>ライセンス表示 <a href="http://creativecommons.org/licenses/by-nd/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nd/3.0/legalcode</a>\r
+</li></ul></li><li>Creative Commons 3.0(by_nc)\r
+<ul><li>ライセンス表示 <a href="http://creativecommons.org/licenses/by-nc/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nc/3.0/legalcode</a>\r
+</li></ul></li><li>Creative Commons 3.0(by_nc_sa)\r
+<ul><li>ライセンス表示 <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode</a>\r
+</li></ul></li><li>Creative Commons 3.0(by_nc_nd)\r
+<ul><li>ライセンス表示 <a href="http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode" class="external" rel="nofollow">http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode</a>\r
+</li></ul></li><li>Unknown\r
+<ul><li>著作権がはっきりしないもの\r
+</li></ul></li></ul><h2 id="h2-.E5.90.88.E3.81.A3.E3.81.9F.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.8C.E3.81.AA.E3.81.84">合ったライセンスがない</h2><p>自前の作品に特殊なライセンスを付与したいと考えるケースもあるでしょう。そういった場合、絵師がライセンスを作成することができます。このような特殊なライセンスをぺったんではオリジナルライセンスと言います。それに対して、ぺったんにあらかじめ用意されたライセンスをコモンライセンスと言います。\r
+</p><p>特に区別したい場合は、コモンライセンス・オリジナルライセンスと言いますが、ただライセンスと言った場合は、両者を合わせたものとなります。\r
+</p><h2 id="h2-.E3.82.B3.E3.83.A2.E3.83.B3.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">コモンライセンス</h2><p>コモンライセンスをメンテナンスできるのは管理者だけです。\r
+</p><h2 id="h2-.E3.82.AA.E3.83.AA.E3.82.B8.E3.83.8A.E3.83.AB.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">オリジナルライセンス</h2><p>絵師はオリジナルライセンスを作成できます。また、自分が作成したオリジナルライセンスを更新できます。\r
+</p><h3 id="h3-.E3.82.B3.E3.83.A2.E3.83.B3.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.B8.E3.81.AE.E6.98.87.E6.A0.BC">コモンライセンスへの昇格</h3><p>何かと信頼の薄いオリジナルライセンスですが、ある程度の評価が得られ、ぺったん管理者が有用性を認めればコモンライセンスへ昇格することもあります。\r
+</p><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.8C.E5.89.8A.E9.99.A4.E3.81.95.E3.82.8C.E3.82.8B.E3.81.A8">ライセンスが削除されると</h2><p>ライセンスを削除してしまうと、そのライセンスを適用した素材はすべてライセンスなしになってしまいます。それを避けるために一枚でも適用されているライセンスは削除できません。\r
+</p><h2 id="h2-.E3.82.AA.E3.83.AA.E3.82.B8.E3.83.8A.E3.83.AB.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9.E3.81.A7.E6.98.8E.E7.A4.BA.E3.81.A7.E3.81.8D.E3.82.8B.E3.81.93.E3.81.A8">オリジナルライセンスで明示できること</h2><ul><li>cc_by\r
+<ul><li>作者の表示\r
+</li></ul></li><li>cc_sa\r
+</li><li>cc_nd\r
+</li><li>cc_nc\r
+</li><li>no_resize\r
+<ul><li>サイズ変更の禁止\r
+</li><li>値が 0のとき無効 1のとき有効\r
+</li><li>素材をコマ上でリサイズしてはならない\r
+</li></ul></li><li>no_flip\r
+<ul><li>反転の禁止\r
+</li><li>値が 0のとき無効 1のとき有効\r
+</li><li>素材をコマ上で垂直反転水平反転してはならない\r
+</li></ul></li><li>keep_aspect_ratio\r
+<ul><li>縦横比変更の禁止\r
+</li><li>値が 0のとき無効 1のとき有効\r
+</li><li>素材をコマ上でリサイズしてもよいが縦横比を変えてはならない\r
+</li></ul></li></ul><p>クリエイティブコモンズの属性はすべて用意しましたが、ぺったん上ではあまり効果を発揮できません。というのも、ぺったんには画像を改変する機能が備わっていませんから、改変しようがないし、投稿された素材が改変されたものであるかを判別する手立てがないのです。非営利についても似たようなもので、web上の配布に営利はありません。もちろんアフィリエイトも禁止されているわけではありません。\r
+</p><p>作者の表示については必ず同一ページ内に表示します。ただし、ぺったんRはオープンソースライセンスですから、ソースコードが改変された場合は、その限りではありません。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">\r
+    <title>CommonLisencesController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController</link>\r
+    <dc:identifier>CommonLisencesController</dc:identifier>\r
+    <dc:date>2011-12-24T11:03:09+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= CommonLisencesController \r
+管理者以外に用はないから、すべての機能で管理者だけが認証をパスする。\r
+]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-CommonLisencesController"><a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">CommonLisencesController</a></h1><p>管理者以外に用はないから、すべての機能で管理者だけが認証をパスする。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/LisencesController">\r
+    <title>LisencesController</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/LisencesController</link>\r
+\r
+    <dc:identifier>LisencesController</dc:identifier>\r
+    <dc:date>2011-12-24T10:46:17+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= LisencesController \r
+コモンライセンスとオリジナルライセンスを統合するためだけにある。閲覧のみで操作はできない。変更作業はすべてCommonLisencesControllerとOriginalLisencesController側にある。\r
+\r
+常識で考えれば、こんな冗長な設計はないんだけど、絵師が作家機能を切り捨てた「絵師サーバ」を独自に稼働させる予定なので切り離してお]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-LisencesController"><a href="http://sourceforge.jp/projects/pettanr/wiki/LisencesController">LisencesController</a></h1><p>コモンライセンスとオリジナルライセンスを統合するためだけにある。閲覧のみで操作はできない。変更作業はすべて<a href="http://sourceforge.jp/projects/pettanr/wiki/CommonLisencesController">CommonLisencesController</a>と<a href="http://sourceforge.jp/projects/pettanr/wiki/OriginalLisencesController">OriginalLisencesController</a>側にある。\r
+</p><p>常識で考えれば、こんな冗長な設計はないんだけど、絵師が作家機能を切り捨てた「絵師サーバ」を独自に稼働させる予定なので切り離しておいた。\r
+</p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan">\r
+    <title>WhatsPettan</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/WhatsPettan</link>\r
+    <dc:identifier>WhatsPettan</dc:identifier>\r
+    <dc:date>2011-12-24T09:18:24+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= ぺったんとは\r
+以下からは一般向け文書。ヘルプとかマニュアルです。\r
+== 絵師\r
+ * GuidanceForArtist\r
+== 作家\r
+ * GuidanceForAuthor\r
+== ライセンス\r
+ * AboutLisence\r
+]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E3.81.BA.E3.81.A3.E3.81.9F.E3.82.93.E3.81.A8.E3.81.AF">ぺったんとは</h1><p>以下からは一般向け文書。ヘルプとかマニュアルです。\r
+</p><h2 id="h2-.E7.B5.B5.E5.B8.AB">絵師</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist">GuidanceForArtist</a>\r
+</li></ul><h2 id="h2-.E4.BD.9C.E5.AE.B6">作家</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor">GuidanceForAuthor</a>\r
+</li></ul><h2 id="h2-.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">ライセンス</h2><ul><li><a href="http://sourceforge.jp/projects/pettanr/wiki/AboutLisence">AboutLisence</a>\r
+</li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist">\r
+    <title>GuidanceForArtist</title>\r
+\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist</link>\r
+    <dc:identifier>GuidanceForArtist</dc:identifier>\r
+    <dc:date>2011-12-23T17:08:22+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 絵師さん向け文書?\r
+== 絵師の役割\r
+== 絵師になるには\r
+== 絵のライセンス\r
+\r
+== 絵の活用\r
+ぺったんは投稿された画像を次のように扱います\r
+ * 画像をサーバ内のディスクスペースに保存します\r
+   * この画像を原画と言います\r
+ * 原画を縮小・反転などの加工を施したものをサーバ内のディスクスペースに保存します\r
+   * これらの画像を素材と言います\r
+   * 原画]]>\r
+    </description>\r
+    <content:encoded>\r
+\r
+      <![CDATA[<h1 id="h1-.E7.B5.B5.E5.B8.AB.E3.81.95.E3.82.93.E5.90.91.E3.81.91.E6.96.87.E6.9B.B8.EF.BC.9F">絵師さん向け文書?</h1><h2 id="h2-.E7.B5.B5.E5.B8.AB.E3.81.AE.E5.BD.B9.E5.89.B2">絵師の役割</h2><h2 id="h2-.E7.B5.B5.E5.B8.AB.E3.81.AB.E3.81.AA.E3.82.8B.E3.81.AB.E3.81.AF">絵師になるには</h2><h2 id="h2-.E7.B5.B5.E3.81.AE.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">絵のライセンス</h2><h2 id="h2-.E7.B5.B5.E3.81.AE.E6.B4.BB.E7.94.A8">絵の活用</h2><p>ぺったんは投稿された画像を次のように扱います\r
+</p><ul><li>画像をサーバ内のディスクスペースに保存します\r
+<ul><li>この画像を原画と言います\r
+</li></ul></li><li>原画を縮小・反転などの加工を施したものをサーバ内のディスクスペースに保存します\r
+<ul><li>これらの画像を素材と言います\r
+</li><li>原画が反転禁止のライセンスを採用しているときは反転画像を保存しません\r
+</li></ul></li><li>素材は作家がコマ上に添付されます\r
+<ul><li>利用するコマエディタの\r
+</li></ul></li></ul><p>コマ上での扱い\r
+</p><ul><li><ul><li>原画が拡縮禁止のライセンスを採用しているときは拡縮画像を保存しません\r
+<ul><li>ただし、サムネイル画像のサイズに収まらない画像については縮小して表示します\r
+</li></ul></li></ul></li></ul><p>素材→コマ絵\r
+</p><h2 id="h2-.E9.85.8D.E5.B8.83.E3.81.AE.E5.81.9C.E6.AD.A2">配布の停止</h2><h2 id="h2-.E7.B4.A0.E6.9D.90.E3.82.B5.E3.83.BC.E3.83.90">素材サーバ</h2>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor">\r
+    <title>GuidanceForAuthor</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/GuidanceForAuthor</link>\r
+    <dc:identifier>GuidanceForAuthor</dc:identifier>\r
+\r
+    <dc:date>2011-12-23T16:48:50+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 作家さん向け文書?\r
+== 作家とは\r
+ぺったんサーバが提供する素材とフキダシを利用して漫画状のコマを作ることで表現する人を作家と言います。\r
+\r
+作家となるには、サイトへの登録が必要です。\r
+\r
+== 作家ができる表現\r
+ * コマを作る\r
+ * コミックを作る\r
+ * コミックの配布範囲を決める\r
+=== コマを作る\r
+=== コミックを作る\r
+=== コミックの配布範囲を決める\r
+\r
+=]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E4.BD.9C.E5.AE.B6.E3.81.95.E3.82.93.E5.90.91.E3.81.91.E6.96.87.E6.9B.B8.EF.BC.9F">作家さん向け文書?</h1><h2 id="h2-.E4.BD.9C.E5.AE.B6.E3.81.A8.E3.81.AF">作家とは</h2><p>ぺったんサーバが提供する素材とフキダシを利用して漫画状のコマを作ることで表現する人を作家と言います。\r
+</p><p>作家となるには、サイトへの登録が必要です。\r
+</p><h2 id="h2-.E4.BD.9C.E5.AE.B6.E3.81.8C.E3.81.A7.E3.81.8D.E3.82.8B.E8.A1.A8.E7.8F.BE">作家ができる表現</h2><ul><li>コマを作る\r
+</li><li>コミックを作る\r
+</li><li>コミックの配布範囲を決める\r
+</li></ul><h3 id="h3-.E3.82.B3.E3.83.9E.E3.82.92.E4.BD.9C.E3.82.8B">コマを作る</h3><h3 id="h3-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.82.92.E4.BD.9C.E3.82.8B">コミックを作る</h3><h3 id="h3-.E3.82.B3.E3.83.9F.E3.83.83.E3.82.AF.E3.81.AE.E9.85.8D.E5.B8.83.E7.AF.84.E5.9B.B2.E3.82.92.E6.B1.BA.E3.82.81.E3.82.8B">コミックの配布範囲を決める</h3><h2 id="h2-.E7.B4.A0.E6.9D.90.E3.82.92.E7.94.A8.E6.84.8F.E3.81.99.E3.82.8B">素材を用意する</h2><h3 id="h3-.E7.B4.A0.E6.9D.90.E3.81.AE.E5.89.8D.E3.81.AB.E7.B5.B5.E5.B8.AB.E7.99.BB.E9.8C.B2">素材の前に絵師登録</h3><p>作家は素材を投稿することができません。素材は絵師が投稿することになっています。なぜなら、ぺったんはあなたの素材を容易に他のぺったんサイトに提供できるようになっているからです。少々面倒な構成にはなっていますが、心配には及びません。絵師の登録はワンクリック程度で完了します。\r
+</p><p>登録に必要な情報は下記の項目です。\r
+</p><ul><li>ペンネーム デフォルトで作家名が設定されます\r
+</li><li>デフォルトのライセンス\r
+</li></ul><h3 id="h3-.E7.B4.A0.E6.9D.90.E3.81.AE.E6.8A.95.E7.A8.BF">素材の投稿</h3><p>絵師登録が完了すると、素材エクスプローラーに投稿フォームが現れます。\r
+</p><p>素材を投稿するにあたっての注意事項は<a href="http://sourceforge.jp/projects/pettanr/wiki/GuidanceForArtist">GuidanceForArtist</a>をご覧下さい。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements">\r
+    <title>TranslationComicElements</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/TranslationComicElements</link>\r
+    <dc:identifier>TranslationComicElements</dc:identifier>\r
+    <dc:date>2011-12-23T11:41:06+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= 資料・マンガ要素の日英対訳\r
+ * コーディング中の命名や、国際化対応のための資料にする.\r
+\r
+== マンガの部品名の対訳\r
+ * コママンガ(jp) - comic strip(en)\r
+ * コマ(jp) - panel(en)\r
+ * 枠線(jp) -(en)\r
+ * 吹き出し(jp) - speach balloon, speach bubble(en)\r
+ * ]]>\r
+\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-.E8.B3.87.E6.96.99.E3.83.BB.E3.83.9E.E3.83.B3.E3.82.AC.E8.A6.81.E7.B4.A0.E3.81.AE.E6.97.A5.E8.8B.B1.E5.AF.BE.E8.A8.B3">資料・マンガ要素の日英対訳</h1><ul><li>コーディング中の命名や、国際化対応のための資料にする.\r
+</li></ul><h2 id="h2-.E3.83.9E.E3.83.B3.E3.82.AC.E3.81.AE.E9.83.A8.E5.93.81.E5.90.8D.E3.81.AE.E5.AF.BE.E8.A8.B3">マンガの部品名の対訳</h2><ul><li>コママンガ(jp) - comic strip(en)\r
+</li><li>コマ(jp) - panel(en)\r
+</li><li>枠線(jp) -(en)\r
+</li><li>吹き出し(jp) - speach balloon, speach bubble(en)\r
+</li><li></li></ul>]]>\r
+    </content:encoded>\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/PictureIo">\r
+    <title>PictureIo</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/PictureIo</link>\r
+\r
+    <dc:identifier>PictureIo</dc:identifier>\r
+    <dc:date>2011-12-23T11:28:56+09:00</dc:date>\r
+        <description>\r
+      <![CDATA[= PictureIO\r
+== 画像はPictureIOが出し入れする\r
+投稿された素材はデータベースではなく、ファイルに保管される。保管先は大抵の場合ローカルマシンになるが、herokuのようにローカルファイルを触れないホストもあるので、ファイルの入出力は柔軟に切り替わるようにPictureIOとして分離した。\r
+\r
+差し当たってローカルファイル用のLocalPictureIOとAmazonAW]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-PictureIO">PictureIO</h1><h2 id="h2-.E7.94.BB.E5.83.8F.E3.81.AFPictureIO.E3.81.8C.E5.87.BA.E3.81.97.E5.85.A5.E3.82.8C.E3.81.99.E3.82.8B">画像はPictureIOが出し入れする</h2><p>投稿された素材はデータベースではなく、ファイルに保管される。保管先は大抵の場合ローカルマシンになるが、herokuのようにローカルファイルを触れないホストもあるので、ファイルの入出力は柔軟に切り替わるようにPictureIOとして分離した。\r
+</p><p>差し当たってローカルファイル用の<a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>IOとAmazonAWS用の<a href="http://sourceforge.jp/projects/pettanr/wiki/S3Picture">S3Picture</a>IOの、二種類を用意した。\r
+</p><p>デフォルトでは、開発・テスト環境では<a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>IOを使い、本番では<a href="http://sourceforge.jp/projects/pettanr/wiki/S3Picture">S3Picture</a>IOを使っている。当然ながら各自の環境に合わせて設定を変える必要がある。設定は下記のファイルを書き換える。\r
+<pre>config/environments/development.rb \r
+config/environments/production.rb\r
+</pre></p><h2 id="h2-LocalPictureIO"><a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>IO</h2><p><a href="http://sourceforge.jp/projects/pettanr/wiki/LocalPicture">LocalPicture</a>IOを使う場合は、config/environments/development.rb で、以下のように書く。\r
+<pre>require 'local_picture'\r
+PictureIO.setup do |config|\r
+  config.original_picture_io = PictureIO::LocalPicture.new '/pettanr/original/'\r
+  config.resource_picture_io = PictureIO::LocalPicture.new  '/pettanr/resource/'\r
+end\r
+</pre></p><p>これで原画は/pettanr/original/に保管され、素材は/pettanr/resource/に保管される。\r
+</p><p>※パス処理がショボいのでスラッシュの有無に大きな違いがある。あと、ディレクトリ掘ってないとコケる。\r
+</p><h2 id="h2-S3PictureIO"><a href="http://sourceforge.jp/projects/pettanr/wiki/S3Picture">S3Picture</a>IO</h2><p>AmazonAWSを使うなら、当然S3が使えるよう、準備しておく。Amazonからキーがもらえるので設定する。\r
+</p><p>まず、config/aws.yaml.orgをコピーする。\r
+<pre>cp config/aws.yaml.org config/aws.yaml\r
+</pre>コピーしたaws.yamlを編集。\r
+<pre>access_key_id: XXXXXXXXXXXXXXXXXXXX\r
+secret_access_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r
+</pre></p><p><a href="http://sourceforge.jp/projects/pettanr/wiki/S3Picture">S3Picture</a>IOを使う場合は、config/environments/production.rbで、以下のように書く。\r
+<pre>require 'aws/s3'\r
+require 'yaml'\r
+\r
+y = YAML.load(open(Rails.root + 'config/aws.yaml').read)\r
+AWS::S3::Base.establish_connection!(\r
+  :access_key_id =&gt; y[&quot;access_key_id&quot;], \r
+  :secret_access_key =&gt; y[&quot;secret_access_key&quot;]\r
+)\r
+require 's3_picture'\r
+PictureIO.setup do |config|\r
+  config.original_picture_io = PictureIO::S3Picture.new 'pettanr-original'\r
+  config.resource_picture_io = PictureIO::S3Picture.new 'pettanr-stable'\r
+end\r
+</pre>これで原画はpettanr-original/に保管され、素材はpettanr-stable/に保管される。\r
+</p>]]>\r
+    </content:encoded>\r
+\r
+      </item>\r
+        <item rdf:about="http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick">\r
+    <title>RmagickAndDmagick</title>\r
+    <link>http://sourceforge.jp/projects/pettanr/wiki/RmagickAndDmagick</link>\r
+    <dc:identifier>RmagickAndDmagick</dc:identifier>\r
+    <dc:date>2011-12-23T10:53:11+09:00</dc:date>\r
+        <description>\r
+\r
+      <![CDATA[= RMagickとDMagick\r
+== 画像処理はRMagick\r
+絵師から預かった素材はRMagickで処理される。主にサムネイル画像の生成などで。\r
+\r
+== RMagickは案外地獄\r
+Windows環境では。\r
+\r
+コンパイラを持たずバイナリインストールしていると、大抵RMagickのインストールでコケる。\r
+\r
+= 仕方ないからDMagick\r
+RMagickなしでは丸で動かないので]]>\r
+    </description>\r
+    <content:encoded>\r
+      <![CDATA[<h1 id="h1-RMagick.E3.81.A8DMagick">RMagickとDMagick</h1><h2 id="h2-.E7.94.BB.E5.83.8F.E5.87.A6.E7.90.86.E3.81.AFRMagick">画像処理はRMagick</h2><p>絵師から預かった素材はRMagickで処理される。主にサムネイル画像の生成などで。\r
+</p><h2 id="h2-RMagick.E3.81.AF.E6.A1.88.E5.A4.96.E5.9C.B0.E7.8D.84">RMagickは案外地獄</h2><p>Windows環境では。\r
+</p><p>コンパイラを持たずバイナリインストールしていると、大抵RMagickのインストールでコケる。\r
+</p><h1 id="h1-.E4.BB.95.E6.96.B9.E3.81.AA.E3.81.84.E3.81.8B.E3.82.89DMagick">仕方ないからDMagick</h1><p>RMagickなしでは丸で動かないので、あたかもRMagickがあるかのように振る舞う空箱を用意した。それがDMagick。\r
+</p><p>デフォルトでは開発環境でDMagickを使うようにしてあるので、RMagickが使えるなら、config/environments/development.rbを書き換える。\r
+</p>]]>\r
+    </content:encoded>\r
+      </item>\r
+    </rdf:RDF>\r
diff --git a/0.4.x/work.css b/0.4.x/work.css
new file mode 100644 (file)
index 0000000..887adb7
--- /dev/null
@@ -0,0 +1,1016 @@
+/*\r
+ * pettanR\r
+ * \r
+ *   work.css\r
+ * \r
+ *   version 0.4.0\r
+ *\r
+ */\r
+       \r
+       /*  View Container\r
+       --------------------------------------------------------------------------------------*/        \r
+               #editor {\r
+                       display:                        none;\r
+                       position:                       absolute;\r
+                       left:                           0;\r
+                       top:                            0;\r
+                       width:                          100%;\r
+                       height:                         100%;\r
+               }\r
+               .console-page {\r
+                       display:                        none;\r
+               }\r
+       \r
+       /*  Overlay\r
+       --------------------------------------------------------------------------------------*/\r
+               #overlay-container,\r
+               #overlay-shadow {\r
+                       position:                       absolute;\r
+                       left:                           0;\r
+                       top:                            0;\r
+                       width:                          100%;\r
+                       height:                         100%;\r
+                       overflow:                       hidden;\r
+               }\r
+                       #overlay-shadow {\r
+                               background-color:       #000;\r
+                               opacity:                        0.5;\r
+                               -moz-opacity:           0.5;\r
+                               filter:                         alpha(opacity=50);\r
+                               -ms-filter:                     alpha(opacity=50);\r
+                       }\r
+                       .h2c-ActiveX-disabled #overlay-shadow {\r
+                               \r
+                       }\r
+                       \r
+                       #overlay-close-button {\r
+                               border:                                 2px solid #f00;\r
+                               color:                                  #f00;\r
+                               font-weight:                    bold;\r
+                               font-size:                              16px;\r
+                               line-height:                    16px;\r
+                               text-align:                             center;\r
+                               cursor:                                 pointer;\r
+                               overflow:                               hidden;\r
+                               width:                                  20px;\r
+                               height:                                 20px;\r
+                               padding:                                2px;\r
+                               position:                               absolute;\r
+                               top:                                    9px;\r
+                               right:                                  9px;\r
+                               border-radius:                  5px;\r
+                               -o-border-radius:               5px;\r
+                               -ms-border-radius:              5px;\r
+                               -moz-border-radius:             5px;\r
+                               -webkit-border-radius:  5px;\r
+                       }\r
+\r
+/*--------------------------------------------------------------------------------------\r
+ * \r
+ *  home\r
+ *  \r
+ -------------------------------------------------------------------------------------*/\r
+       #home {\r
+\r
+       }\r
+\r
+\r
+/*--------------------------------------------------------------------------------------\r
+ * \r
+ *  Editor\r
+ *  \r
+ -------------------------------------------------------------------------------------*/\r
+               #editor {\r
+                       overflow:                       hidden;\r
+                       background-color:       #f5f5f5;\r
+               }\r
+       \r
+               /*  Text Editor\r
+               --------------------------------------------------------------------------------------*/                \r
+                       #speach-editor-wrapper {\r
+                               position:               absolute;\r
+                       }\r
+                       #speach-editor-wrapper form {\r
+                               width:                  100%;\r
+                               height:                 100%;\r
+                       }\r
+                       #speach-editor {\r
+                               width:                  100%;\r
+                               height:                 100%;\r
+                               border:                 1px outset #ccc;\r
+                               outline:                1px;\r
+                       }\r
+                               #speach-edit-complete-button {\r
+                                       margin:         10px auto 0;\r
+                               }\r
+       \r
+               /*  Image Group\r
+               --------------------------------------------------------------------------------------*/\r
+                       #image-gruop-wrapper {\r
+                               position:                       absolute;\r
+                               top:                            0;\r
+                               left:                           0;\r
+                       }\r
+                               #image-icon-container {\r
+                                       position:                       absolute;\r
+                                       top:                            0;\r
+                                       left:                           0;\r
+                                       height:                         200px;\r
+                                       width:                          100%;\r
+                                       background-color:       #fff;\r
+                                       border:                         #fff solid;\r
+                                       border-width:           0;                              \r
+                               }\r
+                               #image-gruop-button {\r
+                                       width:                  200px;\r
+                                       position:               absolute;\r
+                                       left:                   0;\r
+                                       bottom:                 -40px;\r
+                                       _bottom:                0;\r
+                               }\r
+                               .image-gruop-item {\r
+                                       width:                  150px;\r
+                                       height:                 200px;\r
+                                       position:               absolute;\r
+                                       top:                    0;\r
+                                       left:                   0;\r
+                                       text-align:             center;\r
+                               }\r
+                               .image-gruop-item .reversible-image-container {\r
+                                       width:                  150px;\r
+                                       height:                 200px;\r
+                               }\r
+                               .image-gruop-item .reversible-image-container img {\r
+                                       width:                  100%;\r
+                                       height:                 100%;\r
+                               }\r
+                               .image-gruop-item-title {\r
+                                       position:               absolute;\r
+                                       bottom:                 0;\r
+                                       left:                   0;\r
+                                       text-align:             center;\r
+                                       width:                  100%;\r
+                                       height:                 30px;\r
+                               }\r
+                               \r
+       \r
+       /*  MenuBar\r
+       --------------------------------------------------------------------------------------*/\r
+               #menu-bar {\r
+                       position:                       absolute;\r
+                       top:                            0;\r
+                       left:                           0;\r
+                       width:                          100%;\r
+                       height:                         30px;\r
+                       background-color:       #fff;\r
+                       border-bottom:          1px solid #666;\r
+                       box-shadow:                     0 4px 9px #333;\r
+                       -moz-box-shadow:        0 4px 9px #333;\r
+                       -webkit-box-shadow:     0 4px 9px #333;\r
+                       filter:progid:DXImageTransform.Microsoft.Shadow(color=#333333,direction=180,strength=9);\r
+               }\r
+                       .menu-bar-item,\r
+                       .menu-bar-item-focus {\r
+                               position:               absolute;\r
+                               top:                    0;\r
+                               width:                  80px;\r
+                               color:                  #666;\r
+                       }\r
+                               .menu-bar-item div,\r
+                               .menu-bar-item-focus div {\r
+                                       cursor:                 pointer;\r
+                                       overflow:               hidden;\r
+                                       height:                 30px;\r
+                                       line-height:    30px;                           \r
+                                       padding-left:   0.6em;\r
+                                       font-size:              14px;\r
+                               }\r
+                               .menu-bar-item-focus div {\r
+                                       background-color:       #66f;\r
+                                       color:                          #eee;\r
+                               }\r
+                               .menu-bar-item ul {\r
+                                       display:                        none;\r
+                               }\r
+                               .menu-bar-item-focus ul {\r
+                                       position:                       absolute;\r
+                                       list-style:                     none;\r
+                                       top:                            30px;\r
+                                       width:                          200px;\r
+                                       margin:                         0;\r
+                                       padding:                        0;\r
+                                       background-color:       #fff;\r
+                                       color:                          #666;\r
+                                       border:                         1px solid #ccc;\r
+                                       box-shadow:                     1px 4px 9px #333;\r
+                                       -moz-box-shadow:        1px 4px 9px #333;\r
+                                       -webkit-box-shadow:     1px 4px 9px #333;\r
+                                       filter:                         progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=120,strength=9);\r
+                               }\r
+                                       .menu-bar-item-focus li {\r
+                                               display:                block;\r
+                                               cursor:                 pointer;\r
+                                               width:                  200px;\r
+                                               height:                 30px;\r
+                                               line-height:    30px;\r
+                                       }\r
+                                       .menu-bar-item-focus li.disabled {\r
+                                               cursor:                 default;\r
+                                       }\r
+                                               .menu-bar-item-focus a,\r
+                                               .menu-bar-item-focus a:link,\r
+                                               .menu-bar-item-focus a:visited {\r
+                                                       color:                  #666;\r
+                                                       position:               relative;\r
+                                                       display:                block;\r
+                                                       width:                  200px;\r
+                                                       height:                 30px;\r
+                                                       line-height:    30px;\r
+                                                       *cursor:                        pointer;\r
+                                               }\r
+                                               .menu-bar-item-focus a:hover {\r
+                                                       color:                          #333;\r
+                                                       background-color:       #ccf;\r
+                                                       text-decoration:        none;\r
+                                                       *cursor:                        pointer;\r
+                                               }                               \r
+                                               .menu-bar-item-focus li.disabled a,\r
+                                               .menu-bar-item-focus li.disabled a:link,\r
+                                               .menu-bar-item-focus li.disabled a:visited,\r
+                                               .menu-bar-item-focus li.disabled a:active,\r
+                                               .menu-bar-item-focus li.disabled a:hover {\r
+                                                       color:                          #999;\r
+                                                       background-color:       #fff;\r
+                                                       *cursor:                        default;\r
+                                               }\r
+                                                       .menu-bar-item-focus span {\r
+                                                               position:               absolute;\r
+                                                               top:                    0;\r
+                                                               left:                   10px;\r
+                                                               display:                block;\r
+                                                               font-size:              14px;\r
+                                                               font-weight:    bold;\r
+                                                               width:                  120px;\r
+                                                               overflow:               hidden;\r
+                                                       }\r
+                                                       .menu-bar-item-focus kbd {\r
+                                                               position:               absolute;\r
+                                                               top:                    11px;\r
+                                                               left:                   140px;\r
+                                                               display:                block;\r
+                                                               font-size:              10px;\r
+                                                               color:                  #999;\r
+                                                               width:                  60px;\r
+                                                               overflow:               hidden;\r
+                                                       }\r
+                                       .menu-bar-item-focus li.separator {\r
+                                               width:                  200px;\r
+                                               height:                 0;\r
+                                               line-height:    0;\r
+                                               border-top:             1px solid #ccc;\r
+                                               margin:                 0;\r
+                                               padding:                0;\r
+                                       }\r
+       \r
+       /*  whiteGlass\r
+       --------------------------------------------------------------------------------------*/        \r
+               #whiteGlass-container {\r
+                       position:       absolute;\r
+                       top:            0;\r
+                       left:           0;\r
+                       width:          100%;\r
+                       height:         100%;\r
+               }\r
+                       #whiteGlass-container div {\r
+                               position:                       absolute;\r
+                               background-color:       #fff;\r
+                               opacity:                        0.7;\r
+                               -moz-opacity:           0.7;\r
+                               filter:                         alpha(opacity=70);\r
+                               -ms-filter:                     alpha(opacity=70);\r
+                       }\r
+                       #whiteGlass-top {\r
+                               top:            0;\r
+                               left:           0;\r
+                               width:          100%;\r
+                               height:         20%;\r
+                       }\r
+                       #whiteGlass-left {\r
+                               top:            20%;\r
+                               left:           0;\r
+                               width:          20%;\r
+                               height:         60%;\r
+                       }\r
+                       #whiteGlass-right {\r
+                               top:            20%;\r
+                               left:           80%;\r
+                               width:          20%;\r
+                               height:         60%;\r
+                       }\r
+                       #whiteGlass-bottom {\r
+                               top:            80%;\r
+                               left:           0;\r
+                               width:          100%;\r
+                               height:         20%;\r
+                       }\r
+       \r
+       /*  panel\r
+       --------------------------------------------------------------------------------------*/\r
+               #panel-border {\r
+                       position:       absolute;\r
+                       border:         2px solid #333;\r
+               }\r
+       \r
+       /*  mouse-operation-catcher\r
+       --------------------------------------------------------------------------------------*/        \r
+               #mouse-operation-catcher {\r
+                       position:                       absolute;\r
+                       top:                            0;\r
+                       left:                           0;\r
+                       width:                          100%;\r
+                       height:                         100%; /* 100% don't work for ie6, so ie6 need to set height-'px' by js */\r
+                       *background-color:      #fff;\r
+                       filter:                         alpha(opacity=0);\r
+               }\r
+               html>/**/body #mouse-operation-catcher {  \r
+                       background-color /***/:         #fff\9;  \r
+                       -ms-filter /***/:                       alpha(opacity=0)\9;\r
+               } \r
+               /*\r
+                * ieでは、背景を設定しないと、mouse-operation-catcherが働かない。\r
+                * activeX有効の場合は背景を着色してfilterで透明に。\r
+                * activeX無効の場合は透明gifを使用\r
+                * background:                  url(4x4.gif) fixed repeat;\r
+                */\r
+       \r
+       /*  comic-element\r
+       --------------------------------------------------------------------------------------*/\r
+               #comic-element-container {\r
+                       position:                       absolute;\r
+                       \r
+               }\r
+                       .comic-element-wrapper {\r
+                               position:                       absolute;\r
+                       }\r
+                               #comic-element-container img {\r
+                                       width:                          100%;\r
+                                       height:                         100%;\r
+                                       position:                       absolute;\r
+                                       top:                            0;\r
+                                       left:                           0;\r
+                               }\r
+       \r
+       /*  comic-element-resizer\r
+       --------------------------------------------------------------------------------------*/                \r
+               #comic-element-resizer-container {\r
+                       position:                       absolute;\r
+                       border:                         1px solid #999;\r
+               }\r
+                       .comic-element-resizer {\r
+                               position:                       absolute;\r
+                               width:                          8px;\r
+                               height:                         8px;\r
+                               font-size:                      8px; /* ie */\r
+                               line-height:            8px; /* ie */\r
+                               border:                         1px solid #333;\r
+                               background-color:       #fff;\r
+                       }\r
+               /*\r
+                * marker\r
+                */\r
+                       #comic-element-resizer-top {\r
+                               top:                            -5px;\r
+                               left:                           50%;\r
+                       }\r
+                       #comic-element-resizer-left {\r
+                               top:                            50%;\r
+                               left:                           -5px;\r
+                       }\r
+                       #comic-element-resizer-right {\r
+                               top:                            50%;\r
+                               right:                          -5px;\r
+                       }\r
+                       #comic-element-resizer-bottom {\r
+                               bottom:                         -5px;\r
+                               left:                           50%;\r
+                       }\r
+                       #comic-element-resizer-top-left {\r
+                               top:                            -5px;\r
+                               left:                           -5px;\r
+                       }\r
+                       #comic-element-resizer-top-right {\r
+                               top:                            -5px;\r
+                               right:                          -5px;\r
+                       }\r
+                       #comic-element-resizer-bottom-left {\r
+                               bottom:                         -5px;\r
+                               left:                           -5px;\r
+                       }\r
+                       #comic-element-resizer-bottom-right {\r
+                               bottom:                         -5px;\r
+                               right:                          -5px;\r
+                       }               \r
+       /*  panel-resizer\r
+       --------------------------------------------------------------------------------------*/        \r
+               #panel-resizer-top,\r
+               #panel-resizer-bottom {\r
+                       position:                       absolute;\r
+                       border:                         1px outset #999;\r
+                       background-color:       #eee;\r
+                       text-align:                     center;\r
+                       font-size:                      12px;\r
+                       line-height:            12px;\r
+                       padding:                        9px 0;\r
+                       left:                           -2px;\r
+               }\r
+               \r
+               #panel-resizer-top {\r
+                       top:                                    -37px;\r
+                       border-radius:                  8px 8px 0 0;\r
+                       -o-border-radius:               8px 8px 0 0;\r
+                       -ms-border-radius:              8px 8px 0 0;\r
+                       -moz-border-radius:             8px 8px 0 0;\r
+                       -webkit-border-radius:  8px 8px 0 0;\r
+               }\r
+               #panel-resizer-bottom {\r
+                       bottom:                                 -37px;\r
+                       border-radius:                  0 0 8px 8px;\r
+                       -o-border-radius:               0 0 8px 8px;\r
+                       -ms-border-radius:              0 0 8px 8px;\r
+                       -moz-border-radius:             0 0 8px 8px;\r
+                       -webkit-border-radius:  0 0 8px 8px;\r
+               }\r
+       \r
+       /*  balloon-tail-mover\r
+       --------------------------------------------------------------------------------------*/                \r
+               #balloon-tail-mover {\r
+                       position:                       absolute;\r
+                       width:                          8px;\r
+                       height:                         8px;\r
+                       font-size:                      8px; /* ie */\r
+                       line-height:            8px; /* ie */\r
+                       border:                         1px solid #333;\r
+                       background-color:       #66f;\r
+                       margin:                         -5px 0 0 -5px;\r
+               }\r
+       \r
+       /*  comic element console\r
+       --------------------------------------------------------------------------------------*/\r
+               #comic-element-consol-wrapper {\r
+                       position:                       absolute;\r
+               }\r
+                       #image-element-consol {\r
+                               width:                          50px;\r
+                               overflow:                       auto;\r
+                       }\r
+                       #text-element-consol {\r
+                               width:                          75px;\r
+                               overflow:                       auto;\r
+                       }\r
+       \r
+                               #change-image-button,\r
+                               #layer-back-button,\r
+                               #layer-forward-button,\r
+                               #delete-image-button,\r
+                               #edit-text-button,\r
+                               #change-text-style-button,\r
+                               #hide-text-tail-button,\r
+                               #back-text-button,\r
+                               #forward-text-button,\r
+                               #delete-text-button {\r
+                                       text-indent:                    -9999px;\r
+                                       width:                                  25px;\r
+                                       height:                                 25px;\r
+                                       line-height:                    25px;\r
+                                       float:                                  left;\r
+                                       background-image:               url(icons.gif);\r
+                                       background-repeat:              no-repeat;\r
+                                       background-position:    0 0;\r
+                                       cursor:                                 pointer;\r
+                               }\r
+                               #hide-text-tail-button {\r
+                                       background-position:    -25px -25px;\r
+                               }\r
+                               #change-image-button,\r
+                               #change-text-style-button {\r
+                                       background-position:    -25px 0;\r
+                               }                       \r
+                               #layer-back-button,\r
+                               #back-text-button {\r
+                                       background-position:    -50px 0;\r
+                               }\r
+                               #layer-forward-button,\r
+                               #forward-text-button {\r
+                                       background-position:    -50px -25px;\r
+                               }\r
+                               #delete-image-button,\r
+                               #delete-text-button {\r
+                                       background-position:    0 -25px;\r
+                               }\r
+                       \r
+               .console-out #comic-element-consol-wrapper-when-out {\r
+                       padding:                        5px;\r
+                       background-color:       #333;\r
+               }\r
+               .console-out #comic-element-consol-tail {\r
+                       border-width:           0 5px 10px 5px;\r
+                       border-color:           transparent transparent #333 transparent;\r
+                       _border-color:          #fff #fff #333 #fff;\r
+                       border-style:           solid;\r
+                       width:                          0;\r
+                       height:                         0;\r
+                       font-size:                      0;\r
+                       line-height:            0;\r
+                       position:                       absolute;\r
+                       top:                            -10px;\r
+                       left:                           50%;\r
+               }\r
+                       \r
+       \r
+                       \r
+       /*  Panel > speach\r
+       --------------------------------------------------------------------------------------*/\r
+                       .speach {\r
+                               text-align:                     center;\r
+                               display:                        table;\r
+                               position:                       absolute;\r
+                               top:                            16.6%;\r
+                               left:                           16.6%;\r
+                               width:                          66.6%;\r
+                               height:                         66.6%;\r
+                               padding:                        0;\r
+                               margin:                         0;\r
+                       }\r
+                               .speach-inner {\r
+                                       display:                table-cell;\r
+                                       vertical-align: middle;\r
+                               }\r
+                       \r
+               /* fix for ie */        \r
+                       .text-element table,\r
+                       .text-element tbody,\r
+                       .text-element tr,\r
+                       .text-element td {\r
+                               width:                          100%;\r
+                               height:                         100%;\r
+                               border:                         0;\r
+                               padding:                        0;\r
+                               margin:                         0;\r
+                               text-align:                     center;\r
+                               vertical-align:         middle;\r
+                       }\r
+                       .text-element table {\r
+                               table-layout:           fixed; /* ie6で上下中央にテキストがならない対処。固定レイアウトアルゴリズムになるので負荷を下げるらしい */\r
+                       }\r
+                       \r
+       /*  Window\r
+       --------------------------------------------------------------------------------------*/\r
+               .window-wrapper {\r
+                       position:                       absolute;\r
+                       top:                            10px;\r
+                       left:                           10px;\r
+                       width:                          200px;\r
+                       height:                         200px;\r
+                       background-color:       #fff;\r
+                       box-shadow:                     1px 4px 9px #333;\r
+                       -moz-box-shadow:        1px 4px 9px #333;\r
+                       -webkit-box-shadow:     1px 4px 9px #333;\r
+                       filter:                         progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=120,strength=9);\r
+               }\r
+                       .window-header,\r
+                       .window-close-button {\r
+                               font-size:                              12px;\r
+                               color:                                  #eee;\r
+                               line-height:                    12px;\r
+                               overflow:                               hidden;\r
+                               text-align:                             center;\r
+                               padding-top:                    8px;\r
+                               padding-bottom:                 6px;\r
+                               background-color:               #333;                                   \r
+                       }\r
+                               .window-close-button {\r
+                                       position:                               absolute;\r
+                                       top:                                    0;\r
+                                       right:                                  0;\r
+                                       border-left:                    1px solid #666;\r
+                                       padding-left:                   9px;\r
+                                       padding-right:                  9px;\r
+                                       border-radius:                  0 8px 0 0;\r
+                                       -o-border-radius:               0 8px 0 0;\r
+                                       -ms-border-radius:              0 8px 0 0;\r
+                                       -moz-border-radius:             0 8px 0 0;\r
+                                       -webkit-border-radius:  0 8px 0 0;\r
+                               }\r
+                       \r
+                       .window-wrapper,\r
+                       .window-header {\r
+                               border-radius:                  8px 8px 0 0;\r
+                               -o-border-radius:               8px 8px 0 0;\r
+                               -ms-border-radius:              8px 8px 0 0;\r
+                               -moz-border-radius:             8px 8px 0 0;\r
+                               -webkit-border-radius:  8px 8px 0 0;\r
+                       }\r
+                       .window-body {\r
+                               position:                               relative;\r
+                               overflow:                               hidden;\r
+                               border-left:                    1px solid #aaa;\r
+                               *border-left:                   1px solid #ccc;\r
+                               border-right:                   1px solid #999;\r
+                               border-bottom:                  1px solid #999;\r
+                       }\r
+\r
+                       html>/**/body .window-body {  \r
+                               border-left /***/:              1px solid #ccc\9;\r
+                       }\r
+\r
+                       .window-resize-button {\r
+                               position:                               absolute;\r
+                               bottom:                                 0;\r
+                               right:                                  0;\r
+                               border-bottom:                  20px solid #aaa;\r
+                               border-left:                    20px solid transparent;\r
+                               _border-left:                   20px solid #fff;\r
+                               line-height:                    0;\r
+                               height:                                 0;\r
+                               width:                                  0;\r
+                               text-indent:                    -9999px;\r
+                               text-align:                             center;\r
+                               cursor:                                 pointer;\r
+                       }\r
+                       \r
+                       /*\r
+                        * page contents\r
+                        */\r
+                               .sidenavi {\r
+                                       width:                          100px;\r
+                                       float:                          left;\r
+                               }\r
+                                       .sidenavi-item,\r
+                                       .sidenavi-item:link {\r
+                                               display:                        block;\r
+                                               border-bottom:          1px solid #666;\r
+                                               padding:                        1em;\r
+                                               text-decoration:        none;\r
+                                       }\r
+                                       .sidenavi-item:hover {\r
+                                               background-color:       #ccc;\r
+                                               text-decoration:        none;\r
+                                       }\r
+                                       .sidenavi .current {\r
+                                               background-color:       #666;\r
+                                               color:                          #eee;\r
+                                       }\r
+                               .page-contents {\r
+                                       _position:                              relative; /* for ie6 */\r
+                                       margin-left:                    100px;\r
+                                       padding:                                1em 1em 2em 1em;\r
+                               }\r
+                                       .page-content {\r
+                                               display:                                none;\r
+                                       }\r
+                                               .page-content p,\r
+                                               .page-content pre {\r
+                                                       line-height:                    1.6em;\r
+                                               }\r
+       \r
+       /*  editable-text\r
+       --------------------------------------------------------------------------------------*/\r
+       \r
+               .editable-text {\r
+                       display:                        inline-block;\r
+                       color:                          #333;\r
+                       border:                         1px solid #ccc;\r
+                       font-size:                      14px;\r
+                       line-height:            16px;\r
+               }\r
+                       .editable-text a,\r
+                       .editable-text a:link,\r
+               .editable-text a:visited,\r
+               .editable-text a:hover,\r
+               .editable-text a:active {\r
+                               padding:                        3px;\r
+                               color:                          #333;\r
+                               text-decoration:        none;\r
+                               display:                        block;\r
+                               outline:                        0;\r
+                               background-color:       #fff;\r
+                       }\r
+                       .editable-text a:hover {\r
+                               background-color:       #ccf;\r
+                       }\r
+                       .editable-text input {\r
+                               padding:                        3px 0;\r
+                               width:                          100%;\r
+                               font-family:            Arial,Helvetica,sans-serif;\r
+                               background-color:       #ccf;\r
+                               border:                         0;\r
+                               margin:                         0;\r
+                               outline:                        0;\r
+                       }\r
+       \r
+       \r
+       /*  Information Window\r
+       --------------------------------------------------------------------------------------*/\r
+               #comic-element-infomation {\r
+                       background-color:                       #fff;\r
+                       position:                                       absolute;\r
+                       width:                                          100%;\r
+               }\r
+                               #comic-element-x, #comic-element-z,\r
+                               #comic-element-y, #comic-element-a,\r
+                               #comic-element-w, #comic-element-w-percent,\r
+                               #comic-element-h, #comic-element-h-percent {\r
+                                       position:                       absolute;\r
+                               }\r
+                               \r
+                               #comic-element-x,\r
+                               #comic-element-y,\r
+                               #comic-element-w,\r
+                               #comic-element-h {\r
+                                       left:                           30px;\r
+                               }\r
+                               #comic-element-z,\r
+                               #comic-element-a {\r
+                                       left:                           115px;\r
+                               }\r
+                   #comic-element-w-percent,\r
+                   #comic-element-h-percent    {\r
+                       left:               124px;\r
+                   }\r
+                               #comic-element-x, #comic-element-z {\r
+                                       top:                            10px;\r
+                               }\r
+                               #comic-element-y, #comic-element-a {\r
+                                       top:                            40px;\r
+                               }\r
+                               #comic-element-w, #comic-element-w-percent {\r
+                                       top:                            80px;\r
+                               }\r
+                               #comic-element-h, #comic-element-h-percent {\r
+                                       top:                            110px;\r
+                               }\r
+                               .comic-element-attribute-label {\r
+                                       display:                        inline-block;\r
+                                       width:                          14px;\r
+                                       line-height:            22px;\r
+                                       *line-height:           22px; /* ie用 input周りのサイズあわせ、よく分からない。 */\r
+                                       color:                          #666;\r
+                                       text-align:                     center;\r
+                               }\r
+                               .comic-element-attribute-value {\r
+                                       width:                          40px;\r
+                                       text-align:                     right;\r
+                               }\r
+               \r
+                               #comic-element-z-value,\r
+                               #comic-element-a-value {\r
+                                       width:                          35px;\r
+                               }\r
+                               #comic-element-w-percent-value,\r
+                               #comic-element-h-percent-value {\r
+                                       width:                          30px;\r
+                               }\r
+                               \r
+                               #comic-element-keep-aspect {\r
+                                   position:            absolute;\r
+                                   top:                 96px;\r
+                                   left:                100px;\r
+                                   width:               12px;\r
+                                   height:              22px;\r
+                                   font-size:           22px;\r
+                                   line-height:         22px;\r
+                                   border:              1px solid #ccc;\r
+                               }\r
+       \r
+       /*  Background Window\r
+       --------------------------------------------------------------------------------------*/\r
+                       #bg-pattern,\r
+                       #select-bg-pattern-button,\r
+                       #reset-bg-pattern-button,\r
+                       #bg-color,\r
+                       #select-bg-color-button,\r
+                       #reset-bg-color-button {\r
+                               position:               absolute;\r
+                               text-align:             center;\r
+                               cursor:                 pointer;\r
+                       }\r
+                       \r
+                       #bg-pattern,\r
+                       #bg-color {\r
+                               box-shadow:                     1px 2px 3px #000;\r
+                               -moz-box-shadow:        1px 2px 3px #000;\r
+                               -webkit-box-shadow:     1px 2px 3px #000;\r
+                               height:                         80px;\r
+                               top:                            15px;\r
+                       }\r
+                       #bg-pattern {\r
+                               left:                   15px;\r
+                               width:                  100px;\r
+                       }\r
+                       #select-bg-pattern-button,\r
+                       #reset-bg-pattern-button,\r
+                       #select-bg-color-button,\r
+                       #reset-bg-color-button {\r
+                               border:                 1px outset #666;\r
+                               height:                 20px;\r
+                               top:                    115px;\r
+                               line-height:    20px;\r
+                       }\r
+                       #select-bg-pattern-button {\r
+                               left:                   15px;\r
+                               width:                  80px;\r
+                       }\r
+                       #reset-bg-pattern-button {\r
+                               left:                   95px;\r
+                               width:                  20px;\r
+                       }\r
+                       \r
+                       #bg-color {\r
+                               left:                           125px;\r
+                               width:                          60px;\r
+                               background-color:       #66f;\r
+                       }\r
+                       #select-bg-color-button {\r
+                               left:                   125px;\r
+                               width:                  40px;\r
+                       }\r
+                       #reset-bg-color-button {\r
+                               left:                   165px;\r
+                               width:                  20px;\r
+                       }\r
+       \r
+       \r
+       \r
+       /*  Tool-box Window\r
+       --------------------------------------------------------------------------------------*/                \r
+                       #toolbox-add-image-button,\r
+                       #toolbox-add-text-button,\r
+                       #toolbox-edit-bg-button,\r
+                       #toolbox-switch-grid,\r
+                       #toolbox-popup-help-button,\r
+                       #toolbox-post-button {\r
+                               position:                               absolute;\r
+                               left:                                   10px;\r
+                               width:                                  90px;\r
+                               border:                                 1px outset #999;\r
+                               height:                                 40px;\r
+                               line-height:                    40px;\r
+                               text-align:                             center;\r
+                               cursor:                                 pointer;\r
+                               background-color:               #ccc;\r
+                               border-radius:                  8px;\r
+                               -o-border-radius:               8px;\r
+                               -ms-border-radius:              8px;\r
+                               -moz-border-radius:             8px;\r
+                               -webkit-border-radius:  8px;\r
+                       }\r
+                       #toolbox-add-image-button {\r
+                               top:                                    10px;                                                           \r
+                       }\r
+                       #toolbox-add-text-button {\r
+                               top:                                    60px;\r
+                       }\r
+                       #toolbox-edit-bg-button {\r
+                               top:                                    110px;\r
+                               height:                                 30px;\r
+                               line-height:                    30px;\r
+                       }\r
+                       #toolbox-switch-grid,\r
+                       #toolbox-popup-help-button {\r
+                               top:                                    150px;\r
+                               height:                                 30px;\r
+                               line-height:                    30px;\r
+                       }\r
+                       #toolbox-switch-grid {\r
+                               width:                                  45px !important;\r
+                       }\r
+                       #toolbox-popup-help-button {\r
+                               width:                                  35px !important;\r
+                               left:                                   65px !important;\r
+                       }\r
+                       \r
+                       #toolbox-post-button {\r
+                               top:                                    190px;\r
+                               height:                                 50px;\r
+                               line-height:                    50px;\r
+                       }\r
+       \r
+       /*  Grid\r
+       --------------------------------------------------------------------------------------*/\r
+               #grid {\r
+                       width:                                  100%;\r
+                       height:                                 100%;\r
+                       position:                               absolute;\r
+                       left:                                   0;\r
+                       top:                                    0;\r
+                       background-attachment:  fixed;\r
+                       background-repeat:              repeat;\r
+                       /* background-image:            url('grid.gif'); grid用イメージはgrid使用時にjsで埋め込み */\r
+               }\r
+\r
+/*--------------------------------------------------------------------------------------\r
+ * \r
+ *  Finder\r
+ *  \r
+ -------------------------------------------------------------------------------------*/\r
+       .finder-body {\r
+               position:relative;\r
+       }\r
+\r
+       .finder-header {\r
+               height:                                 40px;\r
+               position:                               relative;\r
+               background-color:               #333;\r
+       }\r
+               .finder-header ul {\r
+                       list-style:                             none;\r
+                       position:                               absolute;\r
+                       top:                                    0;\r
+                       left:                                   48px;\r
+                       height:                                 40px;\r
+                       line-height:                    40px;\r
+                       padding:                                0;\r
+                       margin:                                 0;\r
+               }\r
+                       .finder-header li {\r
+                               position:                               absolute;\r
+                               top:                                    0;\r
+                               left:                                   0;\r
+                               height:                                 40px;\r
+                               width:                                  90px;\r
+                               padding:                                0;\r
+                               margin:                                 0;\r
+                       }\r
+                       .finder-header li a,\r
+                       .finder-header li a:link\r
+                       .finder-header li a:visited {\r
+                               display:                                block;\r
+                               height:                                 14px;\r
+                               font-size:                              14px;\r
+                               line-height:                    14px;\r
+                               padding:                                16px 0 10px 20px;\r
+                               margin:                                 0;\r
+                               color:                                  #eee;\r
+                       }\r
+                       .finder-header li a:hover {\r
+                               text-decoration:                none;\r
+                               background-color:               #66f;\r
+                               color:                                  #eee;\r
+                       }\r
+                       \r
+                       \r
+               .finder-header .button {\r
+                       position:                               absolute;\r
+                       top:                                    8px;\r
+                       width:                                  30px;\r
+                       height:                                 24px;\r
+                       line-height:                    24px;\r
+               }\r
+               .finder-sidebar-switch {\r
+                       left:                                   8px;\r
+               }\r
+               .finder-style-switch {\r
+                       right:                                  48px;\r
+               }\r
+               .finder-action-switch {\r
+                       right:                                  8px;\r
+               }\r
+               \r
+       /*  Finder Icon\r
+       --------------------------------------------------------------------------------------*/\r
+       .finder-icon {\r
+               position:                                       absolute;\r
+               top:                                            0;\r
+               left:                                           0;\r
+               height:                                         74px;\r
+               width:                                          100%;\r
+               border-bottom:                          1px solid #ccc;\r
+       }\r
+               .finder-icon-thumbnail {\r
+                       width:                                          64px;\r
+                       height:                                         64px;\r
+                       position:                                       absolute;\r
+                       top:                                            5px;\r
+                       left:                                           20px;\r
+                       cursor:                                         pointer;\r
+                       background-position:            50% 50%;\r
+                       background-repeat:                      no-repeat;\r
+               }\r
+               .finder-icon .file-type-1 {\r
+                       background-image:                       url('folder_album.png');\r
+               }\r
+               .finder-icon .file-type-2 {\r
+                       background-image:                       url('folder_album.png');\r
+               }\r
+               .has-thumbnail {\r
+                       background-image:                       url('folder_album.png');\r
+               }\r
+               /*\r
+                * http://www.iconfinder.com/icondetails/18336/64/folder_image_photo_icon\r
+                * http://www.iconfinder.com/icondetails/27849/48/folder_yellow_icon
+                */\r
+               .finder-icon-filename {\r
+                       position:                                       absolute;\r
+                       top:                                            30px;\r
+                       left:                                           100px;\r
+               }
\ No newline at end of file
diff --git a/0.4.x/work.html b/0.4.x/work.html
new file mode 100644 (file)
index 0000000..72b0544
--- /dev/null
@@ -0,0 +1,349 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<html xmlns:v="urn:schemas-microsoft-com:vml">\r
+    <head>\r
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+           <meta http-equiv="Content-Language" content="ja">\r
+           <meta http-equiv="Content-Script-Type" content="text/javascript">\r
+           <meta http-equiv="Content-Style-Type" content="text/css">\r
+           <meta http-equiv="imagetoolbar" content="no">\r
+        <title>Resource Console | pettanR</title>\r
+               <link rel="stylesheet" type="text/css" href="common.css">\r
+               <link rel="stylesheet" type="text/css" href="work.css">\r
+    </head>\r
+    <body>\r
+       <!--[if lt IE 9]>\r
+               <script type="text/javascript">\r
+                               (function(){\r
+                                       var     b = document.body || (function(){document.write('&lt;body&gt;');return document.body;})(),\r
+                                               x = (function(){\r
+                                                       try {var t = new ActiveXObject('DXImageTransform.Microsoft.gradient');}catch(e){}\r
+                                                       return 'pettanr-ActiveX-' +( t ? 'enabled' : 'disabled');\r
+                                               })();\r
+                                       if( !b.className.match(x)) b.className += ( b.className.length === 0 ? '' : ' ') +x;\r
+                               })();                           \r
+               </script>\r
+       <![endif]-->\r
+               \r
+               <!-- 改行コード 取得用 -->\r
+<form>\r
+<textarea id="shadowTxtarea" style="display:none;">\r
+\r
+</textarea>\r
+</form>\r
+<pre id="shadowPre" style="display:none;">\r
+\r
+</pre>\r
+\r
+               <div id="header">\r
+                       <div class="base-content-width" style="position:relative;">\r
+                               <h1>pettanR</h1>\r
+                       <!-- global navi -->\r
+                               <div id="global-navi">\r
+                                       <noscript id="noscript-alert">You need to have JavaScript enabled.</noscript>\r
+                               </div>\r
+                       </div>\r
+               </div>\r
+               \r
+               <div id="inner-wrapper" class="base-content-width">\r
+\r
+                       <!-- home -->\r
+                               <div id="entrance" class="console-page main">\r
+                                       <h2>Wellcome to pettanR!</h2>\r
+                                       <p>Hello, xxxxx.</p>\r
+                                       <p>This page is login user console.</p>\r
+                               </div>\r
+                               \r
+                       <!-- setting -->\r
+                               <div id="backyard" class="console-page main"></div>\r
+\r
+                       <!-- debug-->\r
+                               <div id="debug" class="console-page main">\r
+                                       <h2>Environment</h2>\r
+                                       <dl id="useragent" class="dl-table clearfix"></dl>\r
+\r
+                                       <h2>Boot console in debug mode</h2>\r
+                                       <dl class="dl-table clearfix">\r
+                                               <dt>xdomain json</dt>\r
+                                               <dd><a href="work.html?view=2&exjson=false">use same domain json</a></dd>                       \r
+                                       </dl>\r
+                               \r
+                                       <h2>Boot editor in debug mode</h2>\r
+                                       <dl class="dl-table clearfix">\r
+                                               <dt>General Boot</dt>\r
+                                               <dd><a href="work.html?view=editor">Boot Editor</a></dd>\r
+                                               <dt>Reversible Image test</dt>\r
+                                               <dd><a href="work.html?view=editor&rimg=CSS3">Backend is CSS3</a></dd>\r
+                                               <dd><a href="work.html?view=editor&rimg=VML">Backend is VML</a></dd>\r
+                                               <dd><a href="work.html?view=editor&rimg=ActiveX">Backend is ActiveX</a></dd>\r
+                                               <dt>Balloon test</dt>\r
+                                               <dd><a href="work.html?view=editor&vector=false">Vector Disabled</a></dd>\r
+                                       </dl>\r
+                                       \r
+                                       <h2>XML + XSLT pages</h2>\r
+                                       \r
+                                       <dl class="dl-table clearfix">\r
+                                               <dt>help documents</dt>\r
+                                               <dd><a href="help/jp.xml">jp.xml</a></dd>\r
+                                               <dt>xml test</dt>\r
+                                               <dd><a href="diary/itozyun.xml">itozyn's diary</a></dd>\r
+                                               <dt>other</dt>\r
+                                               <dd><a href="sitemap/sitemap.xml">sitemap.xml</a></dd>\r
+                                       </dl>                           \r
+                               </div>\r
+                       </div>\r
+                       \r
+               <!-- comic list -->\r
+                       <div id="cabinet" class="console-page">\r
+                               <a onclick="pettanr.view.show( 'editor');return false;" href="#">Edit This panel</a>\r
+                               <div id="cabinet-container" class="finder-container"></div>\r
+                       </div>\r
+                       \r
+               <!-- image list -->\r
+                       <div id="gallery" class="console-page"></div>\r
+                       \r
+               </div>\r
+               \r
+       <!-- Editor -->\r
+               <div id="editor" class="view-container">\r
+               <p id="key-event-log" style="margin-top: 5em;"></p>\r
+               <p id="history-log"></p>\r
+                       <p id="operation-catcher-log"></p>\r
+                       <p id="tail-log"></p>\r
+                       <p id="window-log"></p>\r
+                       \r
+               <!-- コマの背景(パターン・塗りつぶし) -->\r
+       \r
+               <!-- グリッド-->\r
+                       <div id="grid" style="display:none;"></div>\r
+       \r
+               <!-- コマ要素 -->\r
+                       <div id="comic-element-container"></div>\r
+\r
+               <!-- コマの枠の外は完全に隠さないで、半透過のレイヤーを重ねる -->\r
+                       <div id="whiteGlass-container">\r
+                               <div id="whiteGlass-top"></div>\r
+                               <div id="whiteGlass-left"></div>\r
+                               <div id="whiteGlass-right"></div>\r
+                               <div id="whiteGlass-bottom"></div>\r
+                       </div>\r
+                       \r
+               <!-- コマの枠の表示 -->\r
+                       <div id="panel-border">\r
+                       <!-- コマの高さの変更ボタン -->\r
+                               <div id="panel-resizer-top">▲</div>\r
+                               <div id="panel-resizer-bottom">▼</div>\r
+                               \r
+                       <!-- コミック要素のリサイザ -->\r
+                               <div id="comic-element-resizer-container">\r
+                                       <div class="comic-element-resizer" id="comic-element-resizer-top"></div>\r
+                                       <div class="comic-element-resizer" id="comic-element-resizer-left"></div>\r
+                                       <div class="comic-element-resizer" id="comic-element-resizer-right"></div>\r
+                                       <div class="comic-element-resizer" id="comic-element-resizer-bottom"></div>\r
+                                       <div class="comic-element-resizer" id="comic-element-resizer-top-left"></div>\r
+                                       <div class="comic-element-resizer" id="comic-element-resizer-top-right"></div>\r
+                                       <div class="comic-element-resizer" id="comic-element-resizer-bottom-left"></div>\r
+                                       <div class="comic-element-resizer" id="comic-element-resizer-bottom-right"></div>\r
+                                       <div id="balloon-tail-mover"></div>\r
+                                       \r
+                               <!-- コミックオブジェクトコンソール -->\r
+                                       <div id="comic-element-consol-wrapper">\r
+                                               <div id="comic-element-consol-tail"></div>\r
+                                               <div id="comic-element-consol-wrapper-when-out">\r
+                                                       <div id="image-element-consol">\r
+                                                               <div id="change-image-button">⇔</div>\r
+                                                               <div id="layer-back-button">&lt;B</div>\r
+                                                               <div id="delete-image-button">x</div>\r
+                                                               <div id="layer-forward-button">F&gt;</div>\r
+                                                       </div>\r
+                                                       <div id="text-element-consol">\r
+                                                               <div id="edit-text-button">E</div>\r
+                                                               <div id="change-text-style-button">⇔</div>\r
+                                                               <div id="back-text-button">&lt;B</div>\r
+                                                               <div id="delete-text-button">x</div>\r
+                                                               <div id="hide-text-tail-button">x{</div>\r
+                                                               <div id="forward-text-button">F&gt;</div>\r
+                                                       </div>\r
+                                               </div>\r
+                                       </div>\r
+                               </div>\r
+                       </div>\r
+\r
+                       <div id="window-container"></div>\r
+                               \r
+\r
+                       <!-- layer-window -->\r
+                       <!-- dom-console-window -->\r
+                       <!-- post-window -->\r
+                       <!-- wellcome-window -->\r
+                       \r
+\r
+               <!-- メニューバー -->\r
+                       <div id="menu-bar"></div>\r
+                       \r
+               <!-- マウスオペレーションキャッチャー -->\r
+                       <div id="mouse-operation-catcher" unselectable="on"></div>\r
+       \r
+               <!-- テンプレート -->\r
+                       <script id="imgElementTemplete" type="text/x-jquery-tmpl">\r
+                               <div class="comic-element-wrapper image-element"></div>\r
+                       </script>\r
+                       \r
+                       <script id="textElementTemplete" type="text/x-jquery-tmpl">\r
+                               <div class="comic-element-wrapper text-element">\r
+                                       <img>\r
+                                       <div class="speach">\r
+                                               <div class="speach-inner"></div>\r
+                                       </div>\r
+                               </div>\r
+                       </script>\r
+                       \r
+                       <script id="textElementTempleteForOldIE" type="text/x-jquery-tmpl">\r
+                               <div class="comic-element-wrapper text-element">\r
+                                       <img>\r
+                                       <div class="speach">\r
+                                               <table><tr><td></td></tr></table>\r
+                                       </div>\r
+                               </div>\r
+                       </script>\r
+                       \r
+                       <script id="imageGruopItemTemplete" type="text/x-jquery-tmpl">\r
+                               <div class="image-gruop-item">\r
+                                       <img width="0" height="0">\r
+                                       <div class="image-gruop-item-title">img-title</div>\r
+                               </div>                          \r
+                       </script>\r
+                       \r
+                       <script id="windowTemplete" type="text/x-jquery-tmpl">\r
+                               <div class="window-wrapper">\r
+                                       <div class="window-header">window title</div>\r
+                                       <div class="window-close-button">x</div>\r
+                                       <div class="window-body clearfix">\r
+                                               <div class="window-body-insert-position"></div>\r
+                                               <div class="window-resize-button">/</div>\r
+                                       </div>\r
+                               </div>\r
+                       </script>\r
+                       \r
+               <!-- infomation-window -->\r
+                       <script id="infomation-window" type="text/x-jquery-tmpl">\r
+                               <div id="panel-background-information">\r
+                                       <div id="bg-pattern"></div>\r
+                                       <div id="select-bg-pattern-button">pattern</div>\r
+                                       <div id="reset-bg-pattern-button">x</div>\r
+                                       <div id="bg-color"></div>\r
+                                       <div id="select-bg-color-button">color</div>\r
+                                       <div id="reset-bg-color-button">x</div>\r
+                                       <!-- <div id="bg-pattern-x"></div>\r
+                                       <div id="bg-pattern-y"></div>\r
+                                       <div id="bg-pattern-repeat-x"></div>\r
+                                       <div id="bg-pattern-repeat-y"></div> -->\r
+                               </div>\r
+                       \r
+                               <div id="comic-element-infomation">\r
+                                       <div id="comic-element-x">\r
+                                               <span class="comic-element-attribute-label">x:</span>\r
+                                               <span id="comic-element-x-value" class="comic-element-attribute-value editable-value">0</span>\r
+                                       </div>\r
+                                       <div id="comic-element-y">\r
+                                               <span class="comic-element-attribute-label">y:</span>\r
+                                               <span id="comic-element-y-value" class="comic-element-attribute-value editable-value">0</span>\r
+                                       </div>\r
+                                       <div id="comic-element-z">\r
+                                               <span class="comic-element-attribute-label">z:</span>\r
+                                               <span id="comic-element-z-value" class="comic-element-attribute-value editable-value">0</span>\r
+                                       </div>\r
+                                       <div id="comic-element-a">\r
+                                               <span id="comic-element-a-value" class="comic-element-attribute-value editable-value">0</span>\r
+                                               <span class="comic-element-attribute-label">°</span>\r
+                                       </div>\r
+                                       <div id="comic-element-w">\r
+                                               <span class="comic-element-attribute-label">w:</span>\r
+                                               <span id="comic-element-w-value" class="comic-element-attribute-value editable-value">0</span>\r
+                                       </div>\r
+                                       <div id="comic-element-h">\r
+                                               <span class="comic-element-attribute-label">h:</span>\r
+                                               <span id="comic-element-h-value" class="comic-element-attribute-value editable-value">0</span>\r
+                                       </div>\r
+                                       <div id="comic-element-w-percent">\r
+                                               <span id="comic-element-w-percent-value" class="comic-element-attribute-value editable-value">0</span>\r
+                                               <span class="comic-element-attribute-label">%</span>\r
+                                       </div>\r
+                                       <div id="comic-element-h-percent">\r
+                                               <span id="comic-element-h-percent-value" class="comic-element-attribute-value editable-value">0</span>\r
+                                               <span class="comic-element-attribute-label">%</span>\r
+                                       </div>\r
+                    <div id="comic-element-keep-aspect"></div>\r
+                               </div>\r
+                       </script>\r
+\r
+               <!-- toolbox-window -->\r
+                       <script id="toolbox-window" type="text/x-jquery-tmpl">\r
+                               <div id="toolbox-add-image-button">add image</div>\r
+                               <div id="toolbox-add-text-button">add text</div>\r
+                               <div id="toolbox-edit-bg-button">edit bg</div>\r
+                               <div id="toolbox-switch-grid">grid</div>\r
+                               <div id="toolbox-popup-help-button">?</div>\r
+                               <div id="toolbox-post-button">post</div>\r
+                       </script>\r
+                       \r
+               </div>\r
+       <!-- Editor -->\r
+               \r
+               \r
+       <!-- オーバーレイ -->\r
+               <div id="overlay-container" style="display: none;">\r
+                       <div id="overlay-shadow"></div>\r
+                       \r
+               <!-- テキスト エディタ -->\r
+                       <div id="speach-editor-wrapper">\r
+                               <textarea id="speach-editor"></textarea>\r
+                               <div id="speach-edit-complete-button" class="button">OK</div>\r
+                       </div>\r
+\r
+               <!-- 画像グループから画像を選択 -->\r
+                       <div id="image-gruop-wrapper">\r
+                               <div id="image-icon-container"></div>\r
+                               <div id="gruop-name-display">Group Name</div>\r
+                               <div id="image-gruop-button" class="button">cancel</div>\r
+                       </div>\r
+                       \r
+                       <div id="overlay-close-button">x</div>\r
+               </div>\r
+\r
+       <!-- Templete Container -->\r
+               <div id="templete-container">\r
+                       \r
+               <!-- Finder -->\r
+                       <div id="templete-finder-container" class="finder-container">\r
+                       \r
+                       <!-- Finder Header -->\r
+                               <div class="finder-header">\r
+                                       <ul class="finder-location">\r
+                                               <!-- Finder location item-->\r
+                                               <li id="templete-finder-location-item" class="finder-location-item">\r
+                                                       <a href="#"></a>\r
+                                               </li>\r
+                                       </ul>\r
+                                       <div class="finder-sidebar-switch button">side</div>\r
+                                       <div class="finder-style-switch button">style</div>\r
+                                       <div class="finder-action-switch button">action</div>\r
+                               </div>\r
+                               \r
+                               <div class="finder-body">\r
+                                       <!-- Finder icon -->\r
+                                       <div id="templete-finder-icon" class="finder-icon">\r
+                                               <div class="finder-icon-thumbnail"></div>\r
+                                               <div class="finder-icon-filename"></div>\r
+                                       </div>\r
+                                       \r
+                               </div>\r
+                       </div>\r
+                       \r
+               </div>\r
+\r
+               <script type="text/javascript" src="common.js"></script>\r
+               <script type="text/javascript" src="jquery-1.6.2.min.js"></script>\r
+               <script type="text/javascript" src="work.js"></script>\r
+               <script type="text/javascript" src="system.js"></script>\r
+    </body>\r
+</html>\r
diff --git a/0.4.x/work.js b/0.4.x/work.js
new file mode 100644 (file)
index 0000000..d699449
--- /dev/null
@@ -0,0 +1,3269 @@
+/*\r
+ * pettanR work.js\r
+ *   version 0.4.0\r
+ *   \r
+ * author:\r
+ *   itozyun\r
+ * licence:\r
+ *   3-clause BSD\r
+ *\r
+ * \r
+ * ----------------------------------------\r
+ * naming rules\r
+ * \r
+ *  Class\r
+ *    ThisIsClass\r
+ *  \r
+ *  const\r
+ *    THIS_IS_CONST = 'this is const';\r
+ *  \r
+ *  var\r
+ *    thisIsVar\r
+ *   \r
+ *  value of jquery\r
+ *    jqWrapper, JQ_WRAPPER\r
+ *  \r
+ *  value of dom element\r
+ *    elmWrapper, ELM_WRAP\r
+ * \r
+ *     value of vml element\r
+ *    vmlImg, VML_SHAPE\r
+ * \r
+ */\r
+\r
+               pettanr.LINE_FEED_CODE_TEXTAREA = ( function(){\r
+                       var text = document.getElementById( 'shadowTxtarea'),\r
+                               form = text.parentNode;\r
+                       form.parentNode.removeChild( form);\r
+                       return text.value;\r
+               })();\r
+               pettanr.LINE_FEED_CODE_PRE = ( function(){\r
+                       var pre = document.getElementById( 'shadowPre');\r
+                       pre.parentNode.removeChild( pre);\r
+                       return pettanr.ua.isIE === true ? this.LINE_FEED_CODE_TEXTAREA : pre.innerHTML; // ie ??                                \r
+               })();\r
+\r
+\r
+\r
+/* ----------------------------------------\r
+ *   pettanr.editor\r
+ *    - MENU_BAR_CONTROL\r
+ *    - HISTORY\r
+ *    - SAVE_CONTROL\r
+ *    - TEXT_EDITOR_CONTROL\r
+ *    - IMAGE_GROUP_EXPROLER\r
+ *    - WINDOW_CONTROL\r
+ *       - WindowClass\r
+ *    - INFOMATION_WINDOW\r
+ *    - TOOL_BOX_WINDOW\r
+ *    - HELP_DOCUMENTS_WINDOW\r
+ *    - CANVAS_CONTROL\r
+ *       - GRID_CONTROL\r
+ *       - WHITE_GLASS_CONTROL\r
+ *       - PANEL_CONTROL\r
+ *       - COMIC_ELEMENT_CONTROL\r
+ *          - PanelResizerClass\r
+ *          - COMIC_ELEMENT_OPERATOR\r
+ *             - TAIL_CONTROLER\r
+ *          - ImageElementClass\r
+ *          - TextElementClass\r
+ * \r
+ */\r
+pettanr.editor = ( function(){\r
+       var COMIC_ELEMENT_TYPE_IMAGE = 0,\r
+               COMIC_ELEMENT_TYPE_TEXT = 1,\r
+               MOUSE_LISTENER_ARRAY = [],\r
+               ELM_MOUSE_EVENT_CHATCHER = document.getElementById( 'mouse-operation-catcher'),\r
+               jqMouseEventChacher,\r
+               jqEditor,\r
+               windowW, windowH,\r
+               currentListener = null,\r
+               currentCursor = '',\r
+               option;\r
+\r
+/* ----------------------------------------\r
+ * MENU BAR\r
+ * div\r
+ *   div.title\r
+ *   ul\r
+ *     li\r
+ *        a\r
+ *          span\r
+ *          kbd shortcut\r
+ */\r
+       var MENU_BAR_CONTROL = ( function(){\r
+               var BAR_ID = 'menu-bar',\r
+                       ELM_BAR = document.getElementById( BAR_ID),\r
+                       ELM_ITEM_CLASSNAME = 'menu-bar-item',\r
+                       ELM_ITEM_ORIGN = ( function(){\r
+                               var ret = document.createElement( 'DIV'),\r
+                                       div = document.createElement( 'DIV'),\r
+                                       ul = document.createElement( 'UL');\r
+                               ret.className = ELM_ITEM_CLASSNAME;\r
+                               ret.appendChild( div);\r
+                               ret.appendChild( ul);\r
+                               return ret;\r
+                       })(),\r
+                       ELM_SELECTION_ORIGN = ( function(){\r
+                               var ret = document.createElement( 'LI'),\r
+                                       a = document.createElement( 'A'),\r
+                                       span = document.createElement( 'SPAN'),\r
+                                       key = document.createElement( 'KBD');\r
+                               a.appendChild( span);\r
+                               a.appendChild( key);\r
+                               ret.appendChild( a);\r
+                               a.href = '#';\r
+                               return ret;\r
+                       })(),\r
+                       EMPTY_FUNCTION = new Function,\r
+                       ITEM_ARRAY = [],\r
+                       barH = pettanr.util.getElementSize( ELM_BAR).height,\r
+                       itemW = pettanr.util.getElementSize( ELM_ITEM_ORIGN).width,\r
+                       selectionW = pettanr.util.getElementSize( ELM_ITEM_ORIGN.getElementsByTagName( 'UL')[ 0]).width,\r
+                       jqStage, jqBar;\r
+               ELM_BAR.style.top = ( -barH) +'px';\r
+\r
+               var MenubarSelectionClass = function( container, title, shortcut, visible, separateAfter){\r
+                       var ELM_WRAPPER = ELM_SELECTION_ORIGN.cloneNode( true),\r
+                               ELM_TITLE = ELM_WRAPPER.getElementsByTagName( 'SPAN')[ 0];\r
+                       updateTitle( title);\r
+                       updateVisible( visible);\r
+                       \r
+                       ( function(){\r
+                               var ELM_SHORTCUT = ELM_WRAPPER.getElementsByTagName( 'KBD')[ 0];\r
+                               if( shortcut){\r
+                                       ELM_SHORTCUT.innerHTML = shortcut;\r
+                               } else {\r
+                                       ELM_SHORTCUT.parentNode.removeChild( ELM_SHORTCUT);\r
+                               }                               \r
+                       })();\r
+\r
+                       container.appendChild( ELM_WRAPPER);\r
+                       \r
+                       function updateTitle( _title){\r
+                               ELM_TITLE.innerHTML = title = _title;\r
+                       }\r
+                       function updateVisible( _visible){\r
+                               _visible !== undefined && ( function(){\r
+                                       visible = !!_visible;\r
+                                       ELM_WRAPPER.className = visible === true ? '' : 'disabled';\r
+                               })();\r
+                       }\r
+                       return {\r
+                               elm: ELM_WRAPPER,\r
+                               title: function( _title){\r
+                                       _title !== undefined && updateTitle( _title);\r
+                                       return title;\r
+                               },\r
+                               visible: function( _visible){\r
+                                       visible !== !!_visible && updateVisible( _visible);\r
+                                       return visible;\r
+                               },\r
+                               separateAfter: separateAfter\r
+                       }\r
+               }\r
+\r
+               var MenuBarItemClass = function( title, opt_callbackArray){\r
+                       var ELM_WRAPPER = ELM_ITEM_ORIGN.cloneNode( true),\r
+                               ELM_TITLE = ELM_WRAPPER.getElementsByTagName( 'DIV')[ 0],\r
+                               ELM_SELECTION = ELM_WRAPPER.getElementsByTagName( 'UL')[ 0],\r
+                               INDEX = ITEM_ARRAY.length,\r
+                               SELECTION_CALLBACK_ARRAY = opt_callbackArray || [],\r
+                               numSelection = 0,\r
+                               visible = false;\r
+                       ELM_TITLE.innerHTML = title;\r
+                       \r
+                       ELM_WRAPPER.style.left = ( itemW * INDEX) +'px';\r
+                       ELM_BAR.appendChild( ELM_WRAPPER);\r
+                       \r
+                       function onClick( e){\r
+                               var that = this,\r
+                                       i = ( function(){\r
+                                               var parent = that.parentNode,\r
+                                                       children = parent.getElementsByTagName( 'LI'),\r
+                                                       l = children.length;\r
+                                               for(var i=0; i<l; ++i){\r
+                                                       if( children[ i] === that) return i;\r
+                                               }\r
+                                               return -1;\r
+                                       })();\r
+                               i !== -1 && this.className !== 'disabled' && SELECTION_CALLBACK_ARRAY[ i]();\r
+                               e.stopPropagation();\r
+                               return false;                           \r
+                       }\r
+                       return {\r
+                               elm: ELM_WRAPPER,\r
+                               onClick: onClick,\r
+                               init: function(){\r
+                                       $( ELM_SELECTION).children( 'li').click( onClick);\r
+                                       delete this.init;\r
+                               },\r
+                               show: function(){\r
+                                       if( visible === true) return;\r
+                                       jqStage.append( ELM_WRAPPER);\r
+                                       ELM_WRAPPER.className = ELM_ITEM_CLASSNAME +'-focus';\r
+                                       this.onShow && setTimeout( this.onShow, 0);\r
+                                       visible = true;\r
+                               },\r
+                               hide: function(){\r
+                                       if( visible === false) return;\r
+                                       ELM_BAR.appendChild( ELM_WRAPPER);\r
+                                       ELM_WRAPPER.className = ELM_ITEM_CLASSNAME;\r
+                                       this.onHide && setTimeout( this.onHide, 0);\r
+                                       visible = false;\r
+                               },\r
+                               createSelection: function( title, shortcut, callback, visible, separateBefore, separateAfter){\r
+                                       var ret = MenubarSelectionClass.apply( {}, [ ELM_SELECTION, title, shortcut, visible, separateAfter]),\r
+                                               before = SELECTION_CALLBACK_ARRAY.length > 0 ? SELECTION_CALLBACK_ARRAY[ SELECTION_CALLBACK_ARRAY.length -1] : null;\r
+                                       SELECTION_CALLBACK_ARRAY.push( callback);\r
+                                       if( ( separateBefore === true && before) || ( before && before.separateAfter === true)){\r
+                                               ret.elm.style.borderTop = '1px solid #ccc';\r
+                                       }\r
+                                       return ret;\r
+                               }\r
+                       }\r
+               }\r
+\r
+               \r
+               function createMenubarItem( title){\r
+                       var _item = MenuBarItemClass.apply( {}, [ title]);\r
+                       ITEM_ARRAY.push( _item);\r
+                       return _item;\r
+               }\r
+               return {\r
+                       init: function(){\r
+                               jqStage = jqEditor;\r
+                               jqBar = $( '#' +BAR_ID).animate( { top: 0});\r
+\r
+                               var l = ITEM_ARRAY.length;\r
+                               for( var i=0; i<l; ++i){\r
+                                       ITEM_ARRAY[ i].init();\r
+                               }\r
+\r
+                               delete MENU_BAR_CONTROL.init;\r
+                       },\r
+                       h: barH,\r
+                       onMouseMove: function( _mouseX, _mouseY){\r
+                               if( barH >= _mouseY){\r
+                                       return true;\r
+                               }\r
+                               var l = ITEM_ARRAY.length;\r
+                               for( var i=0; i<l; ++i){\r
+                                       ITEM_ARRAY[ i].hide();\r
+                               }\r
+                               return false;\r
+                       },\r
+                       onMouseUp: function( _mouseX, _mouseY){\r
+                               return false;\r
+                       },\r
+                       onMouseDown: function( _mouseX, _mouseY){\r
+                               var l = ITEM_ARRAY.length;\r
+                               if( barH < _mouseY || itemW * l < _mouseX) return false;\r
+                               for( var i=0; i<l; ++i){\r
+                                       if( i * itemW <= _mouseX && _mouseX < ( i +1) * itemW){\r
+                                               ITEM_ARRAY[ i].show();\r
+                                       } else {\r
+                                               ITEM_ARRAY[ i].hide();\r
+                                       }\r
+                               }\r
+                               return true;\r
+                       },\r
+                       busy: function( _busy){\r
+                               return false;\r
+                       },\r
+                       onWindowResize: function( _windowW, _windowH){\r
+                               \r
+                       },\r
+                       QUIT: createMenubarItem( 'Quit'),\r
+                       EDIT: createMenubarItem( 'Edit'),\r
+                       WINDOW: createMenubarItem( 'Window'),\r
+                       HELP: pettanr.util.extend( createMenubarItem( 'Help'), {\r
+                                       createAjaxSelection: function( callback){\r
+                                               var elmLoading = document.createElement( 'li'),\r
+                                                       that = this,\r
+                                                       elmSelection = this.elm.getElementsByTagName( 'UL')[ 0];\r
+                                               elmSelection.appendChild( elmLoading);\r
+                                               elmLoading.className = 'loading';\r
+                                               elmLoading.style.height = '90px';                                                       \r
+\r
+                                               this.onShow = callback;\r
+                                               callback = null;\r
+                                               \r
+                                               delete this.createAjaxSelection;\r
+                                               return function(){\r
+                                                       elmSelection.removeChild( elmLoading);\r
+                                                       $( elmSelection).children( 'li').click( that.onClick);\r
+                                                       elmLoading = elmSelection = null;\r
+                                                       delete that.onShow;\r
+                                                       that = null;\r
+                                               }\r
+                                       }\r
+                               })\r
+               }\r
+       })();\r
+\r
+\r
+/* ----------------------------------------\r
+ * HISTORY\r
+ */\r
+       var HISTORY = ( function() {\r
+               var     STACK_BACK = [],\r
+                       STACK_FORWARD = [],\r
+                       MENUBAR_BACK = MENU_BAR_CONTROL.EDIT.createSelection( 'back', 'ctrl + z', back, false),\r
+                       MENUBAR_FORWARD = MENU_BAR_CONTROL.EDIT.createSelection( 'forward', 'ctrl + y', forward, false, false, true),\r
+                       log;\r
+                       \r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 90, false, true, back);       // ctrl + Z\r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 90, true, true, forward);     // ctrl + shift + Z\r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 89, false, true, forward); // ctrl + Y\r
+\r
+               function back(){\r
+                       /*\r
+                        * currentを控えてSTACK_FORWARD.push(current)\r
+                        * STACK_BACK.pop()を実行してcurrentに\r
+                        */\r
+                       if( STACK_BACK.length === 0) return;\r
+\r
+                       var state = STACK_BACK.pop();\r
+                       state && state.fn( state.argBack);\r
+                       MENUBAR_BACK.visible( STACK_BACK.length !== 0);\r
+                       SAVE_CONTROL.panelUpdated( STACK_BACK.length !== 0);\r
+                       \r
+                       STACK_FORWARD.push( state);\r
+                       MENUBAR_FORWARD.visible( true);\r
+               }\r
+               function forward(){\r
+                       if( STACK_FORWARD.length === 0) return;\r
+                       \r
+                       var state = STACK_FORWARD.pop();\r
+                       state.fn( state.argForword);\r
+                       MENUBAR_FORWARD.visible( STACK_FORWARD.length !== 0);\r
+                       \r
+                       STACK_BACK.push( state);\r
+                       MENUBAR_BACK.visible( true);\r
+                       SAVE_CONTROL.panelUpdated( true);\r
+               }\r
+               return {\r
+                       init: function(){\r
+                               log = $( '#history-log');\r
+                               delete HISTORY.init;\r
+                       },\r
+                   saveState: function( _function, _argBack, _argForword, _destory) {\r
+                       STACK_BACK.push( {\r
+                               fn:                     _function,\r
+                               argBack:        _argBack,\r
+                                       argForword:     _argForword,\r
+                                       destroy:        _destroy\r
+                       });\r
+                       MENUBAR_BACK.visible( true);\r
+                               SAVE_CONTROL.panelUpdated( true);\r
+\r
+                       while( STACK_FORWARD.length > 0){\r
+                                       var _stack = STACK_FORWARD.shift(),\r
+                                               _destroy = _stack.destroy,\r
+                                               _value;\r
+                                       _argBack = _stack.argBack;\r
+                                       _argForword = _stack.argForword;\r
+                                       _stack.fn = null;\r
+                                       if( typeof _argBack === 'array'){\r
+                                               while( _argBack.length > 0){\r
+                                                       _value = _argBack.shift();\r
+                                                       _destroy === true && typeof _value.destroy === 'function' && _value.destroy();\r
+                                               }\r
+                                       }\r
+                                       if( typeof _argForword === 'array'){\r
+                                               while( _argForword.length > 0){\r
+                                                       _value = _argForword.shift();\r
+                                                       _destroy === true && typeof _value.destroy === 'function' && _value.destroy();\r
+                                               }                                               \r
+                                       }\r
+                               }\r
+                               MENUBAR_FORWARD.visible( false);\r
+                   }           \r
+               }\r
+       })();\r
+\r
+\r
+/* ----------------------------------------\r
+ *     Save Control\r
+ */\r
+\r
+       var SAVE_CONTROL = ( function(){\r
+               var SAVE = MENU_BAR_CONTROL.QUIT.createSelection( 'save', 'ctrl + S', quit, false),\r
+                       SAVE_AND_QUIT = MENU_BAR_CONTROL.QUIT.createSelection( 'save & quit', null, quit, false, false, true),\r
+                       SAVE_AS_HTML = MENU_BAR_CONTROL.QUIT.createSelection( 'get as html', null, outputAsHtml, true, false, true),\r
+                       SAVE_AS_JSON_STRING = MENU_BAR_CONTROL.QUIT.createSelection( 'get JsonStr', null, outputAsJsonString, true, false, true),\r
+                       QUIT = MENU_BAR_CONTROL.QUIT.createSelection( 'quit', null, quit, true, true),\r
+                       updated = false;\r
+               \r
+               function quit(){\r
+               }\r
+               \r
+               function outputAsHtml(){\r
+                       alert( COMIC_ELEMENT_CONTROL.getAsHTML( true, false));\r
+               }\r
+               function outputAsJsonString(){\r
+                       alert( COMIC_ELEMENT_CONTROL.getAsJsonString());\r
+               }\r
+               return {\r
+                       quit: quit,\r
+                       panelUpdated: function( _updated){\r
+                               if( _updated !== undefined && updated !== _updated){\r
+                                       SAVE.visible( !!_updated);\r
+                                       SAVE_AND_QUIT.visible( !!_updated);\r
+                                       updated = !!_updated;\r
+                               }\r
+                               return updated;\r
+                       },\r
+                       save: function(){\r
+                               \r
+                       }\r
+               }\r
+       })();\r
+\r
+/* ----------------------------------------\r
+ *     Text Editor (Overlay)\r
+ */\r
+       \r
+       var TEXT_EDITOR_CONTROL = ( function(){\r
+               var jqWrap, jqTextarea, jqButton,\r
+                       textElement, onUpdateFunction;\r
+               \r
+               pettanr.key.addKeyDownEvent( this.ID, 69, false, false, clickOK);\r
+               \r
+               function close(){\r
+                       jqWrap.hide();\r
+                       textElement = onUpdateFunction = null;          \r
+               }\r
+               function clickOK(){\r
+                       pettanr.overlay.hide();\r
+                       textElement && textElement.text( jqTextarea.val());\r
+                       onUpdateFunction && onUpdateFunction( textElement);\r
+                       close();                        \r
+               }\r
+               return {\r
+                       init: function(){\r
+                               this.jqWrap = jqWrap = $( '#speach-editor-wrapper').hide();\r
+                               jqTextarea = $( '#speach-editor').keydown( function( e){\r
+                                       if( e.keyCode === 69 && e.shiftKey === false && e.ctrlKey === true){\r
+                                               clickOK();\r
+                                               e.preventDefault();\r
+                                       e.keyCode = 0;\r
+                                       e.cancelBubble = true;\r
+                                       e.returnValue = false;\r
+                                               return false;\r
+                                       }\r
+                               });\r
+                               jqButton = $( '#speach-edit-complete-button').click( clickOK);\r
+                               delete TEXT_EDITOR_CONTROL.init;\r
+                       },\r
+                       jqWrap: null,\r
+                       show: function( _textElement, _onUpdateFunction){\r
+                               textElement = _textElement;\r
+                               onUpdateFunction = _onUpdateFunction || null;\r
+                               pettanr.overlay.show( this);\r
+                               var h = _textElement.h;\r
+                               jqWrap.show().css( {\r
+                                       left:                   _textElement.x +PANEL_CONTROL.x(),\r
+                                       top:                    _textElement.y +PANEL_CONTROL.y(),\r
+                                       width:                  _textElement.w,\r
+                                       height:                 h\r
+                               });\r
+                               jqTextarea.val( _textElement.text()).focus();\r
+                               \r
+                               /*\r
+                                * ie6,7は、textarea { width:100%}でも高さが変わらない。rowsを設定。\r
+                                */\r
+                               pettanr.ua.isIE === true && pettanr.ua.ieVersion <= 7 && setTimeout( function(){\r
+                                       var rows = 0;\r
+                                       while( jqTextarea.height() < h){\r
+                                               rows++;\r
+                                               jqTextarea.attr( 'rows', rows);\r
+                                       }\r
+                                       rows > 1 && jqTextarea.attr( 'rows', rows -1);\r
+                               }, 0);\r
+                       },\r
+                       onWindowResize: function(){\r
+                               textElement && this.show( textElement);\r
+                       },\r
+                       onClose: close,\r
+                       ID: 'textEditor'\r
+               }\r
+       })();\r
+\r
+/* ----------------------------------------\r
+ *     Image Group Exproler (Overlay)\r
+ */\r
+       var IMAGE_GROUP_EXPROLER = ( function(){\r
+               var ICON_ARRAY = [],\r
+                       WHEEL_DELTA = 64,\r
+                       containerW, containerH, wrapX,\r
+                       jqWrap, jqContainer, jqItemOrigin,\r
+                       itemW, itemH,\r
+                       jqName, jqButton, buttonW,\r
+                       onUpdateFunction,\r
+                       winW,\r
+                       onEnterInterval = null;\r
+               \r
+               var BASE_PATH = pettanr.LOCAL === false ? 'http://pettan.heroku.com/images/' : 'images/',\r
+                       THUMB_PATH = BASE_PATH, // + 'thumbnail/',\r
+                       LIMIT_FILESIZE = 1024 * 10; // 10KB\r
+               var IMAGE_DATA = {\r
+                               pen001: [\r
+                                   {\r
+                                       "created_at": "2011-11-13T08:57:39Z", \r
+                                       "ext": "png", \r
+                                       "filesize": 9969, \r
+                                       "height": 463, \r
+                                       "id": 1, \r
+                                       "updated_at": "2011-11-13T08:57:39Z", \r
+                                       "width": 441\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-13T08:57:54Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 5418, \r
+                                       "height": 500, \r
+                                       "id": 2, \r
+                                       "updated_at": "2011-11-13T08:57:54Z", \r
+                                       "width": 500\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-13T08:58:06Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 8758, \r
+                                       "height": 464, \r
+                                       "id": 3, \r
+                                       "updated_at": "2011-11-13T08:58:06Z", \r
+                                       "width": 366\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-13T08:58:23Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 9383, \r
+                                       "height": 480, \r
+                                       "id": 4, \r
+                                       "updated_at": "2011-11-13T08:58:23Z", \r
+                                       "width": 392\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-13T08:58:33Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 11061, \r
+                                       "height": 500, \r
+                                       "id": 5, \r
+                                       "updated_at": "2011-11-13T08:58:33Z", \r
+                                       "width": 500\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-20T09:50:43Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 1131, \r
+                                       "height": 126, \r
+                                       "id": 6, \r
+                                       "updated_at": "2011-11-20T09:50:43Z", \r
+                                       "width": 259\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-20T09:50:55Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 1125, \r
+                                       "height": 126, \r
+                                       "id": 7, \r
+                                       "updated_at": "2011-11-20T09:50:55Z", \r
+                                       "width": 259\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-20T11:33:12Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 17919, \r
+                                       "height": 600, \r
+                                       "id": 8, \r
+                                       "updated_at": "2011-11-20T11:33:12Z", \r
+                                       "width": 800\r
+                                   },\r
+                                   {\r
+                                       "created_at": "2011-11-20T11:33:12Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 17919, \r
+                                       "height": 600, \r
+                                       "id": 9, \r
+                                       "updated_at": "2011-11-20T11:33:12Z", \r
+                                       "width": 800\r
+                                   },\r
+                                   {\r
+                                       "created_at": "2011-11-20T11:33:12Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 17919, \r
+                                       "height": 600, \r
+                                       "id": 10, \r
+                                       "updated_at": "2011-11-20T11:33:12Z", \r
+                                       "width": 800\r
+                                   },\r
+                                   {\r
+                                       "created_at": "2011-11-20T11:33:12Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 17919, \r
+                                       "height": 600, \r
+                                       "id": 11, \r
+                                       "updated_at": "2011-11-20T11:33:12Z", \r
+                                       "width": 800\r
+                                   },\r
+                                   {\r
+                                       "created_at": "2011-11-22T09:17:20Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 9055, \r
+                                       "height": 473, \r
+                                       "id": 12, \r
+                                       "updated_at": "2011-11-22T09:17:20Z", \r
+                                       "width": 405\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-22T10:11:07Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 8758, \r
+                                       "height": 464, \r
+                                       "id": 13, \r
+                                       "updated_at": "2011-11-22T10:11:07Z", \r
+                                       "width": 366\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-24T09:05:12Z", \r
+                                       "ext": "gif", \r
+                                       "filesize": 6431, \r
+                                       "height": 386, \r
+                                       "id": 16, \r
+                                       "updated_at": "2011-11-24T09:05:12Z", \r
+                                       "width": 453\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-26T04:52:12Z",\r
+                                       "ext": "gif", \r
+                                       "filesize": 6421, \r
+                                       "height": 426, \r
+                                       "id": 17, \r
+                                       "updated_at": "2011-11-26T04:52:12Z", \r
+                                       "width": 306\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-26T04:52:12Z",\r
+                                       "ext": "gif", \r
+                                       "filesize": 6421, \r
+                                       "height": 426, \r
+                                       "id": 18, \r
+                                       "updated_at": "2011-11-26T04:52:12Z", \r
+                                       "width": 306\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-26T04:52:12Z",\r
+                                       "ext": "gif", \r
+                                       "filesize": 6421, \r
+                                       "height": 426, \r
+                                       "id": 19, \r
+                                       "updated_at": "2011-11-26T04:52:12Z", \r
+                                       "width": 306\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-26T04:52:12Z",\r
+                                       "ext": "gif", \r
+                                       "filesize": 6421, \r
+                                       "height": 426, \r
+                                       "id": 20, \r
+                                       "updated_at": "2011-11-26T04:52:12Z", \r
+                                       "width": 306\r
+                                   }, \r
+                                   {\r
+                                       "created_at": "2011-11-26T04:52:12Z",\r
+                                       "ext": "gif", \r
+                                       "filesize": 6421, \r
+                                       "height": 426, \r
+                                       "id": 21, \r
+                                       "updated_at": "2011-11-26T04:52:12Z",\r
+                                       "width": 306\r
+                                   }\r
+                               ]\r
+                       }\r
+               \r
+               var ImageGroupIconClass = function( INDEX, data){\r
+                       var JQ_ICON_WRAP = jqItemOrigin.clone( true),\r
+                               SRC = [ BASE_PATH, data.id, '.', data.ext].join( ''),\r
+                               LOW_SRC = data.filesize && data.filesize > LIMIT_FILESIZE ? [ THUMB_PATH, data.id, '.', data.ext].join( '') : null,\r
+                               reversibleImage = null,\r
+                               onEnterFlag = false;\r
+                       JQ_ICON_WRAP.children( 'div').eq( 0).html( data.filesize + 'bytes');\r
+                       jqContainer.append( JQ_ICON_WRAP.css( { left: INDEX * itemW}));\r
+                       \r
+                       return {\r
+                               onEnter: function(){\r
+                                       if( onEnterFlag === true) return;\r
+                                       reversibleImage = pettanr.image.createReversibleImage( LOW_SRC || SRC, itemW, itemH, function( url, imgW, imgH){\r
+                                               if( reversibleImage === null) {\r
+                                                       alert( url);\r
+                                                       return;\r
+                                               }\r
+                                               /*\r
+                                                * ieでサイズが取れない、、、\r
+                                                */\r
+                                               imgW = imgW || data.width || 64;\r
+                                               imgH = imgH || data.height || 64;\r
+                                               JQ_ICON_WRAP.children( 'div').eq( 1).html( imgW +'x' +imgH);\r
+                                               var zoom = 128 /( imgW > imgH ? imgW : imgH),\r
+                                                       h = Math.floor( imgH *zoom),\r
+                                                       w = Math.floor( imgW *zoom);\r
+                                               reversibleImage.elm.style.width = w +'px';\r
+                                               reversibleImage.elm.style.height = h +'px';\r
+                                               reversibleImage.elm.style.margin = Math.floor( itemH /2 -h /2)+'px 0 0';\r
+                                               reversibleImage.resize( w, h);\r
+                                               JQ_ICON_WRAP.click( function( e){\r
+                                                       pettanr.overlay.hide();\r
+                                                       if (onUpdateFunction) {\r
+                                                               if( LOW_SRC === null){\r
+                                                                       onUpdateFunction( SRC, imgW, imgH);\r
+                                                               } else {\r
+                                                                       ( function( onUpdate){\r
+                                                                               pettanr.util.loadImage( SRC,\r
+                                                                                       function( _abspath, imgW, imgH){\r
+                                                                                               onUpdate( SRC, imgW, imgH);\r
+                                                                                               onUpdate = null;\r
+                                                                                       },\r
+                                                                                       function( _abspath){\r
+                                                                                               onUpdate( SRC, data.width || 64, data.height || 64);\r
+                                                                                               onUpdate = null;\r
+                                                                                       }\r
+                                                                               );                                                                              \r
+                                                                       })( onUpdateFunction); // close()で値が消えるので、クロージャに保持\r
+                                                               }\r
+                                                       }\r
+                                                       close();\r
+                                               });\r
+                                       });\r
+                                       JQ_ICON_WRAP.children( 'img').replaceWith( reversibleImage.elm);\r
+                                       onEnterFlag = true;                             \r
+                               },\r
+                               destroy: function(){\r
+                                       reversibleImage && reversibleImage.destroy();\r
+                                       JQ_ICON_WRAP.remove();\r
+                                       reversibleImage = JQ_ICON_WRAP = null;\r
+                                       delete this.destroy;\r
+                               }\r
+                       }\r
+               }\r
+               \r
+               function close(){\r
+                       jqContainer.stop().animate( {\r
+                                       height: 0,\r
+                                       top:    Math.floor( windowH /2)\r
+                               }, function(){\r
+                                       jqWrap.hide()\r
+                               });\r
+                       while( ICON_ARRAY.length > 0){\r
+                               ICON_ARRAY.shift().destroy();\r
+                       }\r
+                       onEnterInterval !== null && window.clearTimeout( onEnterInterval);\r
+                       onUpdateFunction = onEnterInterval = null;\r
+               }\r
+               function onEnterShowImage(){\r
+                       var l = ICON_ARRAY.length,\r
+                               _start = -wrapX /itemW -1,\r
+                               _end = _start + winW /itemW +1;\r
+                       for( var i=0; i<l; ++i){\r
+                               _start < i && i < _end && ICON_ARRAY[ i].onEnter();\r
+                       }\r
+                       onEnterInterval !== null && window.clearTimeout( onEnterInterval);\r
+                       onEnterInterval = null;\r
+               }\r
+               function clickOK(){\r
+                       pettanr.overlay.hide();\r
+                       // onUpdateFunction && onUpdateFunction( textElement);\r
+                       close();\r
+               }\r
+               return {\r
+                       init: function(){\r
+                               this.jqWrap = jqWrap = $( '#image-gruop-wrapper').hide();\r
+                               jqContainer = $( '#image-icon-container').mousewheel(\r
+                                       function( e, delta){\r
+                                               if( winW < containerW){\r
+                                                       wrapX += delta *WHEEL_DELTA;\r
+                                                       wrapX = wrapX > 0 ? 0 : wrapX < winW -containerW ? winW -containerW : wrapX;\r
+                                                       jqContainer.css( { left: wrapX});\r
+                                                       \r
+                                                       onEnterInterval !== null && window.clearTimeout( onEnterInterval);\r
+                                                       onEnterInterval = window.setTimeout( onEnterShowImage, 500);\r
+                                               }\r
+                                               //e.stopPropagation();\r
+                                               return false;\r
+                                       });\r
+                               containerH = pettanr.util.getElementSize( jqContainer.get( 0)).height;\r
+                               jqItemOrigin = $( $( '#imageGruopItemTemplete').remove().html());\r
+                               var itemSize = pettanr.util.getElementSize( jqItemOrigin.get( 0));\r
+                               itemW = itemSize.width;\r
+                               itemH = itemSize.height;\r
+                               jqName = $( '#gruop-name-display');\r
+                               jqButton = $( '#image-gruop-button').click( clickOK);\r
+                               buttonW = pettanr.util.getElementSize( jqButton.get( 0)).width;\r
+                               \r
+                               delete IMAGE_GROUP_EXPROLER.init;\r
+                       },\r
+                       jqWrap: null,\r
+                       show: function( _onUpdateFunction){\r
+                               onUpdateFunction = _onUpdateFunction;\r
+                               pettanr.overlay.show( this);\r
+                               \r
+                               var CURRENT_GROUP_ARRAY = IMAGE_DATA[ 'pen001'] || [],\r
+                                       l = CURRENT_GROUP_ARRAY.length;\r
+                               for( var i=0; i<l; ++i){\r
+                                       ICON_ARRAY.push( ImageGroupIconClass.apply( {}, [ i, CURRENT_GROUP_ARRAY[ i]]));\r
+                               }\r
+                               wrapX = 0;\r
+                               containerW = l * itemW;\r
+                               \r
+                               winW = windowW;\r
+                               var w = winW > containerW ? winW : containerW,\r
+                                       h = windowH > containerH ? containerH : windowH;\r
+                               \r
+                               jqWrap.show();\r
+                               jqContainer.css( {\r
+                                       width:          w,\r
+                                       height:         0,\r
+                                       left:           0,\r
+                                       top:            Math.floor( windowH /2)\r
+                               }).stop().animate( {\r
+                                       height:         h,\r
+                                       top:            Math.floor( windowH /2 -h /2)\r
+                               });\r
+                               \r
+                               jqButton.css( {\r
+                                       left:           Math.floor( winW /2 -buttonW /2),\r
+                                       top:            Math.floor( windowH /2 +containerH /2 +10)\r
+                               });\r
+                               \r
+                               onEnterShowImage();\r
+                       },\r
+                       onWindowResize: function( _windowW, _windowH){\r
+                               var w = _windowW > containerW ? _windowW : containerW,\r
+                                       h = _windowH > containerH ? containerH : _windowH,\r
+                                       offsetW = Math.floor( _windowW /2 -winW /2);\r
+                               winW = _windowW;\r
+                               if( offsetW <= 0){ // smaller\r
+                                       jqContainer.css( {\r
+                                               left:                           offsetW,\r
+                                               width:                          w\r
+                                       }).animate( {\r
+                                               left:                           0,\r
+                                               top:                            Math.floor( _windowH /2 -h /2)\r
+                                       });                                     \r
+                               } else {\r
+                                       jqContainer.css( { // bigger\r
+                                               left:                           0,\r
+                                               width:                          w,\r
+                                               borderLeftWidth:        offsetW\r
+                                       }).animate( {\r
+                                               top:                            Math.floor( _windowH /2 -h /2),\r
+                                               borderLeftWidth:        0\r
+                                       });\r
+                               }\r
+                               jqButton.css( {\r
+                                       left:           Math.floor( _windowW /2 -buttonW /2),\r
+                                       top:            Math.floor( _windowH /2 +containerH /2 +10)\r
+                               });\r
+                               onEnterShowImage();\r
+                       },\r
+                       onClose: close,\r
+                       ID: 'imageGroupExproler'\r
+               }\r
+       })();\r
+\r
+/* ----------------------------------------\r
+ * WINDOWS_CONTROL\r
+ */    \r
+       var WINDOWS_CONTROL = ( function(){\r
+               /*\r
+                *  表示上手前にあるwindowは、WINDOW_ARRAYの先頭にあり、htmlでは後ろにある。\r
+                */\r
+               var DEFAULT_MIN_WINDOW_WIDTH = 200,\r
+                       DEFAULT_MIN_WINDOW_HEIGHT = 200,\r
+                       WINDOW_ARRAY = [],\r
+                       WINDOW_BODY_BODER_SIZE = 1,\r
+                       jqContainer,\r
+                       currentWindow,\r
+                       currentWindowIndex = -1,\r
+                       log;\r
+\r
+               var jqWindowOrigin,\r
+                       closeButtonWidth;\r
+               var WindowClass = function( bodyTempleteID, title, x, y, w, h, visible, CLOSE_BUTTON_ENABLED, RESIZE_BUTTON_ENABLED, minWindowW, minWindowH){\r
+                       var MOUSE_CURSOR = updateMouseCursor,\r
+                               MENUBAR_SELWCTION = MENU_BAR_CONTROL.WINDOW.createSelection( \r
+                                       ( visible !== true ? 'show ' : 'hide ') +title,\r
+                                       null, onMenuClick, true\r
+                               ),\r
+                               jqStage,\r
+                               jqWrapper, jqHeader, elmBody, elmBodyStyle,\r
+                               startX, startY, startW, startH,\r
+                               xOffset, yOffset,\r
+                               headerH, bodyH,\r
+                               isDragging = false,\r
+                               isResizing = false,\r
+                               bodyIsTachable = false,\r
+                               instance;\r
+\r
+                       function onMenuClick(){\r
+                               visible === true ? instance.close() : instance.open();\r
+                       }\r
+                       function update( _x, _y, _w, _h){\r
+                               ( w !== _w || h !== _h) && instance.onResize && instance.onResize( _w, _h);\r
+                               x = _x !== undefined ? _x : x;\r
+                               y = _y !== undefined ? _y : y;\r
+                               w = _w !== undefined ? _w : w;\r
+                               h = _h !== undefined ? _h : h;\r
+                               y = y > MENU_BAR_CONTROL.h ? y : MENU_BAR_CONTROL.h;\r
+                               jqWrapper.css( {\r
+                                       left:           x,\r
+                                       top:            y,\r
+                                       width:          w,\r
+                                       height:         h\r
+                               });\r
+                               bodyH = h -headerH;\r
+                               elmBodyStyle.height = bodyH +'px';\r
+                       }\r
+                       function bodyBackOrForward( isBack){\r
+                               if( !instance) return;\r
+                               if( bodyIsTachable === !isBack) return;\r
+                               elmBodyStyle.position = isBack === true ? 'relative' : 'absolute';\r
+                               elmBodyStyle.left =             isBack === true ? 0  : x +'px';\r
+                               elmBodyStyle.top =              isBack === true ? 0  : y +headerH +'px';\r
+                               elmBodyStyle.width =    isBack === true ? '' : ( w -WINDOW_BODY_BODER_SIZE *2) +'px';\r
+                               bodyIsTachable === isBack && isBack === true ? jqWrapper.append( elmBody) : jqStage.append( elmBody);\r
+                               bodyIsTachable = !isBack;\r
+                       }\r
+                       function onWindowResize( e){\r
+                               bodyBackOrForward( true);\r
+                               isResizing = true;\r
+                               startX = x;\r
+                               startY = y;\r
+                               startW = w;\r
+                               startH = h;\r
+                               xOffset = e.pageX;\r
+                               yOffset = e.pageY;\r
+                               MOUSE_CURSOR( 'nw-resize');\r
+                               e.stopPropagation();\r
+                               return false;\r
+                       }\r
+                       return {\r
+                               init: function( jqContainer){\r
+                                       /*\r
+                                        * setTimeout で呼ばれるグローバルメソッドは、this でなく instance を使う.\r
+                                        */\r
+                                       instance = this;\r
+                                       \r
+                                       jqWindowOrigin = jqWindowOrigin || ( function(){\r
+                                               return $( $( '#windowTemplete').remove().html());\r
+                                       })();\r
+                                       closeButtonWidth = closeButtonWidth || ( function(){\r
+                                               return pettanr.util.getElementSize( jqWindowOrigin.clone( true).find( '.window-close-button').get( 0)).width;\r
+                                       })();\r
+                                       \r
+                                       jqStage = jqEditor;\r
+                                       this.$ = jqWrapper = jqWindowOrigin.clone( true);\r
+                                       jqHeader = jqWrapper.children( '.window-header').eq( 0).html( title);\r
+                                       headerH = pettanr.util.getElementSize( jqHeader.get( 0)).height;\r
+                                       elmBody = jqWrapper.children( '.window-body').get( 0);\r
+                                       elmBodyStyle = elmBody.style;\r
+                                       if( bodyTempleteID) {\r
+                                               jqWrapper.find( '.window-body-insert-position').replaceWith( $( $( '#' +bodyTempleteID).remove().html()));\r
+                                       } else {\r
+                                               jqWrapper.find( '.window-body-insert-position').remove();\r
+                                       }\r
+                                       CLOSE_BUTTON_ENABLED !== true && jqWrapper.find( '.window-close-button').remove();\r
+                                       \r
+                                       this.onInit && this.onInit();\r
+                                       delete this.init;\r
+                               },\r
+                               x: function(){ return x;},\r
+                               y: function(){ return y;},\r
+                               w: function(){ return w;},\r
+                               h: function(){ return h;},\r
+                               $: null,\r
+                               title: function( _title){\r
+                                       _title !== undefined && jqHeader.html( _title);\r
+                                       title = _title || title;\r
+                                       return title;\r
+                               },\r
+                               visible: visible,\r
+                               firstOpen: function(){\r
+                                       if( RESIZE_BUTTON_ENABLED === true){\r
+                                               jqWrapper.find( '.window-resize-button').eq( 0).mousedown( onWindowResize);\r
+                                       } else {\r
+                                               jqWrapper.find( '.window-resize-button').remove();\r
+                                       }\r
+                                       update( x, y, w, h);\r
+                                       \r
+                                       this.onFirstOpen && this.onFirstOpen();\r
+                                       \r
+                                       delete this.firstOpen;\r
+                               },\r
+                               open: function(){\r
+                                       if( visible === true) return;\r
+                                       instance.visible = visible = true;\r
+                                       openWindow( instance);\r
+                                       MENUBAR_SELWCTION.title( 'hide ' +title);\r
+                                       \r
+                                       for( var i=0, l = WINDOW_ARRAY.length; i<l; ++i){\r
+                                               if( WINDOW_ARRAY[ i] === instance){\r
+                                                       WINDOW_ARRAY.splice( i, 1);\r
+                                                       WINDOW_ARRAY.unshift( instance);\r
+                                                       currentWindow = null;\r
+                                                       currentWindowIndex = -1;\r
+                                               }\r
+                                       }\r
+                               },\r
+                               close: function(){\r
+                                       if( visible === false) return;\r
+                                       instance.visible = visible = false;\r
+                                       instance.onClose && setTimeout( instance.onClose, 0);\r
+                                       closeWindow( instance);\r
+                                       MENUBAR_SELWCTION.title( 'show ' +title);\r
+                               },\r
+                               bodyBackOrForward: bodyBackOrForward,\r
+                               onMouseDown: function( _mouseX, _mouseY){\r
+                                       if( x > _mouseX || y > _mouseY || x +w < _mouseX || y +headerH < _mouseY ) return;\r
+                                       if( CLOSE_BUTTON_ENABLED === true && x +w -closeButtonWidth < _mouseX){\r
+                                               this.close();\r
+                                               return;\r
+                                       }\r
+                                       isDragging = true;\r
+                                       MOUSE_CURSOR( 'move');                          \r
+                                       startX = x;\r
+                                       startY = y;\r
+                                       startW = w;\r
+                                       startH = h;\r
+                                       xOffset = _mouseX;\r
+                                       yOffset = _mouseY;\r
+                               },\r
+                               onMouseUp: function( _mouseX, _mouseY){\r
+                                       isDragging = isResizing = false;\r
+                                       MOUSE_CURSOR( '');\r
+                               },\r
+                               onMouseMove: function( _mouseX, _mouseY){\r
+                                       var _updateX = _mouseX -xOffset,\r
+                                               _updateY = _mouseY -yOffset;\r
+                                       \r
+                                       if( isResizing === true){\r
+                                               var _w = startW +_updateX,\r
+                                                       _h = startH +_updateY;\r
+                                               update( startX, startY, _w < minWindowW ? minWindowW : _w, _h < minWindowH ? minWindowH : _h);\r
+                                               return;\r
+                                       } else\r
+                                       if( isDragging === true) {\r
+                                               update( startX +_updateX, startY +_updateY);\r
+                                               return;\r
+                                       } else\r
+                                       if( x > _mouseX || x +w < _mouseX ) return;\r
+       \r
+                                       ( y <= _mouseY && y +headerH >= _mouseY ) ?\r
+                                               MOUSE_CURSOR( 'pointer') :      // hit to header\r
+                                               MOUSE_CURSOR( '');\r
+                                       bodyBackOrForward( y +headerH > _mouseY || y +headerH +bodyH < _mouseY);\r
+                               },\r
+                               onMouseOut: function( _mouseX, _mouseY){\r
+                                       bodyIsTachable === true && bodyBackOrForward( true);\r
+                                       isDragging = false;\r
+                                       MOUSE_CURSOR( '');\r
+                               },\r
+                               busy: function(){\r
+                                       return isDragging === true || isResizing === true;\r
+                               },\r
+                               bodyHeight: function(){\r
+                                       return  bodyH;\r
+                               }\r
+                       }\r
+               };\r
+               \r
+               function getCurrentWindow( _mouseX, _mouseY){\r
+                       if( currentWindow && currentWindow.busy() === true) return currentWindowIndex;\r
+                       var l = WINDOW_ARRAY.length,\r
+                               _currentWindow = null,\r
+                               _win, _x, _y;\r
+                       currentWindowIndex = -1;\r
+                       for( var i=0; i<l; i++){\r
+                               _win = WINDOW_ARRAY[ i];\r
+                               if( _win.visible !== true) continue;\r
+                               _x = _win.x();\r
+                               _y = _win.y();\r
+                               if( _x <= _mouseX && _y <= _mouseY && _x +_win.w() >= _mouseX && _y +_win.h() >= _mouseY){\r
+                                       _currentWindow = _win;\r
+                                       currentWindowIndex = i;\r
+                                       break;\r
+                               }\r
+                       }\r
+                       currentWindow && currentWindow !== _currentWindow && currentWindow.onMouseOut( _mouseX, _mouseY);\r
+                       currentWindow = _currentWindow;\r
+                       return currentWindowIndex;\r
+               }\r
+               function openWindow( _window){\r
+                       if( _window.visible !== true) return;\r
+                       var _jqWindow = _window.$;\r
+                       jqContainer.append( _jqWindow);// appendした後に fadeIn() しないと ie で filterが適用されない.\r
+                       _jqWindow.fadeIn(\r
+                               function(){\r
+                                       _window.firstOpen && _window.firstOpen();\r
+                                       _window.onOpen && setTimeout( _window.onOpen, 0);\r
+                               }\r
+                       );\r
+                       return;\r
+               }\r
+               function closeWindow( _window){\r
+                       if( _window.visible !== false) return;\r
+                       var l = WINDOW_ARRAY.length;\r
+                       for( var i=0; i<l; ++i){\r
+                               if( WINDOW_ARRAY[ i] === _window){\r
+                                       //WINDOW_ARRAY.splice( i, 1);\r
+                                       //WINDOW_ARRAY.push( _window);\r
+                                       _window.$.stop().fadeOut( function(){\r
+                                               this.parentNode.removeChild( this);\r
+                                       });\r
+                                       return;\r
+                               }\r
+                       }\r
+               }\r
+               \r
+               return {\r
+                       init: function(){\r
+                               jqContainer = $( '#window-container');\r
+                               \r
+                               var l = WINDOW_ARRAY.length,\r
+                                       _window;\r
+                               for( var i=l-1; i >= 0; --i){\r
+                                       _window = WINDOW_ARRAY[ i];\r
+                                       _window.init && _window.init( jqContainer);\r
+                                       _window.visible === true && openWindow( _window);\r
+                               }\r
+                               log = $( '#window-log');\r
+                               \r
+                               delete WINDOWS_CONTROL.init;\r
+                       },\r
+                       onMouseMove: function( _mouseX, _mouseY){\r
+                               var _index = getCurrentWindow( _mouseX, _mouseY);\r
+                               if( _index === 0){\r
+                                       currentWindow.onMouseMove( _mouseX, _mouseY);\r
+                                       return true;\r
+                               } else\r
+                               if( _index !== -1){ // 先頭のクリックでない場合\r
+                               // Array を前に\r
+                                       WINDOW_ARRAY.splice( currentWindowIndex, 1);\r
+                                       WINDOW_ARRAY.unshift( currentWindow);\r
+                               // Domを最後に\r
+                                       jqContainer.append( currentWindow.$);\r
+                                       currentWindowIndex = 0;\r
+                                       return true;\r
+                               }\r
+                               return false;\r
+                       },\r
+                       onMouseUp: function( _mouseX, _mouseY){\r
+                               if( getCurrentWindow( _mouseX, _mouseY) === 0){\r
+                                       currentWindow.onMouseUp( _mouseX, _mouseY);\r
+                                       return true;\r
+                               }\r
+                               return false;\r
+                       },\r
+                       onMouseDown: function( _mouseX, _mouseY){\r
+                               if( getCurrentWindow( _mouseX, _mouseY) === 0){\r
+                                       currentWindow.onMouseDown( _mouseX, _mouseY);\r
+                                       return true;\r
+                               }\r
+                               return false;\r
+                       },\r
+                       busy: function(){\r
+                               return currentWindow !== null;\r
+                       },\r
+                       onWindowResize: function( _windowW, _windowH){\r
+                               /*\r
+                                * 画面外に出るwindowの移動\r
+                                */\r
+                       },\r
+                       createWindow: function( scope, EXTENDS, bodyTempleteID, title, x, y, w, h, opt_visible, opt_closeButtonEnabled, opt_resizeButtonEnabled, opt_minWindowW, opt_minWindowH){\r
+                               opt_visible = opt_visible !== false;\r
+                               opt_closeButtonEnabled = opt_closeButtonEnabled === true;\r
+                               opt_resizeButtonEnabled = opt_resizeButtonEnabled === true;\r
+                               opt_minWindowW = opt_minWindowW || ( w < DEFAULT_MIN_WINDOW_WIDTH) ? w : DEFAULT_MIN_WINDOW_WIDTH;\r
+                               opt_minWindowH = opt_minWindowH || ( h < DEFAULT_MIN_WINDOW_HEIGHT) ? h : DEFAULT_MIN_WINDOW_HEIGHT;\r
+                               \r
+                               var _window = pettanr.util.extend(\r
+                                       WindowClass.apply( scope, [ bodyTempleteID, title, x, y, w, h, opt_visible, opt_closeButtonEnabled, opt_resizeButtonEnabled, opt_minWindowW, opt_minWindowH]),\r
+                                       EXTENDS\r
+                               );\r
+                               WINDOW_ARRAY.unshift( _window);\r
+                               WINDOWS_CONTROL.init === undefined && _window.init( jqContainer);\r
+                               WINDOWS_CONTROL.init === undefined && openWindow( _window);\r
+                               return _window;\r
+                       }\r
+               }\r
+       })();\r
+\r
+/* ----------------------------------------\r
+ * TOOL_BOX_WINDOW\r
+ */\r
+       var TOOL_BOX_WINDOW = ( function(){\r
+               var addImageButton, addTextButton, editBgButton, switchGridButton, popupHelpButton, postButton,\r
+                       gridSwitchFunction,\r
+                       instance;\r
+                       \r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 73, false, true, addImage);\r
+               MENU_BAR_CONTROL.EDIT.createSelection( 'Add Image', 'ctrl + I', addImage, true, true, false);\r
+               \r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 84, false, true, addText);\r
+               MENU_BAR_CONTROL.EDIT.createSelection( 'Add Text', 'ctrl + T', addText, true, false, true);\r
+\r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 71, false, true, switchGrid);\r
+               MENU_BAR_CONTROL.EDIT.createSelection( 'show Grid', 'ctrl + G', switchGrid, true, true, true);\r
+\r
+               function addImage( e){\r
+                       setTimeout( COMIC_ELEMENT_CONTROL.createImageElement, 0);\r
+                       e && e.preventDefault();\r
+                       return false;\r
+               }\r
+               function addText( e){\r
+                       setTimeout( COMIC_ELEMENT_CONTROL.createTextElement, 0);\r
+                       e && e.preventDefault();\r
+                       return false;\r
+               }\r
+               function switchGrid( e){\r
+                       setTimeout( gridSwitchFunction, 0);\r
+                       e && e.preventDefault();\r
+                       return false;\r
+               }\r
+               function popupHelp( e){\r
+                       instance.bodyBackOrForward( true);\r
+                       setTimeout( HELP_DOCUMENTS_WINDOW.open, 0);\r
+                       e && e.preventDefault();\r
+                       return false;\r
+               }\r
+               function editBG( e){\r
+                       instance.bodyBackOrForward( true);\r
+                       setTimeout( INFOMATION_WINDOW.open, 0); \r
+                       e && e.preventDefault();\r
+                       return false;\r
+               }\r
+               \r
+               return WINDOWS_CONTROL.createWindow(\r
+                       this,\r
+                       {\r
+                               onInit: function(){\r
+                                       instance = this;\r
+                                       delete this.onInit;\r
+                               },\r
+                               onFirstOpen: function(){\r
+                                       addImageButton = $( '#toolbox-add-image-button').click( addImage);\r
+                                       addTextButton = $( '#toolbox-add-text-button').click( addText);\r
+                                       editBgButton = $( '#toolbox-edit-bg-button').click( editBG);\r
+                                       switchGridButton = $( '#toolbox-switch-grid').click( switchGrid);\r
+                                       popupHelpButton = $( '#toolbox-popup-help-button').click( popupHelp);\r
+                                       \r
+                                       postButton = $( '#toolbox-post-button');\r
+                                       \r
+                                       delete this.onFirstOpen;\r
+                               },\r
+                               setGridSwitchFunction: function( _gridSwitchFunction){\r
+                                       gridSwitchFunction = _gridSwitchFunction || gridSwitchFunction;\r
+                               }\r
+                       },\r
+                       'toolbox-window', 'Tool box', 0, 215, 110, 290, true\r
+               );\r
+       })();\r
+/* ----------------------------------------\r
+ * INFOMATION_WINDOW\r
+ */                    \r
+       var INFOMATION_WINDOW = ( function(){\r
+               var FADE_EFFECT_ENABLED = pettanr.ua.isIE === false || pettanr.ua.ieVersion >= 8,\r
+                       FADE_IN_EFFECT = FADE_EFFECT_ENABLED === true ? 'fadeIn' : 'show',\r
+                       FADE_OUT_EFFECT = FADE_EFFECT_ENABLED === true ? 'fadeOut' : 'hide',\r
+                       backgroundInfomationElm,\r
+                       jqComicElementInformation,\r
+                       elmValueX, elmValueY, elmValueZ, elmValueA, elmValueW, elmValueH, elmAspect,\r
+                       elmPercentW, elmPercentH,\r
+                       currentComicElement = null,\r
+                       currentElementType = -1;\r
+\r
+               return WINDOWS_CONTROL.createWindow(\r
+                       this,\r
+                       {\r
+                               onFirstOpen: function(){\r
+                                       backgroundInfomationElm = $( '#panel-background-information');\r
+                                       \r
+                                       jqComicElementInformation = $( '#comic-element-infomation').hide().css( {\r
+                                               height:         this.bodyHeight()\r
+                                       });\r
+                                       var TAB_GROUP_ID = 'comic-element-attribute';\r
+                                       var CREATER = pettanr.key.createEditableText;\r
+                                       elmValueX = CREATER( $( '#comic-element-x'), null, TAB_GROUP_ID);\r
+                                       elmValueY = CREATER( $( '#comic-element-y'), null, TAB_GROUP_ID);\r
+                                       elmValueZ = CREATER( $( '#comic-element-z'), null, TAB_GROUP_ID);\r
+                                       elmValueA = CREATER( $( '#comic-element-a'), null, TAB_GROUP_ID);\r
+                                       elmValueW = CREATER( $( '#comic-element-w'), null, TAB_GROUP_ID);\r
+                                       elmValueH = CREATER( $( '#comic-element-h'), null, TAB_GROUP_ID);\r
+                                       elmPercentW = CREATER( $( '#comic-element-w-percent'), null, TAB_GROUP_ID);\r
+                                       elmPercentH = CREATER( $( '#comic-element-h-percent'), null, TAB_GROUP_ID);\r
+                                       elmAspect = $( '#comic-element-keep-aspect');\r
+                                       delete this.onFirstOpen;\r
+                               },\r
+                               onResize: function( w, h){\r
+                                       jqComicElementInformation && jqComicElementInformation.css( {\r
+                                               height: this.bodyHeight()\r
+                                       });\r
+                               },\r
+                               update: function( _elementType, x, y, z, a, w, h, wPercent, hPercent, keepAspect){\r
+                                       if( !backgroundInfomationElm) return; // なぜか !backgroundInfomationElm が必要\r
+                                       if( currentElementType !== _elementType){\r
+                                               if( _elementType !== -1){\r
+                                                       if( _elementType === 1){\r
+                                                               elmValueA.show();\r
+                                                               elmPercentW.hide();\r
+                                                               elmPercentH.hide();\r
+                                                               elmAspect.hide();\r
+                                                       } else {\r
+                                                               elmValueA.hide();\r
+                                                               elmPercentW.show();\r
+                                                               elmPercentH.show();\r
+                                                               elmAspect.show();\r
+                                                       }\r
+                                                       currentElementType === -1 && jqComicElementInformation.stop().css( {\r
+                                                               filter:         '',\r
+                                                               opacity:        ''\r
+                                                       })[ FADE_IN_EFFECT]();\r
+                                               } else {\r
+                                                       currentElementType !== -1 && jqComicElementInformation.stop().css({\r
+                                                               filter:         '',\r
+                                                               opacity:        ''\r
+                                                       })[ FADE_OUT_EFFECT]();\r
+                                               }\r
+                                               currentElementType = _elementType;\r
+                                       }\r
+                                       if( currentElementType !== -1){\r
+                                               elmValueX.update( x);\r
+                                               elmValueY.update( y);\r
+                                               elmValueZ.update( z);\r
+                                               _elementType === 1 && elmValueA.update( a);\r
+                                               elmValueW.update( w);\r
+                                               elmValueH.update( h);\r
+                                               _elementType === 0 && elmPercentW.update( wPercent);\r
+                                               _elementType === 0 && elmPercentH.update( hPercent);                                    \r
+                                       } else {\r
+                                               \r
+                                       }\r
+                               }\r
+                       },\r
+                       'infomation-window', 'Infomation', 0, 30, 200, 180, true\r
+               );\r
+       })();\r
+\r
+/* ----------------------------------------\r
+ * HELP_WINDOW\r
+ */\r
+       var HELP_DOCUMENTS_WINDOW = ( function(){\r
+               var visible = true,\r
+                       hasAjaxContents = false,\r
+                       jqAjaxContents,\r
+                       jqNaviItems,\r
+                       jqPages,\r
+                       HELP = MENU_BAR_CONTROL.HELP,\r
+                       onLoadFunction = HELP.createAjaxSelection( onFirstOpen),\r
+                       instance;\r
+               function jumpPage( _index){\r
+                       \r
+               }\r
+               function onFirstOpen( _pageIndex){\r
+                       _pageIndex = _pageIndex || 0;\r
+                       if( hasAjaxContents === false){\r
+                               $.ajax({\r
+                                       url:            'help/jp.xml',\r
+                                       dataType:       'xml',\r
+                                       success:        function( _xml){\r
+                                               var jqXML = $( _xml),\r
+                                                       helpTitle = jqXML.find( 'pages').eq( 0).attr( 'title'),\r
+                                                       elmNavi = document.createElement( 'DIV'),\r
+                                                       elmItemOrigin = document.createElement( 'A'),\r
+                                                       elmPages = document.createElement( 'DIV'),\r
+                                                       elmPageOrigin = document.createElement( 'DIV'),\r
+                                                       elmTitleOrigin = document.createElement( 'H2'),\r
+                                                       elmPage,\r
+                                                       numPage = 0;\r
+                                               elmNavi.className = 'sidenavi';\r
+                                               elmItemOrigin.className = 'sidenavi-item';\r
+                                               elmItemOrigin.href = '#';\r
+                                               elmPages.className = 'page-contents';\r
+                                               elmPageOrigin.className = 'page-content';\r
+                                               elmPageOrigin.appendChild( elmTitleOrigin);\r
+                                               \r
+                                               // helpTitle && instance.title( helpTitle);\r
+                                               \r
+                                               jqXML.find( 'page').each( function(){\r
+                                                       var xmlPage = $( this),\r
+                                                               title = xmlPage.attr( 'title'),\r
+                                                               content = xmlPage.text();\r
+                                                       \r
+                                                       elmItemOrigin.innerHTML = title;\r
+                                                       elmNavi.appendChild( elmItemOrigin.cloneNode( true));\r
+                                                       \r
+                                                       elmTitleOrigin.innerHTML = title;\r
+                                                       elmPage = elmPageOrigin.cloneNode( true);\r
+                                                       elmPage.innerHTML = content;\r
+                                                       \r
+                                                       pettanr.util.cleanElement( elmPage);\r
+                                                       \r
+                                                       if( elmPage.childNodes.length > 0){\r
+                                                               elmPage.insertBefore( elmTitleOrigin.cloneNode( true), elmPage.childNodes[0]);\r
+                                                       } else {\r
+                                                               elmPage.appendChild( elmTitleOrigin.cloneNode( true));\r
+                                                       }\r
+                                                       elmPages.appendChild( elmPage);\r
+                                                       \r
+                                                       HELP.createSelection( title, null, ( function( _pageIndex){\r
+                                                               return function(){\r
+                                                                       HELP_DOCUMENTS_WINDOW.open();\r
+                                                                       onOpen( _pageIndex);                                                                    \r
+                                                               }\r
+                                                       })( numPage), true);\r
+                                                       ++numPage;\r
+                                               });\r
+                                               onLoadFunction();\r
+                                               onLoadFunction = null;\r
+                                               \r
+                                               jqAjaxContents.removeClass( 'loading').append( elmNavi, elmPages);\r
+                                               \r
+                                               jqNaviItems = jqAjaxContents.find( 'a.' +elmItemOrigin.className)\r
+                                                       .click( function( e){\r
+                                                               var that = this,\r
+                                                                       parent = this.parentNode,\r
+                                                                       i = ( function(){\r
+                                                                               var children = parent.getElementsByTagName( 'A'),\r
+                                                                                       l = children.length;\r
+                                                                               for( var i=0; i<l; ++i){\r
+                                                                                       if( children[ i] === that) return i;\r
+                                                                               }\r
+                                                                               return -1;\r
+                                                                       })();\r
+                                                               e.stopPropagation();\r
+                                                               if( i === -1) return false;\r
+                                                               jqNaviItems.removeClass( 'current').eq( i).addClass( 'current');\r
+                                                               jqPages.hide().eq( i).show();\r
+                                                               \r
+                                                               return false;\r
+                                                       });\r
+                                               jqAjaxContents.find( '.' +elmPageOrigin.className).find( 'a')\r
+                                                       .click( function( e){\r
+                                                               var that = this,\r
+                                                                       i = ( function(){\r
+                                                                               var href = that.href,\r
+                                                                                       i = href.split( '#jump'),\r
+                                                                                       n = i[1]\r
+                                                                               if( n && '' +parseFloat( n) === n){\r
+                                                                                       return parseFloat( n)\r
+                                                                               }\r
+                                                                               return -1;\r
+                                                                       })();\r
+                                                               e.stopPropagation();\r
+                                                               if( i === -1) return false;\r
+                                                               jqNaviItems.removeClass( 'current').eq( i).addClass( 'current');\r
+                                                               jqPages.hide().eq( i).show();\r
+                                                               \r
+                                                               return false;\r
+                                                       });\r
+                                               jqNaviItems.eq( _pageIndex).addClass( 'current');\r
+                                               jqPages = jqAjaxContents.find( '.page-content');\r
+                                               jqPages.eq( _pageIndex).show();\r
+                                       }\r
+                               });\r
+                               hasAjaxContents = true;\r
+                       }\r
+                       function onOpen( _pageIndex){\r
+                               _pageIndex = _pageIndex || 0;\r
+                               jqNaviItems.removeClass( 'current').eq( _pageIndex).addClass( 'current');\r
+                               jqPages.hide().eq( _pageIndex).show();\r
+                       }\r
+               }\r
+               return WINDOWS_CONTROL.createWindow(\r
+                       this,\r
+                       {\r
+                               onInit: function(){\r
+                                       instance = this;\r
+                                       jqAjaxContents = this.$.find( '.window-body').addClass( 'loading').css( { height: this.bodyHeight()});\r
+                                       delete this.onInit;\r
+                               },\r
+                               onFirstOpen: onFirstOpen,\r
+                               onResize: function( w, h){\r
+                                       jqAjaxContents && jqAjaxContents.css( { height: this.bodyHeight()});\r
+                               },\r
+                               setAjaxContent: function( html){\r
+                                       \r
+                                       delete this.onLoadAjaxContent;\r
+                               }\r
+                       },\r
+                       null, 'Help', 0, 215, 400, 350, false, true, true, 300, 300\r
+               );\r
+       })();\r
+\r
+/* ----------------------------------------\r
+ * GRID_CONTROL\r
+ */\r
+       var GRID_CONTROL = ( function(){\r
+               var elmGrid = document.getElementById( 'grid'),\r
+                       jQGrid,\r
+                       visible = false;\r
+               \r
+               function update(){\r
+                       jQGrid.css( {\r
+                               opacity:        '',\r
+                               fliter:         ''\r
+                       }).stop()[ visible === true ? 'fadeOut' : 'fadeIn']();\r
+                       visible = !visible;\r
+                       if( visible === true && !elmGrid.style.backgroundImage){\r
+                               elmGrid.style.backgroundImage = "url('grid.gif')";\r
+                       }\r
+                       return visible;\r
+               }\r
+               return {\r
+                       init: function(){\r
+                               jQGrid = $( elmGrid);\r
+                               TOOL_BOX_WINDOW.setGridSwitchFunction( update);\r
+                               delete GRID_CONTROL.init;\r
+                       },\r
+                       onCanvasResize: function( _canvasX, _canvasY){\r
+                               elmGrid.style.backgroundPosition = [ _canvasX % 10, 'px ', _canvasY % 10, 'px'].join( '');\r
+                               elmGrid.style.height = windowH +'px';\r
+                       },\r
+                       enabled: function(){\r
+                               return visible;\r
+                       }\r
+               }\r
+       })();\r
+               \r
+       /*\r
+        *      WHITE_GLASS_CONTROL\r
+        */     \r
+       var WHITE_GLASS_CONTROL = ( function(){\r
+               var styleTop = document.getElementById( 'whiteGlass-top').style,\r
+                       styleLeft = document.getElementById( 'whiteGlass-left').style,\r
+                       styleRight = document.getElementById( 'whiteGlass-right').style,\r
+                       styleBottom = document.getElementById( 'whiteGlass-bottom').style;\r
+               function resize( _canvasX, _canvasY, _canvasW, _canvasH){\r
+                       var     _w = _canvasW,\r
+                               _h = _canvasH,\r
+                               marginTop = _canvasY,\r
+                               marginBottom = windowH -_h -marginTop,\r
+                               marginX = _canvasX,\r
+                               rightWidth = windowW -_w -marginX;\r
+                       \r
+                       styleTop.height = ( marginTop < 0 ? 0 : marginTop) +'px';\r
+                       \r
+                       styleLeft.top = marginTop +'px';\r
+                       styleLeft.width = ( marginX < 0 ? 0 : marginX) +'px';\r
+                       styleLeft.height = ( _h + marginBottom) +'px';\r
+                       \r
+                       styleRight.top = marginTop +'px';\r
+                       styleRight.left = _w +marginX +'px';\r
+                       styleRight.width = ( rightWidth < 0 ? 0 : rightWidth) +'px';\r
+                       styleRight.height = ( _h + marginBottom) +'px';\r
+                       \r
+                       styleBottom.top = ( _h +marginTop) +'px';\r
+                       styleBottom.left = marginX +'px';\r
+                       styleBottom.width = _w +'px';\r
+                       styleBottom.height = ( marginBottom < 0 ? 0 : marginBottom) +'px';\r
+               }\r
+               return {\r
+                       onCanvasResize: resize\r
+               }\r
+       })();\r
+\r
+\r
+       var MIN_PANEL_HEIGHT = 20,\r
+               RESIZER_BORDER_WIDTH = 1;\r
+\r
+/*\r
+ * PANEL_CONTROL\r
+ */\r
+       var PANEL_CONTROL = ( function(){\r
+               var DEFAULT_PANEL_WIDTH = 400,\r
+                       DEFAULT_PANEL_HEIGHT = 300,\r
+                       BORDER_WIDTH = 2,\r
+                       canvasW, canvasH, canvasX, canvasY,\r
+                       xOffset, yOffset, startCanvasX, startCanvasY,\r
+                       isDragging = false,\r
+                       isCanvasDraggble = false;                       \r
+               \r
+               var     panelElm, borderWidth;\r
+               \r
+               function resize( isResizerTopAction, _x, _y, _w, _h){\r
+                       canvasX = _x !== undefined ? _x : canvasX;\r
+                       canvasY = _y !== undefined ? _y : canvasY;\r
+                       canvasW = _w !== undefined ? _w : canvasW;\r
+                       canvasH = _h !== undefined ? _h : canvasH;\r
+                       \r
+                       panelElm.css( {\r
+                               left:   canvasX -BORDER_WIDTH,\r
+                               top:    canvasY -BORDER_WIDTH,\r
+                               width:  canvasW,\r
+                               height: canvasH\r
+                       });\r
+                       \r
+                       PANEL_RESIZER_TOP.onCanvasResize( canvasX, canvasY, canvasW, canvasH);\r
+                       PANEL_RESIZER_BOTTOM.onCanvasResize( canvasX, canvasY, canvasW, canvasH);\r
+                       GRID_CONTROL.onCanvasResize( canvasX, canvasY);\r
+                       WHITE_GLASS_CONTROL.onCanvasResize( canvasX, canvasY, canvasW, canvasH);\r
+                       COMIC_ELEMENT_CONTROL.onCanvasResize( canvasX, canvasY, canvasW, canvasH, isResizerTopAction === true);\r
+               }\r
+               \r
+               function onSpaceUpdate(e){\r
+                       if( e.type === 'keyup'){\r
+                               currentListener === null && updateMouseCursor( '');\r
+                               isCanvasDraggble = false;\r
+                       } else {\r
+                               currentListener === null && updateMouseCursor( 'move');\r
+                               isCanvasDraggble = true;\r
+                       }\r
+               }\r
+               \r
+               return {\r
+                       init: function( _canvasW, _canvasH){\r
+                               panelElm = $( '#panel-border');\r
+                               borderWidth = panelElm.css( 'border-width');\r
+\r
+                               canvasW = _canvasW || DEFAULT_PANEL_WIDTH;\r
+                               canvasH = _canvasH || DEFAULT_PANEL_HEIGHT;\r
+                               canvasX = Math.floor( ( windowW -canvasW) /2);\r
+                               canvasY = Math.floor( ( windowH -canvasH) /2);\r
+\r
+                               pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 32, false, false, onSpaceUpdate);\r
+\r
+                               COMIC_ELEMENT_CONTROL.init( canvasX, canvasY, canvasW, canvasH);\r
+                               \r
+                               setTimeout( resize, 0);\r
+                               \r
+                               delete PANEL_CONTROL.init;\r
+                       },\r
+                       x: function(){\r
+                               return canvasX;\r
+                       },\r
+                       y: function(){\r
+                               return canvasY;\r
+                       },\r
+                       resize: resize,\r
+                       onWindowResize: function( _windowW, _windowH){\r
+                               canvasX = Math.floor(( _windowW - canvasW) / 2);\r
+                               canvasY = Math.floor(( _windowH - canvasH) / 2);\r
+                               resize();\r
+                       },\r
+                       onMouseMove: function( _mouseX, _mouseY){\r
+                               if( isCanvasDraggble === true && isDragging === true){\r
+                                       resize( false, startCanvasX +_mouseX -xOffset, startCanvasY +_mouseY -yOffset);\r
+                               }\r
+                       },\r
+                       onMouseUp: function( _mouseX, _mouseY){\r
+                               if( isCanvasDraggble === true){\r
+                                       isDragging = false;\r
+                                       updateMouseCursor( '');\r
+                               }\r
+                       },\r
+                       onMouseDown: function( _mouseX, _mouseY){\r
+                               if( isCanvasDraggble === true){\r
+                                       xOffset = _mouseX;\r
+                                       yOffset = _mouseY;\r
+                                       startCanvasX = canvasX;\r
+                                       startCanvasY = canvasY;\r
+                                       isDragging = true;\r
+                                       updateMouseCursor( 'move');\r
+                                       return true;\r
+                               }\r
+                       },\r
+                       busy: function(){\r
+                               return isDragging === true;\r
+                       }                               \r
+               }\r
+       })();\r
+\r
+/*\r
+ * --------------------------------------------------------------------------------------------\r
+ * panel resizer\r
+ */\r
+       var PanelResizerClass = function( ID, isTop){\r
+               var ELM = document.getElementById( ID),\r
+                       BORDER_WIDTH = 2,\r
+                       RESIZER_HEIGHT = 30,\r
+                       x = -BORDER_WIDTH /2,\r
+                       y = isTop === true ? ( -5 -RESIZER_HEIGHT -BORDER_WIDTH) : 0,\r
+                       w,\r
+                       h = RESIZER_HEIGHT,\r
+                       canvasX, canvasY, canvasW, canvasH,\r
+                       yOffset, startY, startH,\r
+                       isDragging = false,\r
+                       MOUSE_CURSOR = updateMouseCursor;\r
+                       \r
+               function restoreState( arg){\r
+                       if( arg && arg.length > 3){\r
+                               PANEL_CONTROL.resize( isTop, arg[ 0] || canvasX, arg[ 1] || canvasY, arg[ 2] || canvasW, arg[ 3] || canvasH);\r
+                       }\r
+               }\r
+                       \r
+               return {\r
+                       busy: function(){\r
+                               return isDragging;\r
+                       },\r
+                       onMouseDown: function( _mouseX, _mouseY){\r
+                               var _x = _mouseX -canvasX,\r
+                                       _y = _mouseY -canvasY;\r
+                               if( _x < x || x + w < _x || _y < y || y + h < _y) return false;\r
+                               yOffset = _y;\r
+                               startY = canvasY;\r
+                               startH = canvasH;\r
+                               isDragging = true;\r
+                               MOUSE_CURSOR( 'n-resize');\r
+                               return true;\r
+                       },\r
+                       onMouseMove: function( _mouseX, _mouseY){\r
+                               var _x = _mouseX -canvasX,\r
+                                       _y = _mouseY -canvasY;\r
+                               if( isDragging !== true){\r
+                                       if( _x < x || x + w < _x || _y < y || y + h < _y) return false;\r
+                                       COMIC_ELEMENT_OPERATOR.hide();\r
+                                       MOUSE_CURSOR( 'pointer');\r
+                                       return true;\r
+                               } else {\r
+                                       var move = _y -yOffset;\r
+                                       if( isTop === true){\r
+                                               if( canvasH - move < MIN_PANEL_HEIGHT){\r
+                                                       move = canvasH -MIN_PANEL_HEIGHT;\r
+                                               }\r
+                                               PANEL_CONTROL.resize( true, canvasX, canvasY + move, canvasW, canvasH - move);\r
+                                       } else {\r
+                                               var _h = startH +move;\r
+                                               if( 0 < _h && _h < windowH -canvasY -RESIZER_HEIGHT -5 -BORDER_WIDTH){\r
+                                                       PANEL_CONTROL.resize( false, canvasX, canvasY, canvasW, _h < MIN_PANEL_HEIGHT ? MIN_PANEL_HEIGHT : _h);\r
+                                               }\r
+                                       }\r
+                               }\r
+                               return true;\r
+                       },\r
+                       onMouseUp: function( _mouseX, _mouseY){\r
+                               if( isDragging !== true) return;\r
+                               ( startY !== canvasY || startH !== canvasH) && HISTORY.saveState( restoreState, [ NaN, startY, NaN, startH], [ NaN, canvasY, NaN, canvasH]);\r
+                               isDragging = false;\r
+                               MOUSE_CURSOR( '');\r
+                       },\r
+                       busy: function(){\r
+                               return isDragging\r
+                       },\r
+                       onCanvasResize: function( _x, _y, _w, _h){\r
+                               canvasX = _x;\r
+                               canvasY = _y;\r
+                               if( canvasW !== _w){\r
+                                       ELM.style.width = ( _w +2) +'px';\r
+                                       canvasW = _w;\r
+                               }\r
+                               canvasH = _h;\r
+                               y = isTop === true ? y : ( canvasH +5 +BORDER_WIDTH);\r
+                               w = canvasW +2;\r
+                       }\r
+               }\r
+       };\r
+       var     PANEL_RESIZER_TOP = PanelResizerClass.apply( {}, [ 'panel-resizer-top', true]),\r
+               PANEL_RESIZER_BOTTOM = PanelResizerClass.apply( {}, [ 'panel-resizer-bottom', false]);\r
+               \r
+       PanelResizerClass = undefined;\r
+/*\r
+ *       - COMIC_ELEMENT_CONTROL\r
+ *          - PanelResizerClass\r
+ *          - COMIC_ELEMENT_OPERATOR\r
+ *          - AbstractComicElement\r
+ *          - ImageElementClass\r
+ *          - TextElementClass\r
+*/\r
+\r
+       var MIN_OBJECT_SIZE = 19,\r
+               MOUSE_HIT_AREA = 10,\r
+               SAVE = HISTORY.saveState,\r
+               log,\r
+               DRAGGABLE_ELEMENT_ARRAY = [];// PANEL_RESIZER_TOP, PANEL_RESIZER_BOTTOM\r
+       \r
+/*\r
+ * --------------------------------------------------------------------------------------------\r
+ * COMIC_ELEMENT_OPERATOR\r
+ */\r
+       var COMIC_ELEMENT_OPERATOR = ( function(){\r
+               var     MOUSE_CURSOR = updateMouseCursor,\r
+                       SAVE = HISTORY.saveState,\r
+                       INFOMATION = INFOMATION_WINDOW.update,\r
+                       GRID_ENABLED = GRID_CONTROL.enabled,\r
+                       HIT_AREA = MOUSE_HIT_AREA,\r
+                       currentIsTextElement = false,\r
+                       currentControler = null,\r
+                       currentElement = null,\r
+                       currentx, currenty, currentw, currenth, angle, flipV, flipH,\r
+                       COMIC_ELEMENT_CONSOLE = ( function(){\r
+                               var LAYER_BACK_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'layer back', 'ctrl + B', layerBack, false, true, false),\r
+                                       LAYER_FORWARD_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'layer forward', 'ctrl + F', layerForward, false, false, false),\r
+                                       DELETE_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'delete', 'ctrl + D', del, false, true, true),\r
+                                       EDIT_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'Edit Text', 'ctrl + E', edit, false, true, false),\r
+                                       CHANGE_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'change', 'ctrl + U', change, false, false, true),\r
+                                       jqStage,\r
+                                       jqConsoleParent,\r
+                                       jqConsoleWrapper,\r
+                                       jqConsoleTail,\r
+                                       jqImgConsole, jqTextConsole,\r
+                                       currentElement = null,\r
+                                       currentType = -1,\r
+                                       visible = false,\r
+                                       imgConsoleWidth, imgConsoleHeight,\r
+                                       textConsoleWidth, textConsoleHeight,\r
+                                       consoleWidth, consoleHeight,\r
+                                       consoleX, consoleY,\r
+                                       tailSize = 10,\r
+                                       buttonClickable = false;\r
+                               \r
+                               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 66, false, true, layerBack);\r
+                               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 70, false, true, layerForward);\r
+                               \r
+                               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 68, false, true, del);\r
+                               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 69, false, true, edit);\r
+                               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 85, false, true, change);\r
+                               \r
+                               function buttonBackOrForward( isBack){\r
+                                       var     offest = jqConsoleWrapper.offset();\r
+                                       jqConsoleWrapper.css( {\r
+                                               position:       isBack === true ? '' : 'absolute',\r
+                                               left:           isBack === true ? consoleX  : offest.left,\r
+                                               top:            isBack === true ? consoleY  : offest.top\r
+                                       });\r
+                                       buttonClickable === isBack && ( isBack === true ? jqConsoleParent : jqStage).append( jqConsoleWrapper);\r
+                                       buttonClickable = !isBack;\r
+                               }\r
+                               function layerBack(){\r
+                                       if( currentElement === null) return;\r
+                                       COMIC_ELEMENT_CONTROL.replaceComicElement( currentElement, false);\r
+                                       updateInfomation();\r
+                                       SAVE( COMIC_ELEMENT_CONTROL.restoreReplaceObject, [ currentElement, true], [ currentElement, false]);\r
+                                       var _z = currentElement.z;\r
+                                       LAYER_BACK_BUTTON.visible( _z > 0);\r
+                                       LAYER_FORWARD_BUTTON.visible( _z < DRAGGABLE_ELEMENT_ARRAY.length -1);\r
+                               }\r
+                               function layerForward(){\r
+                                       if( currentElement === null) return;\r
+                                       COMIC_ELEMENT_CONTROL.replaceComicElement( currentElement, true);\r
+                                       updateInfomation();\r
+                                       SAVE( COMIC_ELEMENT_CONTROL.restoreReplaceObject, [ currentElement, false], [ currentElement, true]);\r
+                                       var _z = currentElement.z;\r
+                                       LAYER_BACK_BUTTON.visible( _z > 0);\r
+                                       LAYER_FORWARD_BUTTON.visible( _z < DRAGGABLE_ELEMENT_ARRAY.length -1);\r
+                               }\r
+                               function del(){\r
+                                       if( currentElement === null) return;\r
+                                       buttonBackOrForward( true);\r
+                                       COMIC_ELEMENT_CONTROL.removeComicElement( currentElement);\r
+                                       SAVE( COMIC_ELEMENT_CONTROL.restoreComicElement, [ true, currentElement], [ false, currentElement], true);\r
+                                       COMIC_ELEMENT_OPERATOR.hide();\r
+                               }\r
+                               function edit(){\r
+                                       if( currentElement === null || currentElement.type !== COMIC_ELEMENT_TYPE_TEXT) return;\r
+                                       TEXT_EDITOR_CONTROL.show( currentElement);\r
+                                       buttonBackOrForward( true);\r
+                               }\r
+                               function change(){\r
+                                       if( currentElement === null) return;\r
+                                       buttonBackOrForward( true);\r
+                                       IMAGE_GROUP_EXPROLER.show( currentElement.url);\r
+                               }\r
+                               return {\r
+                                       init: function(){\r
+                                               jqStage = jqEditor;\r
+                                               jqConsoleTail = $( '#comic-element-consol-tail');\r
+                                               jqImgConsole = $( '#image-element-consol').hide();\r
+                                               var imgConsoleSize = pettanr.util.getElementSize( jqImgConsole.get( 0));\r
+                                               imgConsoleWidth = imgConsoleSize.width;\r
+                                               imgConsoleHeight = imgConsoleSize.height;\r
+                                               \r
+                                               jqTextConsole = $( '#text-element-consol').hide();\r
+                                               var textConsoleSize = pettanr.util.getElementSize( jqTextConsole.get( 0));\r
+                                               textConsoleWidth = textConsoleSize.width;\r
+                                               textConsoleHeight = textConsoleSize.height;\r
+                                               \r
+                                               jqConsoleWrapper = $( '#comic-element-consol-wrapper').hide();\r
+                                               jqConsoleParent = jqConsoleWrapper.parent();\r
+                                               \r
+                                               $( '#edit-text-button').click( edit);\r
+                                               $( '#delete-image-button, #delete-text-button').click( del);\r
+                                               $( '#change-image-button').click( change);\r
+                                               $( '#layer-forward-button, #forward-text-button').click( layerForward);\r
+                                               $( '#layer-back-button, #back-text-button').click( layerBack);\r
+                                                                                                       \r
+                                               delete COMIC_ELEMENT_CONSOLE.init;\r
+                                       },\r
+                                       show: function( _currentElement, _w, _h){\r
+                                               visible === false && jqConsoleWrapper.show();\r
+                                               visible = true;\r
+                                               currentElement = _currentElement;\r
+                                               var _currentType = _currentElement.type,\r
+                                                       _z = _currentElement.z;\r
+                                               if( currentType !== _currentType){\r
+                                                       currentType = _currentType;\r
+                                                       jqImgConsole.toggle( _currentType === COMIC_ELEMENT_TYPE_IMAGE);\r
+                                                       jqTextConsole.toggle( _currentType === COMIC_ELEMENT_TYPE_TEXT);\r
+                                                       consoleWidth = _currentType === COMIC_ELEMENT_TYPE_IMAGE ? imgConsoleWidth : textConsoleWidth;\r
+                                                       consoleHeight = _currentType === COMIC_ELEMENT_TYPE_IMAGE ? imgConsoleHeight : textConsoleHeight;\r
+                                               }\r
+                                               consoleX = Math.floor( ( _w -consoleWidth) /2);\r
+                                               \r
+                                               LAYER_BACK_BUTTON.visible( _z > 0);\r
+                                               LAYER_FORWARD_BUTTON.visible( _z < DRAGGABLE_ELEMENT_ARRAY.length -1);\r
+                                               DELETE_BUTTON.visible( true);\r
+                                               EDIT_BUTTON.visible( _currentType === COMIC_ELEMENT_TYPE_TEXT);\r
+                                               CHANGE_BUTTON.visible( false);\r
+                                               \r
+                                               if( _w > consoleWidth * 1.5 && _h > consoleHeight * 1.5){\r
+                                                       consoleY = Math.floor( ( _h -consoleHeight) /2);\r
+                                                       jqConsoleWrapper.css( {\r
+                                                               left:                   consoleX,\r
+                                                               top:                    consoleY\r
+                                                       }).removeClass( 'console-out');\r
+                                               } else {\r
+                                                       consoleY = _h +tailSize;\r
+                                                       jqConsoleWrapper.css( {\r
+                                                               left:                   consoleX,\r
+                                                               top:                    consoleY\r
+                                                       }).addClass( 'console-out');\r
+                                               }\r
+                                       },\r
+                                       hide: function (){\r
+                                               visible === true && jqConsoleWrapper.hide();\r
+                                               visible = false;\r
+                                               currentElement = null;\r
+                                               LAYER_BACK_BUTTON.visible( false);\r
+                                               LAYER_FORWARD_BUTTON.visible( false);\r
+                                               DELETE_BUTTON.visible( false);\r
+                                               EDIT_BUTTON.visible( false);\r
+                                               CHANGE_BUTTON.visible( false);\r
+                                       },\r
+                                       x: function(){ return consoleX;},\r
+                                       y: function(){ return consoleY;},\r
+                                       w: function(){ return consoleWidth;},\r
+                                       h: function(){ return consoleHeight;},\r
+                                       onMouseMove: function( _mouseX, _mouseY){\r
+                                               if( consoleX > _mouseX || consoleY > _mouseY || consoleX +consoleWidth < _mouseX || consoleY +consoleHeight < _mouseY){\r
+                                                       buttonClickable === true && buttonBackOrForward( true);\r
+                                                       return false;\r
+                                               }\r
+                                               buttonClickable === false && buttonBackOrForward( false);\r
+                                               return true;\r
+                                       },\r
+                                       onMouseOut: function( _mouseX, _mouseY){\r
+                                               buttonClickable === true && buttonBackOrForward( true);\r
+                                       }\r
+                               }\r
+                       })(),\r
+                       TAIL_CONTROLER = ( function(){\r
+                               var     ELM_MOVER = document.getElementById( 'balloon-tail-mover'),\r
+                                       SIZE = pettanr.util.getElementSize( ELM_MOVER).width,\r
+                                       SIN = Math.sin,\r
+                                       COS = Math.cos,\r
+                                       ATAN = Math.atan,\r
+                                       FLOOR = Math.floor,\r
+                                       DEG_TO_RAD = Math.PI / 180,\r
+                                       RAD_TO_DEG = 1 /DEG_TO_RAD,\r
+                                       currentText = null,\r
+                                       tailX, tailY,\r
+                                       balloonW, balloonH, balloonA, radA,\r
+                                       visible = false,\r
+                                       startA;\r
+                               \r
+                               function draw( _w, _h, _a){\r
+                                       balloonW = _w !== undefined ? _w : balloonW;\r
+                                       balloonH = _h !== undefined ? _h : balloonH;\r
+                                       balloonA = _a !== undefined ? _a : balloonA;\r
+                                       radA = balloonA *DEG_TO_RAD;\r
+                                       tailX = FLOOR( ( ( COS( radA) /2 +0.5) *( balloonW +SIZE)) -SIZE /2);\r
+                                       tailY = FLOOR( ( ( SIN( radA) /2 +0.5) *( balloonH +SIZE)) -SIZE /2);\r
+                                       ELM_MOVER.style.left = tailX +'px';\r
+                                       ELM_MOVER.style.top = tailY +'px';\r
+                                       log.html( [ balloonW, balloonH, balloonA].join());\r
+                               }\r
+                               function hitTest( _mouseX, _mouseY){\r
+                                       var _x = tailX -SIZE /2,\r
+                                               _y = tailY -SIZE /2;\r
+                                               ret = currentIsTextElement === true && _x <= _mouseX && _y <= _mouseY && _x +SIZE >= _mouseX && _y +SIZE >= _mouseY;\r
+                                       ret === true && MOUSE_CURSOR( 'move');\r
+                                       return ret;\r
+                               }\r
+                               return {\r
+                                       update: draw,\r
+                                       show: function( _currentText){\r
+                                               /*\r
+                                                * visibilityのほうがいい, display:none だと ie で描画が狂う\r
+                                                */\r
+                                               ELM_MOVER.style.visibility = '';\r
+                                               draw( _currentText.w, _currentText.h, _currentText.angle());\r
+                                               currentText = _currentText;\r
+                                       },\r
+                                       hitTest: hitTest,\r
+                                       hide: function(){\r
+                                               ELM_MOVER.style.visibility = 'hidden';\r
+                                               currentText = null;\r
+                                       },\r
+                                       onStart: function( _currentText, _mouseX, _mouseY){\r
+                                               if( hitTest( _mouseX -currentx, _mouseY -currenty) === true){\r
+                                                       currentText = _currentText;\r
+                                                       startA = _currentText.angle();\r
+                                                       return true;\r
+                                               }\r
+                                               currentText = null;\r
+                                               return false;\r
+                                       },\r
+                                       onDrag: function( _mouseX, _mouseY){\r
+                                               _mouseX = _mouseX -currentText.x -currentw /2;\r
+                                               _mouseY = _mouseY -currentText.y -currenth /2; //Balloonの中心を0,0とする座標系に変換\r
+                                               \r
+                                               draw( currentw, currenth,\r
+                                                       _mouseX !== 0 ?\r
+                                                               ATAN( _mouseY /_mouseX) *RAD_TO_DEG +( _mouseX < 0 ? 180 : 0) :\r
+                                                               _mouseY > 0 ? 90 : -90\r
+                                               );\r
+                                               currentText && currentText.angle( balloonA);\r
+                                               updateInfomation( undefined, undefined, undefined, balloonA);\r
+                                       },\r
+                                       onFinish: function(){\r
+                                               startA !== currentText.angle() && saveComicElementStatus( currentx, currenty, currentw, currenth, startA);\r
+                                               startA !== currentText.angle() && resize( undefined, undefined, undefined, undefined, currentText.angle());\r
+                                               currentText = null;\r
+                                       },\r
+                                       onCancel: function(){\r
+                                               resize( undefined, undefined, undefined, undefined, startA);\r
+                                       }\r
+                               }\r
+                       })(),\r
+                       RESIZE_CONTROLER = ( function(){\r
+                               var POSITION_ARRAY = [],\r
+                                       FLOOR = Math.floor,\r
+                                       CURSOR_AND_FLIP = [\r
+                                               { cursor:       'n-resize',             v: 3},\r
+                                               { cursor:       'e-resize',             h: 2},\r
+                                               { cursor:       'e-resize',             h: 1},\r
+                                               { cursor:       'n-resize',             v: 0},\r
+                                               { cursor:       'nw-resize',    h: 5, v: 6, vh: 7},\r
+                                               { cursor:       'ne-resize',    h: 4, v: 7, vh: 6},\r
+                                               { cursor:       'ne-resize',    h: 7, v: 4, vh: 5},\r
+                                               { cursor:       'nw-resize',    h: 6, v: 5, vh: 4}\r
+                                       ],      \r
+                                       elmResizerContainerStyle = document.getElementById( 'comic-element-resizer-container').style,\r
+                                       elmResizerTopStyle = document.getElementById( 'comic-element-resizer-top').style,\r
+                                       elmResizerLeftStyle = document.getElementById( 'comic-element-resizer-left').style,\r
+                                       elmResizerRightStyle = document.getElementById( 'comic-element-resizer-right').style,\r
+                                       elmResizerBottomStyle = document.getElementById( 'comic-element-resizer-bottom').style,\r
+                                       x, y, w, h,\r
+                                       currentIndex = -1,\r
+                                       currentElement,\r
+                                       currentIsTextElement = false;\r
+                               \r
+                               elmResizerContainerStyle.display = 'none';\r
+                               \r
+                               var RESIZE_WORK_ARRAY = [\r
+                                               { x:    0, w:    0, y:  1, h:   -1}, //top\r
+                                               { x:    1, w:   -1, y:  0, h:    0}, //left\r
+                                               { x:    0, w:    1, y:  0, h:    0}, //right\r
+                                               { x:    0, w:    0, y:  0, h:    1}, //bottom\r
+                                               { x:    1, w:   -1, y:  1, h:   -1}, //top-left\r
+                                               { x:    0, w:    1, y:  1, h:   -1}, //top-right\r
+                                               { x:    1, w:   -1, y:  0, h:    1}, //bottom-left\r
+                                               { x:    0, w:    1, y:  0, h:    1}  //bottom-right\r
+                                       ],\r
+                                       startX, startY, startW, startH, startFilpV, startFilpH, startAspect,\r
+                                       baseX, baseY, baseW, baseH,\r
+                                       currentX, currentY, currentW, currentH,\r
+                                       resultX, resultY, resultW, resultH,\r
+                                       xOffset, yOffset,\r
+                                       error = 0;\r
+                               \r
+                               function draw( _x, _y, _w, _h){\r
+                                       x = _x !== undefined ? _x : x;\r
+                                       y = _y !== undefined ? _y : y;\r
+                                       w = _w !== undefined ? _w : w;\r
+                                       h = _h !== undefined ? _h : h;\r
+                                       elmResizerContainerStyle.left = x +'px';\r
+                                       elmResizerContainerStyle.top = y +'px';\r
+                                       elmResizerContainerStyle.width = w +'px';\r
+                                       elmResizerContainerStyle.height = h +'px';\r
+                                       elmResizerTopStyle.left = FLOOR( w /2 -10 /2) +'px';\r
+                                       elmResizerLeftStyle.top = FLOOR( h /2 -10 /2) +'px';\r
+                                       elmResizerRightStyle.top = FLOOR( h /2 -10 /2) +'px';\r
+                                       elmResizerBottomStyle.left = FLOOR( w /2 -10 /2) +'px';\r
+                                       \r
+                                       POSITION_ARRAY.splice( 0, POSITION_ARRAY.length);\r
+                                       POSITION_ARRAY.push(\r
+                                               {x:     x +5,                                   y:      y -HIT_AREA,            w:      w -5 *2,                h:      HIT_AREA +5},\r
+                                               {x: x -HIT_AREA,                        y:      y +HIT_AREA +5,         w:      HIT_AREA +5,    h:      h -5 *2},\r
+                                               {x: x +w -5,                            y:      y +HIT_AREA +5,         w:      HIT_AREA +5,    h:      h -5 *2},\r
+                                               {x:     x +5,                                   y:      y +h -5,                        w:      w -5 *2,                h:      HIT_AREA +5},\r
+                                               {x:     x -HIT_AREA,                    y:      y -HIT_AREA,            w:      HIT_AREA +5,    h:      HIT_AREA +5},\r
+                                               {x: x +w -HIT_AREA,                     y:      y -HIT_AREA,            w:      HIT_AREA +5,    h:      HIT_AREA +5},\r
+                                               {x:     x -HIT_AREA,                    y:      y +h -5,                        w:      HIT_AREA +5,    h:      HIT_AREA +5},\r
+                                               {x:     x +w -5,                                y:      y +h -5,                        w:      HIT_AREA +5,    h:      HIT_AREA +5}\r
+                                       );\r
+                               }\r
+                               \r
+                               function update( _x, _y, _w, _h){\r
+                                       resultX = _x !== undefined ? _x : currentX;\r
+                                       resultY = _y !== undefined ? _y : currentY;\r
+                                       resultW = _w !== undefined ? _w : currentW;\r
+                                       resultH = _h !== undefined ? _h : currentH;\r
+                                       \r
+                                       if( currentIsTextElement === false && currentIndex > 3 && pettanr.key.shiftEnabled() === true){\r
+                                               if( startAspect >= 1){\r
+                                                       _w = resultW;\r
+                                                       resultW = Math.floor( startAspect * resultH);\r
+                                                       resultX = resultX +( currentIndex % 2 === 0 ? _w -resultW : 0);\r
+                                               } else {\r
+                                                       _h = resultH;\r
+                                                       resultH = Math.floor( resultW / startAspect);\r
+                                                       resultY = resultY + ( currentIndex <= 5 ? _h -resultH : 0);\r
+                                               }\r
+                                       }\r
+                                       draw( resultX, resultY, resultW, resultH);\r
+                                       currentElement.resize( resultX, resultY, resultW, resultH);\r
+                                       currentIsTextElement === true && TAIL_CONTROLER.update( resultW, resultH);\r
+                                       COMIC_ELEMENT_CONSOLE.show( currentElement, resultW, resultH);\r
+                                       updateInfomation( resultX, resultY, undefined, undefined, resultW, resultH);\r
+                               }\r
+                               function getIndex( _mouseX, _mouseY){\r
+                                       var     p,\r
+                                               l = POSITION_ARRAY.length;\r
+                                       for( var i=0; i<l; i++){\r
+                                               p = POSITION_ARRAY[ i];\r
+                                               if( p.x <= _mouseX && p.y <= _mouseY && p.x + p.w >= _mouseX && p.y +p.h >= _mouseY){\r
+                                                       MOUSE_CURSOR( CURSOR_AND_FLIP[ i].cursor);\r
+                                                       return currentIndex = i;\r
+                                               }\r
+                                       }\r
+                                       return -1;\r
+                               }\r
+                               function flip( _flipV, _flipH){\r
+                                       var p = CURSOR_AND_FLIP[ currentIndex];\r
+                                       currentIndex = _flipH === true || _flipV === true ? p[\r
+                                                       _flipH === true && _flipV === true ? 'vh' : ( _flipH === true ? 'h' : 'v')\r
+                                               ] : currentIndex;\r
+                                       MOUSE_CURSOR( CURSOR_AND_FLIP[ currentIndex].cursor);\r
+                                       currentElement.flip( _flipV, _flipH);\r
+                               }\r
+                               return {\r
+                                       x: function(){ return x;},\r
+                                       y: function(){ return y;},\r
+                                       w: function(){ return w;},\r
+                                       h: function(){ return h;},\r
+                                       update: draw,\r
+                                       index: getIndex,\r
+                                       show: function( _currentElement){\r
+                                               currentElement = _currentElement;\r
+                                               currentIsTextElement = _currentElement.type === COMIC_ELEMENT_TYPE_TEXT;\r
+                                               elmResizerContainerStyle.display = '';\r
+                                       },\r
+                                       hide: function(){\r
+                                               currentElement = null;\r
+                                               elmResizerContainerStyle.display = 'none';\r
+                                       },\r
+                                       onStart: function( _currentElement, _mouseX, _mouseY){\r
+                                               currentElement = _currentElement;\r
+                                               currentIsTextElement = _currentElement.type === COMIC_ELEMENT_TYPE_TEXT;\r
+                                               if( _currentElement.keepSize === true) return false;\r
+                                               currentIndex = getIndex( _mouseX, _mouseY);\r
+                                               if( currentIndex === -1) return false;\r
+                                               xOffset = _mouseX;\r
+                                               yOffset = _mouseY;\r
+                                               startX = baseX = x = _currentElement.x;\r
+                                               startY = baseY = y = _currentElement.y;\r
+                                               startW = baseW = w = _currentElement.w;\r
+                                               startH = baseH = h = _currentElement.h;\r
+                                               startFilpV = flipV;\r
+                                               startFilpH = flipH;\r
+                                               startAspect = startW /startH;\r
+                                               return true;\r
+                                       },\r
+                                       onDrag: function( _mouseX, _mouseY){\r
+                                               var com = RESIZE_WORK_ARRAY[ currentIndex],\r
+                                                       moveX = _mouseX -xOffset,\r
+                                                       moveY = _mouseY -yOffset,\r
+                                                       _x = baseX +moveX *com.x,\r
+                                                       _y = baseY +moveY *com.y,\r
+                                                       _w = baseW +moveX *com.w,\r
+                                                       _h = baseH +moveY *com.h,\r
+                                                       _updated = moveX !== 0 || moveY !== 0;\r
+                                               \r
+                                               // opera がときどき baseH の値を忘れる ??\r
+                                               if( _x === undefined || _y === undefined || _w === undefined || _h === undefined){\r
+                                                       ++error;\r
+                                                       return;\r
+                                               }\r
+                                               \r
+                                               if( _w >= MIN_OBJECT_SIZE && _h >= MIN_OBJECT_SIZE){\r
+                                                       \r
+                                               } else \r
+                                               if( _w >= -MIN_OBJECT_SIZE && _h >= -MIN_OBJECT_SIZE){\r
+                                                       return;\r
+                                               } else \r
+                                               if( currentElement.type === COMIC_ELEMENT_TYPE_TEXT){\r
+                                                       return;\r
+                                               } else \r
+                                               if( _w < -MIN_OBJECT_SIZE || _h < -MIN_OBJECT_SIZE){\r
+                                                       var __x = 0,\r
+                                                               __y = 0;\r
+                                                       if( _w < -MIN_OBJECT_SIZE && _h > MIN_OBJECT_SIZE){\r
+                                                       // flipH\r
+                                                               __x = _x;\r
+                                                               baseX = _x = _x +_w;\r
+                                                               baseY = _y;\r
+                                                               baseW = _w = __x -_x;\r
+                                                               baseH = _h;\r
+                                                               flip( false, true);\r
+                                                               flipV = currentElement.flipV();\r
+                                                       } else \r
+                                                       if( _w > MIN_OBJECT_SIZE && _h < -MIN_OBJECT_SIZE){\r
+                                                       // flipV\r
+                                                               __y = _y;\r
+                                                               baseX = _x;\r
+                                                               baseY = _y = _y +_h;\r
+                                                               baseW = _w;\r
+                                                               baseH = _h = __y -_y;\r
+                                                               flip( true, false);\r
+                                                               flipH = currentElement.flipH();\r
+                                                       } else {\r
+                                                       // flipVH\r
+                                                               __x = _x;\r
+                                                               __y = _y;\r
+                                                               baseX = _x = _x +_w;\r
+                                                               baseY = _y = _y +_h;\r
+                                                               baseW = _w = __x -_x;\r
+                                                               baseH = _h = __y -_y;\r
+                                                               flip( true, true);\r
+                                                               flipV = currentElement.flipV();\r
+                                                               flipH = currentElement.flipH();\r
+                                                       }\r
+                                                       _updated = true;\r
+                                                       xOffset = _mouseX;\r
+                                                       yOffset = _mouseY;      \r
+                                               }\r
+                                               currentX = _x;\r
+                                               currentY = _y;\r
+                                               currentW = _w;\r
+                                               currentH = _h;\r
+                                               _updated === true && update( _x, _y, _w, _h);\r
+                                               \r
+                                               log.html( [\r
+                                                               'currentIndex:', currentIndex, \r
+                                                               'baseW', baseW, 'baseH', baseH,'<br>',\r
+                                                               'mouse', _mouseX, _mouseY,'<br>',\r
+                                                               'move', moveX, moveY,'<br>',\r
+                                                               'xy', _x, _y, 'wh',_w, _h,'<br>',\r
+                                                               'com.w', com.w, 'com.h', com.h,'<br>',\r
+                                                               'current',currentW, currentH,'<br>',\r
+                                                               'result', resultY, resultH,\r
+                                                               'err', error\r
+                                               ].join( ' , '));\r
+                                       },\r
+                                       onFinish: function(){\r
+                                               MOUSE_CURSOR( '');\r
+                                               if( resultW === startW && resultH === startH && resultX === startX && resultY === startY) return;\r
+                                               resize( resultX, resultY, resultW, resultH);\r
+                                               currentElement.resize( resultX, resultY, resultW, resultH);\r
+                                               saveComicElementStatus( startX, startY, startW, startH, angle, startFilpV, startFilpH);\r
+                                       },\r
+                                       onCancel: function(){\r
+                                               MOUSE_CURSOR( '');\r
+                                               resize( startX, startY, startW, startH);\r
+                                               currentElement.type === COMIC_ELEMENT_TYPE_IMAGE ?\r
+                                                       currentElement.animate( startX, startY, startW, startH, startFilpV, startFilpH) :\r
+                                                       currentElement.animate( startX, startY, startW, startH, angle);\r
+                                       },\r
+                                       onShiftUpdate: update,\r
+                                       onCtrlUpdate: update\r
+                               }\r
+                       })(),\r
+                       POSITION_CONTROLER = ( function(){\r
+                               var currentElement,\r
+                                       startX, startY,\r
+                                       x, currentY,\r
+                                       xOffset, yOffset,\r
+                                       isCopy = false;\r
+                               \r
+                               function update( _x, _y){\r
+                                       x = _x !== undefined ? _x : x;\r
+                                       y = _y !== undefined ? _y : y;\r
+                                       RESIZE_CONTROLER.update( x, y);\r
+                                       currentElement.resize( x, y);\r
+                                       updateInfomation( x, y);                                                        \r
+                               }\r
+                               \r
+                               return {\r
+                                       onStart: function( _currentElement, _mouseX, _mouseY){\r
+                                               currentElement = _currentElement;\r
+                                               xOffset = _mouseX;\r
+                                               yOffset = _mouseY;\r
+                                               startX = x = currentx;\r
+                                               startY = y = currenty;\r
+                                               MOUSE_CURSOR( 'move');\r
+                                       },\r
+                                       onDrag: function( _mouseX, _mouseY){\r
+                                               var moveX = _mouseX -xOffset,\r
+                                                       moveY = _mouseY -yOffset,\r
+                                                       _x = currentx +moveX,\r
+                                                       _y = currenty +moveY;\r
+                                               if( GRID_ENABLED() === true){\r
+                                                       _x = Math.floor( _x / 10) * 10;\r
+                                                       _y = Math.floor( _y / 10) * 10;\r
+                                               }\r
+                                               update( _x, _y);\r
+                                       },\r
+                                       onFinish: function(){\r
+                                               MOUSE_CURSOR( '');\r
+                                               if( x === startX && y === startY) return;\r
+                                               resize( x, y);\r
+                                               currentElement.resize( x, y);\r
+                                               saveComicElementStatus( startX, startY);\r
+                                       },\r
+                                       onCancel: function(){\r
+                                               MOUSE_CURSOR( '');\r
+                                               resize( startX, startY);\r
+                                               currentElement.animate( startX, startY);\r
+                                       },\r
+                                       onShiftUpdate: update,\r
+                                       onCtrlUpdate: update\r
+                               }\r
+                       })();\r
+\r
+                       function resize( _x, _y, _w, _h, _angle){\r
+                               currentx = _x !== undefined ? _x : currentx;\r
+                               currenty = _y !== undefined ? _y : currenty;\r
+                               currentw = _w !== undefined ? _w : currentw;\r
+                               currenth = _h !== undefined ? _h : currenth;\r
+                               angle = _angle !== undefined ? _angle : angle;\r
+\r
+                               RESIZE_CONTROLER.update( currentx, currenty, currentw, currenth);\r
+                               currentIsTextElement === true && TAIL_CONTROLER.update( currentw, currenth, angle);\r
+                               COMIC_ELEMENT_CONSOLE.show( currentElement, currentw, currenth);\r
+                               updateInfomation( currentx, currenty, currentElement.z, angle, currentw, currenth);\r
+                       }\r
+                       function updateInfomation( _x, _y, _z, _a, _w, _h, keepAspect){\r
+                               _w = _w !== undefined ? _w : currentw;\r
+                               _h = _h !== undefined ? _h : currenth;\r
+                               INFOMATION(\r
+                                       currentElement === null ? -1 : currentElement.type,\r
+                                       _x !== undefined ? _x : currentx,\r
+                                       _y !== undefined ? _y : currenty,\r
+                                       _z !== undefined ? _z : ( currentElement === null ? '*' : currentElement.z),\r
+                                       _a !== undefined ? Math.floor( _a) : ( currentIsTextElement === true ? Math.floor( angle) : '-'),\r
+                                       _w,\r
+                                       _h,\r
+                                       currentElement === null || currentIsTextElement === true ? '-' : ( currentElement.actualW() === 0 ? '?' : Math.floor( _w / currentElement.actualW() *100)),\r
+                                       currentElement === null || currentIsTextElement === true ? '-' : ( currentElement.actualH() === 0 ? '?' : Math.floor( _h / currentElement.actualH() *100)),\r
+                                       currentElement === null || currentIsTextElement === true ? '-' : currentElement.keepAspect\r
+                               );\r
+                       }\r
+                       function show( _currentElement){\r
+                               currentElement === null && RESIZE_CONTROLER.show( _currentElement);\r
+                               if( currentElement !== _currentElement){\r
+                                       currentElement = _currentElement;\r
+                                       \r
+                                       currentIsTextElement = ( _currentElement.type === COMIC_ELEMENT_TYPE_TEXT);\r
+                                       currentIsTextElement === true ? TAIL_CONTROLER.show( _currentElement) : TAIL_CONTROLER.hide();\r
+                                       \r
+                                       flipV = currentIsTextElement === false ? _currentElement.flipV() : 0;\r
+                                       flipH = currentIsTextElement === false ? _currentElement.flipH() : 0;\r
+                                       \r
+                                       resize(\r
+                                               _currentElement.x, _currentElement.y, _currentElement.w, _currentElement.h,\r
+                                               currentIsTextElement === true ? _currentElement.angle() : 0\r
+                                       );\r
+                               }\r
+                       }\r
+                       function hide(){\r
+                               currentElement !== null && RESIZE_CONTROLER.hide();\r
+                               currentElement = null;\r
+                               MOUSE_CURSOR( '');\r
+                               TAIL_CONTROLER.hide();\r
+                               COMIC_ELEMENT_CONSOLE.hide();\r
+                               updateInfomation();\r
+                       }\r
+                       function restoreState( arg){\r
+                               if( arg && arg.length !== 8) return;\r
+                               var _currentElement = arg[ 0],\r
+                                       _x = arg[ 1], _y = arg[ 2], _w = arg[ 3], _h = arg[ 4],\r
+                                       _a = arg[ 5],\r
+                                       _flipV = arg[ 6], _flipH = arg[ 7];\r
+                               if( !_currentElement && !currentControler) return;\r
+                               _currentElement.type === COMIC_ELEMENT_TYPE_IMAGE ?\r
+                                       _currentElement.animate( _x, _y, _w, _h, _flipV, _flipH) :\r
+                                       _currentElement.animate( _x, _y, _w, _h, _a);\r
+                               currentControler !== null && currentControler.onCancel && currentControler.onCancel();\r
+                               currentControler = null;\r
+                               currentElement === _currentElement ? resize( _x, _y, _w, _h, _a) : show( _currentElement);\r
+                       }\r
+                       function saveComicElementStatus( startX, startY, startW, startH, startA, startFilpV, startFilpH){\r
+                               startX = startX !== undefined ? startX : currentx;\r
+                               startY = startY !== undefined ? startY : currenty;\r
+                               startW = startW !== undefined ? startW : currentw;\r
+                               startH = startH !== undefined ? startH : currenth;\r
+                               startA = startA !== undefined ? startA : angle;\r
+                               startFilpV = startFilpV !== undefined ? startFilpV : flipV;\r
+                               startFilpH = startFilpH !== undefined ? startFilpH : flipH;\r
+                               currentElement && SAVE( restoreState,\r
+                                       [ currentElement, startX, startY, startW, startH, startA, startFilpV, startFilpH],\r
+                                       [ currentElement, currentx, currenty, currentw, currenth, angle, flipV, flipH]\r
+                               );\r
+                       }\r
+                       pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 16, undefined, undefined, function( e){\r
+                               currentControler !== null && currentControler.onShiftUpdate && currentControler.onShiftUpdate();\r
+                       });\r
+                       pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 17, undefined, undefined, function(){\r
+                               currentControler !== null && currentControler.onCtrlUpdate && currentControler.onCtrlUpdate();\r
+                       });\r
+                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 27, false, false, function(){\r
+                               currentControler !== null && currentControler.onCancel && currentControler.onCancel();\r
+                               currentControler = null;\r
+                       });\r
+               return {\r
+                       init: function(){\r
+                               COMIC_ELEMENT_CONSOLE.init();\r
+                               hide();\r
+                               delete COMIC_ELEMENT_OPERATOR.init;\r
+                       },\r
+                       hide: hide,\r
+                       busy: function(){\r
+                               return currentControler !== null;\r
+                       },\r
+                       hitareaX: function( _comicElement, _x){\r
+                               if( _comicElement === currentElement){\r
+                                       var _consoleX = COMIC_ELEMENT_CONSOLE.x();\r
+                                       return currentx +( _consoleX < 0 ? _consoleX : 0) -HIT_AREA;\r
+                               }\r
+                               return _x -HIT_AREA;\r
+                       },\r
+                       hitareaY: function( _comicElement, _y){\r
+                               return _y -HIT_AREA;\r
+                       },\r
+                       hitareaW: function( _comicElement, _w){\r
+                               if( _comicElement === currentElement){\r
+                                       var _consoleW = COMIC_ELEMENT_CONSOLE.w();\r
+                                       return ( _consoleW < currentw ? currentw : _consoleW) +HIT_AREA *2;\r
+                               }\r
+                               return _w +HIT_AREA *2;\r
+                       },\r
+                       hitareaH: function( _comicElement, _h){\r
+                               if( _comicElement === currentElement){\r
+                                       var _consoleY = COMIC_ELEMENT_CONSOLE.y();\r
+                                       return ( _consoleY < currenth ? currenth : _consoleY +COMIC_ELEMENT_CONSOLE.h()) +HIT_AREA *2;\r
+                               }\r
+                               return _h +HIT_AREA *2;\r
+                       },\r
+                       onMouseDown: function( _currentElement, _mouseX, _mouseY){\r
+                               //show( _currentElement);\r
+                               if( currentIsTextElement === true && TAIL_CONTROLER.onStart( _currentElement, _mouseX, _mouseY) === true){\r
+                                       currentControler = TAIL_CONTROLER;\r
+                               } else\r
+                               if( RESIZE_CONTROLER.onStart( _currentElement, _mouseX, _mouseY) === true){\r
+                                       currentControler = RESIZE_CONTROLER;\r
+                               } else {\r
+                                       POSITION_CONTROLER.onStart( _currentElement, _mouseX, _mouseY)\r
+                                       currentControler = POSITION_CONTROLER;\r
+                               }\r
+                       },\r
+                       onMouseMove: function( _currentElement, _mouseX, _mouseY){\r
+                               show( _currentElement);\r
+                               if( currentControler !== null){\r
+                                       currentControler.onDrag( _mouseX, _mouseY);                                             \r
+                               } else {\r
+                                       currentElement && COMIC_ELEMENT_CONSOLE.onMouseMove( _mouseX -currentx, _mouseY -currenty);\r
+                                       TAIL_CONTROLER.hitTest( _mouseX -currentx, _mouseY -currenty) === false && RESIZE_CONTROLER.index( _mouseX, _mouseY) === -1 && MOUSE_CURSOR( '');\r
+                               }\r
+                       },\r
+                       onMouseUp: function( _currentElement, _mouseX, _mouseY){\r
+                               currentControler !== null && currentControler.onFinish();\r
+                               currentControler = null;\r
+                       }\r
+               }\r
+       })();\r
+       /*\r
+        *  // COMIC_ELEMENT_OPERATOR\r
+        */\r
+\r
+       var AbstractComicElement = function( JQ_WAPPER, COMIC_ELM_TYPE, update, x, y, w, h, z, timing){\r
+               var OPERATOR = COMIC_ELEMENT_OPERATOR;\r
+               return {\r
+                       $: JQ_WAPPER,\r
+                       type: COMIC_ELM_TYPE,\r
+                       x: x,\r
+                       y: y,\r
+                       w: w,\r
+                       h: h,                                   \r
+                       z: z,\r
+                       timing: timing,\r
+                       hitareaX: function(){ return OPERATOR.hitareaX( this, this.x);},\r
+                       hitareaY: function(){ return OPERATOR.hitareaY( this, this.y);},\r
+                       hitareaW: function(){ return OPERATOR.hitareaW( this, this.w);},\r
+                       hitareaH: function(){ return OPERATOR.hitareaH( this, this.h);},\r
+                       shift: function( _shiftX, _shiftY){\r
+                               update( this.x +_shiftX, this.y +_shiftY);\r
+                       },\r
+                       busy: function(){\r
+                               return OPERATOR.busy();\r
+                       },\r
+                       onMouseMove: function( _mouseX, _mouseY){\r
+                               OPERATOR.onMouseMove( this, _mouseX, _mouseY);\r
+                       },\r
+                       onMouseUp: function( _mouseX, _mouseY){\r
+                               OPERATOR.onMouseUp( this, _mouseX, _mouseY);\r
+                       },\r
+                       onMouseDown: function( _mouseX, _mouseY){\r
+                               OPERATOR.onMouseDown( this, _mouseX, _mouseY);\r
+                       }\r
+               }\r
+       };\r
+/*\r
+ * --------------------------------------------------------------------------------------------\r
+ * ImageElementClass\r
+ */\r
+       var     jqImageElementOrigin;\r
+       var ImageElementClass = function( url, IMAGE_SET_ID, x, y, z, w, h, timing){\r
+               jqImageElementOrigin = jqImageElementOrigin || $( $( '#imgElementTemplete').remove().html());\r
+               \r
+               var JQ_WRAPPER = jqImageElementOrigin.clone( true),\r
+                       OPERATOR = COMIC_ELEMENT_OPERATOR,\r
+                       SAVE = HISTORY.saveState,\r
+                       HIT_AREA = MOUSE_HIT_AREA,\r
+                       reversibleImage = null,\r
+                       actualW = 0, actualH = 0,\r
+                       flipH = w < 0 ? -1 : 1,\r
+                       flipV = h < 0 ? -1 : 1,\r
+                       instance;\r
+               w = Math.floor( w);\r
+               h = Math.floor( h);\r
+               \r
+               function update( _x, _y, _w, _h, animate){\r
+                       instance.x = x = _x !== undefined ? _x : x;\r
+                       instance.y = y = _y !== undefined ? _y : y;\r
+                       instance.w = w = _w !== undefined ? _w : w;\r
+                       instance.h = h = _h !== undefined ? _h : h;\r
+                       JQ_WRAPPER[ animate === true ? 'animate' : 'css']( { \r
+                               left:   x,\r
+                               top:    y,\r
+                               width:  w,\r
+                               height: h\r
+                       }, 250, function(){ reversibleImage.resize( flipH * w, flipV * h);});\r
+                       animate !== true && reversibleImage.resize( flipH * w, flipV * h);\r
+               }\r
+               \r
+               function updateUrl( _url){\r
+                       if( url === _url) return;\r
+                       url = _url || url;\r
+                       var _reversibleImage = pettanr.image.createReversibleImage( url, flipH * w, flipV * h, function( _url, _actualW, _actualH){\r
+                               actualW = _actualW;\r
+                               actualH = _actualH;\r
+                       });\r
+                       if( reversibleImage !== null){\r
+                               JQ_WRAPPER.children( reversibleImage.elm).replaceWith( _reversibleImage.elm);\r
+                               reversibleImage.destroy();\r
+                       } else {\r
+                               JQ_WRAPPER.append( _reversibleImage.elm);\r
+                       }\r
+                       reversibleImage = _reversibleImage;\r
+               }\r
+               return pettanr.util.extend(\r
+                       AbstractComicElement.apply( this, [ JQ_WRAPPER, COMIC_ELEMENT_TYPE_IMAGE, update, x, y, w, h, z, timing]),\r
+                       {\r
+                               init: function(){\r
+                                       instance = this;\r
+                                       updateUrl();\r
+                                       update();\r
+                                       delete this.init;\r
+                               },\r
+                               flip: function( _flipH, _flipV){\r
+                                       if( _flipH !== true && _flipV !== true) return;\r
+                                       flipH = _flipH === true ? -flipH : flipH;\r
+                                       flipV = _flipV === true ? -flipV : flipV;\r
+                                       reversibleImage.resize( flipH * w, flipV * h);\r
+                               },\r
+                               flipV: function(){\r
+                                       return flipV;\r
+                               },\r
+                               flipH: function(){\r
+                                       return flipH;\r
+                               },\r
+                               url: function( _url, _actualW, _actualH){\r
+                                       if( _url && _url !== url){\r
+                                               SAVE( updateUrl, url, _url);\r
+                                               actualW = _actualW;\r
+                                               actualH = _actualH;\r
+                                               updateUrl( _url);\r
+                                       }\r
+                                       return url;\r
+                               },\r
+                               actualW: function(){ return actualW;},\r
+                               actualH: function(){ return actualH;},\r
+                               keepSize: false,\r
+                               resize: update,\r
+                               animate: function ( _x, _y, _w, _h, _flipH, _flipV){\r
+                                       flipH = _flipH !== undefined ? _flipH : flipH;\r
+                                       flipV = _flipV !== undefined ? _flipV : flipV;\r
+                                       update( _x, _y, _w, _h, true);\r
+                               },\r
+                               getAsHTML: function( isAbsoluteUrl, isXHTML){\r
+                                       return [\r
+                                               '<img ',\r
+                                                       'src="', isAbsoluteUrl !== true ? url : pettanr.util.getAbsolutePath( url), '" ',\r
+                                                       'width="', w, '" ',\r
+                                                       'height="', h, '" ',\r
+                                                       'style="',                                                                      \r
+                                                               'left:', x, 'px;',\r
+                                                               'top:', y, 'px;',\r
+                                                               'z-index:', this.z, ';',\r
+                                                       '"',\r
+                                               isXHTML !== true ? '>' : ' \/>'\r
+                                       ].join( '');\r
+                               },\r
+                               getAsJsonString: function(){\r
+                                       var cr = pettanr.LINE_FEED_CODE_TEXTAREA;\r
+                                       return [\r
+                                               '"new', this.timing, '": {', cr,\r
+                                                       '"resource_picture_id": 1,', cr,\r
+                                                       '"x": ', x, ',', cr,\r
+                                                       '"y": ', y, ',', cr,\r
+                                                       '"z": ', this.z, ',', cr,\r
+                                                       '"width": ', w, ',', cr,\r
+                                                       '"height": ', h, ',', cr,\r
+                                                       '"flipv": ', flipV === true ? 1 : 0, ',', cr,\r
+                                                       '"fliph": ', flipH === true ? 1 : 0, ',', cr,\r
+                                                       '"t": ', this.timing, cr,\r
+                                               '}'\r
+                                       ].join( '');\r
+                               },\r
+                               destroy: function(){\r
+                                       reversibleImage.destroy();\r
+                                       JQ_WRAPPER.remove();\r
+                                       JQ_WRAPPER = reversibleImage = OPERATOR = null;\r
+                                       delete this.destroy;\r
+                               }\r
+                       }\r
+               );\r
+       }\r
+/*\r
+ * / ImageElementClass\r
+ * --------------------------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+/*\r
+ * --------------------------------------------------------------------------------------------\r
+ * TextElementClass\r
+ * \r
+ * ELM はpettanr.domで書き出したものを突っ込むcreateの場合\r
+ * \r
+ * type\r
+ * 0.none\r
+ * 1.speach balloon\r
+ * 2.think\r
+ * 3.bom\r
+ * 4.black-box( dq style)\r
+ * 5.blue-box( ff style)\r
+ * \r
+ */\r
+       var jqTextElementOrigin;\r
+       var TextElementClass = function( type, a, text, x, y, z, w, h, timing){\r
+               jqTextElementOrigin = jqTextElementOrigin || ( function(){\r
+                       var _OLD_IE = $( $( '#textElementTempleteForOldIE').remove().html()),\r
+                               _MODERN = $( $( '#textElementTemplete').remove().html());\r
+                       return pettanr.ua.isIE === true && pettanr.ua.ieRenderingVersion < 8 ? _OLD_IE : _MODERN;\r
+               })();\r
+               \r
+               var JQ_WRAPPER = jqTextElementOrigin.clone( true),\r
+                       XBROWSER_BALLOON = pettanr.balloon.createBalloon( w, h, a, type),\r
+                       TEXT_ELM = JQ_WRAPPER.find( 'td,.speach-inner').eq( 0),\r
+                       OPERATOR = COMIC_ELEMENT_OPERATOR,\r
+                       HIT_AREA = MOUSE_HIT_AREA,\r
+                       SAVE = HISTORY.saveState,\r
+                       instance;\r
+                       \r
+               JQ_WRAPPER.find( 'img').eq( 0).replaceWith( XBROWSER_BALLOON.elm);\r
+               \r
+               function update( _x, _y, _w, _h, _a, animate){\r
+                       instance.x = x = _x !== undefined ? _x : x;\r
+                       instance.y = y = _y !== undefined ? _y : y;\r
+                       instance.w = w = _w !== undefined ? _w : w;\r
+                       instance.h = h = _h !== undefined ? _h : h;\r
+                       a = _a !== undefined ? _a : a;\r
+                       \r
+                       JQ_WRAPPER[ animate === true ? 'animate' : 'css']( {\r
+                                       left:           x,\r
+                                       top:            y,\r
+                                       width:          w,\r
+                                       height:         h\r
+                               }, 250,\r
+                               function(){\r
+                                       XBROWSER_BALLOON.resize( a, w, h);\r
+                               }\r
+                       );              \r
+                       animate !== true && XBROWSER_BALLOON.resize( a, w, h);\r
+               }\r
+               \r
+               function updateType( _type){\r
+                       if( type !== _type){\r
+                               type = _type || type;\r
+                               XBROWSER_BALLOON.type( type);\r
+                       }\r
+               }\r
+               function updateAngle( _a){\r
+                       if( _a !== undefined && a !== _a){\r
+                               a = _a !== undefined ? _a : a;\r
+                               XBROWSER_BALLOON.angle( a);\r
+                       }\r
+               }\r
+               function updateText( _text){\r
+                       text = _text || text || '';\r
+                       TEXT_ELM.html( text);\r
+               }\r
+               \r
+               return pettanr.util.extend(\r
+                       AbstractComicElement.apply( this, [ JQ_WRAPPER, COMIC_ELEMENT_TYPE_TEXT, update, x, y, w, h, z, timing]),\r
+                       {\r
+                               init: function(){\r
+                                       instance = this;\r
+                                       updateText();\r
+                                       update();\r
+                                       delete this.init;\r
+                               },\r
+                               angle: function( _a){\r
+                                       _a !== undefined && update( undefined, undefined, undefined, undefined, _a);\r
+                                       return a;\r
+                               },\r
+                               text: function( _text){\r
+                                       if( _text && text !== _text) {\r
+                                               SAVE( updateText, text || '', _text);\r
+                                               updateText( _text);\r
+                                       }\r
+                                       return text;\r
+                               },\r
+                               resize: update,\r
+                               animate: function ( _x, _y, _w, _h, _a){\r
+                                       update( _x, _y, _w, _h, _a, true);\r
+                               },\r
+                               destroy: function(){\r
+                                       JQ_WRAPPER.remove();\r
+                                       XBROWSER_BALLOON.destroy();\r
+                                       OPERATOR = null;\r
+                                       delete this.destroy;\r
+                               },\r
+                               getAsJSON: function(){\r
+                                       \r
+                               },\r
+                               getAsJsonString: function(){\r
+                                       var cr = pettanr.LINE_FEED_CODE_TEXTAREA;\r
+                                       return [\r
+                                               '"new', this.timing, '": {', cr,\r
+                                                       '"balloon_template_id": ', 1, ',', cr,\r
+                                                       '"system_picture_id": ', 1, ',', cr,\r
+                                                       '"size": ', 1, ',', cr,\r
+                                                       '"tail": ', a, ',', cr,\r
+                                                       '"x": ', x, ',', cr,\r
+                                                       '"y": ', y, ',', cr,\r
+                                                       '"z": ', this.z, ',', cr,\r
+                                                       '"t": ', this.timing, ',', cr,\r
+                                                       '"width": ', w, ',', cr,\r
+                                                       '"height": ', h, ',', cr,\r
+                                                       '"speaches_attributes": {', cr,\r
+                                                       '"newf', this.timing, '": {', cr,\r
+                                                       '"content": "', text, '",', cr,\r
+                                                                       '"x": ', x, ',', cr,\r
+                                                                       '"y": ', y, ',', cr,\r
+                                                                       '"t": ', 0, ',', cr,\r
+                                                                       '"width": ', w, ',', cr,\r
+                                                                       '"height": ', h, cr,\r
+                                                               '}', cr,\r
+                                                       '}', cr,\r
+                                               '}'\r
+                                       ].join( '');\r
+                               },\r
+                               getAsHTML: function( isAbsoluteUrl, isXHTML){\r
+                                       var url = XBROWSER_BALLOON.getURL();\r
+                                       return [\r
+                                               '<img ',\r
+                                                       'src="', isAbsoluteUrl !== true ? url : pettanr.util.getAbsolutePath( url), '" ',\r
+                                                       'width="', w, '" ',\r
+                                                       'height="', h, '" ',\r
+                                                       'style="',                                                                      \r
+                                                               'left:', x, 'px;',\r
+                                                               'top:', y, 'px;',\r
+                                                               'z-index:', this.z, ';',\r
+                                                       '"',\r
+                                               isXHTML !== true ? '>' : ' \/>',\r
+                                               pettanr.LINE_FEED_CODE_TEXTAREA,\r
+                                               '<div class="balloon" style="',\r
+                                                       'left:', x, 'px;',\r
+                                                       'top:', y, 'px;',\r
+                                                       'width:', w, 'px;',\r
+                                                       'height:', h, 'px;',\r
+                                                       'z-index:', this.z,\r
+                                               '"><span>', text, '<\/span>', '<\/div>'\r
+                                                       \r
+                                       ].join( '');\r
+                               },\r
+                               getAsXML: function(){}\r
+                               \r
+                       }\r
+               );\r
+       }\r
+\r
+\r
+       var COMIC_ELEMENT_CONTROL = ( function(){\r
+               var     currentElement = null,\r
+                       canvasX, canvasY, canvasW, canvasH,\r
+                       startX, startY;\r
+       \r
+       /*\r
+        * append, remove, replace\r
+        * \r
+        * comicElement には、z-position と dom-index がある。\r
+        *   z-position は 表示上の位置。大きいほど前に表示される( z-index)\r
+        *   dom-index は 意味上の順番。htmlタグの登場順で、検索結果や音声読み上げブラウザで正しく意味が取れる順番。\r
+        * \r
+        * editerでは、実際には z-index は使わず、htmlの順序で前後を表現する。\r
+        * dom-index は、数値のみ保持して、投稿時にcomicElementを適宜に並び替える。\r
+        * \r
+        * append comicElement\r
+        * 1. 新しい comicElement の z-position を得る\r
+        * 2. z の同じ comicElementを見つけ、その前に加える。または一番先頭へ。(DRAGGABLE_ELEMENT_ARRAY)\r
+        *    zが大きいほど、DRAGGABLE_ELEMENT_ARRAYの先頭へ。\r
+        * 3. dom位置は、DRAGGABLE_ELEMENT_ARRAY とは反対に、前のものほど後ろへ。\r
+        * \r
+        * \r
+        * remove comicElement\r
+        * 1. remove\r
+        * 2. renumber z\r
+        */\r
+               function appendComicElement( _comicElement) {\r
+                       _comicElement.init && _comicElement.init();\r
+                       var z = _comicElement.z,\r
+                               l = DRAGGABLE_ELEMENT_ARRAY.length;\r
+                       _comicElement.$.stop().css( {\r
+                               filter:         '',\r
+                               opacity:        ''\r
+                       });\r
+                       if( z === undefined || z === NaN || z < 0 || z >= l){\r
+                               DRAGGABLE_ELEMENT_ARRAY.unshift( _comicElement);\r
+                               comicElementContainer.append( _comicElement.$.fadeIn());\r
+                       } else {\r
+                               var insertIndex = ( function(){\r
+                                               for( var ret = 0; ret < l; ++ret){\r
+                                                       if( DRAGGABLE_ELEMENT_ARRAY[ ret].z <= z) return ret +1;\r
+                                               }\r
+                                               return 0;\r
+                                       })();\r
+                               DRAGGABLE_ELEMENT_ARRAY[ insertIndex -1].$.after( _comicElement.$.fadeIn());\r
+                               DRAGGABLE_ELEMENT_ARRAY.splice( insertIndex, 0, _comicElement);\r
+                       }\r
+                       sortComicElement();\r
+               }\r
+               function removeComicElement( _comicElement) {\r
+                       var l = DRAGGABLE_ELEMENT_ARRAY.length;\r
+                       for( var i=0; i<l; ++i){\r
+                               if( DRAGGABLE_ELEMENT_ARRAY[ i] === _comicElement){\r
+                                       DRAGGABLE_ELEMENT_ARRAY.splice( i, 1);\r
+                                       sortComicElement();\r
+                                       _comicElement.$.stop().css( {\r
+                                               filter:         '',\r
+                                               opacity:        ''\r
+                                       }).fadeOut( function(){\r
+                                               this.parentNode.removeChild( this);\r
+                                       });\r
+                                       currentElement = currentElement === _comicElement ? null : currentElement;\r
+                                       return;\r
+                               }\r
+                       }\r
+               }\r
+               function restoreComicElement( arg){\r
+                       var isAppend = arg[ 0],\r
+                               comicElement = arg[ 1];\r
+                       isAppend === true ? appendComicElement( comicElement) : removeComicElement( comicElement);\r
+               }\r
+               /*\r
+                * DRAGGABLE_ELEMENT_ARRAY の順番を基準に、zの再計算\r
+                * jqElmの並び替え。\r
+                */\r
+               function sortComicElement(){\r
+                       var l = DRAGGABLE_ELEMENT_ARRAY.length,\r
+                               _comicElement, jqElm, jqNext;\r
+                       for( var i=0; i < l; ++i){\r
+                               _comicElement = DRAGGABLE_ELEMENT_ARRAY[ i];\r
+                               jqElm = _comicElement.$;\r
+                               jqNext && jqNext.before( jqElm);\r
+                               _comicElement.z = l -i +1;\r
+                               jqNext = jqElm;\r
+                       }\r
+               }\r
+               function replaceComicElement( _comicElement, goForward){\r
+                       // DRAGGABLE_ELEMENT_ARRAYの再構築\r
+                       var l = DRAGGABLE_ELEMENT_ARRAY.length,\r
+                               i = ( function(){\r
+                                       for( var ret = 0; ret < l; ++ret){\r
+                                               if( DRAGGABLE_ELEMENT_ARRAY[ ret] === _comicElement) return ret;\r
+                                       }\r
+                                       return -1;\r
+                               })();\r
+                       if( i === -1) return;\r
+                       if( goForward === true){\r
+                               if( i === 0) return;\r
+                               DRAGGABLE_ELEMENT_ARRAY.splice( i, 1);\r
+                               DRAGGABLE_ELEMENT_ARRAY.splice( i -1, 0, _comicElement);\r
+                       } else {\r
+                               if( i === l -1) return;\r
+                               DRAGGABLE_ELEMENT_ARRAY.splice( i, 1);\r
+                               DRAGGABLE_ELEMENT_ARRAY.splice( i +1, 0, _comicElement);\r
+                       }\r
+                       sortComicElement();\r
+               }\r
+               function restoreReplaceObject( arg){\r
+                       replaceComicElement( arg[ 0], arg[ 1]);\r
+               }\r
+               \r
+               return {\r
+                       init: function( _x, _y, _w, _h){\r
+                       /*\r
+                        * comic-element\r
+                        */\r
+                               comicElementContainer = $( '#comic-element-container');\r
+                               \r
+                               appendComicElement( ImageElementClass.apply( {}, [ 'images/13.gif', 'penchan', 10, 10, 0, 100, 140, 0]));\r
+                               appendComicElement( TextElementClass.apply( {}, [ 0, 270, 'Hello', 50, 70, 1, 200, 160, 1]));\r
+                               \r
+                               COMIC_ELEMENT_OPERATOR.init( updateMouseCursor);\r
+                       /*\r
+                        * \r
+                        */\r
+                               log = $( '#operation-catcher-log');\r
+\r
+                               this.onCanvasResize( _x, _y, _w, _h);\r
+                               \r
+                               delete COMIC_ELEMENT_CONTROL.init;\r
+                       },\r
+                       removeComicElement: removeComicElement,\r
+                       restoreComicElement: restoreComicElement,\r
+                       replaceComicElement: replaceComicElement,\r
+                       restoreReplaceObject: restoreReplaceObject,\r
+                       onCanvasResize : function ( _canvasX, _canvasY, _canvasW, _canvasH, isResizerTopAction){\r
+                       /*\r
+                        * リサイズが、ResizerTopによって行われた場合、comicElementのyを動かして見かけ上動かないようにする。\r
+                        */                                     \r
+                               if( isResizerTopAction === true){\r
+                                       var     _shiftX = _canvasW -canvasW,\r
+                                               _shiftY = _canvasH -canvasH,\r
+                                               l = DRAGGABLE_ELEMENT_ARRAY.length;\r
+                                       for( var i = 0; i < l; i++){\r
+                                               DRAGGABLE_ELEMENT_ARRAY[ i].shift( _shiftX, _shiftY);\r
+                                       }\r
+                               }\r
+                               canvasX = _canvasX;\r
+                               canvasY = _canvasY;\r
+                               canvasW = _canvasW;\r
+                               canvasH = _canvasH;\r
+                               \r
+                               comicElementContainer.css( {\r
+                                       width:  _canvasW,\r
+                                       height: _canvasH,\r
+                                       left:   _canvasX,\r
+                                       top:    _canvasY\r
+                               });\r
+                       },\r
+                       onMouseMove: function( _mouseX, _mouseY){\r
+                               var l = DRAGGABLE_ELEMENT_ARRAY.length,\r
+                                       _X = _mouseX -canvasX,\r
+                                       _Y = _mouseY -canvasY,\r
+                                       _elm, _x, _y;\r
+                                       \r
+                               if( currentElement !== null){\r
+                                       if( currentElement.busy() === true){\r
+                                               currentElement.onMouseMove( _X, _Y);\r
+                                               return true;\r
+                                       }\r
+                                       _x = currentElement.hitareaX();\r
+                                       _y = currentElement.hitareaY();\r
+                                       if( _x <= _X && _y <= _Y && _x + currentElement.hitareaW() >= _X && _y +currentElement.hitareaH() >= _Y){\r
+                                               currentElement.onMouseMove( _X, _Y); // cursor\r
+                                               return true;\r
+                                       }\r
+                               }\r
+                               for( var i=0; i<l; i++){\r
+                                       _elm = DRAGGABLE_ELEMENT_ARRAY[ i];\r
+                                       _x = _elm.hitareaX();\r
+                                       _y = _elm.hitareaY();\r
+                                       // hitTest\r
+                                       if( _x <= _X && _y <= _Y && _x + _elm.hitareaW() >= _X && _y +_elm.hitareaH() >= _Y){\r
+                                               currentElement = _elm;\r
+                                               currentElement.onMouseMove( _X, _Y); // cursor\r
+                                               log.html( [ _X, _Y, _x, _y, i].join( ','));\r
+                                               return true;\r
+                                       }\r
+                               }\r
+                               currentElement = null;                                                  \r
+                               COMIC_ELEMENT_OPERATOR.hide();\r
+                               log.html( [ _X, _Y, _x, _y].join( ','));\r
+                               return false;\r
+                       },\r
+                       onMouseUp: function( _mouseX, _mouseY){\r
+                               var ret = currentElement !== null && currentElement.busy() === true;\r
+                               ret === true && currentElement.onMouseUp( _mouseX -startX || canvasX, _mouseY -startY || canvasY);\r
+                               startX = startY = NaN;\r
+                               return ret;\r
+                       },\r
+                       onMouseDown: function( _mouseX, _mouseY){\r
+                               startX = canvasX;\r
+                               startY = canvasY;\r
+                               currentElement !== null && currentElement.onMouseDown( _mouseX -startX, _mouseY -startY);\r
+                               return currentElement !== null;\r
+                       },\r
+                       busy: function(){\r
+                               return currentElement !== null;\r
+                       },\r
+                       createImageElement: function( url, imagesetID, x, y, z, w, h){\r
+                               w = w || 200; //ActualWidth\r
+                               h = h || 150; //ActualHeight\r
+                               x = x || Math.floor( canvasW /2 -w /2);\r
+                               y = y || Math.floor( canvasH /2 -h /2);\r
+                               IMAGE_GROUP_EXPROLER.show( function( _url, _w, _h){\r
+                                       var _comicElement = ImageElementClass.apply( {}, [ _url, imagesetID, x, y, z || -1, w, h, DRAGGABLE_ELEMENT_ARRAY.length]);\r
+                                       appendComicElement( _comicElement);\r
+                                       _comicElement.animate( undefined, undefined, _w, _h);\r
+                                       SAVE( restoreComicElement, [ false, _comicElement], [ true, _comicElement], true);\r
+                               });\r
+                       },\r
+                       createTextElement: function( type, angle, text, x, y, z, w, h){\r
+                               type = type || 0;\r
+                               angle = angle || 0;\r
+                               text = text || '';\r
+                               w = w || 200;\r
+                               h = h || 150;\r
+                               x = x || Math.floor( canvasW /2 -w /2 +Math.random() *10);\r
+                               y = y || Math.floor( canvasH /2 -h /2 +Math.random() *10);\r
+                               var _comicElement = TextElementClass.apply( {}, [ type, angle, text, x, y, z || -1, w, h, DRAGGABLE_ELEMENT_ARRAY.length]);\r
+                               TEXT_EDITOR_CONTROL.show( _comicElement, function( _comicElement){\r
+                                       appendComicElement( _comicElement);\r
+                                       SAVE( restoreComicElement, [ false, _comicElement], [ true, _comicElement], true);\r
+                               });\r
+                       },\r
+                       getAsHTML: function( isAbsoluteUrl, isXHTML){\r
+                               var HTML_ARRAY = [],\r
+                                       l = DRAGGABLE_ELEMENT_ARRAY.length,\r
+                                       _timing = 0,\r
+                                       _comicElement;\r
+\r
+                               while( HTML_ARRAY.length < l){\r
+                                       _comicElement = getComicElementByTiming();\r
+                                       if( _comicElement === null) break;\r
+                                       HTML_ARRAY.push( _comicElement.getAsHTML( isAbsoluteUrl, isXHTML));\r
+                               }\r
+                               function getComicElementByTiming(){\r
+                                       while( _timing < l *2){\r
+                                               for(var i=0; i<l; ++i){\r
+                                                       if( _timing === DRAGGABLE_ELEMENT_ARRAY[ i].timing){\r
+                                                               ++_timing;\r
+                                                               return DRAGGABLE_ELEMENT_ARRAY[ i];\r
+                                                       }\r
+                                               }\r
+                                               ++_timing;\r
+                                       }\r
+                                       return null;\r
+                               }\r
+                               HTML_ARRAY.unshift(\r
+                                       [\r
+                                               '<div class="panel" ',\r
+                                                       'style="',\r
+                                                               'height:', canvasH, 'px;',\r
+                                                               'background-color:', ';',\r
+                                                       '"',\r
+                                               '>'\r
+                                       ].join( '')\r
+                               );              \r
+                               HTML_ARRAY.push( '</div>');\r
+                               \r
+                               return HTML_ARRAY.join( pettanr.LINE_FEED_CODE_TEXTAREA);\r
+                       },\r
+                       getAsJsonString: function(){\r
+                               var JSON_STRING_ARRAY = [],\r
+                                       IMAGE_ARRAY = [],\r
+                                       BALLOON_ARRAY = [],\r
+                                       l = DRAGGABLE_ELEMENT_ARRAY.length,\r
+                                       _timing = 0,\r
+                                       _comicElement,\r
+                                       cr = pettanr.LINE_FEED_CODE_TEXTAREA;\r
+                                       \r
+                               while( IMAGE_ARRAY.length + BALLOON_ARRAY.length < l){\r
+                                       _comicElement = getComicElementByTiming();\r
+                                       if( _comicElement === null) break;\r
+                                       _comicElement.type === COMIC_ELEMENT_TYPE_IMAGE ? \r
+                                               IMAGE_ARRAY.push( _comicElement.getAsJsonString()) :\r
+                                               BALLOON_ARRAY.push( _comicElement.getAsJsonString());\r
+                               }\r
+                               function getComicElementByTiming(){\r
+                                       while( _timing < l *2){\r
+                                               for(var i=0; i<l; ++i){\r
+                                                       if( _timing === DRAGGABLE_ELEMENT_ARRAY[ i].timing){\r
+                                                               ++_timing;\r
+                                                               return DRAGGABLE_ELEMENT_ARRAY[ i];\r
+                                                       }\r
+                                               }\r
+                                               ++_timing;\r
+                                       }\r
+                                       return null;\r
+                               }\r
+                               return [\r
+                                       '{', cr,\r
+                                               '"panel": {', cr,\r
+                                                   '"border": 1,', cr,\r
+                                                   '"comic_id": 5,', cr,\r
+                                                   '"resource_picture_id": 1,', cr,\r
+                                                       '"x": ', 0, ',', cr,\r
+                                                       '"y": ', 0, ',', cr,\r
+                                                       '"z": ', 0, ',', cr,\r
+                                                       '"t": ', 0, ',', cr,\r
+                                                   '"width": ', canvasW, ',', cr,\r
+                                                   '"height": ', canvasH, ',', cr,\r
+                                                   '"panel_pictures_attributes": {', cr,\r
+                                                       IMAGE_ARRAY.join( ',' +cr), cr,\r
+                                                   '},', cr,\r
+                                                   '"balloons_attributes": {', cr,\r
+                                                       BALLOON_ARRAY.join( ',' +cr), cr,\r
+                                                   '}', cr,\r
+                                               '}', cr,\r
+                                       '}'\r
+                               ].join( '');\r
+                       }\r
+               }\r
+       })();\r
+       \r
+       /*\r
+        * end of COMIC_ELEMENT_CONTROL\r
+        */\r
+\r
+\r
+\r
+       function updateMouseCursor( _cursor){\r
+               if( currentCursor !== _cursor){\r
+                       currentCursor = _cursor;\r
+                       setTimeout( update, 0);\r
+               }\r
+               function update(){\r
+                       ELM_MOUSE_EVENT_CHATCHER.style.cursor = currentCursor;\r
+               }\r
+       }\r
+       function centering(){\r
+               pettanr.editor.onWindowResize( windowW, windowH);\r
+       }       \r
+       function mouseEventRellay( e){\r
+               var _mouseX = e.pageX,\r
+                       _mouseY = e.pageY,\r
+                       rellayMethod = e.type === 'mousedown' ?\r
+                                       'onMouseDown' :\r
+                                       ( e.type === 'mousemove' ? 'onMouseMove' : 'onMouseUp');\r
+               if( currentListener !== null && currentListener.busy() === true){\r
+                       currentListener[ rellayMethod]( _mouseX, _mouseY);\r
+               } else {\r
+                       currentListener = null;\r
+                       var l = MOUSE_LISTENER_ARRAY.length,\r
+                               _listener;\r
+                       for( var i=0; i<l; ++i){\r
+                               _listener = MOUSE_LISTENER_ARRAY[ i];\r
+                               if( _listener[ rellayMethod]( _mouseX, _mouseY) === true){\r
+                                       currentListener = _listener;\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+               // 文字選択の禁止\r
+               //!document.selection && window.getSelection().removeAllRanges();\r
+               e.stopPropagation();\r
+               return false;\r
+       }\r
+\r
+       return {\r
+               init: function( _option){\r
+                       option = _option;\r
+               },\r
+               firstOpen: function(){\r
+                       var jqWindow = pettanr.jqWindow();\r
+                       windowW = jqWindow.width();\r
+                       windowH = jqWindow.height();\r
+                       \r
+                       jqEditor = $( '#editor');\r
+\r
+                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 96, false, true, centering);\r
+                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 48, false, true, centering);\r
+\r
+               /*\r
+                * MOUSE_LISTENER_ARRAY は、表示順に格納.手前の要素が最初\r
+                * MENU_BAR_CONTROL,\r
+                * WINDOW_CONTROL,\r
+                * COMIC_ELEMENT_CONTROL,\r
+                * CANVAS_CONTROL\r
+                * .busy() === true なら、そのままonMouseMove()にイベントを流す.これはArrayの後ろから、奥の表示要素から\r
+                * onMouseMove()に流してみて、false が帰れば、次にリスナーにも流す.\r
+                */\r
+                       MOUSE_LISTENER_ARRAY.push( MENU_BAR_CONTROL, WINDOWS_CONTROL, PANEL_RESIZER_TOP, PANEL_RESIZER_BOTTOM, COMIC_ELEMENT_CONTROL, PANEL_CONTROL);\r
+\r
+                       HISTORY.init();\r
+                       MENU_BAR_CONTROL.EDIT.createSelection( 'centering', 'ctrl + 0', centering, true, true, true);\r
+                       \r
+                       WINDOWS_CONTROL.init();\r
+                       \r
+                       GRID_CONTROL.init();\r
+                       // WHITE_GLASS_CONTROL.init();\r
+                       PANEL_CONTROL.init();\r
+                       //COMIC_ELEMENT_CONTROL.init();\r
+                       \r
+                       // last\r
+                       MENU_BAR_CONTROL.init();\r
+                       \r
+                       \r
+                       \r
+                       TEXT_EDITOR_CONTROL.init();\r
+                       IMAGE_GROUP_EXPROLER.init();\r
+               /*\r
+                * jqMouseEventChacher は透明な要素で、\r
+                * マウスイベントをcurrentElement(currentElement)に伝えるのが仕事\r
+                * このような実装になるのは、ここの表示オブジェクトにイベントを設定した場合、表示が追いつかずマウスカーソルが外れたタイミングでイベントが終わってしまうため。\r
+                */                     \r
+                       jqMouseEventChacher = $( ELM_MOUSE_EVENT_CHATCHER)\r
+                               .mousemove( mouseEventRellay)\r
+                               .mousedown( mouseEventRellay)\r
+                               .mouseup( mouseEventRellay)\r
+                               .mouseout( mouseEventRellay);\r
+                       \r
+                       delete pettanr.editor.firstOpen;\r
+               },\r
+               onOpen: function( _option){\r
+                       pettanr.editor.firstOpen !== undefined && pettanr.editor.firstOpen();\r
+\r
+                       // HISTORY.onOpen();\r
+                       // WINDOWS_CONTROL.onOpen();\r
+                       // COMIC_ELEMENT_CONTROL.onOpen();\r
+                       // MENU_BAR_CONTROL.onOpen();\r
+                       // TEXT_EDITOR_CONTROL.onOpen();\r
+                       // IMAGE_GROUP_EXPROLER.onOpen();\r
+               },\r
+               onClose: function(){\r
+               },\r
+               onWindowResize: function( _windowW, _windowH){\r
+                       windowW = _windowW;\r
+                       windowH = _windowH;\r
+                       \r
+                       /*\r
+                        * ieは +'px'が不要みたい\r
+                        */\r
+                       jqEditor.get( 0).style.height = _windowH +'px';\r
+                       ELM_MOUSE_EVENT_CHATCHER.style.height = _windowH +'px';\r
+                       \r
+                       WINDOWS_CONTROL.onWindowResize( _windowW, _windowH);\r
+                       MENU_BAR_CONTROL.onWindowResize( _windowW, _windowH);\r
+                       PANEL_CONTROL.onWindowResize( _windowW, _windowH);\r
+               },\r
+               MIN_WIDTH:      320,\r
+               MIN_HEIGHT:     320\r
+       }\r
+})();\r