source: extensions/GrumPluginClasses/js/rbSearch.js @ 7370

Last change on this file since 7370 was 7370, checked in by grum, 13 years ago

externalise and pack some js ; rename criteriaBuilder.js files ; improve templates & css theming ; fix bug and add functionnalities for request builder ; update key languages

  • Property svn:executable set to *
File size: 8.7 KB
Line 
1/**
2 * -----------------------------------------------------------------------------
3 * file: criteriaBuilderSearch.js
4 * file version: 1.0.0
5 * date: 2010-10-23
6 *
7 * JS file provided by the piwigo's plugin "GrumPluginClasses"
8 *
9 * -----------------------------------------------------------------------------
10 * Author     : Grum
11 *   email    : grum@piwigo.com
12 *   website  : http://photos.grum.fr
13 *   PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
14 *
15 *   << May the Little SpaceFrog be with you ! >>
16 * -----------------------------------------------------------------------------
17 *
18 * used to manage the requestBuilder search interface
19 *
20 * :: HISTORY ::
21 *
22 * | release | date       |
23 * | 1.0.0   | 2010/04/27 | * start to coding
24 * |         |            |
25 * | 1.1.0   | 2010/10/21 | * change ajax methods
26 * |         |            |
27 * |         |            | * fix bug : if there is no criteria, don't send
28 * |         |            |   request
29 * |         |            |
30 * |         |            |
31 * |         |            |
32 * |         |            |
33 * |         |            |
34 *
35 */
36
37  var cb=null;
38
39  var interfaceManager = function(optionsToSet)
40  {
41    var pn=null,
42        requestNumber=0,
43        options =
44          {
45            requestCriterionsVisible:'',
46            requestCriterionsHidden:'',
47            requestResult:'',
48            requestResultContent:'',
49            requestResultNfo:'',
50            requestResultPagesNavigator:'',
51            requestResultRequestNumber:0,
52            onPageChange:null,
53            numberPerPage:30,
54          };
55
56    /**
57     *
58     */
59    this.doAction = function(fct)
60    {
61      switch(fct)
62      {
63        case 'queryResult':
64          /* function 'queryResult' : when query is executed, prepare the interface
65           */
66          if(arguments.length==3)
67          {
68            displayQueryResult(arguments[1], arguments[2]);
69          }
70          break;
71        case 'queryPage':
72          /* function 'queryPage' : display returned page
73           */
74          if(arguments.length==3)
75          {
76            displayQueryPage(arguments[1], arguments[2]);
77          }
78          break;
79        case 'show':
80          /* function 'show' : show/hide the query/result
81           */
82          if(arguments.length==2)
83          {
84            show(arguments[1]);
85          }
86          break;
87        case 'setOptions':
88          /* function 'setOptions' : allows to set options after the object was
89           *                         created
90           */
91          if(arguments.length==2)
92          {
93            setOptions(arguments[1]);
94          }
95          break;
96        case 'fillCaddie':
97          /* function 'fillCaddie' : allows to fill the caddie with the search result
98           *
99           */
100          if(arguments.length==2)
101          {
102            fillCaddie(arguments[1], this.getRequestNumber());
103          }
104          break;
105      }
106    };
107
108    /**
109     * returns the current request number
110     */
111    this.getRequestNumber = function ()
112    {
113      return(requestNumber);
114    };
115
116    /**
117     * returns the number of items per page
118     */
119    this.getNumberPerPage = function ()
120    {
121      return(options.numberPerPage);
122    };
123
124    /**
125     * this function show/hide the different panels
126     *  'buildQuery'  : hide the result panel and display the panel to build query
127     *  'resultQuery' : hide the panel to build query and display the result panel
128     */
129    var show = function(mode)
130    {
131      switch(mode)
132      {
133        case 'buildQuery':
134          $('.'+options.requestCriterionsVisible).css('display', 'block');
135          $('.'+options.requestCriterionsHidden).css('display', 'none');
136          $('.'+options.requestResult).css('display', 'none');
137          break;
138        case 'resultQuery':
139          $('#iResultQueryContent').html("<br><img class='waitingResult' src='./plugins/GrumPluginClasses/icons/processing.gif'>");
140          $('.'+options.requestCriterionsVisible).css('display', 'none');
141          $('.'+options.requestCriterionsHidden).css('display', 'block');
142          $('.'+options.requestResult).css('display', 'block');
143          break;
144      }
145    },
146
147    /**
148     * this function display the number of items found and prepare the page
149     * navigator
150     *
151     * @param String nfo : 2 information separated with a semi-colon ';'
152     *                      requestNumber;numberOfItems
153     */
154    displayQueryResult = function (isSuccess, nfo)
155    {
156      if(isSuccess)
157      {
158        nfo=nfo.split(';');
159
160        requestNumber=nfo[0];
161        $('#iResultQueryNfo').html(nfo[1]);
162        pn.doAction('setOptions', { numberItem:nfo[1], defaultPage:1 } );
163        show('resultQuery');
164      }
165      else
166      {
167        //$('#'+options.requestResultContent).html("");
168        show('buildQuery');
169        alert(requestBuilderOptions.textSomethingWrong);
170      }
171    },
172
173
174    /**
175     * this function display the number of items found and prepare the page
176     * navigator
177     *
178     * @param String nfo : 2 information separated with a semi-colon ';'
179     *                      requestNumber;numberOfItems
180     */
181    displayQueryPage = function (isSuccess, nfo)
182    {
183      if(isSuccess)
184      {
185        $('#iResultQueryContent').html(nfo);
186      }
187      else
188      {
189        alert(requestBuilderOptions.textSomethingWrong);
190      }
191    },
192
193
194    /**
195     *
196     * @param Object optionsToSet : set the given options
197     */
198    setOptions = function(optionsToSet)
199    {
200      if(typeof optionsToSet=='object')
201      {
202        options = jQuery.extend(options, optionsToSet);
203      }
204    },
205
206    /**
207     * initialize the object
208     */
209    init = function (optionsToSet)
210    {
211      setOptions(optionsToSet);
212
213      pn = new pagesNavigator(options.requestResultPagesNavigator,
214        {
215          itemPerPage:options.numberPerPage,
216          displayNumPage:9,
217          classActive:'pnActive',
218          classInactive:'pnInactive',
219          onPageChange: function (page)
220            {
221              if(options.onPageChange!=null && jQuery.isFunction(options.onPageChange))
222              {
223                options.onPageChange(requestNumber, page, options.numberPerPage);
224              }
225            },
226        }
227      );
228
229      requestNumber=options.requestResultRequestNumber;
230    },
231
232    /**
233     * fill the caddie with the search results
234     * @param String mode : 'add' or 'fill'
235     */
236    fillCaddie = function (mode, requestNumber)
237    {
238      $('#iMenuCaddieImg').css('display', 'inline-block');
239      $('#iMenuCaddieItems ul').css('display', 'none');
240
241      $.ajax(
242        {
243          type: "POST",
244          url: "plugins/GrumPluginClasses/gpc_ajax.php",
245          async: true,
246          data: { ajaxfct:"admin.rbuilder.fillCaddie", fillMode:mode, requestNumber:requestNumber },
247          success:
248            function(msg)
249            {
250              $('#iMenuCaddieImg').css('display', 'none');
251              $('#iMenuCaddieItems ul').css('display', 'block');
252              alert(requestBuilderOptions.textCaddieUpdated);
253            },
254          error:
255            function(msg)
256            {
257              $('#iMenuCaddieImg').css('display', 'none');
258              $('#iMenuCaddieItems ul').css('display', 'block');
259              alert(requestBuilderOptions.textSomethingWrong);
260            },
261        }
262      );
263    };
264
265    init(optionsToSet);
266  };
267
268
269  function init()
270  {
271    im = new interfaceManager(
272      {
273        requestCriterionsVisible:'cRequestCriterions',
274        requestCriterionsHidden:'cModifyRequest',
275        requestResult:'cResultQuery',
276        requestResultContent:'iResultQueryContent',
277        requestResultNfo:'iResultQueryNfo',
278        requestResultPagesNavigator:'iPagesNavigator',
279      }
280    );
281
282    requestBuilderOptions.classGroup='gcBorderInput gcTextInput';
283    requestBuilderOptions.classItem='gcBgInput gcTextInput';
284    requestBuilderOptions.classOperator='cbOperator cbOperatorBg gcLinkHover';
285    requestBuilderOptions.onRequestSuccess = function (msg) { im.doAction('queryResult', true, msg); cb.doAction('getPage', im.getRequestNumber(), 1, im.getNumberPerPage()); };
286    requestBuilderOptions.onRequestError = function (msg) { im.doAction('queryResult', false, msg); };
287    requestBuilderOptions.onGetPageSuccess = function (msg) { im.doAction('queryPage', true, msg); };
288    requestBuilderOptions.onGetPageError = function (msg) { im.doAction('queryPage', false, msg); };
289
290    cb = new criteriaBuilder('iListSelectedCriterions', requestBuilderOptions);
291
292    im.doAction('setOptions',
293      {
294        onPageChange:
295          function (requestNumber, page, numberPerPage)
296          {
297            $('#iResultQueryContent').html("<br><img class='waitingResult' src='./plugins/GrumPluginClasses/icons/processing.gif'>");
298            cb.doAction('getPage', requestNumber, page, numberPerPage);
299          }
300      }
301    );
302  }
Note: See TracBrowser for help on using the repository browser.