Browse Source
This is a vue.js app that loads a JSON file from the server and uses that to generate a sound board. Audio files are put into audio/. It takes most of it CSS from kaamelott-soundboard.2ec0b4.fr.master
commit
28a93baeed
9 changed files with 971 additions and 0 deletions
@ -0,0 +1,291 @@
|
||||
/*! HTML5 Boilerplate v5.3.0 | MIT License | https://html5boilerplate.com/ */ |
||||
|
||||
/* |
||||
* What follows is the result of much research on cross-browser styling. |
||||
* Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal, |
||||
* Kroc Camen, and the H5BP dev community and team. |
||||
*/ |
||||
|
||||
/* ========================================================================== |
||||
Base styles: opinionated defaults |
||||
========================================================================== */ |
||||
|
||||
html { |
||||
color: #222; |
||||
font-size: 1em; |
||||
line-height: 1.4; |
||||
} |
||||
|
||||
/* |
||||
* Remove text-shadow in selection highlight: |
||||
* https://twitter.com/miketaylr/status/12228805301 |
||||
* |
||||
* Vendor-prefixed and regular ::selection selectors cannot be combined: |
||||
* https://stackoverflow.com/a/16982510/7133471 |
||||
* |
||||
* Customize the background color to match your design. |
||||
*/ |
||||
|
||||
::-moz-selection { |
||||
background: #b3d4fc; |
||||
text-shadow: none; |
||||
} |
||||
|
||||
::selection { |
||||
background: #b3d4fc; |
||||
text-shadow: none; |
||||
} |
||||
|
||||
/* |
||||
* A better looking default horizontal rule |
||||
*/ |
||||
|
||||
hr { |
||||
display: block; |
||||
height: 1px; |
||||
border: 0; |
||||
border-top: 1px solid #ccc; |
||||
margin: 1em 0; |
||||
padding: 0; |
||||
} |
||||
|
||||
/* |
||||
* Remove the gap between audio, canvas, iframes, |
||||
* images, videos and the bottom of their containers: |
||||
* https://github.com/h5bp/html5-boilerplate/issues/440 |
||||
*/ |
||||
|
||||
audio, |
||||
canvas, |
||||
iframe, |
||||
img, |
||||
svg, |
||||
video { |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
/* |
||||
* Remove default fieldset styles. |
||||
*/ |
||||
|
||||
fieldset { |
||||
border: 0; |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
|
||||
/* |
||||
* Allow only vertical resizing of textareas. |
||||
*/ |
||||
|
||||
textarea { |
||||
resize: vertical; |
||||
} |
||||
|
||||
/* ========================================================================== |
||||
Browser Upgrade Prompt |
||||
========================================================================== */ |
||||
|
||||
.browserupgrade { |
||||
margin: 0.2em 0; |
||||
background: #ccc; |
||||
color: #000; |
||||
padding: 0.2em 0; |
||||
} |
||||
|
||||
/* ========================================================================== |
||||
Author's custom styles |
||||
========================================================================== */ |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================================== |
||||
Helper classes |
||||
========================================================================== */ |
||||
|
||||
/* |
||||
* Hide visually and from screen readers |
||||
*/ |
||||
|
||||
.hidden { |
||||
display: none !important; |
||||
} |
||||
|
||||
/* |
||||
* Hide only visually, but have it available for screen readers: |
||||
* https://snook.ca/archives/html_and_css/hiding-content-for-accessibility |
||||
* |
||||
* 1. For long content, line feeds are not interpreted as spaces and small width |
||||
* causes content to wrap 1 word per line: |
||||
* https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe |
||||
*/ |
||||
|
||||
.visuallyhidden { |
||||
border: 0; |
||||
clip: rect(0 0 0 0); |
||||
-webkit-clip-path: inset(50%); |
||||
clip-path: inset(50%); |
||||
height: 1px; |
||||
margin: -1px; |
||||
overflow: hidden; |
||||
padding: 0; |
||||
position: absolute; |
||||
width: 1px; |
||||
white-space: nowrap; /* 1 */ |
||||
} |
||||
|
||||
/* |
||||
* Extends the .visuallyhidden class to allow the element |
||||
* to be focusable when navigated to via the keyboard: |
||||
* https://www.drupal.org/node/897638 |
||||
*/ |
||||
|
||||
.visuallyhidden.focusable:active, |
||||
.visuallyhidden.focusable:focus { |
||||
clip: auto; |
||||
-webkit-clip-path: none; |
||||
clip-path: none; |
||||
height: auto; |
||||
margin: 0; |
||||
overflow: visible; |
||||
position: static; |
||||
width: auto; |
||||
white-space: inherit; |
||||
} |
||||
|
||||
/* |
||||
* Hide visually and from screen readers, but maintain layout |
||||
*/ |
||||
|
||||
.invisible { |
||||
visibility: hidden; |
||||
} |
||||
|
||||
/* |
||||
* Clearfix: contain floats |
||||
* |
||||
* For modern browsers |
||||
* 1. The space content is one way to avoid an Opera bug when the |
||||
* `contenteditable` attribute is included anywhere else in the document. |
||||
* Otherwise it causes space to appear at the top and bottom of elements |
||||
* that receive the `clearfix` class. |
||||
* 2. The use of `table` rather than `block` is only necessary if using |
||||
* `:before` to contain the top-margins of child elements. |
||||
*/ |
||||
|
||||
.clearfix:before, |
||||
.clearfix:after { |
||||
content: " "; /* 1 */ |
||||
display: table; /* 2 */ |
||||
} |
||||
|
||||
.clearfix:after { |
||||
clear: both; |
||||
} |
||||
|
||||
/* ========================================================================== |
||||
EXAMPLE Media Queries for Responsive Design. |
||||
These examples override the primary ('mobile first') styles. |
||||
Modify as content requires. |
||||
========================================================================== */ |
||||
|
||||
@media only screen and (min-width: 35em) { |
||||
/* Style adjustments for viewports that meet the condition */ |
||||
} |
||||
|
||||
@media print, |
||||
(-webkit-min-device-pixel-ratio: 1.25), |
||||
(min-resolution: 1.25dppx), |
||||
(min-resolution: 120dpi) { |
||||
/* Style adjustments for high resolution devices */ |
||||
} |
||||
|
||||
/* ========================================================================== |
||||
Print styles. |
||||
Inlined to avoid the additional HTTP request: |
||||
http://www.phpied.com/delay-loading-your-print-css/ |
||||
========================================================================== */ |
||||
|
||||
@media print { |
||||
*, |
||||
*:before, |
||||
*:after { |
||||
background: transparent !important; |
||||
color: #000 !important; /* Black prints faster: |
||||
http://www.sanbeiji.com/archives/953 */ |
||||
box-shadow: none !important; |
||||
text-shadow: none !important; |
||||
} |
||||
|
||||
a, |
||||
a:visited { |
||||
text-decoration: underline; |
||||
} |
||||
|
||||
a[href]:after { |
||||
content: " (" attr(href) ")"; |
||||
} |
||||
|
||||
abbr[title]:after { |
||||
content: " (" attr(title) ")"; |
||||
} |
||||
|
||||
/* |
||||
* Don't show links that are fragment identifiers, |
||||
* or use the `javascript:` pseudo protocol |
||||
*/ |
||||
|
||||
a[href^="#"]:after, |
||||
a[href^="javascript:"]:after { |
||||
content: ""; |
||||
} |
||||
|
||||
pre { |
||||
white-space: pre-wrap !important; |
||||
} |
||||
pre, |
||||
blockquote { |
||||
border: 1px solid #999; |
||||
page-break-inside: avoid; |
||||
} |
||||
|
||||
/* |
||||
* Printing Tables: |
||||
* http://css-discuss.incutio.com/wiki/Printing_Tables |
||||
*/ |
||||
|
||||
thead { |
||||
display: table-header-group; |
||||
} |
||||
|
||||
tr, |
||||
img { |
||||
page-break-inside: avoid; |
||||
} |
||||
|
||||
p, |
||||
h2, |
||||
h3 { |
||||
orphans: 3; |
||||
widows: 3; |
||||
} |
||||
|
||||
h2, |
||||
h3 { |
||||
page-break-after: avoid; |
||||
} |
||||
} |
@ -0,0 +1,447 @@
|
||||
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */ |
||||
|
||||
/* Document |
||||
========================================================================== */ |
||||
|
||||
/** |
||||
* 1. Correct the line height in all browsers. |
||||
* 2. Prevent adjustments of font size after orientation changes in |
||||
* IE on Windows Phone and in iOS. |
||||
*/ |
||||
|
||||
html { |
||||
line-height: 1.15; /* 1 */ |
||||
-ms-text-size-adjust: 100%; /* 2 */ |
||||
-webkit-text-size-adjust: 100%; /* 2 */ |
||||
} |
||||
|
||||
/* Sections |
||||
========================================================================== */ |
||||
|
||||
/** |
||||
* Remove the margin in all browsers (opinionated). |
||||
*/ |
||||
|
||||
body { |
||||
margin: 0; |
||||
} |
||||
|
||||
/** |
||||
* Add the correct display in IE 9-. |
||||
*/ |
||||
|
||||
article, |
||||
aside, |
||||
footer, |
||||
header, |
||||
nav, |
||||
section { |
||||
display: block; |
||||
} |
||||
|
||||
/** |
||||
* Correct the font size and margin on `h1` elements within `section` and |
||||
* `article` contexts in Chrome, Firefox, and Safari. |
||||
*/ |
||||
|
||||
h1 { |
||||
font-size: 2em; |
||||
margin: 0.67em 0; |
||||
} |
||||
|
||||
/* Grouping content |
||||
========================================================================== */ |
||||
|
||||
/** |
||||
* Add the correct display in IE 9-. |
||||
* 1. Add the correct display in IE. |
||||
*/ |
||||
|
||||
figcaption, |
||||
figure, |
||||
main { /* 1 */ |
||||
display: block; |
||||
} |
||||
|
||||
/** |
||||
* Add the correct margin in IE 8. |
||||
*/ |
||||
|
||||
figure { |
||||
margin: 1em 40px; |
||||
} |
||||
|
||||
/** |
||||
* 1. Add the correct box sizing in Firefox. |
||||
* 2. Show the overflow in Edge and IE. |
||||
*/ |
||||
|
||||
hr { |
||||
box-sizing: content-box; /* 1 */ |
||||
height: 0; /* 1 */ |
||||
overflow: visible; /* 2 */ |
||||
} |
||||
|
||||
/** |
||||
* 1. Correct the inheritance and scaling of font size in all browsers. |
||||
* 2. Correct the odd `em` font sizing in all browsers. |
||||
*/ |
||||
|
||||
pre { |
||||
font-family: monospace, monospace; /* 1 */ |
||||
font-size: 1em; /* 2 */ |
||||
} |
||||
|
||||
/* Text-level semantics |
||||
========================================================================== */ |
||||
|
||||
/** |
||||
* 1. Remove the gray background on active links in IE 10. |
||||
* 2. Remove gaps in links underline in iOS 8+ and Safari 8+. |
||||
*/ |
||||
|
||||
a { |
||||
background-color: transparent; /* 1 */ |
||||
-webkit-text-decoration-skip: objects; /* 2 */ |
||||
} |
||||
|
||||
/** |
||||
* 1. Remove the bottom border in Chrome 57- and Firefox 39-. |
||||
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. |
||||
*/ |
||||
|
||||
abbr[title] { |
||||
border-bottom: none; /* 1 */ |
||||
text-decoration: underline; /* 2 */ |
||||
text-decoration: underline dotted; /* 2 */ |
||||
} |
||||
|
||||
/** |
||||
* Prevent the duplicate application of `bolder` by the next rule in Safari 6. |
||||
*/ |
||||
|
||||
b, |
||||
strong { |
||||
font-weight: inherit; |
||||
} |
||||
|
||||
/** |
||||
* Add the correct font weight in Chrome, Edge, and Safari. |
||||
*/ |
||||
|
||||
b, |
||||
strong { |
||||
font-weight: bolder; |
||||
} |
||||
|
||||
/** |
||||
* 1. Correct the inheritance and scaling of font size in all browsers. |
||||
* 2. Correct the odd `em` font sizing in all browsers. |
||||
*/ |
||||
|
||||
code, |
||||
kbd, |
||||
samp { |
||||
font-family: monospace, monospace; /* 1 */ |
||||
font-size: 1em; /* 2 */ |
||||
} |
||||
|
||||
/** |
||||
* Add the correct font style in Android 4.3-. |
||||
*/ |
||||
|
||||
dfn { |
||||
font-style: italic; |
||||
} |
||||
|
||||
/** |
||||
* Add the correct background and color in IE 9-. |
||||
*/ |
||||
|
||||
mark { |
||||
background-color: #ff0; |
||||
color: #000; |
||||
} |
||||
|
||||
/** |
||||
* Add the correct font size in all browsers. |
||||
*/ |
||||
|
||||
small { |
||||
font-size: 80%; |
||||
} |
||||
|
||||
/** |
||||
* Prevent `sub` and `sup` elements from affecting the line height in |
||||
* all browsers. |
||||
*/ |
||||
|
||||
sub, |
||||
sup { |
||||
font-size: 75%; |
||||
line-height: 0; |
||||
position: relative; |
||||
vertical-align: baseline; |
||||
} |
||||
|
||||
sub { |
||||
bottom: -0.25em; |
||||
} |
||||
|
||||
sup { |
||||
top: -0.5em; |
||||
} |
||||
|
||||
/* Embedded content |
||||
========================================================================== */ |
||||
|
||||
/** |
||||
* Add the correct display in IE 9-. |
||||
*/ |
||||
|
||||
audio, |
||||
video { |
||||
display: inline-block; |
||||
} |
||||
|
||||
/** |
||||
* Add the correct display in iOS 4-7. |
||||
*/ |
||||
|
||||
audio:not([controls]) { |
||||
display: none; |
||||
height: 0; |
||||
} |
||||
|
||||
/** |
||||
* Remove the border on images inside links in IE 10-. |
||||
*/ |
||||
|
||||
img { |
||||
border-style: none; |
||||
} |
||||
|
||||
/** |
||||
* Hide the overflow in IE. |
||||
*/ |
||||
|
||||
svg:not(:root) { |
||||
overflow: hidden; |
||||
} |
||||
|
||||
/* Forms |
||||
========================================================================== */ |
||||
|
||||
/** |
||||
* 1. Change the font styles in all browsers (opinionated). |
||||
* 2. Remove the margin in Firefox and Safari. |
||||
*/ |
||||
|
||||
button, |
||||
input, |
||||
optgroup, |
||||
select, |
||||
textarea { |
||||
font-family: sans-serif; /* 1 */ |
||||
font-size: 100%; /* 1 */ |
||||
line-height: 1.15; /* 1 */ |
||||
margin: 0; /* 2 */ |
||||
} |
||||
|
||||
/** |
||||
* Show the overflow in IE. |
||||
* 1. Show the overflow in Edge. |
||||
*/ |
||||
|
||||
button, |
||||
input { /* 1 */ |
||||
overflow: visible; |
||||
} |
||||
|
||||
/** |
||||
* Remove the inheritance of text transform in Edge, Firefox, and IE. |
||||
* 1. Remove the inheritance of text transform in Firefox. |
||||
*/ |
||||
|
||||
button, |
||||
select { /* 1 */ |
||||
text-transform: none; |
||||
} |
||||
|
||||
/** |
||||
* 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` |
||||
* controls in Android 4. |
||||
* 2. Correct the inability to style clickable types in iOS and Safari. |
||||
*/ |
||||
|
||||
button, |
||||
html [type="button"], /* 1 */ |
||||
[type="reset"], |
||||
[type="submit"] { |
||||
-webkit-appearance: button; /* 2 */ |
||||
} |
||||
|
||||
/** |
||||
* Remove the inner border and padding in Firefox. |
||||
*/ |
||||
|
||||
button::-moz-focus-inner, |
||||
[type="button"]::-moz-focus-inner, |
||||
[type="reset"]::-moz-focus-inner, |
||||
[type="submit"]::-moz-focus-inner { |
||||
border-style: none; |
||||
padding: 0; |
||||
} |
||||
|
||||
/** |
||||
* Restore the focus styles unset by the previous rule. |
||||
*/ |
||||
|
||||
button:-moz-focusring, |
||||
[type="button"]:-moz-focusring, |
||||
[type="reset"]:-moz-focusring, |
||||
[type="submit"]:-moz-focusring { |
||||
outline: 1px dotted ButtonText; |
||||
} |
||||
|
||||
/** |
||||
* Correct the padding in Firefox. |
||||
*/ |
||||
|
||||
fieldset { |
||||
padding: 0.35em 0.75em 0.625em; |
||||
} |
||||
|
||||
/** |
||||
* 1. Correct the text wrapping in Edge and IE. |
||||
* 2. Correct the color inheritance from `fieldset` elements in IE. |
||||
* 3. Remove the padding so developers are not caught out when they zero out |
||||
* `fieldset` elements in all browsers. |
||||
*/ |
||||
|
||||
legend { |
||||
box-sizing: border-box; /* 1 */ |
||||
color: inherit; /* 2 */ |
||||
display: table; /* 1 */ |
||||
max-width: 100%; /* 1 */ |
||||
padding: 0; /* 3 */ |
||||
white-space: normal; /* 1 */ |
||||
} |
||||
|
||||
/** |
||||
* 1. Add the correct display in IE 9-. |
||||
* 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. |
||||
*/ |
||||
|
||||
progress { |
||||
display: inline-block; /* 1 */ |
||||
vertical-align: baseline; /* 2 */ |
||||
} |
||||
|
||||
/** |
||||
* Remove the default vertical scrollbar in IE. |
||||
*/ |
||||
|
||||
textarea { |
||||
overflow: auto; |
||||
} |
||||
|
||||
/** |
||||
* 1. Add the correct box sizing in IE 10-. |
||||
* 2. Remove the padding in IE 10-. |
||||
*/ |
||||
|
||||
[type="checkbox"], |
||||
[type="radio"] { |
||||
box-sizing: border-box; /* 1 */ |
||||
padding: 0; /* 2 */ |
||||
} |
||||
|
||||
/** |
||||
* Correct the cursor style of increment and decrement buttons in Chrome. |
||||
*/ |
||||
|
||||
[type="number"]::-webkit-inner-spin-button, |
||||
[type="number"]::-webkit-outer-spin-button { |
||||
height: auto; |
||||
} |
||||
|
||||
/** |
||||
* 1. Correct the odd appearance in Chrome and Safari. |
||||
* 2. Correct the outline style in Safari. |
||||
*/ |
||||
|
||||
[type="search"] { |
||||
-webkit-appearance: textfield; /* 1 */ |
||||
outline-offset: -2px; /* 2 */ |
||||
} |
||||
|
||||
/** |
||||
* Remove the inner padding and cancel buttons in Chrome and Safari on macOS. |
||||
*/ |
||||
|
||||
[type="search"]::-webkit-search-cancel-button, |
||||
[type="search"]::-webkit-search-decoration { |
||||
-webkit-appearance: none; |
||||
} |
||||
|
||||
/** |
||||
* 1. Correct the inability to style clickable types in iOS and Safari. |
||||
* 2. Change font properties to `inherit` in Safari. |
||||
*/ |
||||
|
||||
::-webkit-file-upload-button { |
||||
-webkit-appearance: button; /* 1 */ |
||||
font: inherit; /* 2 */ |
||||
} |
||||
|
||||
/* Interactive |
||||
========================================================================== */ |
||||
|
||||
/* |
||||
* Add the correct display in IE 9-. |
||||
* 1. Add the correct display in Edge, IE, and Firefox. |
||||
*/ |
||||
|
||||
details, /* 1 */ |
||||
menu { |
||||
display: block; |
||||
} |
||||
|
||||
/* |
||||
* Add the correct display in all browsers. |
||||
*/ |
||||
|
||||
summary { |
||||
display: list-item; |
||||
} |
||||
|
||||
/* Scripting |
||||
========================================================================== */ |
||||
|
||||
/** |
||||
* Add the correct display in IE 9-. |
||||
*/ |
||||
|
||||
canvas { |
||||
display: inline-block; |
||||
} |
||||
|
||||
/** |
||||
* Add the correct display in IE. |
||||
*/ |
||||
|
||||
template { |
||||
display: none; |
||||
} |
||||
|
||||
/* Hidden |
||||
========================================================================== */ |
||||
|
||||
/** |
||||
* Add the correct display in IE 10-. |
||||
*/ |
||||
|
||||
[hidden] { |
||||
display: none; |
||||
} |
@ -0,0 +1,90 @@
|
||||
* { |
||||
font-family: Helvetica Neue, Helvetica, sans-serif; |
||||
box-sizing: border-box; |
||||
} |
||||
html, body { |
||||
height: 100%; |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
html { |
||||
font-size: 16px; |
||||
} |
||||
body { |
||||
background: #3f3552; |
||||
color: #fefdfd; |
||||
font-size: 100%; |
||||
font-weight: 300; |
||||
line-height: 1.3; |
||||
/**/ |
||||
-webkit-font-smoothing: antialiased; |
||||
} |
||||
|
||||
header { |
||||
margin: 0.5em; |
||||
text-align: center; |
||||
} |
||||
header h1 { |
||||
font-size: 3em; |
||||
} |
||||
header h2 { |
||||
text-transform: capitalize; |
||||
color: #6f6f6f; |
||||
} |
||||
|
||||
button, button:hover, button:focus { |
||||
background-color: #CB4D59; |
||||
background-image: none; |
||||
border: 0; |
||||
border-bottom: 3px solid #8B121E; |
||||
border-radius: 0; |
||||
color: #FEFDFD; |
||||
cursor: pointer; |
||||
display: inline-block; |
||||
font-size: 14px; |
||||
font-weight: 400; |
||||
line-height: 1.42857; |
||||
outline: none; |
||||
padding: 5px 20px; |
||||
position: relative; |
||||
text-decoration: none; |
||||
vertical-align: top; |
||||
white-space: nowrap; |
||||
-moz-user-select: none; |
||||
-webkit-appearance: none; |
||||
} |
||||
button.play, button.play:hover, button.play:focus { |
||||
background: #18AE90; |
||||
border-bottom: 3px solid #017F66; |
||||
padding: 10px 30px; |
||||
} |
||||
button.play:before { |
||||
content: ""; |
||||
background: url('../img/play.svg') no-repeat center center; |
||||
font-size: 1em; |
||||
height: 30px; |
||||
left: 0; |
||||
position: absolute; |
||||
top: 5px; |
||||
width: 30px; |
||||
} |
||||
button.play.playing:before { |
||||
background: url('../img/stop.svg') no-repeat center center; |
||||
} |
||||
button:active { |
||||
top:3px; |
||||
border-bottom: 0; |
||||
} |
||||
|
||||
.sounds ul { |
||||
list-style-type: none; |
||||
} |
||||
.sounds ul li { |
||||
display: inline-block; |
||||
height: 43px; |
||||
line-height: 43px; |
||||
margin: 1em; |
||||
overflow: hidden; |
||||
text-overflow: ellipsis; |
||||
position: relative; |
||||
} |
@ -0,0 +1,61 @@
|
||||
<!doctype html> |
||||
<html class="no-js" lang="en"> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
<title>Ghetto Blastr</title> |
||||
<meta name="description" content=""> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||
|
||||
<link rel="manifest" href="site.webmanifest"> |
||||
<link rel="apple-touch-icon" href="icon.png"> |
||||
|
||||
<link rel="stylesheet" href="css/normalize.css"> |
||||
<link rel="stylesheet" href="css/main.css"> |
||||
<link rel="stylesheet" href="css/style.css"> |
||||
</head> |
||||
|
||||
<body> |
||||
<!--[if lte IE 9]> |
||||
<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="https://mozilla.org/firefox/">upgrade your browser</a> to improve your experience and security.</p> |
||||
<![endif]--> |
||||
<div id="soundboard"> |
||||
<header> |
||||
<h1>Ghetto Blastr</h1> |
||||
<template> |
||||
<h2>{{ title }}</h2> |
||||
</template> |
||||
</header> |
||||
|
||||
<section class="loading" v-if="!ready"> |
||||
<img src="img/loader.gif" alt="Loading" /> |
||||
</section> |
||||
|
||||
<section class="sounds" v-else> |
||||
<ul> |
||||
<template v-for="asset in assets"> |
||||
<li> |
||||
<ghetto-sound |
||||
v-bind:asset="asset" |
||||
v-on:ghetto-playsound="stopAllPlayingSounds" |
||||
ref="sound" |
||||
></ghetto-sound> |
||||
</li> |
||||
</template> |
||||
</ul> |
||||
</section> |
||||
</div> |
||||
|
||||
<script> |
||||
// https://github.com/typicode/pegasus |
||||
//0.3.5 |
||||
function pegasus(a,b,c){return c=new XMLHttpRequest,c.open("GET",a),a=[],pegasus.timeout&&(c.timeout=pegasus.timeout),c.ontimeout=function(a){b=a},c.onreadystatechange=c.then=function(d,e,f,g){if(d&&d.call&&(a=[,d,e]),b&&a[2]&&a[2](b,c),4==c.readyState&&(f=a[0|c.status/200])){try{g=JSON.parse(c.responseText)}catch(a){g=null}f(g,c)}},c.send(),c} |
||||
</script> |
||||
<script> |
||||
var GHETTO_SOURCE_REQUEST = pegasus('source.json'); |
||||
</script> |
||||
|
||||
<script src="lib/vue.min.js"></script> |
||||
<script src="js/main.js"></script> |
||||
</body> |
||||
</html> |
@ -0,0 +1,66 @@
|
||||
(function () { |
||||
|
||||
Vue.component('ghetto-sound', { |
||||
template: '<button v-bind:class="[\'play\', { playing: playing }]" v-on:click="click">{{ asset.name }}</button>', |
||||
props: { |
||||
asset: Object, |
||||
}, |
||||
data: function () { |
||||
return { |
||||
audio: null, |
||||
playing: false, |
||||
}; |
||||
}, |
||||
methods: { |
||||
click: function (event) { |
||||
if (this.playing) { |
||||
this.stop(); |
||||
} |
||||
else { |
||||
this.play(); |
||||
} |
||||
}, |
||||
play: function () { |
||||
// Make sure the actual audio element exists.
|
||||
if (!this.audio) { |
||||
this.audio = new Audio('audio/' + this.asset.resource); |
||||
} |
||||
|
||||
// Emit an event so that other playing sounds can be stopped.
|
||||
this.$emit('ghetto-playsound'); |
||||
|
||||
this.audio.load(); |
||||
this.audio.play(); |
||||
this.audio.onended = function () { |
||||
this.playing = false; |
||||
}.bind(this); |
||||
this.playing = true; |
||||
}, |
||||
stop: function () { |
||||
if (this.audio) { |
||||
this.audio.pause(); |
||||
this.playing = false; |
||||
} |
||||
}, |
||||
}, |
||||
}); |
||||
|
||||
GHETTO_SOURCE_REQUEST.then(function (source) { |
||||
var data = Object.assign({}, source, { ready: true }); |
||||
var app = new Vue({ |
||||
el: '#soundboard', |
||||
data: data, |
||||
methods: { |
||||
stopAllPlayingSounds: function () { |
||||
// Find all sounds currently playing and stop them.
|
||||
this.$refs.sound.forEach(function (item) { |
||||
if (item.playing) { |
||||
item.stop(); |
||||
} |
||||
}); |
||||
}, |
||||
} |
||||
}); |
||||
}); |
||||
|
||||
})(); |
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue