Projet

Général

Profil

Paste
Télécharger (19,7 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / ddblock / js / ddblock.js @ 87dbc3bf

1
(function ($) {
2
/**
3
  * Set image settings
4
  * only used if no template is choosen for the dynamic display block
5
  */
6
Drupal.behaviors.ddblockImg = {
7
  attach: function(context, settings) {
8
    for (var base in settings.ddblockImages) {
9
      // get variables
10
      var ddblockSettings = settings.ddblockImages[base];
11

    
12
      // if no template and CCS is used set the image dimensions here
13
      if (ddblockSettings.setDimensions == 'none') {
14
        if ((ddblockSettings.imageHeight > 0) && (ddblockSettings.imageWidth > 0 )) {
15
          $('#ddblock-'+ ddblockSettings.block +' .ddblock-container img:not(.ddblock-processed)', context)
16
          .css('height',ddblockSettings.imageHeight + 'px')
17
          .css('width',ddblockSettings.imageWidth + 'px')
18
          .addClass('ddblock-processed');
19
        }
20
        else{
21
          $('#ddblock-'+ ddblockSettings.block +' .slider:not(.ddblock-slider-visble-processed)', context)
22
          .addClass('overflow-visible')
23
          .addClass('ddblock-slider-visible-processed');        
24
        }
25
      }
26
    }
27
  }
28
};
29

    
30
/**
31
  * Set content dimensions.
32
  * only used if no template is choosen for the dynamic display block
33
  */
34
Drupal.behaviors.ddblockImgContainer = {
35
  attach: function(context, settings) {
36
    for (var base in settings.ddblockImageContainer) {
37
      // get variables
38
      var ddblockSettings = settings.ddblockImageContainer[base];
39
      // if no template and CCS is used set the content dimensions here
40
      if (ddblockSettings.setDimensions == 'none') {
41
        if ((ddblockSettings.imageContainerHeight > 12) && (ddblockSettings.imageContainerWidth > 12 )) {
42

    
43
          $('#ddblock-' + ddblockSettings.block  +' .ddblock-container:not(.ddblock-processed)', context)
44
          .css('height',ddblockSettings.imageContainerHeight + 'px')
45
          .css('width',ddblockSettings.imageContainerWidth + 'px')
46
          .css('overflow','hidden')
47
          .addClass('ddblock-processed');
48
        }
49
      }
50
    }
51
  }
52
};
53

    
54
/**
55
  * Set the cycle plugin settings.
56
  *
57
  * Examples how and what to override for your own blocks
58
  *   Replace ddblockCycle with the ddblockCycle[BLOCKNUMBER]
59
  *   Change the onBefore and onAfter functions
60
  *
61
  */
62
Drupal.behaviors.ddblockCycle = {
63
  attach: function(context, settings) {
64

    
65
    //helper function to clone the options object
66
    function CloneObject(inObj) {
67
      for (i in inObj) {
68
        this[i] = inObj[i];
69
      }
70
    }
71

    
72
    // cycle Plugin onBefore function to add functionality before the next slide shows up
73
    // can be used to add the following effects to slide-text
74
    // fadeOut - Fade out all matched elements by adjusting their opacity and firing an optional callback after completion.
75
    // slideUp - Hide all matched elements by adjusting their height and firing an optional callback after completion.
76
    // hide - Hide all matched elements using a graceful animation and firing an optional callback after completion.
77
    function onBefore(curr, next, opts, fwd) {
78
      if (opts.currSlide != opts.nextSlide) {
79
        if (opts.slideTextjQuery == 1){
80
          if (opts.slideTextEffectBeforeSpeed == 0) {
81
            opts.slideTextEffectBeforeSpeed = 1;
82
          };
83
          if (opts.slideTextEffectBeforeEasing == 'none') {
84
            opts.slideTextEffectBeforeEasing = '';
85
          };
86
          switch (opts.slideTextEffectBefore) {
87
            case "fadeOut":
88
              $("#ddblock-" + opts.ddblocknr + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition)
89
              .stop(true,true)
90
              .fadeOut(opts.slideTextEffectBeforeSpeed, opts.slideTextEffectBeforeEasing);
91
              $("#ddblock-"+ opts.ddblocknr + ' div.slide-' + opts.nextSlide + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition).css({"display":"none"});
92
            break;
93
            case "slideUp":
94
              $("#ddblock-"+ opts.ddblocknr + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition)
95
              .stop(true,true)
96
              .slideUp(opts.slideTextEffectBeforeSpeed, opts.slideTextEffectBeforeEasing);
97
//              .effect('easeOutBounce','',opts.slideTextEffectAfterSpeed);
98
             $("#ddblock-"+ opts.ddblocknr + ' div.slide-' + opts.nextSlide + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition).css({"display":"none"});
99
            break;
100
            default:
101
              $("#ddblock-"+ opts.ddblocknr + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition)
102
              .stop(true,true)
103
              .hide(opts.slideTextEffectBeforeSpeed, opts.slideTextEffectBeforeEasing);
104
              $("#ddblock-"+ opts.ddblocknr + ' div.slide-' + opts.nextSlide + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition).css({"display":"none"});
105
           }
106
        }
107
      }
108
    }
109

    
110
    // cycle Plugin onAfter function to add functionality after the next slide shows up
111
    // can be used to add the following effects to slide-text
112
    // fadein - Fade in all matched elements by adjusting their opacity and firing an optional callback after completion.
113
    // slideDown - Reveal all matched elements by adjusting their height and firing an optional callback after completion.
114
    // show - Show all matched elements using a graceful animation and firing an optional callback after completion.
115
    function onAfter(curr, next, opts, fwd) {
116
      if (opts.slideTextjQuery == 1){
117
        if (opts.slideTextEffectAfterSpeed == 0) {
118
          opts.slideTextEffectAfterSpeed = 1;
119
        };
120
        if (opts.slideTextEffectAfterEasing == 'none') {
121
          opts.slideTextEffectAfterEasing = '';
122
        };
123
        switch (opts.slideTextEffectAfter) {
124
          case "fadeIn":
125
            $("#ddblock-"+ opts.ddblocknr + ' ' + opts.slideTextContainer + '-'  + opts.slideTextPosition)
126
            .fadeIn(opts.slideTextEffectAfterSpeed, opts.slideTextEffectAfterEasing);
127
            $("#ddblock-"+ opts.ddblocknr + ' div.slide-' + opts.nextSlide + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition).css({"display":"none"});
128
          break;
129
          case 'slideDown':
130
            $("#ddblock-"+ opts.ddblocknr + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition)
131
            .slideDown(opts.slideTextEffectAfterSpeed, opts.slideTextEffectAfterEasing);
132
            $("#ddblock-"+ opts.ddblocknr + ' div.slide-' + opts.nextSlide + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition).css({"display":"none"});
133
          break;
134
          default:
135
            $("#ddblock-"+ opts.ddblocknr + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition)
136
            .show(opts.slideTextEffectAfterSpeed, opts.slideTextEffectAfterEasing);
137
            $("#ddblock-"+ opts.ddblocknr + ' div.slide-' + opts.nextSlide + ' ' + opts.slideTextContainer + '-' + opts.slideTextPosition).css({"display":"none"});
138
        }
139
      }
140
      //when scrollable pager is used set active pager-item to current slide
141
      if (opts.pager1 == 'scrollable-pager' && opts.myScrollable){
142
        opts.myScrollable.click(opts.currSlide);
143
      }
144

    
145
      // show pager count (0 of x)
146
      $("#ddblock-"+ opts.ddblocknr + ' ' + 'a.count').html((opts.currSlide + 1) + " of " + opts.slideCount);
147

    
148
      // Only show prev if previous slide exist - Only show next if next slide exist
149
      if (opts.pagerPrevNextLoop == 0) {
150
        var index = $(this).parent().children().index(this);
151
        $("#ddblock-"+ opts.ddblocknr + ' li.pager-prev ' + ' a.prev')[index == 0 ? 'hide' : 'show']();
152
        $("#ddblock-"+ opts.ddblocknr + ' li.pager-prev ' + ' a.next')[index == opts.slideCount - 1 ? 'hide' : 'show']();
153
      }
154

    
155
      // For prev/next pager in the slides. Only show prev if previous slide exist - Only show next if next slide exist
156

    
157
      if (opts.pager2SlideHide == 1) {
158
        var index = $(this).parent().children().index(this);
159
        $("#ddblock-"+ opts.ddblocknr + ' div.prev-container ' + 'a.prev')[index == 0 ? 'hide' : 'show']();
160
        $("#ddblock-"+ opts.ddblocknr + ' div.next-container ' + 'a.next')[index == opts.slideCount - 1 ? 'hide' : 'show']();
161
      }
162
    }
163

    
164
    i=0;
165
    for (var base in settings.ddblockContent) {
166
      // new options var for every block
167
      var options = new CloneObject($.fn.cycle.defaults);
168

    
169
      // simplify variable name
170
      var ddblockSettings = settings.ddblockContent[base];
171
      var block = ddblockSettings.block;
172
      var custom = ddblockSettings.custom;
173
      var pager = ddblockSettings.pager;
174
      var pager2 = ddblockSettings.pager2;
175
      var contentContainer = ddblockSettings.contentContainer;
176
      var pagerContainer = ddblockSettings.pagerContainer;
177

    
178
      // if not processed
179
      if (!$('#ddblock-' + block + '.ddblock-processed', context).size()) {
180

    
181
        // set transition option
182
        options.fx = ddblockSettings.fx;
183
//        options.easeOut = ddblockSettings.easeOut;
184
        if (ddblockSettings.easeOut != 'none') {
185
          options.easeOut = ddblockSettings.easeOut;
186
        }  
187
        if (ddblockSettings.easeIn != 'none') {
188
          options.easeIn = ddblockSettings.easeIn;
189
        }  
190

    
191
        //set delay option for the blocks at different values so they less interfere with eachother
192
        options.delay = i * -1000;
193

    
194
        // set pager. You can have only one pager per block this way
195
        if (pager == 'image-pager' || pager == 'number-pager' || pager == 'custom-pager' || pager == 'scrollable-pager') {
196
          // number pager, image pager , custom pager and scrollable pager
197
          options.pager = "#ddblock-" + pager + "-" + block;
198

    
199
          //store pager1
200
          options.pager1 = pager;
201

    
202
          if (pager == 'number-pager') {
203
            options.pagerAnchorBuilder = function(idx, slide) {
204
              // return selector string for existing anchor
205
              return "#ddblock-" + pager + "-" + block + " li.number-pager-item:eq(" + idx + ") a.pager-link";
206
            }
207
          }
208
          if (pager == 'image-pager') {
209
            options.pagerAnchorBuilder = function(idx, slide) {
210
              // return selector string for existing anchor
211
              return "#ddblock-" + pager + "-" + block + " li:eq(" + idx + ") a";
212
            }
213
          }
214
          if (pager == 'custom-pager') {
215
            options.pagerAnchorBuilder = function(idx, slide) {
216
              // return selector string for existing anchor
217
              return "#ddblock-" + pager + "-" + block + " " + pagerContainer + ":eq(" + idx + ") a.pager-link";
218
            }
219
          }
220
          if (pager == 'scrollable-pager') {
221
            options.pagerAnchorBuilder = function(idx, slide) {
222
              // return selector string for existing anchor
223
              return "#ddblock-" + pager + "-" + block + " " + pagerContainer + ":eq(" + idx + ") a.pager-link";
224
            }
225
          }
226
        } // set pager.
227
        if (pager == 'prev-next-pager' || pager2 == 1) {
228
          //store pagerPrevNextLoop
229
          options.pagerPrevNextLoop = ddblockSettings.pagerPrevNextLoop;
230
          options.prev = "#ddblock-"+ block + " .prev";
231
          options.next = "#ddblock-"+ block + " .next";
232
        }
233
        else {
234
          //set next
235
          if (ddblockSettings.next == 1) {
236
            options.next = "#ddblock-"+ block + ' ' + contentContainer;
237
          }
238
        }
239

    
240
        //set event which drives the pager navigation
241
        options.pagerEvent = ddblockSettings.pagerEvent;
242

    
243
        // If pager fast set use fastOnEvent pager
244
        options.fastOnEvent = (ddblockSettings.pagerFast == 1) ? 1 : 0;
245

    
246
        // pause slideshow on pager hover
247
        options.pauseOnPagerHover = (ddblockSettings.pagerPause == 1) ? 1 : 0;
248

    
249
        // disable click if pager is mouseover
250
        if (ddblockSettings.pagerEvent == 'mouseover') {
251
          if (ddblockSettings.pagerDisableClick == 1) {
252
            $("#ddblock-" + pager + "-" + block + " a.pager-link").click(function() {
253
              return false;
254
            });
255
          }
256
          else {
257
            $("#ddblock-" + pager + "-" + block + " a.pager-link").click(function() {
258
              location.href = this.href;
259
            });
260
          }
261
        }
262

    
263
        options.pager2SlideHide = ddblockSettings.pager2SlideHide;
264

    
265
        //set expression for selecting slides (if something other than all children is required)
266
        //options.slideExpr = contentContainer;
267

    
268
        //set speed of the transition (any valid fx speed value)
269
        options.speed = parseInt(ddblockSettings.speed);
270
        if (options.speed == 0) {
271
          options.speed = 1;
272
        };
273

    
274
        //set timeout in milliseconds between slide transitions (0 to disable auto advance)
275
        options.timeout = parseInt(ddblockSettings.timeOut);
276

    
277
        //set pause, true to enable "pause on hover"
278
        options.pause = (ddblockSettings.pause == 1) ? 1 : 0;
279

    
280
        //set custom options, custom need to start with the character {,
281
        //to prevent errors from a wywsiwyg editor which adds e.g. <br /> to the custom field.
282
        // use custom.substr(0,1) instead of custom[0] to prevent error with IE7
283
        if (custom && custom.substr(0,1) == '{') {
284
          // get the \r\n from the string
285
          var custom1 = custom.replace(/\r\n/gi,"");
286

    
287
          // parse into JSON object
288
          var custom2 = JSON.parse(custom1);
289

    
290
          // merge custom2 with options object
291
          jQuery.extend(true, options, custom2);
292
        }
293

    
294
        options.ddblocknr = block;
295
        options.before = onBefore;
296
        options.after = onAfter;
297
        options.pagerContainer = ddblockSettings.pagerContainer;
298

    
299
        // redefine Cycle's updateActivePagerLink function
300
        $.fn.cycle.updateActivePagerLink = function(pager, currSlide) {
301
          $(pager)
302
          .find('a.pager-link')
303
          .removeClass('activeSlide')
304
          .filter('a.pager-link:eq('+currSlide+')')
305
          .addClass('activeSlide');
306
          $(pager)
307
          .find('.custom-pager-item')
308
          .removeClass('active-pager-item')
309
          .filter('.custom-pager-item:eq('+currSlide+')')
310
          .addClass('active-pager-item');
311
          $(pager)
312
          .find('.scrollable-pager-item')
313
          .removeClass('active-pager-item')
314
          .filter('.scrollable-pager-item:eq('+currSlide+')')
315
          .addClass('active-pager-item');
316
        };
317
        
318
        //Basic block
319
        if (ddblockSettings.setDimensions == 'none') {
320
          //only one slide
321
          if (ddblockSettings.nrOfItems <= 1) {
322
            var $container = $('#ddblock-' + block + ' ' + contentContainer).parent();
323
            $container
324
            .css('visibility', 'visible')
325
            .addClass('ddblock-processed');
326
            $(contentContainer, $container).css('display', 'block');
327
            var $slideshowContainer = $('#ddblock-' + block);
328
            //hide the pager
329
            $('#ddblock-' + pager + '-' + block, $slideshowContainer).css('display', 'none');
330
            //hide navi, prev and next pager of scrollable pager
331
            if (pager == 'scrollable-pager') {
332
              $('.navi', $slideshowContainer).css('display', 'none');
333
              $('.prev', $slideshowContainer).css('display', 'none');
334
              $('.next', $slideshowContainer).css('display', 'none');
335
            }
336
          }
337
          //more than one slide
338
          else {
339
            var $container = $('#ddblock-' + block + ' ' + contentContainer).parent();
340
            $container
341
            .cycle(options)
342
            .css('height',ddblockSettings.Height + 'px')
343
            .css('width',ddblockSettings.Width + 'px')
344
            .css('overflow', ddblockSettings.overflow)
345
            .css('visibility', 'visible')
346
            .addClass('ddblock-processed');
347
            $('#ddblock-' + block).css('visibility', 'visible');
348
          }
349
        }
350
        // advanced block
351
        else {
352
          if (ddblockSettings.slideTextjQuery == 1) {
353
            //set slidetext options
354
            options.slideTextContainer = ddblockSettings.slideTextContainer;
355
            options.slideTextPosition = ddblockSettings.slideTextPosition;
356
            options.slideTextEffectBefore = ddblockSettings.slideTextEffectBefore;
357
            options.slideTextEffectBeforeSpeed = ddblockSettings.slideTextEffectBeforeSpeed;
358
            options.slideTextEffectBeforeEasing = ddblockSettings.slideTextEffectBeforeEasing;
359
            options.slideTextEffectAfter = ddblockSettings.slideTextEffectAfterEasing;
360
            options.slideTextEffectAfterSpeed = ddblockSettings.slideTextEffectAfterSpeed;
361
            options.slideTextEffectAfterEasing = ddblockSettings.slideTextEffectAfterEasing;
362
            options.slideTextjQuery = ddblockSettings.slideTextjQuery;
363
          }
364

    
365
          if (pager == 'scrollable-pager') {
366
            // set scrollableVertical to true when pager at left of right right, otherwise the scrollableVertical to false
367
            if (ddblockSettings.pagerPosition == 'left' || ddblockSettings.pagerPosition == 'right') {
368
               scrollableVertical = true;
369
            }
370
            else {
371
              scrollableVertical = false;
372
            }
373
            // create one scrollable element and return the API by enabling the "api" property
374
            if ($('#ddblock-scrollable-pager-' + block).length > 0){
375
              var myScrollable = $('#ddblock-scrollable-pager-' + block).scrollable({
376

    
377
                // number of items vissible in scrollable pager
378
                size: ddblockSettings.nrOfPagerItems,
379

    
380
                //vertical slideshow
381
                vertical: scrollableVertical,
382

    
383
                circular: true,
384

    
385
                //nextitem navigation, default used
386
                next: '.next',
387

    
388
                //previtem navigation, default used
389
                prev: '.prev',
390

    
391
                //enable api property
392
                api: true
393

    
394
              });
395
              if (myScrollable) {
396
                //set first slide as activate slide in scrollable pager
397
                myScrollable.click(0);
398

    
399
                //set myScrollable cycle option to scrollable API to use in onafter
400
                options.myScrollable = myScrollable;
401

    
402
                //set total nr of pager items
403
                options.nrOfPagerItems = ddblockSettings.nrOfPagerItems;
404
              }
405
            }
406
          }
407

    
408
          //only one slide
409
          if (ddblockSettings.nrOfItems <= 1) {
410
            //Use the parent of the slides as the parent container so the children function
411
            //can be used for the second pager
412
            var $container = $('#ddblock-' + block + ' ' + contentContainer).parent();
413
            $container
414
            .css('visibility', 'visible')
415
            .addClass('ddblock-processed');
416
            $(contentContainer, $container).css('display', 'block');
417
            var $slideshowContainer = $('#ddblock-' + block);
418
            //hide the pager
419
            $('#ddblock-' + pager + '-' + block, $slideshowContainer).css('display', 'none');
420
            //hide navi, prev and next pager of scrollable pager
421
            if (pager == 'scrollable-pager') {
422
              $('.navi', $slideshowContainer).css('display', 'none');
423
              $('.prev', $slideshowContainer).css('display', 'none');
424
              $('.next', $slideshowContainer).css('display', 'none');
425
            }
426
          }
427
          //more then one slide
428
          else {
429
            var $container = $('#ddblock-' + block + ' ' + contentContainer).parent();
430
            $container
431
            .cycle(options)
432
            .css('visibility', 'visible')
433
            .addClass('ddblock-processed');
434
          }
435
        }  // advanced block
436
      } // if not processed
437
      i++;
438
    } // for settings.ddblockContent
439
  } // attach
440
}; // drupal.behaviors
441

    
442
})(jQuery);