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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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
+
+
+
+
+
+Reveal the magic Unreveal the magic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
file }}">
+ @endif
@if($video->category->name === 'Anime' || $video->category->name === 'Otomad')
@@ -121,7 +125,7 @@
@endif
Category: {{$video->category->name}}
">
-
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
file }}">
+ @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
file }}">
+ @endif
@if($video->category->name === 'Anime' || $video->category->name === 'Otomad')