A Pen by Deepak Surya S on CodePen.
Created
September 18, 2017 19:52
-
-
Save dsuryas/27b5311bb4a1755dd95ab994eaa4abb9 to your computer and use it in GitHub Desktop.
twitch.tv_api
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="main" style="background-color: #FF1744;"> | |
<div class="container"> | |
<div class="twelve columns"> | |
<div class="app"> | |
<div class="header"> | |
<div class="row"> | |
<div class="one-half column"> | |
<h1 class="headline">twitch<span>.</span>tv</h1> | |
</div> | |
<div class="one-half column"> | |
<div class="search"> | |
<form action=""> | |
<input type="search" class="search-twitch" placeholder="Search username"> | |
<div class="search-twitch-btn"></div> | |
</form> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="status"> | |
<div class="row"> | |
<div class="one-third column"><button class="all-users focus" id="all-users">All</button></div> | |
<div class="one-third column"><button class="online-users">Online</button></div> | |
<div class="one-third column"><button class="offline-users">Offline</button></div> | |
</div> | |
</div> | |
<section class="online"></section> | |
<section class="offline"></section> | |
<section class="unavailable"></section> | |
</div> | |
<div class="row"> | |
<div class="footer"> | |
<p>Designed and coded by <a href="http://ideepaksuryas.me/">Deepak Surya S</a></p> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
window.onload = function () { | |
//Define variables | |
var status, url, picture, x = 0; | |
var twitchStreamers = ["dreamhackcs", "skyzhar", "freecodecamp", "faceittv", "comster404", "brunofin", "terakilobyte", "robotcaleb", "sheevergaming", "esl_sc2", "jacksofamerica"]; | |
//Define functions | |
function updateHTML (section) { | |
$(section).append('<div class="twitch"><div class="row"><div class="one-third column"><div class="image-holder" id="user-image-' + x + '"></div></div><div class="two-thirds column"><span class="status-message">' + status + '</span></div></div></div>'); | |
if (section == ".online" || section == ".offline") { //If users are online or offline, load profile images | |
$("#user-image-" + x).css({ | |
background: picture, | |
'background-size': '55px' | |
}); | |
} | |
x++; | |
} | |
function updateOfflineUsers () { //If users are offline, make new ajax request to find user info | |
$.ajax({ | |
url: "https://wind-bow.gomix.me/twitch-api/channels/" + url, | |
dataType: "jsonp", | |
data: {format: "json"}, | |
success: function (json) { | |
status = "Channel " + "'<a href='" + json.url + "' target='_blank'" + "'>" + json.display_name + "</a>'" + " is currently offline"; | |
if (json.logo !== null) { | |
picture = 'url("' + json.logo + '")'; | |
} | |
else { | |
picture = 'url("https://i.vimeocdn.com/portrait/10159238_300x300")'; | |
} | |
updateHTML(".offline"); | |
} | |
}); | |
} | |
function fetchData (data) { | |
console.log(data); | |
if (data.stream === null) { | |
url = data._links.channel.substr(38); | |
updateOfflineUsers(); | |
} | |
else if (data.status == 422 || data.status == 404) { | |
status = data.message; | |
updateHTML(".unavailable"); | |
} | |
else { | |
if (data.stream.channel.logo !== null) { | |
picture = 'url("' + data.stream.channel.logo + '")'; | |
} | |
else { | |
picture = 'url("https://i.vimeocdn.com/portrait/10159238_300x300")'; | |
} | |
url = data._links.channel.substr(38); | |
status = "<a href='https://wind-bow.gomix.me/twitch-api/" + url + "' target='_blank'" + "'>" + data.stream.channel.display_name + "</a>" + " is currently streaming " + data.stream.game; | |
updateHTML(".online"); | |
} | |
} | |
function ajax () { | |
$.ajax({ | |
url: "https://wind-bow.gomix.me/twitch-api/streams/" + twitchStreamers[i] + "?callback=?", | |
dataType: "jsonp", | |
data: { | |
format: "json" | |
}, | |
success: function (data) { | |
fetchData(data); | |
}, | |
error: function () { | |
console.log("unable to access json"); | |
} | |
}); | |
} | |
function showOnline () { //Show only online users | |
$(".offline-users, .all-users").removeClass('focus'); | |
$(".online-users").addClass('focus'); | |
$(".offline, .unavailable").addClass('hidden'); | |
$(".online").removeClass('hidden'); | |
} | |
function showOffline () { //Show only offline users | |
$(".online-users, .all-users").removeClass('focus'); | |
$(".offline-users").addClass('focus'); | |
$(".offline, .unavailable").removeClass('hidden'); | |
$(".online").addClass('hidden'); | |
} | |
function showAll () { //Show all users | |
$(".offline-users, .online-users").removeClass('focus'); | |
$(".all-users").addClass('focus'); | |
$(".online, .offline, .unavailable").removeClass('hidden'); | |
} | |
//Loop | |
for (var i = 0; i < twitchStreamers.length; i++) { | |
ajax(); | |
} | |
//Search Function | |
function search () { | |
$(".online, .offline, .unavailable").empty(); | |
showAll(); | |
var searchQuery = $(".search-twitch").val(); | |
var user = searchQuery.replace(/[^A-Z0-9_]/ig, ""); | |
$.ajax({ | |
url: "https://wind-bow.gomix.me/twitch-api/streams/" + user, | |
dataType: "jsonp", | |
data: { | |
format: "json" | |
}, | |
success: function (data) { | |
fetchData(data); | |
} | |
}); | |
} | |
$(".search-twitch-btn").click(function () { | |
search(); | |
}); | |
$(".search-twitch").keypress(function(event) { | |
if (event.keyCode === 13) { | |
event.preventDefault(); | |
search(); | |
} | |
}); | |
//Buttons | |
$(".online-users").click(function () { | |
showOnline(); | |
}); | |
$(".offline-users").click(function () { | |
showOffline(); | |
}); | |
$(".all-users").click(function () { | |
showAll(); | |
}); | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
html { | |
font-family: sans-serif; | |
-ms-text-size-adjust: 100%; | |
-webkit-text-size-adjust: 100%; } | |
body { | |
margin: 0; } | |
article, | |
aside, | |
details, | |
figcaption, | |
figure, | |
footer, | |
header, | |
hgroup, | |
main, | |
menu, | |
nav, | |
section, | |
summary { | |
display: block; } | |
audio, | |
canvas, | |
progress, | |
video { | |
display: inline-block; | |
vertical-align: baseline; } | |
audio:not([controls]) { | |
display: none; | |
height: 0; } | |
[hidden], | |
template { | |
display: none; } | |
a { | |
background-color: transparent; } | |
a:active { | |
outline: 0; } | |
a:hover { | |
outline: 0; } | |
abbr[title] { | |
border-bottom: 1px dotted; } | |
b, | |
strong { | |
font-weight: bold; } | |
dfn { | |
font-style: italic; } | |
h1 { | |
font-size: 2em; | |
margin: 0.67em 0; } | |
mark { | |
background: #ff0; | |
color: #000; } | |
small { | |
font-size: 80%; } | |
sub, | |
sup { | |
font-size: 75%; | |
line-height: 0; | |
position: relative; | |
vertical-align: baseline; } | |
sup { | |
top: -0.5em; } | |
sub { | |
bottom: -0.25em; } | |
img { | |
border: 0; } | |
svg:not(:root) { | |
overflow: hidden; } | |
figure { | |
margin: 1em 40px; } | |
hr { | |
box-sizing: content-box; | |
height: 0; } | |
pre { | |
overflow: auto; } | |
code, | |
kbd, | |
pre, | |
samp { | |
font-family: monospace, monospace; | |
font-size: 1em; } | |
button, | |
input, | |
optgroup, | |
select, | |
textarea { | |
color: inherit; | |
font: inherit; | |
margin: 0; } | |
button { | |
overflow: visible; } | |
button, | |
select { | |
text-transform: none; } | |
button, | |
html input[type="button"], | |
input[type="reset"], | |
input[type="submit"] { | |
-webkit-appearance: button; | |
cursor: pointer; } | |
button[disabled], | |
html input[disabled] { | |
cursor: default; } | |
button::-moz-focus-inner, | |
input::-moz-focus-inner { | |
border: 0; | |
padding: 0; } | |
input { | |
line-height: normal; } | |
input[type="checkbox"], | |
input[type="radio"] { | |
box-sizing: border-box; | |
padding: 0; } | |
input[type="number"]::-webkit-inner-spin-button, | |
input[type="number"]::-webkit-outer-spin-button { | |
height: auto; } | |
input[type="search"] { | |
-webkit-appearance: textfield; | |
box-sizing: content-box; } | |
input[type="search"]::-webkit-search-cancel-button, | |
input[type="search"]::-webkit-search-decoration { | |
-webkit-appearance: none; } | |
fieldset { | |
border: 1px solid #c0c0c0; | |
margin: 0 2px; | |
padding: 0.35em 0.625em 0.75em; } | |
legend { | |
border: 0; | |
padding: 0; } | |
textarea { | |
overflow: auto; } | |
optgroup { | |
font-weight: bold; } | |
table { | |
border-collapse: collapse; | |
border-spacing: 0; } | |
td, | |
th { | |
padding: 0; } | |
/* | |
* Skeleton V2.0.4 | |
* Copyright 2014, Dave Gamache | |
* www.getskeleton.com | |
* Free to use under the MIT license. | |
* https://www.opensource.org/licenses/mit-license.php | |
* 12/9/2014 | |
* Sass Version by Seth Coelen https://github.com/whatsnewsaes | |
*/ | |
html { | |
font-size: 62.5%; } | |
body { | |
font-size: 1.5em; | |
line-height: 1.6; | |
font-weight: 400; | |
font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; | |
color: #222; } | |
a { | |
color: #1eaedb; } | |
a:hover { | |
color: #1b9cc5; } | |
hr { | |
margin-top: 3rem; | |
margin-bottom: 3.5rem; | |
border-width: 0; | |
border-top: 1px solid #e1e1e1; } | |
.u-full-width { | |
width: 100%; | |
box-sizing: border-box; } | |
.u-max-full-width { | |
max-width: 100%; | |
box-sizing: border-box; } | |
.u-pull-right { | |
float: right; } | |
.u-pull-left { | |
float: left; } | |
h1, h2, h3, h4, h5, h6 { | |
margin-top: 0; | |
margin-bottom: 2rem; | |
font-weight: 300; } | |
h1 { | |
font-size: 4.0rem; | |
line-height: 1.2; | |
letter-spacing: -.1rem; } | |
h2 { | |
font-size: 3.6rem; | |
line-height: 1.25; | |
letter-spacing: -.1rem; } | |
h3 { | |
font-size: 3.0rem; | |
line-height: 1.3; | |
letter-spacing: -.1rem; } | |
h4 { | |
font-size: 2.4rem; | |
line-height: 1.35; | |
letter-spacing: -.08rem; } | |
h5 { | |
font-size: 1.8rem; | |
line-height: 1.5; | |
letter-spacing: -.05rem; } | |
h6 { | |
font-size: 1.5rem; | |
line-height: 1.6; | |
letter-spacing: 0; } | |
@media (min-width: 550px) { | |
h1 { | |
font-size: 5.0rem; } | |
h2 { | |
font-size: 4.2rem; } | |
h3 { | |
font-size: 3.6rem; } | |
h4 { | |
font-size: 3.0rem; } | |
h5 { | |
font-size: 2.4rem; } | |
h6 { | |
font-size: 1.5rem; } } | |
p { | |
margin-top: 0; } | |
/* Modules */ | |
/* | |
* Skeleton V2.0.4 | |
* Copyright 2014, Dave Gamache | |
* www.getskeleton.com | |
* Free to use under the MIT license. | |
* https://www.opensource.org/licenses/mit-license.php | |
* 12/9/2014 | |
* Sass Version by Seth Coelen https://github.com/whatsnewsaes | |
*/ | |
.container { | |
position: relative; | |
width: 100%; | |
margin: 0 auto; | |
padding: 0 20px; | |
box-sizing: border-box; } | |
.column, | |
.columns { | |
width: 100%; | |
float: left; | |
box-sizing: border-box; } | |
@media (min-width: 400px) { | |
.container { | |
width: 85%; | |
padding: 0; } } | |
@media (min-width: 550px) { | |
.container { | |
width: 80%; } | |
.column, | |
.columns { | |
margin-left: 4%; } | |
.column:first-child, | |
.columns:first-child { | |
margin-left: 0; } | |
.one.column, | |
.one.columns { | |
width: 4.66667%; } | |
.two.columns { | |
width: 13.33333%; } | |
.three.columns { | |
width: 22%; } | |
.four.columns { | |
width: 30.66667%; } | |
.five.columns { | |
width: 39.33333%; } | |
.six.columns { | |
width: 48%; } | |
.seven.columns { | |
width: 56.66667%; } | |
.eight.columns { | |
width: 65.33333%; } | |
.nine.columns { | |
width: 74%; } | |
.ten.columns { | |
width: 82.66667%; } | |
.eleven.columns { | |
width: 91.33333%; } | |
.twelve.columns { | |
width: 100%; | |
margin-left: 0; } | |
.one-third.column { | |
width: 30.66667%; } | |
.two-thirds.column { | |
width: 65.33333%; } | |
.one-half.column { | |
width: 48%; } | |
.offset-by-one.column, | |
.offset-by-one.columns { | |
margin-left: 8.66667%; } | |
.offset-by-two.column, | |
.offset-by-two.columns { | |
margin-left: 17.33333%; } | |
.offset-by-three.column, | |
.offset-by-three.columns { | |
margin-left: 26%; } | |
.offset-by-four.column, | |
.offset-by-four.columns { | |
margin-left: 34.66667%; } | |
.offset-by-five.column, | |
.offset-by-five.columns { | |
margin-left: 43.33333%; } | |
.offset-by-six.column, | |
.offset-by-six.columns { | |
margin-left: 52%; } | |
.offset-by-seven.column, | |
.offset-by-seven.columns { | |
margin-left: 60.66667%; } | |
.offset-by-eight.column, | |
.offset-by-eight.columns { | |
margin-left: 69.33333%; } | |
.offset-by-nine.column, | |
.offset-by-nine.columns { | |
margin-left: 78%; } | |
.offset-by-ten.column, | |
.offset-by-ten.columns { | |
margin-left: 86.66667%; } | |
.offset-by-eleven.column, | |
.offset-by-eleven.columns { | |
margin-left: 95.33333%; } | |
.offset-by-one-third.column, | |
.offset-by-one-third.columns { | |
margin-left: 34.66667%; } | |
.offset-by-two-thirds.column, | |
.offset-by-two-thirds.columns { | |
margin-left: 69.33333%; } | |
.offset-by-one-half.column, | |
.offset-by-one-half.column { | |
margin-left: 52%; } } | |
.container:after, | |
.row:after, | |
.u-cf { | |
content: ""; | |
display: table; | |
clear: both; } | |
.button, | |
button { | |
display: inline-block; | |
height: 38px; | |
padding: 0 30px; | |
color: #555555; | |
text-align: center; | |
font-size: 11px; | |
font-weight: 600; | |
line-height: 38px; | |
letter-spacing: .1rem; | |
text-transform: uppercase; | |
text-decoration: none; | |
white-space: nowrap; | |
background-color: transparent; | |
transition-duration: .4s; | |
border: 1px solid #bbb; | |
cursor: pointer; | |
box-sizing: border-box; } | |
input[type="submit"], input[type="reset"], input[type="button"] { | |
display: inline-block; | |
height: 38px; | |
padding: 0 30px; | |
color: #555555; | |
text-align: center; | |
font-size: 11px; | |
font-weight: 600; | |
line-height: 38px; | |
letter-spacing: .1rem; | |
text-transform: uppercase; | |
text-decoration: none; | |
white-space: nowrap; | |
background-color: transparent; | |
border-radius: 4px; | |
border: 1px solid #bbb; | |
cursor: pointer; | |
box-sizing: border-box; } | |
.button:hover, | |
button:hover { | |
color: #fff; | |
background-color: #673AB7; | |
transition-duration: .4s; | |
outline: 0; } | |
input[type="submit"]:hover, input[type="reset"]:hover, input[type="button"]:hover { | |
color: #333; | |
border-color: #888888; | |
outline: 0; } | |
.button:focus, | |
button:focus { | |
color: #333; | |
border-color: #888888; | |
outline: 0; } | |
input[type="submit"]:focus, input[type="reset"]:focus, input[type="button"]:focus { | |
color: #333; | |
border-color: #888888; | |
outline: 0; } | |
.button.button-primary, | |
button.button-primary { | |
color: #fff; | |
background-color: #33c3f0; | |
border-color: #33c3f0; } | |
input[type="submit"].button-primary, input[type="reset"].button-primary, input[type="button"].button-primary { | |
color: #fff; | |
background-color: #33c3f0; | |
border-color: #33c3f0; } | |
.button.button-primary:hover, | |
button.button-primary:hover { | |
color: #fff; | |
background-color: #1eaedb; | |
border-color: #1eaedb; } | |
input[type="submit"].button-primary:hover, input[type="reset"].button-primary:hover, input[type="button"].button-primary:hover { | |
color: #fff; | |
background-color: #1eaedb; | |
border-color: #1eaedb; } | |
.button.button-primary:focus, | |
button.button-primary:focus { | |
color: #fff; | |
background-color: #1eaedb; | |
border-color: #1eaedb; } | |
input[type="submit"].button-primary:focus, input[type="reset"].button-primary:focus, input[type="button"].button-primary:focus { | |
color: #fff; | |
background-color: #1eaedb; | |
border-color: #1eaedb; } | |
input[type="email"], input[type="number"], input[type="search"], input[type="text"], input[type="tel"], input[type="url"], input[type="password"] { | |
height: 38px; | |
padding: 6px 10px; | |
background-color: #fff; | |
border: 1px solid #d1d1d1; | |
border-radius: 4px; | |
box-shadow: none; | |
box-sizing: border-box; } | |
textarea, | |
select { | |
height: 38px; | |
padding: 6px 10px; | |
background-color: #fff; | |
border: 1px solid #d1d1d1; | |
border-radius: 4px; | |
box-shadow: none; | |
box-sizing: border-box; } | |
input[type="email"], input[type="number"], input[type="search"], input[type="text"], input[type="tel"], input[type="url"], input[type="password"] { | |
-webkit-appearance: none; | |
-moz-appearance: none; | |
appearance: none; } | |
textarea { | |
-webkit-appearance: none; | |
-moz-appearance: none; | |
appearance: none; | |
min-height: 65px; | |
padding-top: 6px; | |
padding-bottom: 6px; } | |
input[type="email"]:focus, input[type="number"]:focus, input[type="search"]:focus, input[type="text"]:focus, input[type="tel"]:focus, input[type="url"]:focus, input[type="password"]:focus { | |
border: 1px solid #33c3f0; | |
outline: 0; } | |
textarea:focus, | |
select:focus { | |
border: 1px solid #33c3f0; | |
outline: 0; } | |
label, | |
legend { | |
display: block; | |
margin-bottom: .5rem; | |
font-weight: 600; } | |
fieldset { | |
padding: 0; | |
border-width: 0; } | |
input[type="checkbox"], input[type="radio"] { | |
display: inline; } | |
label > .label-body { | |
display: inline-block; | |
margin-left: .5rem; | |
font-weight: normal; } | |
ul { | |
list-style: circle inside; } | |
ol { | |
list-style: decimal inside; | |
padding-left: 0; | |
margin-top: 0; } | |
ul { | |
padding-left: 0; | |
margin-top: 0; } | |
ul ul, ul ol { | |
margin: 1.5rem 0 1.5rem 3rem; | |
font-size: 90%; } | |
ol ol, ol ul { | |
margin: 1.5rem 0 1.5rem 3rem; | |
font-size: 90%; } | |
li { | |
margin-bottom: 1rem; } | |
code { | |
padding: .2rem .5rem; | |
margin: 0 .2rem; | |
font-size: 90%; | |
white-space: nowrap; | |
background: #f1f1f1; | |
border: 1px solid #e1e1e1; | |
border-radius: 4px; } | |
pre > code { | |
display: block; | |
padding: 1rem 1.5rem; | |
white-space: pre; } | |
th, | |
td { | |
padding: 12px 15px; | |
text-align: left; | |
border-bottom: 1px solid #e1e1e1; } | |
th:first-child, | |
td:first-child { | |
padding-left: 0; } | |
th:last-child, | |
td:last-child { | |
padding-right: 0; } | |
button, | |
.button { | |
margin-bottom: 1rem; } | |
input, | |
textarea, | |
select, | |
fieldset { | |
margin-bottom: 1.5rem; } | |
pre, | |
blockquote, | |
dl, | |
figure, | |
table, | |
p, | |
ul, | |
ol, | |
form { | |
margin-bottom: 2.5rem; } | |
body { | |
text-align: center; | |
background-color: #ECF0E7; } | |
.app { | |
margin: 1em 0; | |
border: 1px solid #333; | |
overflow: hidden; | |
background-color: #fff; } | |
.header { | |
text-align: center; | |
text-transform: uppercase; | |
border-bottom: 1px solid #efefef; | |
padding: 10px 0 0; } | |
.headline { | |
margin-left: 30px; | |
color: #FF1744; | |
text-align: left; | |
font-size: 3em; | |
font-family: "Ubuntu", sans-serif; | |
font-weight: 900; | |
padding: 5px 10px 0px ; } | |
.headline span { | |
color: #7550BA; } | |
.search { | |
margin: 0 0 0; } | |
form { | |
margin-bottom: 1em; } | |
input[type="search"] { | |
float: left; | |
display: inline-block; | |
width: 80%; | |
border: 1px solid #673AB7; | |
border-radius: 0px; } | |
.search-twitch-btn { | |
width: 38px; | |
height: 38px; | |
float: left; | |
border: 0px; | |
background: url("http://www.endlessicons.com/wp-content/uploads/2015/08/search-icon-2.png"); | |
background-color: #673AB7; | |
background-size: cover; } | |
.status { | |
padding-top: 20px; | |
padding-bottom: 10px; | |
border-bottom: 1px solid #efefef; } | |
button { | |
width: 80%; } | |
.online .twitch { | |
background-color: #2ECC71; } | |
.offline .twitch { | |
background-color: #FFF; } | |
.unavailable .twitch { | |
background-color: #FFF; } | |
.twitch { | |
text-align: left; | |
margin-left: 0.2em; | |
margin-right: 0.2em; | |
margin-top: 0.2em; | |
background-color: #efefef; | |
line-height: 70px; } | |
.twitch .one-third.column { | |
width: 22%; } | |
.twitch .two-thirds.column { | |
width: 74%; } | |
.image-holder { | |
width: 55px; | |
height: 55px; | |
margin: 7.5px 10px; | |
margin-left: 20px; | |
float: left; | |
background-size: cover; } | |
.status-message { | |
font-size: 16px; | |
display: inline-block; | |
vertical-align: middle; | |
line-height: normal; } | |
a { | |
text-decoration: none; | |
color: #fff; | |
border: 1px solid #673AB7; | |
background-color: #673AB7;} | |
a:hover { | |
color: #000; | |
text-decoration: underline; } | |
.hidden { | |
display: none; } | |
.focus { | |
background-color: #7550BA; | |
color: #fff; } | |
.focus:hover, .focus:focus { | |
color: #fff; } | |
@media screen and (max-width: 550px) { | |
.headline { | |
text-align: center; } | |
.search { | |
width: 80%; | |
margin: 0 auto; } | |
.twitch { | |
text-align: center; } | |
.image-holder { | |
margin: 7.5px auto 5px; | |
float: none; } | |
span { | |
padding: 10px 10px; } } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment