diff --git a/app/Http/Controllers/tmp/test.png b/app/Http/Controllers/tmp/test.png index ad251a5..56dee62 100644 Binary files a/app/Http/Controllers/tmp/test.png and b/app/Http/Controllers/tmp/test.png differ diff --git a/public/css/glitch.css b/public/css/glitch.css index 746e051..d9bedc2 100644 --- a/public/css/glitch.css +++ b/public/css/glitch.css @@ -546,7 +546,7 @@ table.table.table-hover.table-condensed { padding: 5px; border: 1px solid black; border-radius: 5px; - background: linear-gradient(to top, #0a0a0aa3 0%, #163f42a6 100%); + background: linear-gradient(to top, #0a0a0aa3 0%, #54062726 100%); } .profilheader { @@ -1087,4 +1087,15 @@ div#tag-display { .nav>li.addtagsy>a:hover { color: #00fbff; +} + +/* Admin shizzle */ +a.sirx, a[href="https://w0bm.com/user/sirx"] { + color: #ff0099 !important; + text-transform: uppercase; + text-shadow: 1px 1px 2px #ff00c8, 0px -2px 0px black, 2px 0px #6eff00; + font-family: vcr; + vertical-align: middle; + padding-right: 5px; + padding-left: 5px; } \ No newline at end of file diff --git a/public/css/w0bmcustom.css b/public/css/w0bmcustom.css index 03c0ba8..3bf8198 100644 --- a/public/css/w0bmcustom.css +++ b/public/css/w0bmcustom.css @@ -4039,4 +4039,16 @@ repeating-radial-gradient(black, transparent 100px) .webchat > iframe { width: 100%; min-height: 70vh; +} + +/* fancy admin shizzle */ +.sirx { + color: #ff0099 !important; + text-transform: uppercase; + text-shadow: 1px 1px 2px #ff00c8, 0px -2px 0px black, 2px 0px #6eff00; + font-family: vcr; + padding-right: 0px; + padding-left: 0px; + font-size: 17px; + vertical-align: middle; } \ No newline at end of file diff --git a/public/cyberplaceholder.mp4 b/public/cyberplaceholder.mp4 new file mode 100644 index 0000000..d97a832 Binary files /dev/null and b/public/cyberplaceholder.mp4 differ diff --git a/public/loop/VideoLoop.js b/public/loop/VideoLoop.js new file mode 100644 index 0000000..d43c8d9 --- /dev/null +++ b/public/loop/VideoLoop.js @@ -0,0 +1,134 @@ +// +// VideoLoop.js - Provides (almost) seamless video looping and overcomes HTML 5 video loop attribute pause +// By Mark Westguard (http://www.westguardsolutions.com) +// + +function VideoLoop(id) { + + var about = { + + Version: 0.1, + Author: "Mark Westguard", + Created: "09/01/2015", + Updated: "09/02/2015" + }; + + if(id) { + + if(window === this) { return new VideoLoop(id); } + + // Configuration + this.length = 1000; // Precise (as you can) length of video in milliseconds + this.zIndex = 10000; // Z-Index of video (z-index of +1 and -1 this value will also be used) + this.transitionDelay = 0; // Video transition delay + this.paths = []; + this.types = []; + + // Variables + this.id = id; + this.idCurrent = 1; // Current video playing + this.step = 0; // Loading step + + return this; + + } else { + + return about; + } +} + +VideoLoop.prototype = { + + // Initialize + init: function() { + + // Create 2 videos + for(var i=1; i<=2; i++) { + + this.create(document.getElementById(this.id), this.id, i); + } + }, + + // Check if all checks are complete + check: function(obj, id) { + + // Increment video steps + obj.step++; + + // When all four conditions are met, start playing video 1 + if(obj.step == 4) { document.getElementById(id + '1').play(); } + }, + + play: function(id) { + + // Work out alternate video object + this.idCurrent = (((this.idCurrent - 2) * -1) + 1); + var idCurrentAlt = (((this.idCurrent - 2) * -1) + 1); + + // Work out video objects + obj1 = document.getElementById(id + this.idCurrent); + obj2 = document.getElementById(id + idCurrentAlt); + + // Play video (But do not show it yet) + obj1.play(); + + // ... then after transition delay ... + _self = this; + setTimeout(function() { + + // Video transition + obj2.style.zIndex = _self.zIndex - 1; // Move alt video to position -1 (Behind video 1) + obj1.style.zIndex = _self.zIndex + 1; // Move video to position 1 + obj2.style.zIndex = _self.zIndex; // Move alt video to position 0 ready for next transition + + // Set up video 2 ready to play + obj2.pause(); + obj2.currentTime = 0; + + }, this.transitionDelay); + }, + + create: function(obj, id, index) { + + // Create video object + var videoObj = document.createElement('video'); + videoObj.id = id + index; + + // Create video source(s) + for(var i=0; i + + +Blühende Nacht seamless html5 loop + + + + + + +
+ <- back + Babbe Music – Blühende Nacht + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/public/loop/flowering_nights/nacht6.mp4 b/public/loop/flowering_nights/nacht6.mp4 new file mode 100644 index 0000000..9fec589 Binary files /dev/null and b/public/loop/flowering_nights/nacht6.mp4 differ diff --git a/public/loop/flowering_nights/nacht6.ogg b/public/loop/flowering_nights/nacht6.ogg new file mode 100644 index 0000000..1b0d084 Binary files /dev/null and b/public/loop/flowering_nights/nacht6.ogg differ diff --git a/public/loop/flowering_nights/style.css b/public/loop/flowering_nights/style.css new file mode 100644 index 0000000..e95916c --- /dev/null +++ b/public/loop/flowering_nights/style.css @@ -0,0 +1,117 @@ +html, body { + width: 100%; + height: 100%; +} + +* { + margin: 0px; + padding: 0px; + overflow: hidden; +} + +body { + background: black; +} + +#myVideoLoop video { + position: absolute; +} + +div#myVideoLoop { + height: inherit; + display: flex; + justify-content: center; +} + +div#html5canloop { + color: white; + position: absolute; + bottom: 0; + font-weight: bold; + padding: 10px; + background: #202020; +} + +button#hidden_default { + visibility: hidden; +} + +.source_info { + color: white; + width: inherit; + background: #0d0d0d; + position: fixed; + z-index: 1; + padding: 10px; +} + +span#sinfo { + padding: 10px; + font-style: italic; + vertical-align: super; +} + + #myVideoLoop { + position: fixed; + top: 0; right: 0; bottom: 0; left: 0; + overflow: hidden; + } + #myVideoLoop > video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + @media (min-aspect-ratio: 16/9) { + #myVideoLoop > video { height: 300%; top: -100%; } + } + @media (max-aspect-ratio: 16/9) { + #myVideoLoop > video { width: 300%; left: -100%; } + } + @supports (object-fit: cover) { + #myVideoLoop > video { + top: 0; left: 0; + width: 100%; height: 100%; + object-fit: cover; + } + } + +input#volume { + vertical-align: sub; + margin-left: 10px; +} + +/*******/ +input[type=range] { + height: 31px; + -webkit-appearance: none; + background: #0d0d0d; +} + +input[type=range]::-webkit-slider-runnable-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #f51945; + border-radius: 4px; + border: 1px solid #f51945; +} + +input[type=range]::-webkit-slider-thumb { + height: 20px; + width: 20px; + border-radius: 10px; + background: #1d1c1c; + cursor: pointer; + -webkit-appearance: none; + margin-top: -8.5px; + border: 2px solid white; + margin-left: 0px; +} + +.source_info { + vertical-align: super; + display: flex; + align-items: center; +} \ No newline at end of file diff --git a/public/loop/flowering_nights/yPXnf.js b/public/loop/flowering_nights/yPXnf.js new file mode 100644 index 0000000..026010b --- /dev/null +++ b/public/loop/flowering_nights/yPXnf.js @@ -0,0 +1,87 @@ +(function() { + + function loopify(uri,cb) { + + var context = new (window.AudioContext || window.webkitAudioContext)(), + request = new XMLHttpRequest(); + + request.responseType = "arraybuffer"; + request.open("GET", uri, true); + + // XHR failed + request.onerror = function() { + cb(new Error("Couldn't load audio from " + uri)); + }; + + // XHR complete + request.onload = function() { + context.decodeAudioData(request.response,success,function(err){ + // Audio was bad + cb(new Error("Couldn't decode audio from " + uri)); + }); + }; + + request.send(); + + function success(buffer) { + + var source; + + function play() { + + // Stop if it's already playing + stop(); + + // Create a new source (can't replay an existing source) + source = context.createBufferSource(); + source.connect(context.destination); + + var gainNode = context.createGain(); + gainNode.gain.value = -0.8; + gainNode.connect(context.destination); + source.connect(gainNode); + + document.getElementById('volume').addEventListener('change', function() { + gainNode.gain.value = this.value; + }); + + + // Set the buffer + source.buffer = buffer; + source.loop = true; + + // Play it + source.start(0); + + } + + function stop() { + + // Stop and clear if it's playing + if (source) { + source.stop(); + source = null; + } + + } + + cb(null,{ + play: play, + stop: stop + }); + + } + + } + + loopify.version = "0.1"; + + if (typeof define === "function" && define.amd) { + define(function() { return loopify; }); + } else if (typeof module === "object" && module.exports) { + module.exports = loopify; + } else { + this.loopify = loopify; + } + +})(); diff --git a/public/loop/index.html b/public/loop/index.html new file mode 100644 index 0000000..e52ef17 --- /dev/null +++ b/public/loop/index.html @@ -0,0 +1,113 @@ + + + + + + + +
+ Blühende Nacht + 1, 2 Polizei + Shake your booty! +
+ + + + + + diff --git a/public/loop/loopify.js b/public/loop/loopify.js new file mode 100644 index 0000000..fb8f79f --- /dev/null +++ b/public/loop/loopify.js @@ -0,0 +1,87 @@ +(function() { + + function loopify(uri,cb) { + + var context = new (window.AudioContext || window.webkitAudioContext)(), + request = new XMLHttpRequest(); + + request.responseType = "arraybuffer"; + request.open("GET", uri, true); + + // XHR failed + request.onerror = function() { + cb(new Error("Couldn't load audio from " + uri)); + }; + + // XHR complete + request.onload = function() { + context.decodeAudioData(request.response,success,function(err){ + // Audio was bad + cb(new Error("Couldn't decode audio from " + uri)); + }); + }; + + request.send(); + + function success(buffer) { + + var source; + + function play() { + + // Stop if it's already playing + stop(); + + // Create a new source (can't replay an existing source) + source = context.createBufferSource(); + source.connect(context.destination); + + var gainNode = context.createGain(); + gainNode.gain.value = -0.8; + gainNode.connect(context.destination); + source.connect(gainNode); + + document.getElementById('volume').addEventListener('change', function() { + gainNode.gain.value = this.value; + }); + + + // Set the buffer + source.buffer = buffer; + source.loop = true; + + // Play it + source.start(0); + + } + + function stop() { + + // Stop and clear if it's playing + if (source) { + source.stop(); + source = null; + } + + } + + cb(null,{ + play: play, + stop: stop + }); + + } + + } + + loopify.version = "0.1"; + + if (typeof define === "function" && define.amd) { + define(function() { return loopify; }); + } else if (typeof module === "object" && module.exports) { + module.exports = loopify; + } else { + this.loopify = loopify; + } + +})(); \ No newline at end of file diff --git a/public/loop/polizei/alt/VideoLoop.js b/public/loop/polizei/alt/VideoLoop.js new file mode 100644 index 0000000..0bdce9d --- /dev/null +++ b/public/loop/polizei/alt/VideoLoop.js @@ -0,0 +1,133 @@ +// +// VideoLoop.js - Provides (almost) seamless video looping and overcomes HTML 5 video loop attribute pause +// By Mark Westguard (http://www.westguardsolutions.com) +// + +function VideoLoop(id) { + + var about = { + + Version: 0.1, + Author: "Mark Westguard", + Created: "09/01/2015", + Updated: "09/02/2015" + }; + + if(id) { + + if(window === this) { return new VideoLoop(id); } + + // Configuration + this.length = 1000; // Precise (as you can) length of video in milliseconds + this.zIndex = 10000; // Z-Index of video (z-index of +1 and -1 this value will also be used) + this.transitionDelay = 0; // Video transition delay + this.paths = []; + this.types = []; + // Variables + this.id = id; + this.idCurrent = 1; // Current video playing + this.step = 0; // Loading step + return this; + + } else { + + return about; + } +} + +VideoLoop.prototype = { + + // Initialize + init: function() { + + // Create 2 videos + for(var i=1; i<=2; i++) { + + this.create(document.getElementById(this.id), this.id, i); + } + }, + + // Check if all checks are complete + check: function(obj, id) { + + // Increment video steps + obj.step++; + + // When all four conditions are met, start playing video 1 + if(obj.step == 4) { document.getElementById(id + '1').play(); } + }, + + play: function(id) { + + // Work out alternate video object + this.idCurrent = (((this.idCurrent - 2) * -1) + 1); + var idCurrentAlt = (((this.idCurrent - 2) * -1) + 1); + + // Work out video objects + obj1 = document.getElementById(id + this.idCurrent); + obj2 = document.getElementById(id + idCurrentAlt); + + // Play video (But do not show it yet) + obj1.play(); + + // ... then after transition delay ... + _self = this; + setTimeout(function() { + + // Video transition + obj2.style.zIndex = _self.zIndex - 1; // Move alt video to position -1 (Behind video 1) + obj1.style.zIndex = _self.zIndex + 1; // Move video to position 1 + obj2.style.zIndex = _self.zIndex; // Move alt video to position 0 ready for next transition + + // Set up video 2 ready to play + obj2.pause(); + obj2.currentTime = 0; + + }, this.transitionDelay); + }, + + create: function(obj, id, index) { + + // Create video object + var videoObj = document.createElement('video'); + videoObj.setAttribute("muted" , "true"); + videoObj.setAttribute("preload" , "auto"); + videoObj.id = id + index; + // Create video source(s) + for(var i=0; i + + +Blühende Nacht seamless html5 loop + + + + + + +
+ <- back + Eins Zwei Polizei + +
+
+
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/loop/polizei/alt/style.css b/public/loop/polizei/alt/style.css new file mode 100644 index 0000000..1fd995e --- /dev/null +++ b/public/loop/polizei/alt/style.css @@ -0,0 +1,117 @@ +html, body { + width: 100%; + height: 100%; +} + +* { + margin: 0px; + padding: 0px; + overflow: hidden; +} + +body { + background: black; +} + +#myVideoLoop video { + position: absolute; +} + +div#myVideoLoop { + height: inherit; + display: flex; + justify-content: center; +} + +div#html5canloop { + color: white; + position: absolute; + bottom: 0; + font-weight: bold; + padding: 10px; + background: #202020; +} + +button#hidden_default { + visibility: hidden; +} + +.source_info { + color: white; + width: inherit; + background: #0d0d0d; + position: fixed; + z-index: 1; + padding: 10px; +} + +span#sinfo { + padding: 10px; + font-style: italic; + vertical-align: super; +} + + #myVideoLoop { + position: fixed; + top: 0; right: 0; bottom: 0; left: 0; + overflow: hidden; + } + #myVideoLoop > video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + @media (min-aspect-ratio: 16/9) { + #myVideoLoop > video { height: 300%; top: -100%; } + } + @media (max-aspect-ratio: 16/9) { + #myVideoLoop > video { width: 300%; left: -100%; } + } + @supports (object-fit: cover) { + #myVideoLoop > video { + top: 0; left: 0; + width: 100%; height: 100%; + object-fit: contain; + } + } + +input#volume { + vertical-align: sub; + margin-left: 10px; +} + +/*******/ +input[type=range] { + height: 31px; + -webkit-appearance: none; + background: #0d0d0d; +} + +input[type=range]::-webkit-slider-runnable-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #f51945; + border-radius: 4px; + border: 1px solid #f51945; +} + +input[type=range]::-webkit-slider-thumb { + height: 20px; + width: 20px; + border-radius: 10px; + background: #1d1c1c; + cursor: pointer; + -webkit-appearance: none; + margin-top: -8.5px; + border: 2px solid white; + margin-left: 0px; +} + +.source_info { + vertical-align: super; + display: flex; + align-items: center; +} \ No newline at end of file diff --git a/public/loop/polizei/alt/wuxtjw.png b/public/loop/polizei/alt/wuxtjw.png new file mode 100644 index 0000000..600a32e Binary files /dev/null and b/public/loop/polizei/alt/wuxtjw.png differ diff --git a/public/loop/polizei/alt/yPXnf.js b/public/loop/polizei/alt/yPXnf.js new file mode 100644 index 0000000..026010b --- /dev/null +++ b/public/loop/polizei/alt/yPXnf.js @@ -0,0 +1,87 @@ +(function() { + + function loopify(uri,cb) { + + var context = new (window.AudioContext || window.webkitAudioContext)(), + request = new XMLHttpRequest(); + + request.responseType = "arraybuffer"; + request.open("GET", uri, true); + + // XHR failed + request.onerror = function() { + cb(new Error("Couldn't load audio from " + uri)); + }; + + // XHR complete + request.onload = function() { + context.decodeAudioData(request.response,success,function(err){ + // Audio was bad + cb(new Error("Couldn't decode audio from " + uri)); + }); + }; + + request.send(); + + function success(buffer) { + + var source; + + function play() { + + // Stop if it's already playing + stop(); + + // Create a new source (can't replay an existing source) + source = context.createBufferSource(); + source.connect(context.destination); + + var gainNode = context.createGain(); + gainNode.gain.value = -0.8; + gainNode.connect(context.destination); + source.connect(gainNode); + + document.getElementById('volume').addEventListener('change', function() { + gainNode.gain.value = this.value; + }); + + + // Set the buffer + source.buffer = buffer; + source.loop = true; + + // Play it + source.start(0); + + } + + function stop() { + + // Stop and clear if it's playing + if (source) { + source.stop(); + source = null; + } + + } + + cb(null,{ + play: play, + stop: stop + }); + + } + + } + + loopify.version = "0.1"; + + if (typeof define === "function" && define.amd) { + define(function() { return loopify; }); + } else if (typeof module === "object" && module.exports) { + module.exports = loopify; + } else { + this.loopify = loopify; + } + +})(); diff --git a/public/loop/polizei/alt/yutmul.flac b/public/loop/polizei/alt/yutmul.flac new file mode 100644 index 0000000..3bc344d Binary files /dev/null and b/public/loop/polizei/alt/yutmul.flac differ diff --git a/public/loop/polizei/gfdgsgds.mp4 b/public/loop/polizei/gfdgsgds.mp4 new file mode 100644 index 0000000..2a39c67 Binary files /dev/null and b/public/loop/polizei/gfdgsgds.mp4 differ diff --git a/public/loop/polizei/ihxtyu.mp4 b/public/loop/polizei/ihxtyu.mp4 new file mode 100644 index 0000000..ca0fb06 Binary files /dev/null and b/public/loop/polizei/ihxtyu.mp4 differ diff --git a/public/loop/polizei/index.html b/public/loop/polizei/index.html new file mode 100644 index 0000000..604d383 --- /dev/null +++ b/public/loop/polizei/index.html @@ -0,0 +1,65 @@ + + + + + + + + + +
+ + + diff --git a/public/loop/polizei/loopify.js b/public/loop/polizei/loopify.js new file mode 100644 index 0000000..fa5717d --- /dev/null +++ b/public/loop/polizei/loopify.js @@ -0,0 +1,77 @@ +(function() { + + function loopify(uri,cb) { + + var context = new (window.AudioContext || window.webkitAudioContext)(), + request = new XMLHttpRequest(); + + request.responseType = "arraybuffer"; + request.open("GET", uri, true); + + // XHR failed + request.onerror = function() { + cb(new Error("Couldn't load audio from " + uri)); + }; + + // XHR complete + request.onload = function() { + context.decodeAudioData(request.response,success,function(err){ + // Audio was bad + cb(new Error("Couldn't decode audio from " + uri)); + }); + }; + + request.send(); + + function success(buffer) { + + var source; + + function play() { + + // Stop if it's already playing + stop(); + + // Create a new source (can't replay an existing source) + source = context.createBufferSource(); + source.connect(context.destination); + + // Set the buffer + source.buffer = buffer; + source.loop = true; + + // Play it + source.start(0); + + } + + function stop() { + + // Stop and clear if it's playing + if (source) { + source.stop(); + source = null; + } + + } + + cb(null,{ + play: play, + stop: stop + }); + + } + + } + + loopify.version = "0.1"; + + if (typeof define === "function" && define.amd) { + define(function() { return loopify; }); + } else if (typeof module === "object" && module.exports) { + module.exports = loopify; + } else { + this.loopify = loopify; + } + +})(); diff --git a/public/loop/polizei/polis.mp4 b/public/loop/polizei/polis.mp4 new file mode 100644 index 0000000..b3f77c5 Binary files /dev/null and b/public/loop/polizei/polis.mp4 differ diff --git a/public/loop/polizei/polizei.mp4 b/public/loop/polizei/polizei.mp4 new file mode 100644 index 0000000..a0d015a Binary files /dev/null and b/public/loop/polizei/polizei.mp4 differ diff --git a/public/loop/polizei/polizei.webp b/public/loop/polizei/polizei.webp new file mode 100644 index 0000000..6c8cc10 Binary files /dev/null and b/public/loop/polizei/polizei.webp differ diff --git a/public/loop/polizei/polizei5fps.gif b/public/loop/polizei/polizei5fps.gif new file mode 100644 index 0000000..f64b507 Binary files /dev/null and b/public/loop/polizei/polizei5fps.gif differ diff --git a/public/loop/polizei/polizei5fps.webp b/public/loop/polizei/polizei5fps.webp new file mode 100644 index 0000000..0756fd8 Binary files /dev/null and b/public/loop/polizei/polizei5fps.webp differ diff --git a/public/loop/polizei/polizeiloop.ogg b/public/loop/polizei/polizeiloop.ogg new file mode 100644 index 0000000..f56b4c4 Binary files /dev/null and b/public/loop/polizei/polizeiloop.ogg differ diff --git a/public/loop/polizei/videoloop.js b/public/loop/polizei/videoloop.js new file mode 100644 index 0000000..82eaece --- /dev/null +++ b/public/loop/polizei/videoloop.js @@ -0,0 +1,135 @@ +// +// VideoLoop.js - Provides (almost) seamless video looping and overcomes HTML 5 video loop attribute pause +// By Mark Westguard (http://www.westguardsolutions.com) +// + +function VideoLoop(id) { + + var about = { + + Version: 0.1, + Author: "Mark Westguard", + Created: "09/01/2015", + Updated: "09/02/2015" + }; + + if(id) { + + if(window === this) { return new VideoLoop(id); } + + // Configuration + this.length = 1000; // Precise (as you can) length of video in milliseconds + this.zIndex = 10000; // Z-Index of video (z-index of +1 and -1 this value will also be used) + this.transitionDelay = 500; // Video transition delay + this.paths = []; + this.types = []; + + // Variables + this.id = id; + this.idCurrent = 1; // Current video playing + this.step = 0; // Loading step + + return this; + + } else { + + return about; + } +} + +VideoLoop.prototype = { + + // Initialize + init: function() { + + // Create 2 videos + for(var i=1; i<=2; i++) { + + this.create(document.getElementById(this.id), this.id, i); + } + }, + + // Check if all checks are complete + check: function(obj, id) { + + // Increment video steps + obj.step++; + + // When all four conditions are met, start playing video 1 + if(obj.step == 4) { document.getElementById(id + '1').play(); } + }, + + play: function(id) { + + // Work out alternate video object + this.idCurrent = (((this.idCurrent - 2) * -1) + 1); + var idCurrentAlt = (((this.idCurrent - 2) * -1) + 1); + + // Work out video objects + obj1 = document.getElementById(id + this.idCurrent); + obj2 = document.getElementById(id + idCurrentAlt); + + // Play video (But do not show it yet) + obj1.play(); + + // ... then after transition delay ... + _self = this; + setTimeout(function() { + + // Video transition + obj2.style.zIndex = _self.zIndex - 1; // Move alt video to position -1 (Behind video 1) + obj1.style.zIndex = _self.zIndex + 1; // Move video to position 1 + obj2.style.zIndex = _self.zIndex; // Move alt video to position 0 ready for next transition + + // Set up video 2 ready to play + obj2.pause(); + obj2.currentTime = 0; + + }, this.transitionDelay); + }, + + create: function(obj, id, index) { + + // Create video object + var videoObj = document.createElement('video'); + videoObj.volume = 0.1; + videoObj.id = id + index; + + // Create video source(s) + for(var i=0; i + + +Eins Zwei Polizei seamless html5 loop + + + + + +
+ Volume +
+ +
+
+
+
+
+ + + + + + + + + + + + + diff --git a/public/loop/russians/oxireh.webm b/public/loop/russians/oxireh.webm new file mode 100644 index 0000000..c6f6608 Binary files /dev/null and b/public/loop/russians/oxireh.webm differ diff --git a/public/loop/russians/style.css b/public/loop/russians/style.css new file mode 100644 index 0000000..f778a49 --- /dev/null +++ b/public/loop/russians/style.css @@ -0,0 +1,143 @@ +html, body { + width: 100%; + height: 100%; +} + +* { + margin: 0px; + padding: 0px; + overflow: hidden; +} + +body { + background: black; +} + +#myVideoLoop video { + position: absolute; +} + +div#myVideoLoop { + width: inherit; + height: inherit; + display: flex; + justify-content: center; +} + +div#html5canloop { + color: white; + position: absolute; + bottom: 0; + font-weight: bold; + padding: 10px; + background: #202020; +} + +button#hidden_default { + visibility: hidden; +} + +.source_info { + color: white; + width: inherit; + background: #0d0d0d; + padding: 10px; +} + +span#sinfo { + padding: 10px; + font-style: italic; + vertical-align: super; +} + +/* #myVideoLoop { + position: fixed; + top: 0; right: 0; bottom: 0; left: 0; + overflow: hidden; + } + #myVideoLoop > video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + @media (min-aspect-ratio: 16/9) { + #myVideoLoop > video { height: 300%; top: -100%; } + } + @media (max-aspect-ratio: 16/9) { + #myVideoLoop > video { width: 300%; left: -100%; } + } + @supports (object-fit: cover) { + #myVideoLoop > video { + top: 0; left: 0; + width: 100%; height: 100%; + object-fit: cover; + } + }*/ + +input#volume { + vertical-align: sub; + margin-left: 10px; +} + +img#rotation_img { + height: 35px; + -webkit-animation: rotation 1s infinite linear; + float: left; + margin-right: 10px; +} + +div#early_alpha { + float: left; +} + +a#home { + color: chartreuse; + font-family: monospace; + text-decoration: none; + font-style: italic; + font-weight: 800; +} + +span#alpha_l00p { + vertical-align: super; +} + +@-webkit-keyframes rotation { + from { + -webkit-transform: rotate(0deg); + } + + to { + -webkit-transform: rotate(359deg); + } +} + +/******* Chrome specific */ +input[type=range] { + height: 31px; + -webkit-appearance: none; + background: #0d0d0d; +} + +input[type=range]::-webkit-slider-runnable-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #f51945; + border-radius: 4px; + border: 1px solid #f51945; +} + +input[type=range]::-webkit-slider-thumb { + height: 20px; + width: 20px; + border-radius: 10px; + background: #1d1c1c; + cursor: pointer; + -webkit-appearance: none; + margin-top: -8.5px; + border: 2px solid white; + margin-left: 0px; +} diff --git a/public/loop/russians/yPXnf.js b/public/loop/russians/yPXnf.js new file mode 100644 index 0000000..026010b --- /dev/null +++ b/public/loop/russians/yPXnf.js @@ -0,0 +1,87 @@ +(function() { + + function loopify(uri,cb) { + + var context = new (window.AudioContext || window.webkitAudioContext)(), + request = new XMLHttpRequest(); + + request.responseType = "arraybuffer"; + request.open("GET", uri, true); + + // XHR failed + request.onerror = function() { + cb(new Error("Couldn't load audio from " + uri)); + }; + + // XHR complete + request.onload = function() { + context.decodeAudioData(request.response,success,function(err){ + // Audio was bad + cb(new Error("Couldn't decode audio from " + uri)); + }); + }; + + request.send(); + + function success(buffer) { + + var source; + + function play() { + + // Stop if it's already playing + stop(); + + // Create a new source (can't replay an existing source) + source = context.createBufferSource(); + source.connect(context.destination); + + var gainNode = context.createGain(); + gainNode.gain.value = -0.8; + gainNode.connect(context.destination); + source.connect(gainNode); + + document.getElementById('volume').addEventListener('change', function() { + gainNode.gain.value = this.value; + }); + + + // Set the buffer + source.buffer = buffer; + source.loop = true; + + // Play it + source.start(0); + + } + + function stop() { + + // Stop and clear if it's playing + if (source) { + source.stop(); + source = null; + } + + } + + cb(null,{ + play: play, + stop: stop + }); + + } + + } + + loopify.version = "0.1"; + + if (typeof define === "function" && define.amd) { + define(function() { return loopify; }); + } else if (typeof module === "object" && module.exports) { + module.exports = loopify; + } else { + this.loopify = loopify; + } + +})(); diff --git a/public/loop/shake/VideoLoop.js b/public/loop/shake/VideoLoop.js new file mode 100644 index 0000000..d43c8d9 --- /dev/null +++ b/public/loop/shake/VideoLoop.js @@ -0,0 +1,134 @@ +// +// VideoLoop.js - Provides (almost) seamless video looping and overcomes HTML 5 video loop attribute pause +// By Mark Westguard (http://www.westguardsolutions.com) +// + +function VideoLoop(id) { + + var about = { + + Version: 0.1, + Author: "Mark Westguard", + Created: "09/01/2015", + Updated: "09/02/2015" + }; + + if(id) { + + if(window === this) { return new VideoLoop(id); } + + // Configuration + this.length = 1000; // Precise (as you can) length of video in milliseconds + this.zIndex = 10000; // Z-Index of video (z-index of +1 and -1 this value will also be used) + this.transitionDelay = 0; // Video transition delay + this.paths = []; + this.types = []; + + // Variables + this.id = id; + this.idCurrent = 1; // Current video playing + this.step = 0; // Loading step + + return this; + + } else { + + return about; + } +} + +VideoLoop.prototype = { + + // Initialize + init: function() { + + // Create 2 videos + for(var i=1; i<=2; i++) { + + this.create(document.getElementById(this.id), this.id, i); + } + }, + + // Check if all checks are complete + check: function(obj, id) { + + // Increment video steps + obj.step++; + + // When all four conditions are met, start playing video 1 + if(obj.step == 4) { document.getElementById(id + '1').play(); } + }, + + play: function(id) { + + // Work out alternate video object + this.idCurrent = (((this.idCurrent - 2) * -1) + 1); + var idCurrentAlt = (((this.idCurrent - 2) * -1) + 1); + + // Work out video objects + obj1 = document.getElementById(id + this.idCurrent); + obj2 = document.getElementById(id + idCurrentAlt); + + // Play video (But do not show it yet) + obj1.play(); + + // ... then after transition delay ... + _self = this; + setTimeout(function() { + + // Video transition + obj2.style.zIndex = _self.zIndex - 1; // Move alt video to position -1 (Behind video 1) + obj1.style.zIndex = _self.zIndex + 1; // Move video to position 1 + obj2.style.zIndex = _self.zIndex; // Move alt video to position 0 ready for next transition + + // Set up video 2 ready to play + obj2.pause(); + obj2.currentTime = 0; + + }, this.transitionDelay); + }, + + create: function(obj, id, index) { + + // Create video object + var videoObj = document.createElement('video'); + videoObj.id = id + index; + + // Create video source(s) + for(var i=0; i + + +Shake, Shake, Shake seamless html5 loop + + + + + +
<- back KC & The Sunshine Band - Shake, shake, shake
+
+
+ + + + + + + + + + + + + + diff --git a/public/loop/shake/shake_nosound.mp4 b/public/loop/shake/shake_nosound.mp4 new file mode 100644 index 0000000..6bc22ed Binary files /dev/null and b/public/loop/shake/shake_nosound.mp4 differ diff --git a/public/loop/shake/shake_sound.mp3 b/public/loop/shake/shake_sound.mp3 new file mode 100644 index 0000000..e8d1fb3 Binary files /dev/null and b/public/loop/shake/shake_sound.mp3 differ diff --git a/public/loop/shake/shake_sound.ogg b/public/loop/shake/shake_sound.ogg new file mode 100644 index 0000000..4c18ce0 Binary files /dev/null and b/public/loop/shake/shake_sound.ogg differ diff --git a/public/loop/shake/style.css b/public/loop/shake/style.css new file mode 100644 index 0000000..e95916c --- /dev/null +++ b/public/loop/shake/style.css @@ -0,0 +1,117 @@ +html, body { + width: 100%; + height: 100%; +} + +* { + margin: 0px; + padding: 0px; + overflow: hidden; +} + +body { + background: black; +} + +#myVideoLoop video { + position: absolute; +} + +div#myVideoLoop { + height: inherit; + display: flex; + justify-content: center; +} + +div#html5canloop { + color: white; + position: absolute; + bottom: 0; + font-weight: bold; + padding: 10px; + background: #202020; +} + +button#hidden_default { + visibility: hidden; +} + +.source_info { + color: white; + width: inherit; + background: #0d0d0d; + position: fixed; + z-index: 1; + padding: 10px; +} + +span#sinfo { + padding: 10px; + font-style: italic; + vertical-align: super; +} + + #myVideoLoop { + position: fixed; + top: 0; right: 0; bottom: 0; left: 0; + overflow: hidden; + } + #myVideoLoop > video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + @media (min-aspect-ratio: 16/9) { + #myVideoLoop > video { height: 300%; top: -100%; } + } + @media (max-aspect-ratio: 16/9) { + #myVideoLoop > video { width: 300%; left: -100%; } + } + @supports (object-fit: cover) { + #myVideoLoop > video { + top: 0; left: 0; + width: 100%; height: 100%; + object-fit: cover; + } + } + +input#volume { + vertical-align: sub; + margin-left: 10px; +} + +/*******/ +input[type=range] { + height: 31px; + -webkit-appearance: none; + background: #0d0d0d; +} + +input[type=range]::-webkit-slider-runnable-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #f51945; + border-radius: 4px; + border: 1px solid #f51945; +} + +input[type=range]::-webkit-slider-thumb { + height: 20px; + width: 20px; + border-radius: 10px; + background: #1d1c1c; + cursor: pointer; + -webkit-appearance: none; + margin-top: -8.5px; + border: 2px solid white; + margin-left: 0px; +} + +.source_info { + vertical-align: super; + display: flex; + align-items: center; +} \ No newline at end of file diff --git a/public/loop/shake/yPXnf.js b/public/loop/shake/yPXnf.js new file mode 100644 index 0000000..026010b --- /dev/null +++ b/public/loop/shake/yPXnf.js @@ -0,0 +1,87 @@ +(function() { + + function loopify(uri,cb) { + + var context = new (window.AudioContext || window.webkitAudioContext)(), + request = new XMLHttpRequest(); + + request.responseType = "arraybuffer"; + request.open("GET", uri, true); + + // XHR failed + request.onerror = function() { + cb(new Error("Couldn't load audio from " + uri)); + }; + + // XHR complete + request.onload = function() { + context.decodeAudioData(request.response,success,function(err){ + // Audio was bad + cb(new Error("Couldn't decode audio from " + uri)); + }); + }; + + request.send(); + + function success(buffer) { + + var source; + + function play() { + + // Stop if it's already playing + stop(); + + // Create a new source (can't replay an existing source) + source = context.createBufferSource(); + source.connect(context.destination); + + var gainNode = context.createGain(); + gainNode.gain.value = -0.8; + gainNode.connect(context.destination); + source.connect(gainNode); + + document.getElementById('volume').addEventListener('change', function() { + gainNode.gain.value = this.value; + }); + + + // Set the buffer + source.buffer = buffer; + source.loop = true; + + // Play it + source.start(0); + + } + + function stop() { + + // Stop and clear if it's playing + if (source) { + source.stop(); + source = null; + } + + } + + cb(null,{ + play: play, + stop: stop + }); + + } + + } + + loopify.version = "0.1"; + + if (typeof define === "function" && define.amd) { + define(function() { return loopify; }); + } else if (typeof module === "object" && module.exports) { + module.exports = loopify; + } else { + this.loopify = loopify; + } + +})(); diff --git a/public/loop/z0r_60842.gif b/public/loop/z0r_60842.gif new file mode 100644 index 0000000..fb59d68 Binary files /dev/null and b/public/loop/z0r_60842.gif differ diff --git a/public/loop/z0r_60842_loop.flac b/public/loop/z0r_60842_loop.flac new file mode 100644 index 0000000..447511e Binary files /dev/null and b/public/loop/z0r_60842_loop.flac differ diff --git a/resources/views/layout1/irc.blade.php b/resources/views/layout1/irc.blade.php index ce687a0..d8c9bb4 100644 --- a/resources/views/layout1/irc.blade.php +++ b/resources/views/layout1/irc.blade.php @@ -6,7 +6,11 @@
+ @if(auth()->check()) + @else + + @endif
IRC
diff --git a/resources/views/layout1/layout.blade.php b/resources/views/layout1/layout.blade.php index 2616476..739e121 100644 --- a/resources/views/layout1/layout.blade.php +++ b/resources/views/layout1/layout.blade.php @@ -63,7 +63,7 @@ @if(auth()->check()) @else - + @endif @include('partials.navigation') diff --git a/resources/views/layout1/upload.blade.php b/resources/views/layout1/upload.blade.php index f756d66..4e91114 100644 --- a/resources/views/layout1/upload.blade.php +++ b/resources/views/layout1/upload.blade.php @@ -66,7 +66,7 @@ -

Before you click upload make sure you have read the Rules

+

Before you fire the laz0r make sure you have read the Rules!
With great power comes great responsibility

10 uploads every 12 hours. – Maximum filesize: 40MB. – Only .webm (vp8/vp9) with sound allowed. Need help?

diff --git a/resources/views/layout1/video.blade.php b/resources/views/layout1/video.blade.php index 05d7d2b..20dc9ed 100644 --- a/resources/views/layout1/video.blade.php +++ b/resources/views/layout1/video.blade.php @@ -17,10 +17,14 @@ @endif
+ @if($video->id == '27204') + + @else + @endif @if($video->category->name === 'Anime' || $video->category->name === 'Otomad') "> - uploaded by {!! $video->user->displayName() !!} @if(auth()->check() && (auth()->user()->can('edit_video') || auth()->user()->id == $video->user_id)) [edit]@endif @if(auth()->check() && auth()->user()->can('delete_video'))[del]@endif + uploaded by {!! $video->user->displayName() !!} @if(auth()->check() && (auth()->user()->can('edit_video') || auth()->user()->id == $video->user_id)) [edit]@endif @if(auth()->check() && auth()->user()->can('delete_video'))[del]@endif
diff --git a/resources/views/layout2/tos.blade.php b/resources/views/layout2/tos.blade.php new file mode 100644 index 0000000..2a17267 --- /dev/null +++ b/resources/views/layout2/tos.blade.php @@ -0,0 +1,9 @@ +@extends('profilelayout') +@section('novidcontent') +
Terms of Service
+

Being a member of w0bm.com can be described best with the following quote:

„It's a privilege, not a right“

+

w0bm.com is a voluntary project provided to you free of charge for the sole purpose of enjoyment and amusement for you the users.

+

You (the users) agree to read and accept the rules and behave accordingly when on w0bm.com

+

w0bm.com can terminate accounts, comments and/or uploads at any time without any reason

+

Hotlinking our direct video urls is not welcome, since it puts the whole collection in danger of copyright reports. Please do not share any direct links in frequently visited forums! w0bm.com may need to block hotlinking and direct url access if problems will occur, which has negative side effects for nearly everyone using this site on a daily basis.

+@endsection \ No newline at end of file diff --git a/resources/views/layout2/video.blade.php b/resources/views/layout2/video.blade.php index 63f09f9..848deec 100644 --- a/resources/views/layout2/video.blade.php +++ b/resources/views/layout2/video.blade.php @@ -29,9 +29,13 @@ @section('floatvid')
+ @if($video->id == '27204') + + @else + @endif
@include('video-partials.legacy-videonav') @include('video-partials.legacy-metadata') diff --git a/resources/views/layout6/video.blade.php b/resources/views/layout6/video.blade.php index fa3a972..86a59c1 100644 --- a/resources/views/layout6/video.blade.php +++ b/resources/views/layout6/video.blade.php @@ -17,10 +17,14 @@ @endif
+ @if($video->id == '27204') + + @else + @endif @if($video->category->name === 'Anime' || $video->category->name === 'Otomad')