rjack-solr 3.6.2.0-java → 4.0.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (315) hide show
  1. data/History.rdoc +5 -0
  2. data/Manifest.txt +268 -33
  3. data/NOTICE.txt +1 -1
  4. data/README.rdoc +6 -6
  5. data/assembly.xml +2 -2
  6. data/bin/rjack-solr-fg +1 -1
  7. data/init/rjack-solr +2 -2
  8. data/lib/rjack-solr.rb +7 -2
  9. data/lib/rjack-solr/base.rb +2 -2
  10. data/lib/rjack-solr/commons-cli-1.2.jar +0 -0
  11. data/lib/rjack-solr/config.rb +1 -1
  12. data/lib/rjack-solr/server.rb +1 -1
  13. data/lib/rjack-solr/solr-core-4.0.0.jar +0 -0
  14. data/lib/rjack-solr/solr-solrj-4.0.0.jar +0 -0
  15. data/pom.xml +19 -6
  16. data/test/test_solr.rb +7 -5
  17. data/webapp/META-INF/LICENSE.txt +0 -940
  18. data/webapp/META-INF/MANIFEST.MF +5 -5
  19. data/webapp/META-INF/NOTICE.txt +160 -93
  20. data/webapp/WEB-INF/web.xml +57 -43
  21. data/webapp/admin.html +140 -0
  22. data/webapp/css/chosen.css +392 -0
  23. data/webapp/css/styles/analysis.css +293 -0
  24. data/webapp/css/styles/cloud.css +331 -0
  25. data/webapp/css/styles/common.css +593 -0
  26. data/webapp/css/styles/cores.css +203 -0
  27. data/webapp/css/styles/dashboard.css +127 -0
  28. data/webapp/css/styles/dataimport.css +222 -0
  29. data/webapp/css/styles/index.css +195 -0
  30. data/webapp/css/styles/java-properties.css +33 -0
  31. data/webapp/css/styles/logging.css +323 -0
  32. data/webapp/css/styles/menu.css +272 -0
  33. data/webapp/css/styles/plugins.css +175 -0
  34. data/webapp/css/styles/query.css +137 -0
  35. data/webapp/css/styles/replication.css +494 -0
  36. data/webapp/css/styles/schema-browser.css +476 -0
  37. data/webapp/css/styles/threads.css +153 -0
  38. data/webapp/img/ZeroClipboard.swf +0 -0
  39. data/webapp/img/chosen-sprite.png +0 -0
  40. data/webapp/img/div.gif +0 -0
  41. data/webapp/{admin → img}/favicon.ico +0 -0
  42. data/webapp/img/filetypes/7z.png +0 -0
  43. data/webapp/img/filetypes/README +27 -0
  44. data/webapp/img/filetypes/ai.png +0 -0
  45. data/webapp/img/filetypes/aiff.png +0 -0
  46. data/webapp/img/filetypes/asc.png +0 -0
  47. data/webapp/img/filetypes/audio.png +0 -0
  48. data/webapp/img/filetypes/bin.png +0 -0
  49. data/webapp/img/filetypes/bz2.png +0 -0
  50. data/webapp/img/filetypes/c.png +0 -0
  51. data/webapp/img/filetypes/cfc.png +0 -0
  52. data/webapp/img/filetypes/cfm.png +0 -0
  53. data/webapp/img/filetypes/chm.png +0 -0
  54. data/webapp/img/filetypes/class.png +0 -0
  55. data/webapp/img/filetypes/conf.png +0 -0
  56. data/webapp/img/filetypes/cpp.png +0 -0
  57. data/webapp/img/filetypes/cs.png +0 -0
  58. data/webapp/img/filetypes/css.png +0 -0
  59. data/webapp/img/filetypes/csv.png +0 -0
  60. data/webapp/img/filetypes/deb.png +0 -0
  61. data/webapp/img/filetypes/divx.png +0 -0
  62. data/webapp/img/filetypes/doc.png +0 -0
  63. data/webapp/img/filetypes/dot.png +0 -0
  64. data/webapp/img/filetypes/eml.png +0 -0
  65. data/webapp/img/filetypes/enc.png +0 -0
  66. data/webapp/img/filetypes/file.png +0 -0
  67. data/webapp/img/filetypes/gif.png +0 -0
  68. data/webapp/img/filetypes/gz.png +0 -0
  69. data/webapp/img/filetypes/hlp.png +0 -0
  70. data/webapp/img/filetypes/htm.png +0 -0
  71. data/webapp/img/filetypes/html.png +0 -0
  72. data/webapp/img/filetypes/image.png +0 -0
  73. data/webapp/img/filetypes/iso.png +0 -0
  74. data/webapp/img/filetypes/jar.png +0 -0
  75. data/webapp/img/filetypes/java.png +0 -0
  76. data/webapp/img/filetypes/jpeg.png +0 -0
  77. data/webapp/img/filetypes/jpg.png +0 -0
  78. data/webapp/img/filetypes/js.png +0 -0
  79. data/webapp/img/filetypes/lua.png +0 -0
  80. data/webapp/img/filetypes/m.png +0 -0
  81. data/webapp/img/filetypes/mm.png +0 -0
  82. data/webapp/img/filetypes/mov.png +0 -0
  83. data/webapp/img/filetypes/mp3.png +0 -0
  84. data/webapp/img/filetypes/mpg.png +0 -0
  85. data/webapp/img/filetypes/odc.png +0 -0
  86. data/webapp/img/filetypes/odf.png +0 -0
  87. data/webapp/img/filetypes/odg.png +0 -0
  88. data/webapp/img/filetypes/odi.png +0 -0
  89. data/webapp/img/filetypes/odp.png +0 -0
  90. data/webapp/img/filetypes/ods.png +0 -0
  91. data/webapp/img/filetypes/odt.png +0 -0
  92. data/webapp/img/filetypes/ogg.png +0 -0
  93. data/webapp/img/filetypes/pdf.png +0 -0
  94. data/webapp/img/filetypes/pgp.png +0 -0
  95. data/webapp/img/filetypes/php.png +0 -0
  96. data/webapp/img/filetypes/pl.png +0 -0
  97. data/webapp/img/filetypes/png.png +0 -0
  98. data/webapp/img/filetypes/ppt.png +0 -0
  99. data/webapp/img/filetypes/ps.png +0 -0
  100. data/webapp/img/filetypes/py.png +0 -0
  101. data/webapp/img/filetypes/ram.png +0 -0
  102. data/webapp/img/filetypes/rar.png +0 -0
  103. data/webapp/img/filetypes/rb.png +0 -0
  104. data/webapp/img/filetypes/rm.png +0 -0
  105. data/webapp/img/filetypes/rpm.png +0 -0
  106. data/webapp/img/filetypes/rtf.png +0 -0
  107. data/webapp/img/filetypes/sig.png +0 -0
  108. data/webapp/img/filetypes/sql.png +0 -0
  109. data/webapp/img/filetypes/swf.png +0 -0
  110. data/webapp/img/filetypes/sxc.png +0 -0
  111. data/webapp/img/filetypes/sxd.png +0 -0
  112. data/webapp/img/filetypes/sxi.png +0 -0
  113. data/webapp/img/filetypes/sxw.png +0 -0
  114. data/webapp/img/filetypes/tar.png +0 -0
  115. data/webapp/img/filetypes/tex.png +0 -0
  116. data/webapp/img/filetypes/tgz.png +0 -0
  117. data/webapp/img/filetypes/txt.png +0 -0
  118. data/webapp/img/filetypes/vcf.png +0 -0
  119. data/webapp/img/filetypes/video.png +0 -0
  120. data/webapp/img/filetypes/vsd.png +0 -0
  121. data/webapp/img/filetypes/wav.png +0 -0
  122. data/webapp/img/filetypes/wma.png +0 -0
  123. data/webapp/img/filetypes/wmv.png +0 -0
  124. data/webapp/img/filetypes/xls.png +0 -0
  125. data/webapp/img/filetypes/xml.png +0 -0
  126. data/webapp/img/filetypes/xpi.png +0 -0
  127. data/webapp/img/filetypes/xvid.png +0 -0
  128. data/webapp/img/filetypes/zip.png +0 -0
  129. data/webapp/img/ico/arrow-000-small.png +0 -0
  130. data/webapp/img/ico/arrow-circle.png +0 -0
  131. data/webapp/img/ico/arrow-switch.png +0 -0
  132. data/webapp/img/ico/asterisk.png +0 -0
  133. data/webapp/img/ico/battery.png +0 -0
  134. data/webapp/img/ico/block-small.png +0 -0
  135. data/webapp/img/ico/block.png +0 -0
  136. data/webapp/img/ico/book-open-text.png +0 -0
  137. data/webapp/img/ico/box.png +0 -0
  138. data/webapp/img/ico/bug.png +0 -0
  139. data/webapp/img/ico/chart.png +0 -0
  140. data/webapp/img/ico/chevron-small-expand.png +0 -0
  141. data/webapp/img/ico/chevron-small.png +0 -0
  142. data/webapp/img/ico/clipboard-list.png +0 -0
  143. data/webapp/img/ico/clipboard-paste-document-text.png +0 -0
  144. data/webapp/img/ico/clipboard-paste.png +0 -0
  145. data/webapp/img/ico/clock-select-remain.png +0 -0
  146. data/webapp/img/ico/clock-select.png +0 -0
  147. data/webapp/img/ico/construction.png +0 -0
  148. data/webapp/img/ico/cross-0.png +0 -0
  149. data/webapp/img/ico/cross-1.png +0 -0
  150. data/webapp/img/ico/cross.png +0 -0
  151. data/webapp/img/ico/dashboard.png +0 -0
  152. data/webapp/img/ico/database.png +0 -0
  153. data/webapp/img/ico/databases.png +0 -0
  154. data/webapp/img/ico/disk-black.png +0 -0
  155. data/webapp/img/ico/document-convert.png +0 -0
  156. data/webapp/img/ico/document-import.png +0 -0
  157. data/webapp/img/ico/document-list.png +0 -0
  158. data/webapp/img/ico/document-text.png +0 -0
  159. data/webapp/img/ico/download-cloud.png +0 -0
  160. data/webapp/img/ico/exclamation-button.png +0 -0
  161. data/webapp/img/ico/eye.png +0 -0
  162. data/webapp/img/ico/folder-export.png +0 -0
  163. data/webapp/img/ico/folder-tree.png +0 -0
  164. data/webapp/img/ico/folder.png +0 -0
  165. data/webapp/img/ico/funnel-small.png +0 -0
  166. data/webapp/img/ico/funnel.png +0 -0
  167. data/webapp/img/ico/gear.png +0 -0
  168. data/webapp/img/ico/globe-network.png +0 -0
  169. data/webapp/img/ico/globe.png +0 -0
  170. data/webapp/img/ico/hammer-screwdriver.png +0 -0
  171. data/webapp/img/ico/hand.png +0 -0
  172. data/webapp/img/ico/highlighter-text.png +0 -0
  173. data/webapp/img/ico/hourglass--exclamation.png +0 -0
  174. data/webapp/img/ico/hourglass.png +0 -0
  175. data/webapp/img/ico/inbox-document-text.png +0 -0
  176. data/webapp/img/ico/information-button.png +0 -0
  177. data/webapp/img/ico/information-small.png +0 -0
  178. data/webapp/img/ico/information-white.png +0 -0
  179. data/webapp/img/ico/information.png +0 -0
  180. data/webapp/img/ico/jar.png +0 -0
  181. data/webapp/img/ico/magnifier.png +0 -0
  182. data/webapp/img/ico/mail.png +0 -0
  183. data/webapp/img/ico/memory.png +0 -0
  184. data/webapp/img/ico/molecule.png +0 -0
  185. data/webapp/img/ico/network-cloud.png +0 -0
  186. data/webapp/img/ico/network-status-away.png +0 -0
  187. data/webapp/img/ico/network-status-busy.png +0 -0
  188. data/webapp/img/ico/network-status-offline.png +0 -0
  189. data/webapp/img/ico/network-status.png +0 -0
  190. data/webapp/img/ico/network.png +0 -0
  191. data/webapp/img/ico/node-design.png +0 -0
  192. data/webapp/img/ico/node-master.png +0 -0
  193. data/webapp/img/ico/node-select.png +0 -0
  194. data/webapp/img/ico/node-slave.png +0 -0
  195. data/webapp/img/ico/node.png +0 -0
  196. data/webapp/img/ico/pencil-small.png +0 -0
  197. data/webapp/img/ico/plus-button.png +0 -0
  198. data/webapp/img/ico/processor.png +0 -0
  199. data/webapp/img/ico/prohibition.png +0 -0
  200. data/webapp/img/ico/property.png +0 -0
  201. data/webapp/img/ico/question-small-white.png +0 -0
  202. data/webapp/img/ico/question-white.png +0 -0
  203. data/webapp/img/ico/question.png +0 -0
  204. data/webapp/img/ico/receipt-invoice.png +0 -0
  205. data/webapp/img/ico/receipt.png +0 -0
  206. data/webapp/img/ico/script-code.png +0 -0
  207. data/webapp/img/ico/server-cast.png +0 -0
  208. data/webapp/img/ico/server.png +0 -0
  209. data/webapp/img/ico/sitemap.png +0 -0
  210. data/webapp/img/ico/slash.png +0 -0
  211. data/webapp/img/ico/status-away.png +0 -0
  212. data/webapp/img/ico/status-busy.png +0 -0
  213. data/webapp/img/ico/status-offline.png +0 -0
  214. data/webapp/img/ico/status.png +0 -0
  215. data/webapp/img/ico/system-monitor--exclamation.png +0 -0
  216. data/webapp/img/ico/system-monitor.png +0 -0
  217. data/webapp/img/ico/table.png +0 -0
  218. data/webapp/img/ico/terminal.png +0 -0
  219. data/webapp/img/ico/tick-circle.png +0 -0
  220. data/webapp/img/ico/tick-red.png +0 -0
  221. data/webapp/img/ico/tick.png +0 -0
  222. data/webapp/img/ico/toggle-small-expand.png +0 -0
  223. data/webapp/img/ico/toggle-small.png +0 -0
  224. data/webapp/img/ico/toolbox.png +0 -0
  225. data/webapp/img/ico/ui-accordion.png +0 -0
  226. data/webapp/img/ico/ui-address-bar.png +0 -0
  227. data/webapp/img/ico/ui-check-box-uncheck.png +0 -0
  228. data/webapp/img/ico/ui-check-box.png +0 -0
  229. data/webapp/img/ico/ui-radio-button-uncheck.png +0 -0
  230. data/webapp/img/ico/ui-radio-button.png +0 -0
  231. data/webapp/img/ico/ui-text-field-select.png +0 -0
  232. data/webapp/img/ico/users.png +0 -0
  233. data/webapp/img/ico/wooden-box.png +0 -0
  234. data/webapp/img/ico/zone.png +0 -0
  235. data/webapp/img/loader-light.gif +0 -0
  236. data/webapp/img/loader.gif +0 -0
  237. data/webapp/img/lucene-ico.png +0 -0
  238. data/webapp/img/solr-ico.png +0 -0
  239. data/webapp/{admin/solr_small.png → img/solr.png} +0 -0
  240. data/webapp/img/tree.png +0 -0
  241. data/webapp/js/lib/ZeroClipboard.js +317 -0
  242. data/webapp/js/lib/chosen.js +953 -0
  243. data/webapp/{admin/get-properties.jsp → js/lib/console.js} +13 -10
  244. data/webapp/js/lib/d3.js +9342 -0
  245. data/webapp/js/lib/highlight.js +1 -0
  246. data/webapp/{admin/jquery-1.4.3.min.js → js/lib/jquery-1.7.2.min.js} +0 -0
  247. data/webapp/js/lib/jquery.blockUI.js +499 -0
  248. data/webapp/js/lib/jquery.cookie.js +47 -0
  249. data/webapp/js/lib/jquery.form.js +782 -0
  250. data/webapp/js/lib/jquery.jstree.js +3510 -0
  251. data/webapp/js/lib/jquery.sammy.js +1856 -0
  252. data/webapp/js/lib/jquery.sparkline.js +1271 -0
  253. data/webapp/js/lib/jquery.timeago.js +165 -0
  254. data/webapp/js/lib/linker.js +48 -0
  255. data/webapp/js/lib/order.js +189 -0
  256. data/webapp/js/main.js +57 -0
  257. data/webapp/js/require.js +11319 -0
  258. data/webapp/js/scripts/analysis.js +549 -0
  259. data/webapp/js/scripts/app.js +368 -0
  260. data/webapp/js/scripts/cloud.js +719 -0
  261. data/webapp/js/scripts/cores.js +540 -0
  262. data/webapp/js/scripts/dashboard.js +540 -0
  263. data/webapp/js/scripts/dataimport.js +567 -0
  264. data/webapp/js/scripts/file.js +56 -0
  265. data/webapp/js/scripts/index.js +344 -0
  266. data/webapp/js/scripts/java-properties.js +107 -0
  267. data/webapp/js/scripts/logging.js +519 -0
  268. data/webapp/js/scripts/ping.js +72 -0
  269. data/webapp/js/scripts/plugins.js +426 -0
  270. data/webapp/js/scripts/query.js +170 -0
  271. data/webapp/js/scripts/replication.js +557 -0
  272. data/webapp/js/scripts/schema-browser.js +1206 -0
  273. data/webapp/js/scripts/threads.js +159 -0
  274. data/webapp/tpl/analysis.html +83 -0
  275. data/webapp/tpl/cloud.html +54 -0
  276. data/webapp/tpl/cores.html +215 -0
  277. data/webapp/tpl/dashboard.html +164 -0
  278. data/webapp/tpl/dataimport.html +123 -0
  279. data/webapp/tpl/index.html +250 -0
  280. data/webapp/tpl/logging.html +23 -0
  281. data/webapp/tpl/plugins.html +39 -0
  282. data/webapp/tpl/query.html +318 -0
  283. data/webapp/tpl/replication.html +207 -0
  284. data/webapp/tpl/schema-browser.html +178 -0
  285. data/webapp/tpl/threads.html +56 -0
  286. metadata +307 -40
  287. data/lib/rjack-solr/solr-core-3.6.2.jar +0 -0
  288. data/lib/rjack-solr/solr-solrj-3.6.2.jar +0 -0
  289. data/webapp/admin/_info.jsp +0 -120
  290. data/webapp/admin/action.jsp +0 -94
  291. data/webapp/admin/analysis.jsp +0 -496
  292. data/webapp/admin/analysis.xsl +0 -179
  293. data/webapp/admin/dataimport.jsp +0 -53
  294. data/webapp/admin/debug.jsp +0 -103
  295. data/webapp/admin/distributiondump.jsp +0 -160
  296. data/webapp/admin/form.jsp +0 -152
  297. data/webapp/admin/get-file.jsp +0 -72
  298. data/webapp/admin/header.jsp +0 -44
  299. data/webapp/admin/index.jsp +0 -162
  300. data/webapp/admin/meta.xsl +0 -34
  301. data/webapp/admin/ping.jsp +0 -52
  302. data/webapp/admin/ping.xsl +0 -71
  303. data/webapp/admin/raw-schema.jsp +0 -38
  304. data/webapp/admin/registry.jsp +0 -107
  305. data/webapp/admin/registry.xsl +0 -321
  306. data/webapp/admin/replication/header.jsp +0 -89
  307. data/webapp/admin/replication/index.jsp +0 -378
  308. data/webapp/admin/schema.jsp +0 -690
  309. data/webapp/admin/solr-admin.css +0 -215
  310. data/webapp/admin/stats.jsp +0 -92
  311. data/webapp/admin/stats.xsl +0 -220
  312. data/webapp/admin/tabular.xsl +0 -141
  313. data/webapp/admin/threaddump.jsp +0 -110
  314. data/webapp/admin/threaddump.xsl +0 -103
  315. data/webapp/index.jsp +0 -49
@@ -0,0 +1,368 @@
1
+ /*
2
+ Licensed to the Apache Software Foundation (ASF) under one or more
3
+ contributor license agreements. See the NOTICE file distributed with
4
+ this work for additional information regarding copyright ownership.
5
+ The ASF licenses this file to You under the Apache License, Version 2.0
6
+ (the "License"); you may not use this file except in compliance with
7
+ the License. You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ */
17
+
18
+ var loader = {
19
+
20
+ show : function( element )
21
+ {
22
+ $( element )
23
+ .addClass( 'loader' );
24
+ },
25
+
26
+ hide : function( element )
27
+ {
28
+ $( element )
29
+ .removeClass( 'loader' );
30
+ }
31
+
32
+ };
33
+
34
+ Number.prototype.esc = function()
35
+ {
36
+ return new String( this ).esc();
37
+ }
38
+
39
+ String.prototype.esc = function()
40
+ {
41
+ return this.replace( /</g, '&lt;' ).replace( />/g, '&gt;' );
42
+ }
43
+
44
+ SolrDate = function( date )
45
+ {
46
+ // ["Sat Mar 03 11:00:00 CET 2012", "Sat", "Mar", "03", "11:00:00", "CET", "2012"]
47
+ var parts = date.match( /^(\w+)\s+(\w+)\s+(\d+)\s+(\d+\:\d+\:\d+)\s+(\w+)\s+(\d+)$/ );
48
+
49
+ // "Sat Mar 03 2012 10:37:33"
50
+ return new Date( parts[1] + ' ' + parts[2] + ' ' + parts[3] + ' ' + parts[6] + ' ' + parts[4] );
51
+ }
52
+
53
+ var sammy = $.sammy
54
+ (
55
+ function()
56
+ {
57
+ this.bind
58
+ (
59
+ 'run',
60
+ function( event, config )
61
+ {
62
+ if( 0 === config.start_url.length )
63
+ {
64
+ location.href = '#/';
65
+ return false;
66
+ }
67
+ }
68
+ );
69
+
70
+ this.bind
71
+ (
72
+ 'error',
73
+ function( message, original_error )
74
+ {
75
+ alert( original_error.message );
76
+ }
77
+ );
78
+
79
+ // activate_core
80
+ this.before
81
+ (
82
+ {},
83
+ function( context )
84
+ {
85
+ if( app.timeout )
86
+ {
87
+ console.debug( 'Clearing Timeout #' + app.timeout );
88
+ clearTimeout( app.timeout );
89
+ }
90
+
91
+ var menu_wrapper = $( '#menu-wrapper' );
92
+
93
+ $( 'li[id].active', menu_wrapper )
94
+ .removeClass( 'active' );
95
+
96
+ $( 'li.active', menu_wrapper )
97
+ .removeClass( 'active' );
98
+
99
+ if( this.params.splat )
100
+ {
101
+ var selector = '~' === this.params.splat[0][0]
102
+ ? '#' + this.params.splat[0].replace( /^~/, '' ) + '.global'
103
+ : '#menu-selector #' + this.params.splat[0];
104
+
105
+ var active_element = $( selector, menu_wrapper );
106
+
107
+ if( 0 === active_element.size() )
108
+ {
109
+ this.app.error( 'There exists no core with name "' + this.params.splat[0] + '"' );
110
+ return false;
111
+ }
112
+
113
+ active_element
114
+ .addClass( 'active' );
115
+
116
+ if( this.params.splat[1] )
117
+ {
118
+ $( '.' + this.params.splat[1], active_element )
119
+ .addClass( 'active' );
120
+ }
121
+
122
+ if( !active_element.hasClass( 'global' ) )
123
+ {
124
+ this.active_core = active_element;
125
+ }
126
+ }
127
+ }
128
+ );
129
+ }
130
+ );
131
+
132
+ var solr_admin = function( app_config )
133
+ {
134
+ self = this,
135
+
136
+ menu_element = null,
137
+
138
+ is_multicore = null,
139
+ cores_data = null,
140
+ active_core = null,
141
+ environment_basepath = null,
142
+
143
+ config = app_config,
144
+ params = null,
145
+ dashboard_values = null,
146
+ schema_browser_data = null,
147
+
148
+ plugin_data = null,
149
+
150
+ this.menu_element = $( '#menu-selector' );
151
+ this.config = config;
152
+
153
+ this.timeout = null;
154
+
155
+ show_global_error = function( error )
156
+ {
157
+ var main = $( '#main' );
158
+
159
+ $( 'div[id$="-wrapper"]', main )
160
+ .remove();
161
+
162
+ main
163
+ .addClass( 'error' )
164
+ .append( error );
165
+
166
+ var pre_tags = $( 'pre', main );
167
+ if( 0 !== pre_tags.size() )
168
+ {
169
+ hljs.highlightBlock( pre_tags.get(0) );
170
+ }
171
+ };
172
+
173
+ this.run = function()
174
+ {
175
+ $.ajax
176
+ (
177
+ {
178
+ url : config.solr_path + config.core_admin_path + '?wt=json',
179
+ dataType : 'json',
180
+ beforeSend : function( arr, form, options )
181
+ {
182
+ $( '#content' )
183
+ .html( '<div id="index"><div class="loader">Loading ...</div></div>' );
184
+ },
185
+ success : function( response )
186
+ {
187
+ self.cores_data = response.status;
188
+ var core_count = 0;
189
+
190
+ for( var core_name in response.status )
191
+ {
192
+ core_count++;
193
+ var core_path = config.solr_path + '/' + core_name;
194
+ var schema = response['status'][core_name]['schema'];
195
+ var solrconfig = response['status'][core_name]['config'];
196
+ var classes = [];
197
+
198
+ if( !environment_basepath )
199
+ {
200
+ environment_basepath = core_path;
201
+ }
202
+
203
+ if( response['status'][core_name]['isDefaultCore'] )
204
+ {
205
+ classes.push( 'default' );
206
+ }
207
+
208
+ var core_tpl = '<li id="' + core_name + '" '
209
+ + ' class="' + classes.join( ' ' ) + '"'
210
+ + ' data-basepath="' + core_path + '"'
211
+ + ' schema="' + schema + '"'
212
+ + ' config="' + solrconfig + '"'
213
+ + '>' + "\n"
214
+ + ' <p><a href="#/' + core_name + '">' + core_name + '</a></p>' + "\n"
215
+ + ' <ul>' + "\n"
216
+
217
+ + ' <li class="ping"><a rel="' + core_path + '/admin/ping"><span>Ping</span></a></li>' + "\n"
218
+ + ' <li class="query"><a href="#/' + core_name + '/query"><span>Query</span></a></li>' + "\n"
219
+ + ' <li class="schema"><a href="#/' + core_name + '/schema"><span>Schema</span></a></li>' + "\n"
220
+ + ' <li class="config"><a href="#/' + core_name + '/config"><span>Config</span></a></li>' + "\n"
221
+ + ' <li class="replication"><a href="#/' + core_name + '/replication"><span>Replication</span></a></li>' + "\n"
222
+ + ' <li class="analysis"><a href="#/' + core_name + '/analysis"><span>Analysis</span></a></li>' + "\n"
223
+ + ' <li class="schema-browser"><a href="#/' + core_name + '/schema-browser"><span>Schema Browser</span></a></li>' + "\n"
224
+ + ' <li class="plugins"><a href="#/' + core_name + '/plugins"><span>Plugins / Stats</span></a></li>' + "\n"
225
+ + ' <li class="dataimport"><a href="#/' + core_name + '/dataimport"><span>Dataimport</span></a></li>' + "\n"
226
+
227
+ + ' </ul>' + "\n"
228
+ + '</li>';
229
+
230
+ self.menu_element
231
+ .append( core_tpl );
232
+ }
233
+
234
+ if( response.initFailures )
235
+ {
236
+ var failures = [];
237
+ for( var core_name in response.initFailures )
238
+ {
239
+ failures.push
240
+ (
241
+ '<li>' +
242
+ '<strong>' + core_name.esc() + ':</strong>' + "\n" +
243
+ response.initFailures[core_name].esc() + "\n" +
244
+ '</li>'
245
+ );
246
+ }
247
+
248
+ if( 0 !== failures.length )
249
+ {
250
+ var init_failures = $( '#init-failures' );
251
+
252
+ init_failures.show();
253
+ $( 'ul', init_failures ).html( failures.join( "\n" ) );
254
+ }
255
+ }
256
+
257
+ if( 0 === core_count )
258
+ {
259
+ show_global_error
260
+ (
261
+ '<div class="message">There are no SolrCores running. <br/> Using the Solr Admin UI currently requires at least one SolrCore.</div>'
262
+ );
263
+ return;
264
+ } // else: we have at least one core....
265
+
266
+ var system_url = environment_basepath + '/admin/system?wt=json';
267
+ $.ajax
268
+ (
269
+ {
270
+ url : system_url,
271
+ dataType : 'json',
272
+ beforeSend : function( arr, form, options )
273
+ {
274
+ },
275
+ success : function( response )
276
+ {
277
+ self.dashboard_values = response;
278
+
279
+ var environment_args = null;
280
+ var cloud_args = null;
281
+
282
+ if( response.jvm && response.jvm.jmx && response.jvm.jmx.commandLineArgs )
283
+ {
284
+ var command_line_args = response.jvm.jmx.commandLineArgs.join( ' | ' );
285
+
286
+ environment_args = command_line_args.match( /-Dsolr.environment=((dev|test|prod)?[\w\d]*)/i );
287
+ cloud_args = command_line_args.match( /-Dzk/i );
288
+ }
289
+
290
+ // title
291
+
292
+ $( 'title', document )
293
+ .append( ' (' + response.core.host + ')' );
294
+
295
+ // environment
296
+
297
+ var wrapper = $( '#wrapper' );
298
+ var environment_element = $( '#environment' );
299
+ if( environment_args )
300
+ {
301
+ wrapper
302
+ .addClass( 'has-environment' );
303
+
304
+ if( environment_args[1] )
305
+ {
306
+ environment_element
307
+ .html( environment_args[1] );
308
+ }
309
+
310
+ if( environment_args[2] )
311
+ {
312
+ environment_element
313
+ .addClass( environment_args[2] );
314
+ }
315
+ }
316
+ else
317
+ {
318
+ wrapper
319
+ .removeClass( 'has-environment' );
320
+ }
321
+
322
+ // cloud
323
+
324
+ var cloud_nav_element = $( '#menu #cloud' );
325
+ if( cloud_args )
326
+ {
327
+ cloud_nav_element
328
+ .show();
329
+ }
330
+
331
+ // sammy
332
+
333
+ sammy.run( location.hash );
334
+ },
335
+ error : function()
336
+ {
337
+ show_global_error
338
+ (
339
+ '<div class="message"><p>Unable to load environment info from <code>' + system_url.esc() + '</code>.</p>' +
340
+ '<p>This interface requires that you activate the admin request handlers in all SolrCores by adding the ' +
341
+ 'following configuration to your <code>solrconfig.xml</code>:</p></div>' + "\n" +
342
+
343
+ '<div class="code"><pre class="syntax language-xml"><code>' +
344
+ '<!-- Admin Handlers - This will register all the standard admin RequestHandlers. -->'.esc() + "\n" +
345
+ '<requestHandler name="/admin/" class="solr.admin.AdminHandlers" />'.esc() +
346
+ '</code></pre></div>'
347
+ );
348
+ },
349
+ complete : function()
350
+ {
351
+ loader.hide( this );
352
+ }
353
+ }
354
+ );
355
+ },
356
+ error : function()
357
+ {
358
+ },
359
+ complete : function()
360
+ {
361
+ }
362
+ }
363
+ );
364
+ }
365
+
366
+ };
367
+
368
+ var app = new solr_admin( app_config );
@@ -0,0 +1,719 @@
1
+ /*
2
+ Licensed to the Apache Software Foundation (ASF) under one or more
3
+ contributor license agreements. See the NOTICE file distributed with
4
+ this work for additional information regarding copyright ownership.
5
+ The ASF licenses this file to You under the Apache License, Version 2.0
6
+ (the "License"); you may not use this file except in compliance with
7
+ the License. You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ */
17
+
18
+ var init_debug = function( cloud_element )
19
+ {
20
+ var debug_element = $( '#debug', cloud_element );
21
+ var debug_button = $( '#menu #cloud .dump a' );
22
+
23
+ var clipboard_element = $( '.clipboard', debug_element );
24
+ var clipboard_button = $( 'a', clipboard_element );
25
+
26
+ debug_button
27
+ .die( 'click' )
28
+ .live
29
+ (
30
+ 'click',
31
+ function( event )
32
+ {
33
+ debug_element.trigger( 'show' );
34
+ return false;
35
+ }
36
+ );
37
+
38
+ $( '.close', debug_element )
39
+ .die( 'click' )
40
+ .live
41
+ (
42
+ 'click',
43
+ function( event )
44
+ {
45
+ debug_element.trigger( 'hide' );
46
+ return false;
47
+ }
48
+ );
49
+
50
+ $( '.clipboard', debug_element )
51
+ .die( 'click' )
52
+ .live
53
+ (
54
+ 'click',
55
+ function( event )
56
+ {
57
+ return false;
58
+ }
59
+ );
60
+
61
+ debug_element
62
+ .die( 'show' )
63
+ .live
64
+ (
65
+ 'show',
66
+ function( event )
67
+ {
68
+ debug_element.show();
69
+
70
+ $.ajax
71
+ (
72
+ {
73
+ url : app.config.solr_path + '/zookeeper?wt=json&dump=true',
74
+ dataType : 'text',
75
+ context : debug_element,
76
+ beforeSend : function( xhr, settings )
77
+ {
78
+ $( '.debug', debug_element )
79
+ .html( '<span class="loader">Loading Dump ...</span>' );
80
+
81
+ ZeroClipboard.setMoviePath( 'img/ZeroClipboard.swf' );
82
+
83
+ clipboard_client = new ZeroClipboard.Client();
84
+
85
+ clipboard_client.addEventListener
86
+ (
87
+ 'load',
88
+ function( client )
89
+ {
90
+ }
91
+ );
92
+
93
+ clipboard_client.addEventListener
94
+ (
95
+ 'complete',
96
+ function( client, text )
97
+ {
98
+ clipboard_element
99
+ .addClass( 'copied' );
100
+
101
+ clipboard_button
102
+ .data( 'text', clipboard_button.text() )
103
+ .text( clipboard_button.data( 'copied' ) );
104
+ }
105
+ );
106
+ },
107
+ success : function( response, text_status, xhr )
108
+ {
109
+ clipboard_client.glue
110
+ (
111
+ clipboard_element.get(0),
112
+ clipboard_button.get(0)
113
+ );
114
+
115
+ clipboard_client.setText( response.replace( /\\/g, '\\\\' ) );
116
+
117
+ $( '.debug', debug_element )
118
+ .removeClass( 'loader' )
119
+ .text( response );
120
+ },
121
+ error : function( xhr, text_status, error_thrown )
122
+ {
123
+ },
124
+ complete : function( xhr, text_status )
125
+ {
126
+ }
127
+ }
128
+ );
129
+ }
130
+ )
131
+ .die( 'hide' )
132
+ .live
133
+ (
134
+ 'hide',
135
+ function( event )
136
+ {
137
+ $( '.debug', debug_element )
138
+ .empty();
139
+
140
+ clipboard_element
141
+ .removeClass( 'copied' );
142
+
143
+ clipboard_button
144
+ .data( 'copied', clipboard_button.text() )
145
+ .text( clipboard_button.data( 'text' ) );
146
+
147
+ clipboard_client.destroy();
148
+
149
+ debug_element.hide();
150
+ }
151
+ );
152
+ };
153
+
154
+ var helper_path_class = function( p )
155
+ {
156
+ var classes = [ 'link' ];
157
+ classes.push( 'lvl-' + p.target.depth );
158
+
159
+ if( p.target.data && p.target.data.leader )
160
+ {
161
+ classes.push( 'leader' );
162
+ }
163
+
164
+ if( p.target.data && p.target.data.state )
165
+ {
166
+ classes.push( p.target.data.state );
167
+ }
168
+
169
+ return classes.join( ' ' );
170
+ };
171
+
172
+ var helper_node_class = function( d )
173
+ {
174
+ var classes = [ 'node' ];
175
+ classes.push( 'lvl-' + d.depth );
176
+
177
+ if( d.data && d.data.leader )
178
+ {
179
+ classes.push( 'leader' );
180
+ }
181
+
182
+ if( d.data && d.data.state )
183
+ {
184
+ classes.push( d.data.state );
185
+ }
186
+
187
+ return classes.join( ' ' );
188
+ };
189
+
190
+ var helper_data = {
191
+ protocol: [],
192
+ host: [],
193
+ hostname: [],
194
+ port: [],
195
+ pathname: []
196
+ };
197
+
198
+ var helper_node_text = function( d )
199
+ {
200
+ if( !d.data || !d.data.uri )
201
+ {
202
+ return d.name;
203
+ }
204
+
205
+ var name = d.data.uri.hostname;
206
+
207
+ if( 1 !== helper_data.protocol.length )
208
+ {
209
+ name = d.data.uri.protocol + '//' + name;
210
+ }
211
+
212
+ if( 1 !== helper_data.port.length )
213
+ {
214
+ name += ':' + d.data.uri.port;
215
+ }
216
+
217
+ if( 1 !== helper_data.pathname.length )
218
+ {
219
+ name += d.data.uri.pathname;
220
+ }
221
+
222
+ return name;
223
+ };
224
+
225
+ var generate_graph = function( graph_element, graph_data, leaf_count )
226
+ {
227
+ var w = graph_element.width(),
228
+ h = leaf_count * 20;
229
+
230
+ var tree = d3.layout.tree()
231
+ .size([h, w - 400]);
232
+
233
+ var diagonal = d3.svg.diagonal()
234
+ .projection(function(d) { return [d.y, d.x]; });
235
+
236
+ var vis = d3.select( '#canvas' ).append( 'svg' )
237
+ .attr( 'width', w )
238
+ .attr( 'height', h)
239
+ .append( 'g' )
240
+ .attr( 'transform', 'translate(100, 0)' );
241
+
242
+ var nodes = tree.nodes( graph_data );
243
+
244
+ var link = vis.selectAll( 'path.link' )
245
+ .data( tree.links( nodes ) )
246
+ .enter().append( 'path' )
247
+ .attr( 'class', helper_path_class )
248
+ .attr( 'd', diagonal );
249
+
250
+ var node = vis.selectAll( 'g.node' )
251
+ .data( nodes )
252
+ .enter().append( 'g' )
253
+ .attr( 'class', helper_node_class )
254
+ .attr( 'transform', function(d) { return 'translate(' + d.y + ',' + d.x + ')'; } )
255
+
256
+ node.append( 'circle' )
257
+ .attr( 'r', 4.5 );
258
+
259
+ node.append( 'text' )
260
+ .attr( 'dx', function( d ) { return 0 === d.depth ? -8 : 8; } )
261
+ .attr( 'dy', function( d ) { return 5; } )
262
+ .attr( 'text-anchor', function( d ) { return 0 === d.depth ? 'end' : 'start'; } )
263
+ .attr( 'data-href', function( d ) { return d.name; } )
264
+ .text( helper_node_text );
265
+
266
+ $( 'text[data-href*="//"]', graph_element )
267
+ .die( 'click' )
268
+ .live
269
+ (
270
+ 'click',
271
+ function()
272
+ {
273
+ location.href = $( this ).data( 'href' );
274
+ }
275
+ );
276
+ };
277
+
278
+ var generate_rgraph = function( graph_element, graph_data, leaf_count )
279
+ {
280
+ var max_val = Math.min( graph_element.width(), $( 'body' ).height() )
281
+ var r = max_val / 2;
282
+
283
+ var cluster = d3.layout.cluster()
284
+ .size([360, r - 160]);
285
+
286
+ var diagonal = d3.svg.diagonal.radial()
287
+ .projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });
288
+
289
+ var vis = d3.select( '#canvas' ).append( 'svg' )
290
+ .attr( 'width', r * 2 )
291
+ .attr( 'height', r * 2 )
292
+ .append( 'g' )
293
+ .attr( 'transform', 'translate(' + r + ',' + r + ')' );
294
+
295
+ var nodes = cluster.nodes( graph_data );
296
+
297
+ var link = vis.selectAll( 'path.link' )
298
+ .data( cluster.links( nodes ) )
299
+ .enter().append( 'path' )
300
+ .attr( 'class', helper_path_class )
301
+ .attr( 'd', diagonal );
302
+
303
+ var node = vis.selectAll( 'g.node' )
304
+ .data( nodes )
305
+ .enter().append( 'g' )
306
+ .attr( 'class', helper_node_class )
307
+ .attr( 'transform', function(d) { return 'rotate(' + (d.x - 90) + ')translate(' + d.y + ')'; } )
308
+
309
+ node.append( 'circle' )
310
+ .attr( 'r', 4.5 );
311
+
312
+ node.append( 'text' )
313
+ .attr( 'dx', function(d) { return d.x < 180 ? 8 : -8; } )
314
+ .attr( 'dy', '.31em' )
315
+ .attr( 'text-anchor', function(d) { return d.x < 180 ? 'start' : 'end'; } )
316
+ .attr( 'transform', function(d) { return d.x < 180 ? null : 'rotate(180)'; } )
317
+ .attr( 'data-href', function( d ) { return d.name; } )
318
+ .text( helper_node_text );
319
+
320
+ $( 'text[data-href*="//"]', graph_element )
321
+ .die( 'click' )
322
+ .live
323
+ (
324
+ 'click',
325
+ function()
326
+ {
327
+ location.href = $( this ).data( 'href' );
328
+ }
329
+ );
330
+ };
331
+
332
+ var prepare_graph = function( graph_element, callback )
333
+ {
334
+ $.ajax
335
+ (
336
+ {
337
+ url : app.config.solr_path + '/zookeeper?wt=json&path=%2Flive_nodes',
338
+ dataType : 'json',
339
+ success : function( response, text_status, xhr )
340
+ {
341
+ var live_nodes = {};
342
+ for( var c in response.tree[0].children )
343
+ {
344
+ live_nodes[response.tree[0].children[c].data.title] = true;
345
+ }
346
+
347
+ $.ajax
348
+ (
349
+ {
350
+ url : app.config.solr_path + '/zookeeper?wt=json&detail=true&path=%2Fclusterstate.json',
351
+ dataType : 'json',
352
+ context : graph_element,
353
+ beforeSend : function( xhr, settings )
354
+ {
355
+ this
356
+ .show();
357
+ },
358
+ success : function( response, text_status, xhr )
359
+ {
360
+ var state = null;
361
+ eval( 'state = ' + response.znode.data + ';' );
362
+
363
+ var leaf_count = 0;
364
+ var graph_data = {
365
+ name: null,
366
+ children : []
367
+ };
368
+
369
+ for( var c in state )
370
+ {
371
+ var shards = [];
372
+ for( var s in state[c] )
373
+ {
374
+ var nodes = [];
375
+ for( var n in state[c][s].replicas )
376
+ {
377
+ leaf_count++;
378
+ var replica = state[c][s].replicas[n]
379
+
380
+ var uri = replica.base_url;
381
+ var parts = uri.match( /^(\w+:)\/\/(([\w\d\.-]+)(:(\d+))?)(.+)$/ );
382
+ var uri_parts = {
383
+ protocol: parts[1],
384
+ host: parts[2],
385
+ hostname: parts[3],
386
+ port: parseInt( parts[5] || 80, 10 ),
387
+ pathname: parts[6]
388
+ };
389
+
390
+ helper_data.protocol.push( uri_parts.protocol );
391
+ helper_data.host.push( uri_parts.host );
392
+ helper_data.hostname.push( uri_parts.hostname );
393
+ helper_data.port.push( uri_parts.port );
394
+ helper_data.pathname.push( uri_parts.pathname );
395
+
396
+ var status = replica.state;
397
+
398
+ if( !live_nodes[replica.node_name] )
399
+ {
400
+ status = 'gone';
401
+ }
402
+
403
+ var node = {
404
+ name: uri,
405
+ data: {
406
+ type : 'node',
407
+ state : status,
408
+ leader : 'true' === replica.leader,
409
+ uri : uri_parts
410
+ }
411
+ };
412
+ nodes.push( node );
413
+ }
414
+
415
+ var shard = {
416
+ name: s,
417
+ data: {
418
+ type : 'shard',
419
+ },
420
+ children: nodes
421
+ };
422
+ shards.push( shard );
423
+ }
424
+
425
+ var collection = {
426
+ name: c,
427
+ data: {
428
+ type : 'collection',
429
+ },
430
+ children: shards
431
+ };
432
+ graph_data.children.push( collection );
433
+ }
434
+
435
+ helper_data.protocol = $.unique( helper_data.protocol );
436
+ helper_data.host = $.unique( helper_data.host );
437
+ helper_data.hostname = $.unique( helper_data.hostname );
438
+ helper_data.port = $.unique( helper_data.port );
439
+ helper_data.pathname = $.unique( helper_data.pathname );
440
+
441
+ callback( graph_element, graph_data, leaf_count );
442
+ },
443
+ error : function( xhr, text_status, error_thrown)
444
+ {
445
+ },
446
+ complete : function( xhr, text_status )
447
+ {
448
+ }
449
+ }
450
+ );
451
+ },
452
+ error : function( xhr, text_status, error_thrown)
453
+ {
454
+ },
455
+ complete : function( xhr, text_status )
456
+ {
457
+ }
458
+ }
459
+ );
460
+
461
+ };
462
+
463
+ var init_graph = function( graph_element )
464
+ {
465
+ prepare_graph
466
+ (
467
+ graph_element,
468
+ function( graph_element, graph_data, leaf_count )
469
+ {
470
+ generate_graph( graph_element, graph_data, leaf_count );
471
+ }
472
+ );
473
+ }
474
+
475
+ var init_rgraph = function( graph_element )
476
+ {
477
+ prepare_graph
478
+ (
479
+ graph_element,
480
+ function( graph_element, graph_data, leaf_count )
481
+ {
482
+ generate_rgraph( graph_element, graph_data, leaf_count );
483
+ }
484
+ );
485
+ }
486
+
487
+ var init_tree = function( tree_element )
488
+ {
489
+ $.ajax
490
+ (
491
+ {
492
+ url : app.config.solr_path + '/zookeeper?wt=json',
493
+ dataType : 'json',
494
+ context : tree_element,
495
+ beforeSend : function( xhr, settings )
496
+ {
497
+ this
498
+ .show();
499
+ },
500
+ success : function( response, text_status, xhr )
501
+ {
502
+ var self = this;
503
+
504
+ $( '#tree', this )
505
+ .jstree
506
+ (
507
+ {
508
+ "plugins" : [ "json_data" ],
509
+ "json_data" : {
510
+ "data" : response.tree,
511
+ "progressive_render" : true
512
+ },
513
+ "core" : {
514
+ "animation" : 0
515
+ }
516
+ }
517
+ )
518
+ .jstree
519
+ (
520
+ 'open_node',
521
+ 'li:first'
522
+ );
523
+
524
+ var tree_links = $( '#tree a', this );
525
+
526
+ tree_links
527
+ .die( 'click' )
528
+ .live
529
+ (
530
+ 'click',
531
+ function( event )
532
+ {
533
+ $( 'a.active', $( this ).parents( '#tree' ) )
534
+ .removeClass( 'active' );
535
+
536
+ $( this )
537
+ .addClass( 'active' );
538
+
539
+ tree_element
540
+ .addClass( 'show' );
541
+
542
+ var file_content = $( '#file-content' );
543
+
544
+ $( 'a.close', file_content )
545
+ .die( 'click' )
546
+ .live
547
+ (
548
+ 'click',
549
+ function( event )
550
+ {
551
+ $( '#tree a.active' )
552
+ .removeClass( 'active' );
553
+
554
+ tree_element
555
+ .removeClass( 'show' );
556
+
557
+ return false;
558
+ }
559
+ );
560
+
561
+ $.ajax
562
+ (
563
+ {
564
+ url : this.href,
565
+ dataType : 'json',
566
+ context : file_content,
567
+ beforeSend : function( xhr, settings )
568
+ {
569
+ },
570
+ success : function( response, text_status, xhr )
571
+ {
572
+ var props = [];
573
+ for( var key in response.znode.prop )
574
+ {
575
+ props.push
576
+ (
577
+ '<li><dl class="clearfix">' + "\n" +
578
+ '<dt>' + key.esc() + '</dt>' + "\n" +
579
+ '<dd>' + response.znode.prop[key].esc() + '</dd>' + "\n" +
580
+ '</dl></li>'
581
+ );
582
+ }
583
+
584
+ $( '#prop ul', this )
585
+ .empty()
586
+ .html( props.join( "\n" ) );
587
+
588
+ $( '#prop ul li:odd', this )
589
+ .addClass( 'odd' );
590
+
591
+ var data_element = $( '#data', this );
592
+
593
+ var highlight = false;
594
+ var data = '<em>File "' + response.znode.path + '" has no Content</em>';
595
+
596
+ if( response.znode.data )
597
+ {
598
+ var classes = '';
599
+ var path = response.znode.path.split( '.' );
600
+
601
+ if( 1 < path.length )
602
+ {
603
+ highlight = true;
604
+ classes = 'syntax language-' + path.pop().esc();
605
+ }
606
+
607
+ data = '<pre class="' + classes + '">'
608
+ + response.znode.data.esc()
609
+ + '</pre>';
610
+ }
611
+
612
+
613
+ data_element
614
+ .show()
615
+ .html( data );
616
+
617
+ if( highlight )
618
+ {
619
+ hljs.highlightBlock( data_element.get(0) );
620
+ }
621
+
622
+ },
623
+ error : function( xhr, text_status, error_thrown)
624
+ {
625
+ },
626
+ complete : function( xhr, text_status )
627
+ {
628
+ }
629
+ }
630
+ );
631
+
632
+ return false;
633
+ }
634
+ );
635
+ },
636
+ error : function( xhr, text_status, error_thrown )
637
+ {
638
+ var message = 'Loading of <code>' + app.config.zookeeper_path + '</code> failed with "' + text_status + '" '
639
+ + '(<code>' + error_thrown.message + '</code>)';
640
+
641
+ if( 200 !== xhr.status )
642
+ {
643
+ message = 'Loading of <code>' + app.config.zookeeper_path + '</code> failed with HTTP-Status ' + xhr.status + ' ';
644
+ }
645
+
646
+ this
647
+ .html( '<div class="block" id="error">' + message + '</div>' );
648
+ },
649
+ complete : function( xhr, text_status )
650
+ {
651
+ }
652
+ }
653
+ );
654
+ };
655
+
656
+ // #/~cloud
657
+ sammy.get
658
+ (
659
+ /^#\/(~cloud)$/,
660
+ function( context )
661
+ {
662
+ var content_element = $( '#content' );
663
+
664
+ $.get
665
+ (
666
+ 'tpl/cloud.html',
667
+ function( template )
668
+ {
669
+ content_element
670
+ .html( template );
671
+
672
+ var cloud_element = $( '#cloud', content_element );
673
+ var navigation_element = $( '#menu #cloud' );
674
+
675
+ init_debug( cloud_element );
676
+
677
+ $( '.tree', navigation_element )
678
+ .die( 'activate' )
679
+ .live
680
+ (
681
+ 'activate',
682
+ function( event )
683
+ {
684
+ $( this ).addClass( 'active' );
685
+ init_tree( $( '#tree-content', cloud_element ) );
686
+ }
687
+ );
688
+
689
+ $( '.graph', navigation_element )
690
+ .die( 'activate' )
691
+ .live
692
+ (
693
+ 'activate',
694
+ function( event )
695
+ {
696
+ $( this ).addClass( 'active' );
697
+ init_graph( $( '#graph-content', cloud_element ) );
698
+ }
699
+ );
700
+
701
+ $( '.rgraph', navigation_element )
702
+ .die( 'activate' )
703
+ .live
704
+ (
705
+ 'activate',
706
+ function( event )
707
+ {
708
+ $( this ).addClass( 'active' );
709
+ init_rgraph( $( '#graph-content', cloud_element ) );
710
+ }
711
+ );
712
+
713
+ $( 'a[href="' + context.path + '"]', navigation_element )
714
+ .trigger( 'activate' );
715
+
716
+ }
717
+ );
718
+ }
719
+ );