2
document.addEventListener('DOMContentLoaded', function() {
3
var yelp_hash_highlight = function () {
4
if (location.hash != '') {
5
var sect = document.querySelector(location.hash);
7
sect.classList.add('yelp-hash-highlight');
8
window.setTimeout(function () {
9
sect.classList.remove('yelp-hash-highlight');
14
window.addEventListener('hashchange', yelp_hash_highlight, false);
15
yelp_hash_highlight();
18
var __yelp_generate_id_counter__ = 0;
19
function yelp_generate_id () {
20
var ret = 'yelp--' + (++__yelp_generate_id_counter__).toString();
21
if (document.getElementById(ret) != null)
22
return yelp_generate_id();
26
function yelp_ui_expander_init (expander) {
36
for (var i = 0; i < expander.children.length; i++) {
37
var child = expander.children[i];
38
if (child.classList.contains('yelp-data-ui-expander')) {
41
else if (child.classList.contains('inner')) {
45
if (innerdiv == null) {
48
for (var i = 0; i < innerdiv.children.length; i++) {
49
var child = innerdiv.children[i];
50
if (child.classList.contains('region')) {
53
else if (child.classList.contains('title')) {
56
else if (child.classList.contains('hgroup')) {
61
if (region == null || title == null) {
64
if (!region.hasAttribute('id')) {
65
region.setAttribute('id', yelp_generate_id());
67
title.setAttribute('aria-controls', region.getAttribute('id'));
69
if (yelpdata != null) {
70
for (var i = 0; i < yelpdata.children.length; i++) {
71
var child = yelpdata.children[i];
72
if (child.classList.contains('yelp-title-expanded')) {
75
else if (child.classList.contains('yelp-title-collapsed')) {
80
titlespan = title.querySelector('span.title');
81
if (titlespan == null) {
84
if (title_e == null) {
85
var node = document.createElement('div');
86
node.className = 'yelp-title-expanded';
87
node.innerHTML = titlespan.innerHTML;
88
yelpdata.appendChild(node);
91
if (title_c == null) {
92
var node = document.createElement('div');
93
node.className = 'yelp-title-collapsed';
94
node.innerHTML = titlespan.innerHTML;
95
yelpdata.appendChild(node);
99
var ui_expander_zoom_region = function (event) {
100
if (yelpdata.getAttribute('data-yelp-expanded') != 'false') {
101
ui_expander_toggle();
102
event.preventDefault();
105
if (expander.nodeName == 'section' || expander.nodeName == 'SECTION') {
106
for (var i = 0; i < region.children.length; i++) {
107
var child = region.children[i];
108
if (child.classList.contains('contents')) {
113
contents.addEventListener('click', ui_expander_zoom_region, true);
116
region.addEventListener('click', ui_expander_zoom_region, true);
119
var ui_expander_toggle = function () {
120
if (yelpdata.getAttribute('data-yelp-expanded') == 'false') {
121
yelpdata.setAttribute('data-yelp-expanded', 'true');
122
expander.classList.remove('ui-expander-e');
123
expander.classList.add('ui-expander-c');
124
region.setAttribute('aria-expanded', 'false');
126
titlespan.innerHTML = title_c.innerHTML;
129
yelpdata.setAttribute('data-yelp-expanded', 'false');
130
expander.classList.remove('ui-expander-c');
131
expander.classList.add('ui-expander-e');
132
region.setAttribute('aria-expanded', 'true');
134
titlespan.innerHTML = title_e.innerHTML;
137
expander.yelp_ui_expander_toggle = ui_expander_toggle;
138
title.addEventListener('click', ui_expander_toggle, false);
139
ui_expander_toggle();
141
document.addEventListener('DOMContentLoaded', function() {
142
var matches = document.querySelectorAll('.ui-expander');
143
for (var i = 0; i < matches.length; i++) {
144
yelp_ui_expander_init(matches[i]);
146
var yelp_hash_ui_expand = function () {
147
if (location.hash != '') {
148
var sect = document.querySelector(location.hash);
150
for (var cur = sect; cur instanceof Element; cur = cur.parentNode) {
151
if (cur.classList.contains('ui-expander')) {
152
if (cur.classList.contains('ui-expander-c')) {
153
cur.yelp_ui_expander_toggle();
157
sect.scrollIntoView();
161
window.addEventListener('hashchange', yelp_hash_ui_expand, false);
162
yelp_hash_ui_expand();
165
yelp_color_text_light = 'rgb(75,75,73)';
166
yelp_color_gray_background = 'rgb(244,244,244)';
167
yelp_color_gray_border = '#c0bfbc';
168
function yelp_figure_init (figure) {
169
var zoom = figure.querySelector('a.figure-zoom');
171
var figure_resize = function () {
172
var zoomed = zoom.classList.contains('figure-zoomed');
173
var imgs = figure.querySelectorAll('img');
174
for (var i = 0; i < imgs.length; i++) {
177
for (var cur = img; cur instanceof Element; cur = cur.parentNode) {
178
if ((cur.nodeName == 'div' || cur.nodeName == 'DIV') &&
179
cur.classList.contains('media')) {
184
if (mediaDiv == null)
186
if (!img.hasAttribute('data-yelp-original-width')) {
188
if (img.hasAttribute('width'))
189
iwidth = parseInt(img.getAttribute('width'));
192
img.setAttribute('data-yelp-original-width', iwidth);
194
if (img.hasAttribute('height'))
195
iheight = parseInt(img.getAttribute('height'));
197
iheight = img.height * (iwidth / img.width);
198
img.setAttribute('data-yelp-original-height', iheight);
200
var owidth = img.width;
201
var oheight = img.height;
202
img.width = parseInt(img.getAttribute('data-yelp-original-width'));
203
img.height = parseInt(img.getAttribute('data-yelp-original-height'));
204
var mediaw = mediaDiv.offsetWidth;
206
img.height = oheight;
207
if (parseInt(img.getAttribute('data-yelp-original-width')) <= mediaw) {
208
img.width = parseInt(img.getAttribute('data-yelp-original-width'));
209
img.height = parseInt(img.getAttribute('data-yelp-original-height'));
210
zoom.style.display = 'none';
213
img.width = parseInt(img.getAttribute('data-yelp-original-width'));
214
img.height = parseInt(img.getAttribute('data-yelp-original-height'));
215
zoom.style.display = 'block';
219
img.height = (parseInt(img.getAttribute('data-yelp-original-height')) *
221
parseInt(img.getAttribute('data-yelp-original-width')));
222
zoom.style.display = 'block';
226
figure.yelp_figure_resize = figure_resize;
227
figure.yelp_figure_resize();
229
zoom.onclick = function (e) {
230
var zoomed = zoom.classList.contains('figure-zoomed');
232
zoom.classList.remove('figure-zoomed');
234
zoom.classList.add('figure-zoomed');
235
figure.yelp_figure_resize();
239
window.addEventListener('load', function() {
240
var figures = document.querySelectorAll('div.figure');
241
for (var i = 0; i < figures.length; i++) {
242
if (figures[i].querySelector('img') != null)
243
yelp_figure_init(figures[i]);
246
var yelp_figures_resize = function () {
249
timeout = window.setTimeout(function () {
250
for (var i = 0; i < figures.length; i++) {
251
if (figures[i].querySelector('img') != null)
252
figures[i].yelp_figure_resize();
254
window.clearTimeout(timeout);
258
window.addEventListener('resize', yelp_figures_resize, false);
260
function yelp_media_init (media) {
261
media.removeAttribute('controls');
262
if (media.parentNode.classList.contains('links-tile-img')) {
266
media.addEventListener('click', function () {
274
for (var cur = media.nextSibling; cur instanceof Element; cur = cur.nextSibling) {
275
if (cur.classList.contains('media-controls')) {
280
if (controls == null) {
281
media.setAttribute('controls', 'controls');
284
var playbutton = controls.querySelector('button.media-play');
285
playbutton.addEventListener('click', function () {
286
if (media.paused || media.ended)
292
var mediachange = function () {
296
playbutton.setAttribute('value', playbutton.getAttribute('data-play-label'));
297
playbutton.classList.remove('media-play-playing');
300
playbutton.setAttribute('value', playbutton.getAttribute('data-pause-label'));
301
playbutton.classList.add('media-play-playing');
304
media.addEventListener('play', mediachange, false);
305
media.addEventListener('pause', mediachange, false);
306
media.addEventListener('ended', mediachange, false);
308
var mediarange = controls.querySelector('input.media-range');
309
mediarange.addEventListener('input', function () {
310
var pct = this.value;
315
media.currentTime = (pct / 100.0) * media.duration;
317
var curspan = controls.querySelector('span.media-current');
318
var durspan = controls.querySelector('span.media-duration');
319
var durationUpdate = function () {
320
if (!isNaN(media.duration)) {
321
mins = parseInt(media.duration / 60);
322
secs = parseInt(media.duration - (60 * mins));
323
durspan.textContent = (mins + (secs < 10 ? ':0' : ':') + secs);
326
media.addEventListener('durationchange', durationUpdate, false);
329
var ttmlNodes = null;
330
for (var i = 0; i < media.parentNode.children.length; i++) {
331
var child = media.parentNode.children[i];
332
if (child.classList.contains('media-ttml'))
335
if (ttmlDiv != null) {
336
ttmlNodes = ttmlDiv.querySelectorAll('.media-ttml-node');
339
var timeUpdate = function () {
340
var pct = (media.currentTime / media.duration) * 100;
341
mediarange.value = pct;
342
var mins = parseInt(media.currentTime / 60);
343
var secs = parseInt(media.currentTime - (60 * mins))
344
curspan.textContent = (mins + (secs < 10 ? ':0' : ':') + secs);
345
if (ttmlNodes != null) {
346
for (var i = 0; i < ttmlNodes.length; i++) {
347
var ttml = ttmlNodes[i];
348
if (media.currentTime >= parseFloat(ttml.getAttribute('data-ttml-begin')) &&
349
(!ttml.hasAttribute('data-ttml-end') ||
350
media.currentTime < parseFloat(ttml.getAttribute('data-ttml-end')) )) {
351
if (ttml.tagName == 'span' || ttml.tagName == 'SPAN')
352
ttml.style.display = 'inline';
354
ttml.style.display = 'block';
357
ttml.style.display = 'none';
362
media.addEventListener('timeupdate', timeUpdate, false);
364
document.addEventListener('DOMContentLoaded', function() {
365
var matches = document.querySelectorAll('video, audio');
366
for (var i = 0; i < matches.length; i++) {
367
yelp_media_init(matches[i]);
371
document.addEventListener('DOMContentLoaded', function() {
372
var tiles = document.querySelectorAll('div.links-tile');
373
for (var i = 0; i < tiles.length; i++) {
375
if (!tile.parentNode.classList.contains('links-tiles') &&
376
(tile.nextElementSibling &&
377
tile.nextElementSibling.classList.contains('links-tile')) &&
378
!(tile.previousElementSibling &&
379
tile.previousElementSibling.classList.contains('links-tile'))) {
380
var tilesdiv = document.createElement('div');
381
tilesdiv.className = 'links-tiles';
382
tile.parentNode.insertBefore(tilesdiv, tile);
384
while (cur && cur.classList.contains('links-tile')) {
386
cur = cur.nextElementSibling;
387
tilesdiv.appendChild(curcur);
389
for (j = 0; j < 2; j++) {
390
var paddiv = document.createElement('div');
391
paddiv.className = 'links-tile';
392
tilesdiv.appendChild(paddiv);
398
document.addEventListener('DOMContentLoaded', function() {
399
var overlays = document.querySelectorAll('a.ui-overlay');
400
for (var i = 0; i < overlays.length; i++) {
402
var overlay = ovlink.parentNode.querySelector('div.ui-overlay');
403
var ui_overlay_show = function (ev) {
404
overlay.style.display = 'block';
405
overlay.classList.add('ui-overlay-show');
406
var screen = document.querySelector('div.ui-overlay-screen');
407
if (screen == null) {
408
screen = document.createElement('div');
409
screen.className = 'ui-overlay-screen';
410
document.body.appendChild(screen);
412
var inner = overlay.querySelector('div.inner');
413
var close = inner.querySelector('a.ui-overlay-close');
414
var media = inner.querySelectorAll('audio, video');
416
var overlay_play_func = function () {
417
for (var j = 0; j < media.length; j++) {
421
var overlay_play_timeout = window.setTimeout(overlay_play_func, 1000);
423
var ui_overlay_funcs = {};
424
ui_overlay_funcs['hide'] = function () {
425
overlay.style.display = 'none';
426
document.body.removeChild(screen);
427
document.removeEventListener('keydown', ui_overlay_funcs['keydown'], false);
428
for (var j = 0; j < media.length; j++) {
431
window.clearTimeout(overlay_play_timeout);
433
ui_overlay_funcs['hideclick'] = function (uiev) {
434
ui_overlay_funcs['hide']();
435
uiev.preventDefault();
437
ui_overlay_funcs['keydown'] = function (uiev) {
438
if (uiev.keyCode == 27) {
439
ui_overlay_funcs['hide']();
442
screen.addEventListener('click', ui_overlay_funcs['hideclick'], false);
443
close.addEventListener('click', ui_overlay_funcs['hideclick'], false);
444
document.addEventListener('keydown', ui_overlay_funcs['keydown'], false);
447
ovlink.addEventListener('click', ui_overlay_show, false);