forked from facebook/react-native
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcodeblocks.js
More file actions
110 lines (87 loc) · 3.04 KB
/
codeblocks.js
File metadata and controls
110 lines (87 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/* eslint-disable module-strict */
(function() {
'use strict';
if (typeof document === 'undefined') {
// Not on browser
return;
}
document.addEventListener('DOMContentLoaded', init);
function init() {
var mobile = isMobile();
var webPlayerList = document.querySelectorAll('.web-player');
// Either show interactive or static code block, depending on desktop or mobile
for (var i = 0; i < webPlayerList.length; ++i) {
webPlayerList[i].classList.add(mobile ? 'mobile' : 'desktop');
if (!mobile) {
// Determine location to look up required assets
var assetRoot = encodeURIComponent(
document.location.origin + '/react-native'
);
// Set iframe src. Do this dynamically so the iframe never loads on mobile.
var iframe = webPlayerList[i].querySelector('iframe');
iframe.src =
iframe.getAttribute('data-src') + '&assetRoot=' + assetRoot;
}
}
window.ExpoSnack && window.ExpoSnack.initialize();
var snackPlayerList = document.querySelectorAll('.snack-player');
// Either show interactive or static code block, depending on desktop or mobile
for (var i = 0; i < snackPlayerList.length; ++i) {
var snackPlayer = snackPlayerList[i];
var snackDesktopPlayer = snackPlayer.querySelectorAll(
'.desktop-friendly-snack'
)[0];
var plainCodeExample = snackPlayer.querySelectorAll(
'.mobile-friendly-snack'
)[0];
if (mobile) {
snackDesktopPlayer.remove();
plainCodeExample.style.display = 'block';
} else {
plainCodeExample.remove();
}
}
var backdrop = document.querySelector('.modal-backdrop');
if (!backdrop) {
return;
}
var modalButtonOpenList = document.querySelectorAll('.modal-button-open');
var modalButtonClose = document.querySelector('.modal-button-close');
backdrop.addEventListener('click', hideModal);
modalButtonClose.addEventListener('click', hideModal);
// Bind event to NodeList items
for (var i = 0; i < modalButtonOpenList.length; ++i) {
modalButtonOpenList[i].addEventListener('click', showModal);
}
}
function showModal(e) {
var backdrop = document.querySelector('.modal-backdrop');
if (!backdrop) {
return;
}
var modal = document.querySelector('.modal');
backdrop.classList.add('modal-open');
modal.classList.add('modal-open');
}
function hideModal(e) {
var backdrop = document.querySelector('.modal-backdrop');
if (!backdrop) {
return;
}
var modal = document.querySelector('.modal');
backdrop.classList.remove('modal-open');
modal.classList.remove('modal-open');
}
// Primitive mobile detection
function isMobile() {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
navigator.userAgent
);
}
})();