Mercurial > hg > MPIWGWeb
annotate js/mpiwg.js @ 198:7515f7e51b0f
styles for flyout divs (for websites).
author | casties |
---|---|
date | Mon, 24 Jun 2013 18:05:04 +0200 |
parents | b0ed3974efbd |
children | 5ffb9e7167b6 |
rev | line source |
---|---|
66
68b3d71eed27
formatting for preprint list. javascript for foldable divs.
casties
parents:
diff
changeset
|
1 /* |
68b3d71eed27
formatting for preprint list. javascript for foldable divs.
casties
parents:
diff
changeset
|
2 * Javascript for MPIWG website |
112 | 3 * (C) 2013 MPIWG Berlin |
88 | 4 */ |
66
68b3d71eed27
formatting for preprint list. javascript for foldable divs.
casties
parents:
diff
changeset
|
5 |
112 | 6 /* |
7 * AjaxSlider plugin. | |
8 */ | |
108
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
9 (function ($) { |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
10 $.fn.AjaxSlider = function (opts) { |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
11 var settings = $.extend({ |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
12 dataUrl : null, |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
13 dataSel : '', |
112 | 14 windowSel : 'div.slidewindow', |
15 contentSel : 'div.row', | |
117 | 16 minHeight : 0, |
112 | 17 buttonWidth : '20px', |
108
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
18 scrollBy: '100px', |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
19 }, opts); |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
20 var url = settings.dataUrl + ' ' + settings.dataSel; |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
21 var $slider = this; |
116 | 22 var winW = this.width() - 2 * settings.buttonWidth; |
108
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
23 var sliderH = this.height(); |
144 | 24 // load HTML from dataUrl into $slider |
108
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
25 this.load(url, function () { |
112 | 26 var $window = $slider.find(settings.windowSel); |
116 | 27 var $content = $slider.find(settings.contentSel); |
112 | 28 // fix window width and height and hide overflow |
117 | 29 var winH = Math.max($content.height(), settings.minHeight); |
116 | 30 $window.css({'width':winW, 'height':winH, 'margin':'0 '+settings.buttonWidth, |
112 | 31 'overflow':'hidden', 'position':'relative'}); |
108
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
32 // content will be moved |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
33 $content.css({'position':'absolute', 'left':'0'}); |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
34 $slider.find('.slidebutton.prev').show().on('click', function () { |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
35 $content.animate({'left':'+='+settings.scrollBy}, 'fast'); |
144 | 36 }).css('cursor', 'pointer'); |
108
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
37 $slider.find('.slidebutton.next').show().on('click', function () { |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
38 $content.animate({'left':'-='+settings.scrollBy}, 'fast'); |
144 | 39 }).css('cursor', 'pointer'); |
108
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
40 }); |
119 | 41 |
42 | |
43 | |
113 | 44 }; |
108
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
45 }(jQuery)); |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
46 |
782477730916
CLOSED - # 57: Research/ Research Units: Karussell f?r die Projekte in einem Department
casties
parents:
103
diff
changeset
|
47 |
119 | 48 /* experimental function for adding swiping functionallities to the slider */ |
49 | |
50 var startX; | |
51 var startY; | |
52 var endX | |
53 var endY | |
54 | |
55 function touchStart(event){ | |
56 startX = event.touches[0].pageX; | |
57 startY = event.touches[0].pageY; | |
58 }; | |
59 | |
60 function touchMove(event){ | |
61 endX = event.targetTouches[0].pageX; | |
62 endY = event.targetTouches[0].pageY; | |
63 }; | |
64 function touchEnd(event){ | |
65 var scrollBy='143px'; | |
66 var contentSel = 'div.row'; | |
67 | |
68 //slider = document.getElementById('newBooksSlider'); | |
69 slider=event.currentTarget; | |
70 | |
71 content = $(slider).find(contentSel); | |
72 | |
73 if((startX-endX) > 0){ | |
74 | |
75 content.animate({'left':'-='+scrollBy}, 'fast'); | |
76 | |
77 } | |
78 if((startX-endX) < 0){ | |
79 content.animate({'left':'+='+scrollBy}, 'fast'); | |
80 } | |
81 } | |
82 | |
83 function initialize_swipe(selector){ | |
84 | |
85 $('.ajaxSlider').each(function(){ | |
86 this.addEventListener("touchstart",touchStart,false); | |
87 this.addEventListener("touchend",touchEnd,false); | |
88 this.addEventListener("touchmove",touchMove,false); | |
89 | |
90 } ); | |
91 }; | |
92 | |
66
68b3d71eed27
formatting for preprint list. javascript for foldable divs.
casties
parents:
diff
changeset
|
93 $(document).ready(function() { |
157 | 94 /* |
95 * show javascriptonly | |
96 */ | |
97 $('.javascriptonly').show(); | |
98 | |
88 | 99 /* |
100 * autosubmit forms | |
101 */ | |
102 $('form.autosubmit').find('.autosubmit').change(function() { | |
103 this.form.submit(); | |
104 }); | |
105 // hide submit button | |
106 $('form.autosubmit input[type="submit"].autosubmit').hide(); | |
107 | |
108 /* | |
109 * foldout divs | |
103 | 110 * |
111 * foldable: .foldable is ancestor of .fold_head and .fold_body | |
197 | 112 * all children are folded simultaneously. |
103 | 113 * |
114 * foldableById: .foldableById is ancestor of multiple .fold_head and .fold_body | |
115 * where each pair has a common unique .foldId_xxx. | |
116 * | |
117 * Clicking on .fold_head folds and unfolds .fold_body. | |
118 * | |
119 * If .foldable has .initially_open .fold_body is initially shown, else its | |
120 * initally hidden. | |
88 | 121 */ |
103 | 122 $('.foldable').each(function () { |
88 | 123 var $this = $(this); |
124 var $head = $this.find('.fold_head'); | |
125 var $img = $head.find('img'); | |
126 var $body = $this.find('.fold_body'); | |
103 | 127 $head.on('click', function () { |
88 | 128 $body.slideToggle('fast'); |
129 $img.toggle(); | |
130 }).css('cursor', 'pointer'); | |
131 if (! $this.hasClass('initially_open')) { | |
132 // hide body initially | |
133 $body.hide(); | |
134 $img.toggle(); | |
135 } | |
136 }); | |
107 | 137 $('.foldable2').each(function () { |
138 var $this = $(this); | |
139 var $head = $this.find('.fold_head2'); | |
140 var $img = $head.find('img'); | |
141 var $body = $this.find('.fold_body2'); | |
142 $head.on('click', function () { | |
143 $body.slideToggle('fast'); | |
144 $img.toggle(); | |
145 }).css('cursor', 'pointer'); | |
146 if (! $this.hasClass('initially_open')) { | |
147 // hide body initially | |
148 $body.hide(); | |
149 $img.toggle(); | |
150 } | |
151 }); | |
103 | 152 $('.foldableById').each(function () { |
153 var $container = $(this); | |
154 var io = $container.hasClass('initially_open'); | |
155 var $heads = $container.find('.fold_head'); | |
156 $heads.each(function () { | |
157 var $this = $(this); | |
158 var $img = $this.find('img'); | |
159 var id = null; | |
160 // find id in class | |
161 var cls = $this.attr('class').split(' '); | |
162 for (var i = 0; i < cls.length; ++i) { | |
163 var c = cls[i]; | |
164 if (c.startsWith('foldId_')) { | |
165 id = c; | |
166 break; | |
167 } | |
168 } | |
169 if (id == null) return; | |
170 // get body using id | |
171 var $body = $container.find('.fold_body.'+id); | |
172 $this.on('click', function () { | |
173 $body.slideToggle('fast'); | |
174 $img.toggle(); | |
175 }); | |
176 if (!io) { | |
177 // hide body initially | |
178 $body.hide(); | |
179 $img.toggle(); | |
180 } | |
181 }).css('cursor', 'pointer'); | |
182 }); | |
197 | 183 |
184 /* | |
185 * flyout divs | |
198 | 186 * |
187 * currently only for div.flyout in col in row.triple. | |
188 * | |
189 * div.flyout contains img.flyout_open and img.flyout_close. | |
190 * | |
191 * div.flyout gets additional class .flying when open. | |
192 * | |
193 * div.folded will be shown when open. | |
194 * | |
197 | 195 */ |
196 $('.flyout').each(function () { | |
198 | 197 // flyout target size |
198 var tw = 300; | |
199 var th = 400; | |
197 | 200 var $flyout = $(this); |
198 | 201 var $buttons = $flyout.find('.flyout_open, .flyout_close'); |
197 | 202 // size up to parent in folded state |
198 | 203 var dh = $flyout.parent().height() - $flyout.outerHeight(); |
197 | 204 if (dh > 0) { |
205 $flyout.height($flyout.height()+dh); | |
206 } | |
198 | 207 // save original size |
208 var ow = $flyout.width(); | |
209 var oh = $flyout.height(); | |
210 // handle click on open button | |
197 | 211 $flyout.find('.flyout_open').on('click', function () { |
212 $flyout.addClass('flying'); | |
213 $flyout.css('position','absolute'); | |
198 | 214 $flyout.animate({'width': tw, 'height': th}, 'fast'); |
215 // change open to close button | |
216 $buttons.toggle(); | |
197 | 217 }).css('cursor', 'pointer'); |
198 | 218 // handle click on close button |
219 $flyout.find('.flyout_close').on('click', function () { | |
220 $flyout.animate({'width': ow, 'height': oh}, { | |
221 'duration': 'fast', | |
222 'complete': function () { | |
223 $flyout.removeClass('flying'); | |
224 $flyout.css('position','relative'); | |
225 // change close to open button | |
226 $buttons.toggle(); | |
227 } | |
228 }); | |
229 }).css('cursor', 'pointer'); | |
197 | 230 }); |
231 | |
88 | 232 }); |