source: sandbox/expresso-solr/solr/example/work/jetty-0.0.0.0-8983-solr.war-_solr-any-/webapp/js/scripts/cores.js @ 7588

Revision 7588, 16.9 KB checked in by adir, 11 years ago (diff)

Ticket #000 - Adicionando a integracao de buscas com Solr na base a ser isnerida na comunidade

Line 
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
18sammy.bind
19(
20  'cores_load_data',
21  function( event, params )
22  {
23    if( app.cores_data )
24    {
25      params.callback( app.cores_data );
26      return true;
27    }
28
29    $.ajax
30    (
31      {
32        url : app.config.solr_path + app.config.core_admin_path + '?wt=json',
33        dataType : 'json',
34        beforeSend : function( xhr, settings )
35        {
36        },
37        success : function( response, text_status, xhr )
38        {
39          app.cores_data = response.status;
40          params.callback( app.cores_data );
41        },
42        error : function( xhr, text_status, error_thrown)
43        {
44        },
45        complete : function( xhr, text_status )
46        {
47        }
48      }
49    );
50  }
51);
52
53sammy.bind
54(
55  'cores_build_navigation',
56  function( event, params )
57  {
58    var navigation_content = ['<ul>'];
59
60    for( var core in params.cores )
61    {
62      var core_name = core;
63      if( !core_name )
64      {
65        core_name = '<em>(empty)</em>';
66      }
67      navigation_content.push( '<li><a href="' + params.basepath + core + '">' + core_name + '</a></li>' );
68    }
69
70    params.navigation_element
71      .html( navigation_content.join( "\n" ) );
72       
73    $( 'a[href="' + params.basepath + params.current_core + '"]', params.navigation_element ).parent()
74      .addClass( 'current' );
75  }
76);
77
78sammy.bind
79(
80  'cores_load_template',
81  function( event, params )
82  {
83    if( app.cores_template )
84    {
85      params.callback();
86      return true;
87    }
88
89    $.get
90    (
91      'tpl/cores.html',
92      function( template )
93      {
94        params.content_element
95          .html( template );
96             
97        app.cores_template = template;   
98        params.callback();
99      }
100    );
101  }
102);
103
104// #/~cores
105sammy.get
106(
107  /^#\/(~cores)$/,
108  function( context )
109  {
110    delete app.cores_template;
111
112    sammy.trigger
113    (
114      'cores_load_data',
115      {
116        callback :  function( cores )
117        {
118          var first_core = null;
119          for( var key in cores )
120          {
121            if( !first_core )
122            {
123              first_core = key;
124            }
125            continue;
126          }
127          context.redirect( context.path + '/' + first_core );
128        }
129      }
130    );
131  }
132);
133
134// #/~cores
135sammy.get
136(
137  /^#\/(~cores)\//,
138  function( context )
139  {
140    var content_element = $( '#content' );
141
142    var path_parts = this.path.match( /^(.+\/~cores\/)(.*)$/ );
143    var current_core = path_parts[2];
144
145    sammy.trigger
146    (
147      'cores_load_data',
148      {
149        callback : function( cores )
150        {
151          sammy.trigger
152          (
153            'cores_load_template',
154            {
155              content_element : content_element,
156              callback : function()
157              {
158                var cores_element = $( '#cores', content_element );
159                var navigation_element = $( '#navigation', cores_element );
160                var data_element = $( '#data', cores_element );
161                var core_data_element = $( '#core-data', data_element );
162                var index_data_element = $( '#index-data', data_element );
163
164                sammy.trigger
165                (
166                  'cores_build_navigation',
167                  {
168                    cores : cores,
169                    basepath : path_parts[1],
170                    current_core : current_core,
171                    navigation_element : navigation_element
172                  }
173                );
174
175                var core_data = cores[current_core];
176                var core_basepath = $( '#' + current_core, app.menu_element ).attr( 'data-basepath' );
177
178                // core-data
179
180                $( '.startTime dd', core_data_element )
181                  .html( core_data.startTime );
182
183                $( '.instanceDir dd', core_data_element )
184                  .html( core_data.instanceDir );
185
186                $( '.dataDir dd', core_data_element )
187                  .html( core_data.dataDir );
188
189                // index-data
190
191                $( '.lastModified dd', index_data_element )
192                  .html( core_data.index.lastModified );
193
194                $( '.version dd', index_data_element )
195                  .html( core_data.index.version );
196
197                $( '.numDocs dd', index_data_element )
198                  .html( core_data.index.numDocs );
199
200                $( '.maxDoc dd', index_data_element )
201                  .html( core_data.index.maxDoc );
202
203                $( '.optimized dd', index_data_element )
204                  .addClass( core_data.index.optimized ? 'ico-1' : 'ico-0' );
205
206                $( '#actions #optimize', cores_element )
207                  .show();
208
209                $( '.optimized dd span', index_data_element )
210                  .html( core_data.index.optimized ? 'yes' : 'no' );
211
212                $( '.current dd', index_data_element )
213                  .addClass( core_data.index.current ? 'ico-1' : 'ico-0' );
214
215                $( '.current dd span', index_data_element )
216                  .html( core_data.index.current ? 'yes' : 'no' );
217
218                $( '.hasDeletions dd', index_data_element )
219                  .addClass( core_data.index.hasDeletions ? 'ico-1' : 'ico-0' );
220
221                $( '.hasDeletions dd span', index_data_element )
222                  .html( core_data.index.hasDeletions ? 'yes' : 'no' );
223
224                $( '.directory dd', index_data_element )
225                  .html
226                  (
227                    core_data.index.directory
228                      .replace( /:/g, ':&#8203;' )
229                      .replace( /@/g, '@&#8203;' )
230                  );
231
232                var core_names = [];
233                var core_selects = $( '#actions select', cores_element );
234
235                for( var key in cores )
236                {
237                  core_names.push( '<option value="' + key + '">' + key + '</option>' )
238                }
239
240                core_selects
241                  .html( core_names.join( "\n") );
242
243                $( 'option[value="' + current_core + '"]', core_selects.filter( '.other' ) )
244                  .remove();
245               
246                $( 'input[data-core="current"]', cores_element )
247                  .val( current_core );
248
249                // layout
250
251                var ui_block = $( '#ui-block' );
252                var actions_element = $( '.actions', cores_element );
253                var div_action = $( 'div.action', actions_element );
254
255                ui_block
256                  .css( 'opacity', 0.7 )
257                  .width( cores_element.width() + 10 )
258                  .height( cores_element.height() );
259
260                if( $( '#cloud.global' ).is( ':visible' ) )
261                {
262                  $( '.cloud', div_action )
263                    .show();
264                }
265
266                $( 'button.action', actions_element )
267                  .die( 'click' )
268                  .live
269                  (
270                    'click',
271                    function( event )
272                    {
273                      var self = $( this );
274
275                      self
276                        .toggleClass( 'open' );
277
278                      $( '.action.' + self.attr( 'id' ), actions_element )
279                        .trigger( 'open' );
280
281                      return false;
282                    }
283                  );
284
285                div_action
286                  .die( 'close' )
287                  .live
288                  (
289                    'close',
290                    function( event )
291                    {
292                      div_action.hide();
293                      ui_block.hide();
294                    }
295                  )
296                  .die( 'open' )
297                  .live
298                  (
299                    'open',
300                    function( event )
301                    {
302                      var self = $( this );
303                      var rel = $( '#' + self.data( 'rel' ) );
304
305                      self
306                        .trigger( 'close' )
307                        .show()
308                        .css( 'left', rel.position().left );
309                     
310                      ui_block
311                        .show();
312                    }
313                  );
314
315                $( 'form button.reset', actions_element )
316                  .die( 'click' )
317                  .live
318                  (
319                    'click',
320                    function( event )
321                    {
322                      $( this ).closest( 'div.action' )
323                        .trigger( 'close' );
324                    }
325                  );
326
327                var form_callback = {
328
329                  rename : function( form, response )
330                  {
331                    var url = path_parts[1] + $( 'input[name="other"]', form ).val();
332                    context.redirect( url );
333                  }
334
335                };
336
337                $( 'form', div_action )
338                  .ajaxForm
339                  (
340                    {
341                      url : app.config.solr_path + app.config.core_admin_path + '?wt=json',
342                      dataType : 'json',
343                      beforeSubmit : function( array, form, options )
344                      {
345                        $( 'button[type="submit"] span', form )
346                          .addClass( 'loader' );
347                      },
348                      success : function( response, status_text, xhr, form )
349                      {
350                        var action = $( 'input[name="action"]', form ).val().toLowerCase();
351
352                        delete app.cores_data;
353
354                        if( form_callback[action] )
355                        {
356                         form_callback[action]( form, response );
357                        }
358                        else
359                        {
360                          sammy.refresh();
361                        }
362
363                        $( 'button.reset', form )
364                          .trigger( 'click' );
365                      },
366                      error : function( xhr, text_status, error_thrown )
367                      {
368                      },
369                      complete : function()
370                      {
371                        $( 'button span.loader', actions_element )
372                          .removeClass( 'loader' );
373                      }
374                    }
375                  );
376
377                var reload_button = $( '#actions #reload', cores_element );
378                reload_button
379                  .die( 'click' )
380                  .live
381                  (
382                    'click',
383                    function( event )
384                    {
385                      $.ajax
386                      (
387                        {
388                          url : app.config.solr_path + app.config.core_admin_path + '?wt=json&action=RELOAD&core=' + current_core,
389                          dataType : 'json',
390                          context : $( this ),
391                          beforeSend : function( xhr, settings )
392                          {
393                            $( 'span', this )
394                              .addClass( 'loader' );
395                          },
396                          success : function( response, text_status, xhr )
397                          {
398                            this
399                              .addClass( 'success' );
400
401                            delete app.cores_data;
402                            sammy.refresh();
403
404                            window.setTimeout
405                            (
406                              function()
407                              {
408                                reload_button
409                                  .removeClass( 'success' );
410                              },
411                              1000
412                            );
413                          },
414                          error : function( xhr, text_status, error_thrown )
415                          {
416                          },
417                          complete : function( xhr, text_status )
418                          {
419                            $( 'span', this )
420                              .removeClass( 'loader' );
421                          }
422                        }
423                      );
424                    }
425                  );
426                               
427                $( '#actions #unload', cores_element )
428                  .die( 'click' )
429                  .live
430                  (
431                    'click',
432                    function( event )
433                    {
434                      var ret = confirm( 'Do you really want to unload Core "' + current_core + '"?' );
435                      if( !ret )
436                      {
437                        return false;
438                      }
439
440                      $.ajax
441                      (
442                        {
443                          url : app.config.solr_path + app.config.core_admin_path + '?wt=json&action=UNLOAD&core=' + current_core,
444                          dataType : 'json',
445                          context : $( this ),
446                          beforeSend : function( xhr, settings )
447                          {
448                            $( 'span', this )
449                              .addClass( 'loader' );
450                          },
451                          success : function( response, text_status, xhr )
452                          {
453                            delete app.cores_data;
454                            context.redirect( path_parts[1].substr( 0, path_parts[1].length - 1 ) );
455                          },
456                          error : function( xhr, text_status, error_thrown )
457                          {
458                          },
459                          complete : function( xhr, text_status )
460                          {
461                            $( 'span', this )
462                              .removeClass( 'loader' );
463                          }
464                        }
465                      );
466                    }
467                  );
468
469                var optimize_button = $( '#actions #optimize', cores_element );
470                optimize_button
471                  .die( 'click' )
472                  .live
473                  (
474                    'click',
475                    function( event )
476                    {
477                      $.ajax
478                      (
479                        {
480                          url : core_basepath + '/update?optimize=true&waitFlush=true&wt=json',
481                          dataType : 'json',
482                          context : $( this ),
483                          beforeSend : function( xhr, settings )
484                          {
485                            $( 'span', this )
486                              .addClass( 'loader' );
487                          },
488                          success : function( response, text_status, xhr )
489                          {
490                            this
491                              .addClass( 'success' );
492
493                            window.setTimeout
494                            (
495                              function()
496                              {
497                                optimize_button
498                                  .removeClass( 'success' );
499                              },
500                              1000
501                            );
502                                                       
503                            $( '.optimized dd.ico-0', index_data_element )
504                              .removeClass( 'ico-0' )
505                              .addClass( 'ico-1' );
506                          },
507                          error : function( xhr, text_status, error_thrown)
508                          {
509                            console.warn( 'd0h, optimize broken!' );
510                          },
511                          complete : function( xhr, text_status )
512                          {
513                            $( 'span', this )
514                              .removeClass( 'loader' );
515                          }
516                        }
517                      );
518                    }
519                  );
520
521                $( '.timeago', data_element )
522                  .timeago();
523
524                $( 'ul', data_element )
525                  .each
526                  (
527                    function( i, element )
528                    {
529                      $( 'li:odd', element )
530                        .addClass( 'odd' );
531                    }
532                  )
533              }
534            }
535          );
536        }
537      }
538    );
539  }
540);
Note: See TracBrowser for help on using the repository browser.