Olemis Lang avatar Olemis Lang committed b5f9845

TracRpc: Added mainnav and ctxtnav for docs. Removed jQuery UI.

Comments (0)

Files changed (2)

 # TODO: Clean up method docs to not presume specific protocols
 # TODO: Make protocol documentation from plugin => HTML docs
 # TODO: Nicer display of enabled/disabled for known protocols
+# TODO: Review: Add RPC et al. to (mainnav | ctxtnav)
 # TODO: Abstract _send_error() using regular http status codes, and let each make the appropriate type of request
 # TODO: Really want to remove responding to other paths than /rpc and /login/rpc (change new API) 
 #         - Not possible !

t5437/t5437-protocol_api-r7194.diff

  class AbstractRPCHandler(Component):
      implements(IXMLRPCHandler)
      abstract = True
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_arrows_leftright.gif b/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_arrows_leftright.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..b26780a3b519071fe2341991b85621d6f44e8df4
-GIT binary patch
-literal 58
-zc${<hbhEHb<YwSzXkcJaQBq<2_gC>J3nK#qBZCeD5P)PDm;`(JSDt3vcVM!oUzf(Z
-L4L{e5FjxZsbBGUF
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_arrows_updown.gif b/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_arrows_updown.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..69eb0770ae9de5f12144e945fd5786d47e551a16
-GIT binary patch
-literal 56
-zc${<hbhEHb<YwSzXkcJaQBq<2_gC>J3nK#qBZCeD5P)PDnD~48S8`=Dh|gJf?!<;Q
-IcSISi0ZAea&;S4c
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_doc.gif b/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_doc.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..26db4340c1a9ba73ff8a8e024fd4bb2cf35d1733
-GIT binary patch
-literal 64
-zc${<hbhEHb<YwSzXkcJaQBq<2_gC>J3nK#qBZCeD5P)PDn8bVf*|{&CxYcyVS6H~O
-Q^mBUcDfUSV%0w8f0nR=VBLDyZ
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_minus.gif b/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_minus.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..6851f39811a8ae8a532c8641b76039bf74b384b1
-GIT binary patch
-literal 56
-zc${<hbhEHb<YwSzXkcJaQBq<2_gC>J3nK#qBZCeD5P)PDnD~48SDxnOU)Wg^baT_a
-IWeg0~08dH{{Qv*}
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_plus.gif b/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_plus.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..74ac5cb910d74824b3c098481a2b1f35acd52cbb
-GIT binary patch
-literal 61
-zc${<hbhEHb<YwSzXkcJaQBq<2_gC>J3nK#qBZCeD5P)PDm_&N|IcIOba3*;Dp@h|E
-Oc+UPXO`IaaU=0AQbP*H)
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_resize_se.gif b/trunk/tracrpc/htdocs/css/no-theme/images/222222_11x11_icon_resize_se.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..251dc1628e0fe7820d7ae0d494a2e4708d6cfada
-GIT binary patch
-literal 61
-zc${<hbhEHb<YwSzXkcJaQBq<2_gC>J3nK#qBZCeD5P)PDm_&N|8&+4pWhyB+b-dux
-Np18-A3j!G!tO2bd5heft
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/222222_7x7_arrow_down.gif b/trunk/tracrpc/htdocs/css/no-theme/images/222222_7x7_arrow_down.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..29c6c706dd9961f80220744c417ca2dc6a6145ba
-GIT binary patch
-literal 52
-zc${<hbhEHbWM^P!XkcJaQBq<2_gC>J3nK#qBZCeD5P)PDn7DiTIZg|_<?%M0%fw&}
-E01LSaQ2+n{
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/222222_7x7_arrow_left.gif b/trunk/tracrpc/htdocs/css/no-theme/images/222222_7x7_arrow_left.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..9f95efae6ec560b6b8707a27d464c72b86a5130d
-GIT binary patch
-literal 53
-zc${<hbhEHbWM^P!XkcJaQBq<2_gC>J3nK#qBZCeD5P)PDn0R`a(<dD7oi|C?Dwu)6
-F8UPuU3hDp=
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/222222_7x7_arrow_right.gif b/trunk/tracrpc/htdocs/css/no-theme/images/222222_7x7_arrow_right.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..bc020507300029d4ca70efb5ed7c50d1dab66aa0
-GIT binary patch
-literal 53
-zc${<hbhEHbWM^P!XkcJaQBq<2_gC>J3nK#qBZCeD5P)PDn0R~=Dpx#sdt;KfY$yYR
-FH2@=@3;_TD
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/222222_7x7_arrow_up.gif b/trunk/tracrpc/htdocs/css/no-theme/images/222222_7x7_arrow_up.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..28169eb91959d1b21e2e1c99bd68e433f59febfc
-GIT binary patch
-literal 52
-zc${<hbhEHbWM^P!XkcJaQBq<2_gC>J3nK#qBZCeD5P)PDn7DiT8yIVOC3{xSVq&lc
-E0162TQ2+n{
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/333333_40x100_textures_01_flat_65.png b/trunk/tracrpc/htdocs/css/no-theme/images/333333_40x100_textures_01_flat_65.png
-new file mode 100644
-index 0000000000000000000000000000000000000000..2f2c7a45bbd7c61634394ede600d6bacc1c494a1
-GIT binary patch
-literal 180
-zc%17D@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#_Iv
-z`+As4$%zYm;;c7~Kd+Iuj%U9o62cnl7#bi-T}qs{k}2VR<Uf6&GZ;Kw{an^LB{Ts5
-D(FHJP
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_arrows_leftright.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_arrows_leftright.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..136e6266bfe97edad95582ce1c37c27a7dcf6409
-GIT binary patch
-literal 58
-zc${<hbhEHb<YwSzXkcJ)adTn(_gC>J3nK#qBZCeD5P)PDm;`(JSDt3vcVM!oUzf(Z
-L4L{e5FjxZsgt!mA
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_arrows_updown.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_arrows_updown.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..4f0063520d0c92bbeea83d21fc021e0d5dc20cea
-GIT binary patch
-literal 56
-zc${<hbhEHb<YwSzXkcJ)adTn(_gC>J3nK#qBZCeD5P)PDnD~48S8`=Dh|gJf?!<;Q
-IcSISi0a=O;Gynhq
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_close.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_close.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..390a75978faa9fc8a3e9e137f2c86daea109fedb
-GIT binary patch
-literal 62
-zc${<hbhEHb<YwSzXkcJ)adTn(_gC>J3nK#qBZCeD5P)PDm_&Q}*%##OW-8fi*8O3w
-Obn!onNi$Sf8LR=hE)X;T
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_doc.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_doc.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..e91c733341925ea17840fe18b6a16e70aa905ed3
-GIT binary patch
-literal 64
-zc${<hbhEHb<YwSzXkcJ)adTn(_gC>J3nK#qBZCeD5P)PDn8bVf*|{&CxYcyVS6H~O
-Q^mBUcDfUSV%0w8f0pZ3GhX4Qo
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_folder_closed.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_folder_closed.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..85f0e0b5cd626e88c8dd6220f08a22c45ec96c56
-GIT binary patch
-literal 61
-zc${<hbhEHb<YwSzXkcJ)adTn(_gC>J3nK#qBZCeD5P)PDm_&N|SF-c|ikN)vq7?JC
-OwDa$DA4M=QSOWmA;1G2H
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_folder_open.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_folder_open.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..f6414c7782bc6e62fd733503d4d963c06ad67a91
-GIT binary patch
-literal 61
-zc${<hbhEHb<YwSzXkcJ)adTn(_gC>J3nK#qBZCeD5P)PDm_&N|SF-cIdSrZQ<2I&s
-NA;rH^lY$r+tO2p-5LN&H
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_minus.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_minus.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..25b3e17c043f7bf58aef31058d2f2cba6936626e
-GIT binary patch
-literal 56
-zc${<hbhEHb<YwSzXkcJ)adTn(_gC>J3nK#qBZCeD5P)PDnD~48SDxnOU)Wg^baT_a
-IWeg0~0AI2WVE_OC
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_plus.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_11x11_icon_plus.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..41d9534406807a9f2f246fc3c74eb94aca8aef64
-GIT binary patch
-literal 61
-zc${<hbhEHb<YwSzXkcJ)adTn(_gC>J3nK#qBZCeD5P)PDm_&N|IcIOba3*;Dp@h|E
-Oc+UPXO`IaaU=0Ai&=Gh5
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_7x7_arrow_down.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_7x7_arrow_down.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..92fdfe0a7ed75d084ae652fc335a1f0830d1ee9e
-GIT binary patch
-literal 52
-zc${<hbhEHbWM^P!XkcJ)adTn(_gC>J3nK#qBZCeD5P)PDn7DiTIZg|_<?%M0%fw&}
-E02+}BwEzGB
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_7x7_arrow_left.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_7x7_arrow_left.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..cf01ff32ef37fca800efd0d57a6e8b96659f7c27
-GIT binary patch
-literal 53
-zc${<hbhEHbWM^P!XkcJ)adTn(_gC>J3nK#qBZCeD5P)PDn0R`a(<dD7oi|C?Dwu)6
-F8UQHK3r+w4
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_7x7_arrow_right.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_7x7_arrow_right.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..3190e7a1c1913a78fd5e6dffb369970e0fcfa352
-GIT binary patch
-literal 53
-zc${<hbhEHbWM^P!XkcJ)adTn(_gC>J3nK#qBZCeD5P)PDn0R~=Dpx#sdt;KfY$yYR
-FH2^Z(3}pZS
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/454545_7x7_arrow_up.gif b/trunk/tracrpc/htdocs/css/no-theme/images/454545_7x7_arrow_up.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..7ae34bfec029ae6a644ba88a7e507a15b9f37bf4
-GIT binary patch
-literal 52
-zc${<hbhEHbWM^P!XkcJ)adTn(_gC>J3nK#qBZCeD5P)PDn7DiT8yIVOC3{xSVq&lc
-E02tv4wEzGB
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_arrows_leftright.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_arrows_leftright.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..19f9d6b21a9b2daa2f639510d5411596f5b1f270
-GIT binary patch
-literal 58
-zc${<hbhEHb<YwSzXkcLI>FQzp_gC>J3nK#qBZCeD5P)PDm;`(JSDt3vcVM!oUzf(Z
-L4L{e5FjxZssVESU
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_arrows_updown.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_arrows_updown.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..c10451f64f86689c88171f350381a10acc9394ee
-GIT binary patch
-literal 56
-zc${<hbhEHb<YwSzXkcLI>FQzp_gC>J3nK#qBZCeD5P)PDnD~48S8`=Dh|gJf?!<;Q
-IcSISi0en&q2mk;8
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_close.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_close.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..326d015330520dab34a3bf6911b2dcb14b2798e4
-GIT binary patch
-literal 62
-zc${<hbhEHb<YwSzXkcLI>FQzp_gC>J3nK#qBZCeD5P)PDm_&Q}*%##OW-8fi*8O3w
-Obn!onNi$Sf8LR=|?hyz8
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_doc.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_doc.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..7d1b5cb574c6a608170bab4b6a8784cb92aa800d
-GIT binary patch
-literal 64
-zc${<hbhEHb<YwSzXkcLI>FQzp_gC>J3nK#qBZCeD5P)PDn8bVf*|{&CxYcyVS6H~O
-Q^mBUcDfUSV%0w8f0Si46TL1t6
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_folder_closed.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_folder_closed.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..71bff058363134a161d3061d256e19c0a2da1f23
-GIT binary patch
-literal 61
-zc${<hbhEHb<YwSzXkcLI>FQzp_gC>J3nK#qBZCeD5P)PDm_&N|SF-c|ikN)vq7?JC
-OwDa$DA4M=QSOWmn%n?Zd
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_folder_open.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_folder_open.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..33a20b851c4630bb3573ab293d16fbe75174d2d4
-GIT binary patch
-literal 61
-zc${<hbhEHb<YwSzXkcLI>FQzp_gC>J3nK#qBZCeD5P)PDm_&N|SF-cIdSrZQ<2I&s
-NA;rH^lY$r+tO3~55h?%x
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_minus.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_minus.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..777c3288ff3aa7ec86bca0ea85d48d0d72c5a12f
-GIT binary patch
-literal 56
-zc${<hbhEHb<YwSzXkcLI>FQzp_gC>J3nK#qBZCeD5P)PDnD~48SDxnOU)Wg^baT_a
-IWeg0~0D^iCH2?qr
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_plus.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_11x11_icon_plus.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..43531fff3c1905994ea865dc738282461e4da3a9
-GIT binary patch
-literal 61
-zc${<hbhEHb<YwSzXkcLI>FQzp_gC>J3nK#qBZCeD5P)PDm_&N|IcIOba3*;Dp@h|E
-Oc+UPXO`IaaU=0A}yb??R
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_7x7_arrow_down.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_7x7_arrow_down.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..c91731de5c662e0dafff944fbeca152cbd88e509
-GIT binary patch
-literal 52
-zc${<hbhEHbWM^P!XkcLI>FQzp_gC>J3nK#qBZCeD5P)PDn7DiTIZg|_<?%M0%fw&}
-E06GZ^i2wiq
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_7x7_arrow_left.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_7x7_arrow_left.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..d6c523b2b0709af7b51530544cd439f9dbc221c4
-GIT binary patch
-literal 53
-zc${<hbhEHbWM^P!XkcLI>FQzp_gC>J3nK#qBZCeD5P)PDn0R`a(<dD7oi|C?Dwu)6
-F8URTh3?cvk
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_7x7_arrow_right.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_7x7_arrow_right.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..d65b2ed1acb7770f6d7e6ecfffc7db712f55b531
-GIT binary patch
-literal 53
-zc${<hbhEHbWM^P!XkcLI>FQzp_gC>J3nK#qBZCeD5P)PDn0R~=Dpx#sdt;KfY$yYR
-FH2_m54LJY+
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/888888_7x7_arrow_up.gif b/trunk/tracrpc/htdocs/css/no-theme/images/888888_7x7_arrow_up.gif
-new file mode 100644
-index 0000000000000000000000000000000000000000..165666af012e69a113c200a6c1b70491a703c077
-GIT binary patch
-literal 52
-zc${<hbhEHbWM^P!XkcLI>FQzp_gC>J3nK#qBZCeD5P)PDn7DiT8yIVOC3{xSVq&lc
-E0619-i2wiq
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/dadada_40x100_textures_02_glass_75.png b/trunk/tracrpc/htdocs/css/no-theme/images/dadada_40x100_textures_02_glass_75.png
-new file mode 100644
-index 0000000000000000000000000000000000000000..60ba001334abfb99447d917785d81b6b28825e50
-GIT binary patch
-literal 214
-zc%17D@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*Fskxpmjv*P1Z!d4;J?y~4;`sOQ
-z-|&@Ec3Z6{H1i%w*w)0@8U4Mse*M9>+Zq2etzo>zklkQ<Kq`TE16u?$UheNX#rMo?
-z%>FlJuiehu&v@+_^Y?jsg~ivLW$&vuOyJpIR((i3fgi6iZ`paLvM=O&qbCY<D1)b~
-KpUXO@geCy!Fidm+
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/fef1ec_40x100_textures_02_glass_75.png b/trunk/tracrpc/htdocs/css/no-theme/images/fef1ec_40x100_textures_02_glass_75.png
-new file mode 100644
-index 0000000000000000000000000000000000000000..1cfc75b4fc9a231e54641e79e120de635323948a
-GIT binary patch
-literal 313
-zc%17D@N?(olHy`uVBq!ia0vp^8bF-F!N$PA*qrS221qe@x;TbpG`^j6knfO!0IPV+
-z|NqgxdorWXn;l8G7ku!X%t<R7jjK8v*IYj>X8o$}!Rlto+qWdnd=5|3&pBaymiOhq
-zFKb#QPw(Bl;iJs0)~)&9<k$V0aemgJ>3cqEmCXClQ}szI{l;-guHE|?-WV&pbX@Q}
-zR%FcWZOEOytMy*)7X8XU$;}@)oa$Z(D!FtBC?2vGt6RX$Q7-=AtE=0_a>nNEqK~<c
-z*9Qv#Web89?p<7-9KTVTX_Y`gYl9X`h~fe+#!!wGP7b0_p~LK3?qArw@&1q98{@-v
-w&s13Ovp+b`q8TVI^P7Q<u@qS?Nc$<~Uk=(_J7>P13k(<rPgg&ebxsLQ0P|6S_y7O^
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/images/ffffff_40x100_textures_01_flat_75.png b/trunk/tracrpc/htdocs/css/no-theme/images/ffffff_40x100_textures_01_flat_75.png
-new file mode 100644
-index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0
-GIT binary patch
-literal 178
-zc%17D@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8
-zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI
-BH@yG=
-
-diff --git a/trunk/tracrpc/htdocs/css/no-theme/ui.all.css b/trunk/tracrpc/htdocs/css/no-theme/ui.all.css
-new file mode 100644
---- /dev/null
-+++ b/trunk/tracrpc/htdocs/css/no-theme/ui.all.css
-@@ -0,0 +1,610 @@
-+/*
-+ * jQuery UI screen structure and presentation
-+ * This CSS file was generated by ThemeRoller, a Filament Group Project for jQuery UI
-+ * Author: Scott Jehl, scott@filamentgroup.com, http://www.filamentgroup.com
-+ * Visit ThemeRoller.com
-+*/
-+
-+/*
-+ * Note: If your ThemeRoller settings have a font size set in ems, your components will scale according to their parent element's font size.
-+ * As a rule of thumb, set your body's font size to 62.5% to make 1em = 10px.
-+ * body {font-size: 62.5%;}
-+*/
-+
-+
-+
-+/*UI accordion*/
-+.ui-accordion {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	font-family: Bitstream Vera Sans, Verdana,Arial,sans-serif;
-+	font-size: 85%;
-+	border-bottom: 1px solid #d3d3d3;
-+}
-+.ui-accordion-group {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	border: 1px solid #d3d3d3;
-+	border-bottom: none;
-+}
-+.ui-accordion-header {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	cursor: pointer;
-+	background: #fef1ec url(images/fef1ec_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+}
-+.ui-accordion-header a {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	display: block;
-+	font-size: 1em;
-+	font-weight: normal;
-+	text-decoration: none;
-+	padding: .5em .5em .5em 1.7em;
-+	color: #000000;
-+	background: url(images/888888_7x7_arrow_right.gif) .5em 50% no-repeat;
-+}
-+.ui-accordion-header a:hover {
-+	background: url(images/454545_7x7_arrow_right.gif) .5em 50% no-repeat;
-+	color: #212121;
-+}
-+.ui-accordion-header:hover {
-+	background: #dadada url(images/dadada_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	color: #212121;
-+}
-+.selected .ui-accordion-header, .selected .ui-accordion-header:hover {
-+	background: #333333 url(images/333333_40x100_textures_01_flat_65.png) 0 50% repeat-x;
-+}
-+.selected .ui-accordion-header a, .selected .ui-accordion-header a:hover {
-+	color: #eeeeee;
-+	background: url(images/454545_7x7_arrow_down.gif) .5em 50% no-repeat;
-+}
-+.ui-accordion-content {
-+	background: #ffffff url(images/ffffff_40x100_textures_01_flat_75.png) 0 0 repeat-x;
-+	color: #222222;
-+	font-size: 1em;
-+}
-+.ui-accordion-content p {
-+	padding: 1em 1.7em 0.6em;
-+}
-+
-+
-+
-+
-+
-+
-+/*UI tabs*/
-+.ui-tabs-nav {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	font-family: Bitstream Vera Sans, Verdana,Arial,sans-serif;
-+	font-size: 90%;
-+	float: left;
-+	position: relative;
-+	z-index: 1;
-+	border-right: 1px solid #d3d3d3;
-+	bottom: -1px; width: 100%;
-+}
-+.ui-tabs-nav>ul {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+}
-+.ui-tabs-nav>ul li {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	float: left;
-+	border: 1px solid #d3d3d3;
-+	border-right: none;
-+}
-+.ui-tabs-nav>ul li a {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	float: left;
-+	font-size: 1em;
-+	font-weight: normal;
-+	text-decoration: none;
-+	padding: .5em 1.7em;
-+	color: #000000;
-+	background: #fef1ec url(images/fef1ec_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+}
-+.ui-tabs-nav>ul li a:hover {
-+	background: #dadada url(images/dadada_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	color: #212121;
-+}
-+.ui-tabs-nav>ul li.ui-tabs-selected {
-+	border-bottom-color: #333333;
-+}
-+.ui-tabs-nav>ul li.ui-tabs-selected a, .ui-tabs-nav li.ui-tabs-selected a:hover {
-+	background: #333333 url(images/333333_40x100_textures_01_flat_65.png) 0 50% repeat-x;
-+	color: #eeeeee;
-+}
-+.ui-tabs-panel {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	font-family: Bitstream Vera Sans, Verdana,Arial,sans-serif;
-+	clear:left;
-+	border: 1px solid #d3d3d3;
-+	background: #ffffff url(images/ffffff_40x100_textures_01_flat_75.png) 0 0 repeat-x;
-+	color: #222222;
-+	padding: 1.5em 1.7em;	
-+	font-size: 85%;
-+}
-+.ui-tabs-hide {
-+	display: none;/* for accessible hiding: position: absolute; left: -99999999px*/;
-+}
-+
-+
-+
-+
-+
-+/*slider*/
-+.ui-slider {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	font-family: Bitstream Vera Sans, Verdana,Arial,sans-serif;
-+	font-size: 85%;
-+	background: #ffffff url(images/ffffff_40x100_textures_01_flat_75.png) 0 0 repeat-x;
-+	border: 1px solid #aaaaaa;
-+	height: .8em;
-+	position: relative;
-+}
-+.ui-slider-handle {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	position: absolute;
-+	z-index: 2;
-+	top: -3px;
-+	width: 1.2em;
-+	height: 1.2em;
-+	background: #fef1ec url(images/fef1ec_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	border: 1px solid #d3d3d3;
-+}
-+.ui-slider-handle:hover {
-+	background: #dadada url(images/dadada_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	border: 1px solid #999999;
-+}
-+.ui-slider-handle-active, .ui-slider-handle-active:hover {
-+	background: #333333 url(images/333333_40x100_textures_01_flat_65.png) 0 50% repeat-x;
-+	border: 1px solid #aaaaaa;
-+}
-+.ui-slider-range {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	height: .8em;
-+	background: #dadada url(images/dadada_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	position: absolute;
-+	border: 1px solid #d3d3d3;
-+	border-left: 0;
-+	border-right: 0;
-+	top: -1px;
-+	z-index: 1;
-+	opacity:.7;
-+	filter:Alpha(Opacity=70);
-+}
-+
-+
-+
-+
-+
-+
-+/*dialog*/
-+.ui-dialog {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	font-family: Bitstream Vera Sans, Verdana,Arial,sans-serif;
-+	font-size: 85%;
-+	background: #ffffff url(images/ffffff_40x100_textures_01_flat_75.png) 0 0 repeat-x;
-+	color: #222222;
-+	border: 4px solid #aaaaaa;
-+	position: relative;
-+}
-+.ui-resizable-handle {
-+	position: absolute;
-+	font-size: 0.1px;
-+	z-index: 99999;
-+}
-+.ui-resizable .ui-resizable-handle {
-+	display: block; 
-+}
-+body .ui-resizable-disabled .ui-resizable-handle { display: none; } /* use 'body' to make it more specific (css order) */
-+body .ui-resizable-autohide .ui-resizable-handle { display: none; } /* use 'body' to make it more specific (css order) */
-+.ui-resizable-n { 
-+	cursor: n-resize; 
-+	height: 7px; 
-+	width: 100%; 
-+	top: -5px; 
-+	left: 0px;  
-+}
-+.ui-resizable-s { 
-+	cursor: s-resize; 
-+	height: 7px; 
-+	width: 100%; 
-+	bottom: -5px; 
-+	left: 0px; 
-+}
-+.ui-resizable-e { 
-+	cursor: e-resize; 
-+	width: 7px; 
-+	right: -5px; 
-+	top: 0px; 
-+	height: 100%; 
-+}
-+.ui-resizable-w { 
-+	cursor: w-resize; 
-+	width: 7px; 
-+	left: -5px; 
-+	top: 0px; 
-+	height: 100%;
-+}
-+.ui-resizable-se { 
-+	cursor: se-resize; 
-+	width: 13px; 
-+	height: 13px; 
-+	right: 0px; 
-+	bottom: 0px; 
-+	background: url(images/222222_11x11_icon_resize_se.gif) no-repeat 0 0;
-+}
-+.ui-resizable-sw { 
-+	cursor: sw-resize; 
-+	width: 9px; 
-+	height: 9px; 
-+	left: 0px; 
-+	bottom: 0px;  
-+}
-+.ui-resizable-nw { 
-+	cursor: nw-resize; 
-+	width: 9px; 
-+	height: 9px; 
-+	left: 0px; 
-+	top: 0px; 
-+}
-+.ui-resizable-ne { 
-+	cursor: ne-resize; 
-+	width: 9px; 
-+	height: 9px; 
-+	right: 0px; 
-+	top: 0px; 
-+}
-+.ui-dialog-titlebar {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	padding: .5em 1.5em .5em 1em;
-+	color: #000000;
-+	background: #fef1ec url(images/fef1ec_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	border-bottom: 1px solid #d3d3d3;
-+	font-size: 1em;
-+	font-weight: normal;
-+	position: relative;
-+}
-+.ui-dialog-title {}
-+.ui-dialog-titlebar-close {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	background: url(images/888888_11x11_icon_close.gif) 0 0 no-repeat;
-+	position: absolute;
-+	right: 8px;
-+	top: .7em;
-+	width: 11px;
-+	height: 11px;
-+	z-index: 100;
-+}
-+.ui-dialog-titlebar-close-hover, .ui-dialog-titlebar-close:hover {
-+	background: url(images/454545_11x11_icon_close.gif) 0 0 no-repeat;
-+}
-+.ui-dialog-titlebar-close:active {
-+	background: url(images/454545_11x11_icon_close.gif) 0 0 no-repeat;
-+}
-+.ui-dialog-titlebar-close span {
-+	display: none;
-+}
-+.ui-dialog-content {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	color: #222222;
-+	padding: 1.5em 1.7em;	
-+}
-+.ui-dialog-buttonpane {
-+	position: absolute;
-+	bottom: 0;
-+	width: 100%;
-+	text-align: left;
-+	border-top: 1px solid #aaaaaa;
-+	background: #ffffff;
-+}
-+.ui-dialog-buttonpane button {
-+	margin: .5em 0 .5em 8px;
-+	color: #000000;
-+	background: #fef1ec url(images/fef1ec_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	font-size: 1em;
-+	border: 1px solid #d3d3d3;
-+	cursor: pointer;
-+	padding: .2em .6em .3em .6em;
-+	line-height: 1.4em;
-+}
-+.ui-dialog-buttonpane button:hover {
-+	color: #212121;
-+	background: #dadada url(images/dadada_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	border: 1px solid #999999;
-+}
-+.ui-dialog-buttonpane button:active {
-+	color: #eeeeee;
-+	background: #333333 url(images/333333_40x100_textures_01_flat_65.png) 0 50% repeat-x;
-+	border: 1px solid #aaaaaa;
-+}
-+/* This file skins dialog */
-+.ui-dialog.ui-draggable .ui-dialog-titlebar,
-+.ui-dialog.ui-draggable .ui-dialog-titlebar {
-+	cursor: move;
-+}
-+
-+
-+
-+
-+
-+
-+
-+/*datepicker*/
-+/* Main Style Sheet for jQuery UI date picker */
-+.ui-datepicker-div, .ui-datepicker-inline, #ui-datepicker-div {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	font-family: Bitstream Vera Sans, Verdana,Arial,sans-serif;
-+	background: #ffffff url(images/ffffff_40x100_textures_01_flat_75.png) 0 0 repeat-x;
-+	font-size: 85%;
-+	border: 4px solid #aaaaaa;
-+	width: 15.5em;
-+	padding: 2.5em .5em .5em .5em;
-+	position: relative;
-+}
-+.ui-datepicker-div, #ui-datepicker-div {
-+	z-index: 9999; /*must have*/
-+	display: none;
-+}
-+.ui-datepicker-inline {
-+	float: left;
-+	display: block;
-+}
-+.ui-datepicker-control {
-+	display: none;
-+}
-+.ui-datepicker-current {
-+	display: none;
-+}
-+.ui-datepicker-next, .ui-datepicker-prev {
-+	position: absolute;
-+	left: .5em;
-+	top: .5em;
-+	background: #fef1ec url(images/fef1ec_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+}
-+.ui-datepicker-next {
-+	left: 14.6em;
-+}
-+.ui-datepicker-next:hover, .ui-datepicker-prev:hover {
-+	background: #dadada url(images/dadada_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+}
-+.ui-datepicker-next a, .ui-datepicker-prev a {
-+	text-indent: -999999px;
-+	width: 1.3em;
-+	height: 1.4em;
-+	display: block;
-+	font-size: 1em;
-+	background: url(images/888888_7x7_arrow_left.gif) 50% 50% no-repeat;
-+	border: 1px solid #d3d3d3;
-+	cursor: pointer;
-+}
-+.ui-datepicker-next a {
-+	background: url(images/888888_7x7_arrow_right.gif) 50% 50% no-repeat;
-+}
-+.ui-datepicker-prev a:hover {
-+	background: url(images/454545_7x7_arrow_left.gif) 50% 50% no-repeat;
-+}
-+.ui-datepicker-next a:hover {
-+	background: url(images/454545_7x7_arrow_right.gif) 50% 50% no-repeat;
-+}
-+.ui-datepicker-prev a:active {
-+	background: url(images/454545_7x7_arrow_left.gif) 50% 50% no-repeat;
-+}
-+.ui-datepicker-next a:active {
-+	background: url(images/454545_7x7_arrow_right.gif) 50% 50% no-repeat;
-+}
-+.ui-datepicker-header select {
-+	border: 1px solid #d3d3d3;
-+	color: #000000;
-+	background: #fef1ec;
-+	font-size: 1em;
-+	line-height: 1.4em;
-+	position: absolute;
-+	top: .5em;
-+	margin: 0 !important;
-+}
-+.ui-datepicker-header option:focus, .ui-datepicker-header option:hover {
-+	background: #dadada;
-+}
-+.ui-datepicker-header select.ui-datepicker-new-month {
-+	width: 7em;
-+	left: 2.2em;
-+}
-+.ui-datepicker-header select.ui-datepicker-new-year {
-+	width: 5em;
-+	left: 9.4em;
-+}
-+table.ui-datepicker {
-+	width: 15.5em;
-+	text-align: right;
-+}
-+table.ui-datepicker td a {
-+	padding: .1em .3em .1em 0;
-+	display: block;
-+	color: #000000;
-+	background: #fef1ec url(images/fef1ec_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	cursor: pointer;
-+	border: 1px solid #ffffff;
-+}
-+table.ui-datepicker td a:hover {
-+	border: 1px solid #999999;
-+	color: #212121;
-+	background: #dadada url(images/dadada_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+}
-+table.ui-datepicker td a:active {
-+	border: 1px solid #aaaaaa;
-+	color: #eeeeee;
-+	background: #333333 url(images/333333_40x100_textures_01_flat_65.png) 0 50% repeat-x;
-+}
-+table.ui-datepicker .ui-datepicker-title-row td {
-+	padding: .3em 0;
-+	text-align: center;
-+	font-size: .9em;
-+	color: #222222;
-+	text-transform: uppercase;
-+}
-+table.ui-datepicker .ui-datepicker-title-row td a {
-+	color: #222222;
-+}
-+.ui-datepicker-cover {
-+	display: none;
-+	display/**/: block;
-+	position: absolute;
-+	z-index: -1;
-+	filter: mask();
-+	top: -4px;
-+	left: -4px;
-+	width: 193px;
-+	height: 200px;
-+}
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+/*
-+Generic ThemeRoller Classes
-+>> Make your jQuery Components ThemeRoller-Compatible!
-+*/
-+
-+/*component global class*/
-+.ui-component {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+	font-family: Bitstream Vera Sans, Verdana,Arial,sans-serif;
-+	font-size: 85%;
-+}
-+/*component content styles*/
-+.ui-component-content {
-+	border: 1px solid #aaaaaa;
-+	background: #ffffff url(images/ffffff_40x100_textures_01_flat_75.png) 0 0 repeat-x;
-+	color: #222222;
-+}
-+.ui-component-content a {
-+	color: #222222;
-+	text-decoration: underline;
-+}
-+/*component states*/
-+.ui-default-state {
-+	border: 1px solid #d3d3d3;
-+	background: #fef1ec url(images/fef1ec_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	font-weight: normal;
-+	color: #000000 !important;
-+}
-+.ui-default-state a {
-+	color: #000000;
-+}
-+.ui-default-state:hover, .ui-hover-state {
-+	border: 1px solid #999999;
-+	background: #dadada url(images/dadada_40x100_textures_02_glass_75.png) 0 50% repeat-x;
-+	font-weight: normal;
-+	color: #212121 !important;
-+}
-+.ui-hover-state a {
-+	color: #212121;
-+}
-+.ui-default-state:active, .ui-active-state {
-+	border: 1px solid #aaaaaa;
-+	background: #333333 url(images/333333_40x100_textures_01_flat_65.png) 0 50% repeat-x;
-+	font-weight: normal;
-+	color: #eeeeee !important;
-+	outline: none;
-+}
-+.ui-active-state a {
-+	color: #eeeeee;
-+	outline: none;
-+}
-+/*icons*/
-+.ui-arrow-right-default {background: url(images/888888_7x7_arrow_right.gif) no-repeat 50% 50%;}
-+.ui-arrow-right-default:hover, .ui-arrow-right-hover {background: url(images/454545_7x7_arrow_right.gif) no-repeat 50% 50%;}
-+.ui-arrow-right-default:active, .ui-arrow-right-active {background: url(images/454545_7x7_arrow_right.gif) no-repeat 50% 50%;}
-+.ui-arrow-right-content {background: url(images/222222_7x7_arrow_right.gif) no-repeat 50% 50%;}
-+
-+.ui-arrow-left-default {background: url(images/888888_7x7_arrow_left.gif) no-repeat 50% 50%;}
-+.ui-arrow-left-default:hover, .ui-arrow-left-hover {background: url(images/454545_7x7_arrow_left.gif) no-repeat 50% 50%;}
-+.ui-arrow-left-default:active, .ui-arrow-left-active {background: url(images/454545_7x7_arrow_left.gif) no-repeat 50% 50%;}
-+.ui-arrow-left-content {background: url(images/222222_7x7_arrow_left.gif) no-repeat 50% 50%;}
-+
-+.ui-arrow-down-default {background: url(images/888888_7x7_arrow_down.gif) no-repeat 50% 50%;}
-+.ui-arrow-down-default:hover, .ui-arrow-down-hover {background: url(images/454545_7x7_arrow_down.gif) no-repeat 50% 50%;}
-+.ui-arrow-down-default:active, .ui-arrow-down-active {background: url(images/454545_7x7_arrow_down.gif) no-repeat 50% 50%;}
-+.ui-arrow-down-content {background: url(images/222222_7x7_arrow_down.gif) no-repeat 50% 50%;}
-+
-+.ui-arrow-up-default {background: url(images/888888_7x7_arrow_up.gif) no-repeat 50% 50%;}
-+.ui-arrow-up-default:hover, .ui-arrow-up-hover {background: url(images/454545_7x7_arrow_up.gif) no-repeat 50% 50%;}
-+.ui-arrow-up-default:active, .ui-arrow-up-active {background: url(images/454545_7x7_arrow_up.gif) no-repeat 50% 50%;}
-+.ui-arrow-up-content {background: url(images/222222_7x7_arrow_up.gif) no-repeat 50% 50%;}
-+
-+.ui-close-default {background: url(images/888888_11x11_icon_close.gif) no-repeat 50% 50%;}
-+.ui-close-default:hover, .ui-close-hover {background: url(images/454545_11x11_icon_close.gif) no-repeat 50% 50%;}
-+.ui-close-default:active, .ui-close-active {background: url(images/454545_11x11_icon_close.gif) no-repeat 50% 50%;}
-+.ui-close-content {background: url(images/454545_11x11_icon_close.gif) no-repeat 50% 50%;}
-+
-+.ui-folder-closed-default {background: url(images/888888_11x11_icon_folder_closed.gif) no-repeat 50% 50%;}
-+.ui-folder-closed-default:hover, .ui-folder-closed-hover {background: url(images/454545_11x11_icon_folder_closed.gif) no-repeat 50% 50%;}
-+.ui-folder-closed-default:active, .ui-folder-closed-active {background: url(images/454545_11x11_icon_folder_closed.gif) no-repeat 50% 50%;}
-+.ui-folder-closed-content {background: url(images/888888_11x11_icon_folder_closed.gif) no-repeat 50% 50%;}
-+
-+.ui-folder-open-default {background: url(images/888888_11x11_icon_folder_open.gif) no-repeat 50% 50%;}
-+.ui-folder-open-default:hover, .ui-folder-open-hover {background: url(images/454545_11x11_icon_folder_open.gif) no-repeat 50% 50%;}
-+.ui-folder-open-default:active, .ui-folder-open-active {background: url(images/454545_11x11_icon_folder_open.gif) no-repeat 50% 50%;}
-+.ui-folder-open-content {background: url(images/454545_11x11_icon_folder_open.gif) no-repeat 50% 50%;}
-+
-+.ui-doc-default {background: url(images/888888_11x11_icon_doc.gif) no-repeat 50% 50%;}
-+.ui-doc-default:hover, .ui-doc-hover {background: url(images/454545_11x11_icon_doc.gif) no-repeat 50% 50%;}
-+.ui-doc-default:active, .ui-doc-active {background: url(images/454545_11x11_icon_doc.gif) no-repeat 50% 50%;}
-+.ui-doc-content {background: url(images/222222_11x11_icon_doc.gif) no-repeat 50% 50%;}
-+
-+.ui-arrows-leftright-default {background: url(images/888888_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;}
-+.ui-arrows-leftright-default:hover, .ui-arrows-leftright-hover {background: url(images/454545_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;}
-+.ui-arrows-leftright-default:active, .ui-arrows-leftright-active {background: url(images/454545_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;}
-+.ui-arrows-leftright-content {background: url(images/222222_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;}
-+
-+.ui-arrows-updown-default {background: url(images/888888_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;}
-+.ui-arrows-updown-default:hover, .ui-arrows-updown-hover {background: url(images/454545_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;}
-+.ui-arrows-updown-default:active, .ui-arrows-updown-active {background: url(images/454545_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;}
-+.ui-arrows-updown-content {background: url(images/222222_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;}
-+
-+.ui-minus-default {background: url(images/888888_11x11_icon_minus.gif) no-repeat 50% 50%;}
-+.ui-minus-default:hover, .ui-minus-hover {background: url(images/454545_11x11_icon_minus.gif) no-repeat 50% 50%;}
-+.ui-minus-default:active, .ui-minus-active {background: url(images/454545_11x11_icon_minus.gif) no-repeat 50% 50%;}
-+.ui-minus-content {background: url(images/222222_11x11_icon_minus.gif) no-repeat 50% 50%;}
-+
-+.ui-plus-default {background: url(images/888888_11x11_icon_plus.gif) no-repeat 50% 50%;}
-+.ui-plus-default:hover, .ui-plus-hover {background: url(images/454545_11x11_icon_plus.gif) no-repeat 50% 50%;}
-+.ui-plus-default:active, .ui-plus-active {background: url(images/454545_11x11_icon_plus.gif) no-repeat 50% 50%;}
-+.ui-plus-content {background: url(images/222222_11x11_icon_plus.gif) no-repeat 50% 50%;}
-+
-+/*hidden elements*/
-+.ui-hidden {
-+	display: none;/* for accessible hiding: position: absolute; left: -99999999px*/;
-+}
-+.ui-accessible-hidden {
-+	 position: absolute; left: -99999999px;
-+}
-+/*reset styles*/
-+.ui-reset {
-+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
-+}
-+/*clearfix class*/
-+.ui-clearfix:after {
-+    content: "."; 
-+    display: block; 
-+    height: 0; 
-+    clear: both; 
-+    visibility: hidden;
-+}
-+.ui-clearfix {display: inline-block;}
-+/* Hides from IE-mac \*/
-+* html .ui-clearfix {height: 1%;}
-+.ui-clearfix {display: block;}
-+/* End hide from IE-mac */
-+
-+/* Note: for resizable styles, use the styles listed above in the dialog section */
-+
-+
-diff --git a/trunk/tracrpc/htdocs/js/jquery-ui-1.6.custom.min.js b/trunk/tracrpc/htdocs/js/jquery-ui-1.6.custom.min.js
-new file mode 100644
---- /dev/null
-+++ b/trunk/tracrpc/htdocs/js/jquery-ui-1.6.custom.min.js
-@@ -0,0 +1,20 @@
-+/*
-+ * jQuery UI 1.6
-+ *
-+ * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
-+ * Dual licensed under the MIT (MIT-LICENSE.txt)
-+ * and GPL (GPL-LICENSE.txt) licenses.
-+ *
-+ * http://docs.jquery.com/UI
-+ */
-+ * jQuery UI Tabs 1.6
-+ *
-+ * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
-+ * Dual licensed under the MIT (MIT-LICENSE.txt)
-+ * and GPL (GPL-LICENSE.txt) licenses.
-+ *
-+ * http://docs.jquery.com/UI/Tabs
-+ *
-+ * Depends:
-+ *	ui.core.js
-+ */
-\ No newline at end of file
 diff --git a/trunk/tracrpc/json_rpc.py b/trunk/tracrpc/json_rpc.py
 new file mode 100644
 --- /dev/null
 diff --git a/trunk/tracrpc/templates/xmlrpclist.html b/trunk/tracrpc/templates/xmlrpclist.html
 --- a/trunk/tracrpc/templates/xmlrpclist.html
 +++ b/trunk/tracrpc/templates/xmlrpclist.html
-@@ -7,23 +7,95 @@
+@@ -7,23 +7,16 @@
    <xi:include href="layout.html" />
    <xi:include href="macros.html" />
    <head>
 -    <title>XML-RPC</title>
 +    <title>RPC</title>
-+    <script type="text/javascript">
-+      <py:choose test="rpc.proto_id">
-+        <py:when test="None"> <!--! unknown protocol -->
-+          var seltab = undefined;
-+        </py:when>
-+        <py:otherwise> <!--! selected protocol -->
-+          var seltab = ${[x[0] for x in rpc.protocols].index(rpc.proto_id)};
-+        </py:otherwise>
-+      </py:choose>
-+    </script>
    </head>
-+  
-+  <!--! Display tabs for protocol handlers -->
-+  <py:def function="tabs(divid)">
-+    <script type="text/javascript">
-+      tab_opts = {
-+                    select: function(event, tab) { 
-+                                if (tab.index != seltab) {
-+                                    seltab = tab.index;
-+  	                                $('.ui-tabs-nav').each(
-+  	                                  function () {
-+  	                                      $(this).tabs("select", tab.index);
-+                                        });
-+                                  }
-+                              }
-+                    };
-+      <py:if test="rpc.proto_id is not None"> <!--! selected protocol -->
-+		    tab_opts.selected = seltab;
-+		  </py:if>
-+		  $('#$divid').tabs(tab_opts);
-+    </script>
-+  </py:def>
 +
    <body>
 -
      <div id="content" class="wiki">
        <h1>Remote Procedure Call (RPC) Interface</h1>
-       <dl>
-         <dt>API Status:</dt>
+-      <dl>
+-        <dt>API Status:</dt>
 -          <dd>XML-RPC is <strong>available</strong></dd>
 -          <dd>JSON-RPC is <strong>
 -            ${xmlrpc.json and 'available' or 'not available'}</strong></dd>
-+        <div id="proto_desc">
-+          <ul>
-+    				<li py:for="protocol in rpc.protocols">
-+    				  <a href="#proto_desc_${protocol[0]}">${protocol[0]}</a>
-+    				</li>
-+          </ul>
-+          <div py:for="protocol in rpc.protocols" id="proto_desc_${protocol[0]}">
-+            <dd>
-+              <p>${protocol[0]} is <strong>
-+                ${protocol[1] and 'available' or 'not available'}</strong>
-+              </p>
-+              <ul>
-+                <li py:for="h, ct in protocol[3]">
-+                  Use <tt>${req.abs_href(h)}</tt> and specify 
-+                  <tt>Content-Type=$ct</tt> to perform anonymous calls. 
-+                  Use <tt>${req.abs_href.login(h)}</tt> with basic
-+                  authentication for user context.
-+                </li>
-+              </ul>
-+            </dd>
-+          </div>
-+        </div>
-       </dl>
-+      ${tabs('proto_desc')}
-+
-+      <h2>Calling Methods</h2>
-+      <p>Libraries for remote procedure calls and parsing exists
-+        for most major languages and platforms - use a tested, standard library
-+        for consistent results.</p>
-+      <p>The following are examples for illustration only, and shows raw
-+        access to RPC using <tt>curl</tt> (with Content-Type and Body for POST request):</p>
-+      <div class="help">
-+        <div id="proto_ex">
-+          <ul>
-+    				<li py:for="protocol in rpc.protocols">
-+    				  <a href="#proto_ex_${protocol[0]}">${protocol[0]}</a>
-+    				</li>
-+          </ul>
-+          <div py:for="protocol in rpc.protocols" id="proto_ex_${protocol[0]}">
-+              ${wiki_to_html(context, protocol[2].replace(
-+                              '${req.abs_href.rpc()}', req.abs_href.rpc()))}
-+          </div>
-+        </div>
-+      </div>
-+      ${tabs('proto_ex')}
- 
+-      </dl>
+-
        <h2>RPC exported functions</h2>
  
        <div id="searchable">
            <dt>
              <h3 id="${'xmlrpc.' + to_unicode(namespace.namespace)}">
                ${namespace.namespace} - ${namespace.description}
-@@ -50,60 +122,6 @@
+@@ -50,60 +43,11 @@
          </dl>
        </div>
        
 -        for consistent results.</p>
 -      <p>The following are examples for illustration only, and shows raw
 -        access to RPC using <tt>curl</tt> (with Content-Type and Body for POST request):</p>
--      <div class="help">
+       <div class="help">
 -        <h4>XML-RPC example</h4>
 -        <pre>
 -user: ~ &gt; cat body.xml
 -        <li>Use <tt>${req.abs_href.login('xmlrpc')}</tt> with basic
 -            authentication for user context.</li>
 -      </ul>
--      </div>
++        <strong>Note:</strong>
++        See <a href="${req.abs_href.rpc('methods')}">RPC protocol reference</a> 
++        for help on available RPC protocols.
+       </div>
 -      <div>
 -        <h4>JSON-RPC example</h4>
 -        <pre>
        <script type="text/javascript">
          addHeadingLinks(document.getElementById("searchable"));
        </script>
+diff --git a/trunk/tracrpc/templates/xmlrpcmain.html b/trunk/tracrpc/templates/xmlrpcmain.html
+new file mode 100644
+--- /dev/null
++++ b/trunk/tracrpc/templates/xmlrpcmain.html
+@@ -0,0 +1,59 @@
++<!DOCTYPE html
++    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
++    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
++<html xmlns="http://www.w3.org/1999/xhtml"
++      xmlns:py="http://genshi.edgewall.org/"
++      xmlns:xi="http://www.w3.org/2001/XInclude">
++  <xi:include href="layout.html" />
++  <xi:include href="macros.html" />
++  <head>
++    <title>RPC</title>
++  </head>
++  
++  <body>
++    <div id="content" class="wiki">
++      <h1>Remote Procedure Call (RPC) Interface</h1>
++      <h2>API Status:</h2>
++      <dl>
++        <py:for each="protocol in rpc.protocols" >
++          <dt>${protocol[0]}</dt>
++          <dd >
++            <p>${protocol[0]} is <strong>
++              ${protocol[1] and 'available' or 'not available'}</strong>
++            </p>
++            <ul>
++              <li py:for="h, ct in protocol[3]">
++                Use <tt>${req.abs_href(h)}</tt> and specify 
++                <tt>Content-Type=$ct</tt> to perform anonymous calls. 
++                Use <tt>${req.abs_href.login(h)}</tt> with basic
++                authentication for user context.
++              </li>
++            </ul>
++          </dd>
++        </py:for>
++      </dl>
++
++      <h2>Calling Methods</h2>
++      <p>Libraries for remote procedure calls and parsing exists
++        for most major languages and platforms - use a tested, standard library
++        for consistent results.</p>
++      <p>The following are examples for illustration only, and shows raw
++        access to RPC using <tt>curl</tt> (with Content-Type and Body for POST request):</p>
++      <div class="help">
++        <div py:for="protocol in rpc.protocols" id="proto_ex_${protocol[0]}">
++            ${wiki_to_html(context, protocol[2].replace(
++                            '${req.abs_href.rpc()}', req.abs_href.rpc()))}
++        </div>
++        <p>
++          <strong>Note:</strong>
++          See <a href="${req.abs_href.rpc('methods')}">RPC method reference</a> 
++          for help on signatures and return values for every available method.
++        </p>
++      </div>
++      
++      <script type="text/javascript">
++        addHeadingLinks(document.getElementById("searchable"));
++      </script>
++    </div>
++  </body>
++</html>
 diff --git a/trunk/tracrpc/tests/__init__.py b/trunk/tracrpc/tests/__init__.py
 --- a/trunk/tracrpc/tests/__init__.py
 +++ b/trunk/tracrpc/tests/__init__.py
 diff --git a/trunk/tracrpc/web_ui.py b/trunk/tracrpc/web_ui.py
 --- a/trunk/tracrpc/web_ui.py
 +++ b/trunk/tracrpc/web_ui.py
-@@ -6,305 +6,110 @@
+@@ -6,305 +6,133 @@
  (c) 2009      ::: www.CodeResort.com - BV Network AS (simon-code@bvnetwork.no)
  """
  
 -from StringIO import StringIO
  from pkg_resources import resource_filename
 -from types import GeneratorType
--
+ 
 -import genshi
++from genshi.builder import tag
  
  from trac.core import *
 -from trac.perm import PermissionError
 -from trac.util.datefmt import utc
 -from trac.util.text import to_unicode
-+from trac.web.api import RequestDone, HTTPUnsupportedMediaType
++from trac.util.translation import _
++from trac.web.api import RequestDone
  from trac.web.main import IRequestHandler
 -from trac.web.chrome import ITemplateProvider, add_stylesheet
-+from trac.web.chrome import ITemplateProvider, add_stylesheet, add_script
++from trac.web.chrome import ITemplateProvider, INavigationContributor, \
++                            add_stylesheet, add_script, add_ctxtnav
  from trac.wiki.formatter import wiki_to_oneliner
  
 -from tracrpc.api import IXMLRPCHandler, XMLRPCSystem
 -                return to_unicode(obj)
 -            else:
 -                return json.JSONEncoder(self, obj)
--
++class RPCWeb(Component):
++    """ Handle RPC calls from HTTP clients, as well as presenting a list of
++        methods available to the currently logged in user. Browsing to
++        <trac>/rpc or <trac>/login/rpc will display this list. """
+ 
 -    class TracRpcJSONDecoder(json.JSONDecoder):
 -        """ Extending the JSON decoder to support some additional types:
 -        1. {'__jsonclass__': ["datetime", "<rfc3339str>"]} => datetime.datetime
 -        2. {'__jsonclass__': ["binary", "<base64str>"]} => xmlrpclib.Binary """
--
++    implements(IRequestHandler, ITemplateProvider, INavigationContributor)
+ 
 -        dt = re.compile(
 -            '^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,}))?')
 -
 -
 -class XMLRPCWeb(Component):
 -    """ Handle XML-RPC calls from HTTP clients, as well as presenting a list of
-+class RPCWeb(Component):
-+    """ Handle RPC calls from HTTP clients, as well as presenting a list of
-         methods available to the currently logged in user. Browsing to
+-        methods available to the currently logged in user. Browsing to
 -        <trac>/xmlrpc or <trac>/login/xmlrpc will display this list. """
 -
 -    content_type_re = re.compile(r'(text|application)/(xml|json)')
-+        <trac>/rpc or <trac>/login/rpc will display this list. """
+-
+-    implements(IRequestHandler, ITemplateProvider)
++    protocols = ExtensionPoint(IRPCProtocol)
  
-     implements(IRequestHandler, ITemplateProvider)
- 
-+    protocols = ExtensionPoint(IRPCProtocol)
-+
      # IRequestHandler methods
 +
      def match_request(self, req):
 +            content-type. """
 +        req.args['protocol'] = None    # Precaution ... just in case
 +        content_type = req.get_header('Content-Type') or 'text/html'
-+        must_handle_request = False
++        must_handle_request = req.path_info in ('/rpc', '/login/rpc', \
++                                                '/rpc/methods')
 +        for protocol in self.protocols:
 +            if not protocol.rpc_info()[1]:
 +                continue # ...as protocol reports status disabled
 -                self.log.debug("RPC(json) call ignored (not available).")
 -                self._send_response(req, "Error: JSON-RPC not available.\n",
 -                                    content_type)
--        else:
++    def _dump_docs(self, req):
++        # Dump RPC documentation
++        req.perm.require('XML_RPC') # Need at least XML_RPC
++        namespaces = {}
++        for method in XMLRPCSystem(self.env).all_methods(req):
++            namespace = method.namespace.replace('.', '_')
++            if namespace not in namespaces:
++                namespaces[namespace] = {
++                    'description' : wiki_to_oneliner(
++                                    method.namespace_description,
++                                    self.env, req=req),
++                    'methods' : [],
++                    'namespace' : method.namespace,
++                    }
++            try:
++                namespaces[namespace]['methods'].append(
++                        (method.signature,
++                        wiki_to_oneliner(
++                            method.description, self.env, req=req),
++                        method.permission))
++            except Exception, e:
++                from util import StringIO
++                import traceback
++                out = StringIO()
++                traceback.print_exc(file=out)
++                raise Exception('%s: %s\n%s' % (method.name,
++                                                str(e), out.getvalue()))
++        add_stylesheet(req, 'common/css/wiki.css')
++        add_stylesheet(req, 'rpc/css/no-theme/ui.all.css')
++        self._rpc_ctxtnav(req)
++        if req.path_info == '/rpc/methods':
++          template = 'xmlrpclist.html'
+         else:
 -            self.process_xml_request(req, content_type)
 -
 -    def process_xml_request(self, req, content_type):
 -            try: # JSON encoding
 -                self.log.debug("RPC(json) result: %s" % repr(response))
 -                response = json.dumps(response, cls=TracRpcJSONEncoder)
-+    def _dump_docs(self, req):
-+        # Dump RPC documentation
-+        req.perm.require('XML_RPC') # Need at least XML_RPC
-+        namespaces = {}
-+        for method in XMLRPCSystem(self.env).all_methods(req):
-+            namespace = method.namespace.replace('.', '_')
-+            if namespace not in namespaces:
-+                namespaces[namespace] = {
-+                    'description' : wiki_to_oneliner(
-+                                    method.namespace_description,
-+                                    self.env, req=req),
-+                    'methods' : [],
-+                    'namespace' : method.namespace,
-+                    }
-+            try:
-+                namespaces[namespace]['methods'].append(
-+                        (method.signature,
-+                        wiki_to_oneliner(
-+                            method.description, self.env, req=req),
-+                        method.permission))
-             except Exception, e:
+-            except Exception, e:
 -                response = json.dumps(self._json_error(e, r_id=r_id),
 -                                        cls=TracRpcJSONEncoder)
 -        except PermissionError, e:
 -            else:
 -                new_result.append(res)
 -        return new_result
-+                from util import StringIO
-+                import traceback
-+                out = StringIO()
-+                traceback.print_exc(file=out)
-+                raise Exception('%s: %s\n%s' % (method.name,
-+                                                str(e), out.getvalue()))
-+        add_stylesheet(req, 'common/css/wiki.css')
-+        add_stylesheet(req, 'rpc/css/no-theme/ui.all.css')
-+        add_script(req, 'rpc/js/jquery-ui-1.6.custom.min.js')
-+        return ('xmlrpclist.html', 
++          template = 'xmlrpcmain.html'
++        return (template, 
 +                    {'rpc': {'functions': namespaces,
 +                    'protocols': [p.rpc_info() for p in self.protocols],
 +                    'proto_id' : None}},
      def get_templates_dirs(self):
 -        return [resource_filename(__name__, 'templates')]
 +        yield resource_filename(__name__, 'templates')
++
++    # INavigationContributor methods
++    def get_active_navigation_item(self, req):
++        return 'rpc'
++
++    def get_navigation_items(self, req):
++        if 'WIKI_VIEW' in req.perm('wiki'):
++            yield ('mainnav', 'rpc',
++                   tag.a(_('RPC'), href=req.href.rpc(), accesskey=1))
++
++    def _rpc_ctxtnav(self, req):
++        """Add ctxtnav entries for docs (RPC methods + protocols)."""
++        add_ctxtnav(req, _('Available methods'), req.href.rpc('methods'))
++        add_ctxtnav(req, _('Available protocols'), req.href.rpc())
 diff --git a/trunk/tracrpc/wiki.py b/trunk/tracrpc/wiki.py
 --- a/trunk/tracrpc/wiki.py
 +++ b/trunk/tracrpc/wiki.py
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.