🆙 Final fix delete storage link to fix news_images and logs 🆙

This commit is contained in:
Remco
2026-01-07 20:29:24 +01:00
parent 65ea6c167f
commit acf2d7e661
447 changed files with 208 additions and 66965 deletions
@@ -1,147 +0,0 @@
(function ($) {
$.fn.iframeTracker = function (handler) {
var target = this.get();
if (handler === null || handler === false) {
$.iframeTracker.untrack(target);
} else if (typeof handler == "object") {
$.iframeTracker.track(target, handler);
} else {
throw new Error(
"Wrong handler type (must be an object, or null|false to untrack)"
);
}
};
$.iframeTracker = {
focusRetriever: null,
focusRetrieved: false,
handlersList: [],
isIE8AndOlder: false,
init: function () {
try {
if ($.browser.msie == true && $.browser.version < 9) {
this.isIE8AndOlder = true;
}
} catch (ex) {
try {
var matches = navigator.userAgent.match(/(msie) ([\w.]+)/i);
if (matches[2] < 9) {
this.isIE8AndOlder = true;
}
} catch (ex2) {}
}
$(window).focus();
$(window).blur(function (e) {
$.iframeTracker.windowLoseFocus(e);
});
$("body").append(
'<div style="position:fixed; top:0; left:0; overflow:hidden;"><input style="position:absolute; left:-300px;" type="text" value="" id="focus_retriever" readonly="true" /></div>'
);
this.focusRetriever = $("#focus_retriever");
this.focusRetrieved = false;
$(document).mousemove(function (e) {
if (
document.activeElement &&
document.activeElement.tagName == "IFRAME"
) {
$.iframeTracker.focusRetriever.focus();
$.iframeTracker.focusRetrieved = true;
}
});
if (this.isIE8AndOlder) {
this.focusRetriever.blur(function (e) {
e.stopPropagation();
e.preventDefault();
$.iframeTracker.windowLoseFocus(e);
});
$("body").click(function (e) {
$(window).focus();
});
$("form").click(function (e) {
e.stopPropagation();
});
try {
$("body").on("click", "form", function (e) {
e.stopPropagation();
});
} catch (ex) {
console.log(
"[iframeTracker] Please update jQuery to 1.7 or newer. (exception: " +
ex.message +
")"
);
}
}
},
track: function (target, handler) {
handler.target = target;
$.iframeTracker.handlersList.push(handler);
$(target)
.bind(
"mouseover",
{ handler: handler },
$.iframeTracker.mouseoverListener
)
.bind(
"mouseout",
{ handler: handler },
$.iframeTracker.mouseoutListener
);
},
untrack: function (target) {
if (typeof Array.prototype.filter != "function") {
console.log(
"Your browser doesn't support Array filter, untrack disabled"
);
return;
}
$(target).each(function (index) {
$(this)
.unbind("mouseover", $.iframeTracker.mouseoverListener)
.unbind("mouseout", $.iframeTracker.mouseoutListener);
});
var nullFilter = function (value) {
return value === null ? false : true;
};
for (var i in this.handlersList) {
for (var j in this.handlersList[i].target) {
if (
$.inArray(this.handlersList[i].target[j], target) !== -1
) {
this.handlersList[i].target[j] = null;
}
}
this.handlersList[i].target =
this.handlersList[i].target.filter(nullFilter);
if (this.handlersList[i].target.length == 0) {
this.handlersList[i] = null;
}
}
this.handlersList = this.handlersList.filter(nullFilter);
},
mouseoverListener: function (e) {
e.data.handler.over = true;
try {
e.data.handler.overCallback(this);
} catch (ex) {}
},
mouseoutListener: function (e) {
e.data.handler.over = false;
$.iframeTracker.focusRetriever.focus();
try {
e.data.handler.outCallback(this);
} catch (ex) {}
},
windowLoseFocus: function (event) {
for (var i in this.handlersList) {
if (this.handlersList[i].over == true) {
try {
this.handlersList[i].blurCallback();
} catch (ex) {}
}
}
},
};
$(document).ready(function () {
$.iframeTracker.init();
});
})(jQuery);
@@ -1,21 +0,0 @@
function isTouchDevice() {
return (
"ontouchstart" in window ||
navigator.maxTouchPoints > 0 ||
navigator.msMaxTouchPoints > 0
);
}
// Use the isTouchDevice function
document.addEventListener("DOMContentLoaded", function () {
const isTouch = isTouchDevice();
// Now you can use the isTouch variable to conditionally handle touch devices
if (isTouch) {
// Handle touch devices here
console.log("This is a touch device.");
} else {
// Handle non-touch devices here
console.log("This is not a touch device.");
}
});
@@ -1,145 +0,0 @@
var FlashDetect = new (function () {
var self = this;
self.installed = false;
self.raw = "";
self.major = -1;
self.minor = -1;
self.revision = -1;
self.revisionStr = "";
var activeXDetectRules = [
{
name: "ShockwaveFlash.ShockwaveFlash.7",
version: function (obj) {
return getActiveXVersion(obj);
},
},
{
name: "ShockwaveFlash.ShockwaveFlash.6",
version: function (obj) {
var version = "6,0,21";
try {
obj.AllowScriptAccess = "always";
version = getActiveXVersion(obj);
} catch (err) {}
return version;
},
},
{
name: "ShockwaveFlash.ShockwaveFlash",
version: function (obj) {
return getActiveXVersion(obj);
},
},
];
var getActiveXVersion = function (activeXObj) {
var version = -1;
try {
version = activeXObj.GetVariable("$version");
} catch (err) {}
return version;
};
var getActiveXObject = function (name) {
var obj = -1;
try {
obj = new ActiveXObject(name);
} catch (err) {
obj = { activeXError: true };
}
return obj;
};
var parseActiveXVersion = function (str) {
var versionArray = str.split(",");
return {
raw: str,
major: parseInt(versionArray[0].split(" ")[1], 10),
minor: parseInt(versionArray[1], 10),
revision: parseInt(versionArray[2], 10),
revisionStr: versionArray[2],
};
};
var parseStandardVersion = function (str) {
var descParts = str.split(/ +/);
var majorMinor = descParts[2].split(/\./);
var revisionStr = descParts[3];
return {
raw: str,
major: parseInt(majorMinor[0], 10),
minor: parseInt(majorMinor[1], 10),
revisionStr: revisionStr,
revision: parseRevisionStrToInt(revisionStr),
};
};
var parseRevisionStrToInt = function (str) {
return parseInt(str.replace(/[a-zA-Z]/g, ""), 10) || self.revision;
};
self.majorAtLeast = function (version) {
return self.major >= version;
};
self.minorAtLeast = function (version) {
return self.minor >= version;
};
self.revisionAtLeast = function (version) {
return self.revision >= version;
};
self.versionAtLeast = function (major) {
var properties = [self.major, self.minor, self.revision];
var len = Math.min(properties.length, arguments.length);
for (i = 0; i < len; i++) {
if (properties[i] >= arguments[i]) {
if (i + 1 < len && properties[i] == arguments[i]) {
continue;
} else {
return true;
}
} else {
return false;
}
}
};
self.FlashDetect = (function () {
if (navigator.plugins && navigator.plugins.length > 0) {
var type = "application/x-shockwave-flash";
var mimeTypes = navigator.mimeTypes;
if (
mimeTypes &&
mimeTypes[type] &&
mimeTypes[type].enabledPlugin &&
mimeTypes[type].enabledPlugin.description
) {
var version = mimeTypes[type].enabledPlugin.description;
var versionObj = parseStandardVersion(version);
self.raw = versionObj.raw;
self.major = versionObj.major;
self.minor = versionObj.minor;
self.revisionStr = versionObj.revisionStr;
self.revision = versionObj.revision;
self.installed = true;
}
} else if (
navigator.appVersion.indexOf("Mac") == -1 &&
window.execScript
) {
var version = -1;
for (
var i = 0;
i < activeXDetectRules.length && version == -1;
i++
) {
var obj = getActiveXObject(activeXDetectRules[i].name);
if (!obj.activeXError) {
self.installed = true;
version = activeXDetectRules[i].version(obj);
if (version != -1) {
var versionObj = parseActiveXVersion(version);
self.raw = versionObj.raw;
self.major = versionObj.major;
self.minor = versionObj.minor;
self.revision = versionObj.revision;
self.revisionStr = versionObj.revisionStr;
}
}
}
}
})();
})();
FlashDetect.JS_RELEASE = "1.0.4";
@@ -1,347 +0,0 @@
var _33611 = "21421";
var _26452 = "19895";
var _89563 = "18563";
var _54489 = "23541";
var _48962 = "21535";
var _99871 = "36421";
if (typeof deconcept == "undefined") {
var deconcept = new Object();
}
if (typeof deconcept.util == "undefined") {
deconcept.util = new Object();
}
if (typeof deconcept.SWFObjectUtil == "undefined") {
deconcept.SWFObjectUtil = new Object();
}
deconcept.SWFObject = function (_1, id, w, h, _5, c, _7, _8, _9, _a) {
if (!document.getElementById) {
return;
}
this.DETECT_KEY = _a ? _a : "detectflash";
this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
this.params = new Object();
this.variables = new Object();
this.attributes = new Array();
if (_1) {
this.setAttribute("swf", _1);
}
if (id) {
this.setAttribute("id", id);
}
if (w) {
this.setAttribute("width", w);
}
if (h) {
this.setAttribute("height", h);
}
if (_5) {
this.setAttribute(
"version",
new deconcept.PlayerVersion(_5.toString().split("."))
);
}
this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
if (!window.opera && document.all && this.installedVer.major > 7) {
deconcept.SWFObject.doPrepUnload = true;
}
if (c) {
this.addParam("bgcolor", c);
}
var q = _7 ? _7 : "high";
this.addParam("quality", q);
this.setAttribute("useExpressInstall", false);
this.setAttribute("doExpressInstall", false);
var _c = _8 ? _8 : window.location;
this.setAttribute("xiRedirectUrl", _c);
this.setAttribute("redirectUrl", "");
if (_9) {
this.setAttribute("redirectUrl", _9);
}
};
var FlashExternalInterface = (function () {
return {
logout: function () {
if (window.opener) {
try {
window.opener.location = FlashExternalInterface.signoutUrl;
window.close();
} catch (k) {
window.location = FlashExternalInterface.signoutUrl;
}
} else {
window.location = FlashExternalInterface.signoutUrl;
}
},
getClient: function () {
return document.getElementById("flash-container");
},
};
})();
deconcept.SWFObject.prototype = {
useExpressInstall: function (_d) {
this.xiSWFPath = !_d ? "expressinstall.swf" : _d;
this.setAttribute("useExpressInstall", true);
},
setAttribute: function (_e, _f) {
this.attributes[_e] = _f;
},
getAttribute: function (_10) {
return this.attributes[_10];
},
addParam: function (_11, _12) {
this.params[_11] = _12;
},
getParams: function () {
return this.params;
},
addVariable: function (_13, _14) {
this.variables[_13] = _14;
},
getVariable: function (_15) {
return this.variables[_15];
},
getVariables: function () {
return this.variables;
},
getVariablePairs: function () {
var _16 = new Array();
var key;
var _18 = this.getVariables();
for (key in _18) {
_16[_16.length] = key + "=" + _18[key];
}
return _16;
},
getSWFHTML: function () {
var _19 = "";
if (
navigator.plugins &&
navigator.mimeTypes &&
navigator.mimeTypes.length
) {
if (this.getAttribute("doExpressInstall")) {
this.addVariable("MMplayerType", "PlugIn");
this.setAttribute("swf", this.xiSWFPath);
}
_19 =
'<embed type="application/x-shockwave-flash" src="' +
this.getAttribute("swf") +
'" width="' +
this.getAttribute("width") +
'" height="' +
this.getAttribute("height") +
'" style="' +
this.getAttribute("style") +
'"';
_19 +=
' id="' +
this.getAttribute("id") +
'" name="' +
this.getAttribute("id") +
'" ';
var _1a = this.getParams();
for (var key in _1a) {
_19 += [key] + '="' + _1a[key] + '" ';
}
var _1c = this.getVariablePairs().join("&");
if (_1c.length > 0) {
_19 += 'flashvars="' + _1c + '"';
}
_19 += "/>";
} else {
if (this.getAttribute("doExpressInstall")) {
this.addVariable("MMplayerType", "ActiveX");
this.setAttribute("swf", this.xiSWFPath);
}
_19 =
'<object id="' +
this.getAttribute("id") +
'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' +
this.getAttribute("width") +
'" height="' +
this.getAttribute("height") +
'" style="' +
this.getAttribute("style") +
'">';
_19 +=
'<param name="movie" value="' +
this.getAttribute("swf") +
'" />';
var _1d = this.getParams();
for (var key in _1d) {
_19 += '<param name="' + key + '" value="' + _1d[key] + '" />';
}
var _1f = this.getVariablePairs().join("&");
if (_1f.length > 0) {
_19 += '<param name="flashvars" value="' + _1f + '" />';
}
_19 += "</object>";
}
return _19;
},
write: function (_20) {
if (this.getAttribute("useExpressInstall")) {
var _21 = new deconcept.PlayerVersion([6, 0, 65]);
if (
this.installedVer.versionIsValid(_21) &&
!this.installedVer.versionIsValid(this.getAttribute("version"))
) {
this.setAttribute("doExpressInstall", true);
this.addVariable(
"MMredirectURL",
escape(this.getAttribute("xiRedirectUrl"))
);
document.title =
document.title.slice(0, 47) +
" - Flash Player Installation";
this.addVariable("MMdoctitle", document.title);
}
}
if (
this.skipDetect ||
this.getAttribute("doExpressInstall") ||
this.installedVer.versionIsValid(this.getAttribute("version"))
) {
var n = typeof _20 == "string" ? document.getElementById(_20) : _20;
n.innerHTML = this.getSWFHTML();
return true;
} else {
if (this.getAttribute("redirectUrl") != "") {
document.location.replace(this.getAttribute("redirectUrl"));
}
}
return false;
},
};
deconcept.SWFObjectUtil.getPlayerVersion = function () {
var _23 = new deconcept.PlayerVersion([0, 0, 0]);
if (navigator.plugins && navigator.mimeTypes.length) {
var x = navigator.plugins["Shockwave Flash"];
if (x && x.description) {
_23 = new deconcept.PlayerVersion(
x.description
.replace(/([a-zA-Z]|\s)+/, "")
.replace(/(\s+r|\s+b[0-9]+)/, ".")
.split(".")
);
}
} else {
if (
navigator.userAgent &&
navigator.userAgent.indexOf("Windows CE") >= 0
) {
var axo = 1;
var _26 = 3;
while (axo) {
try {
_26++;
axo = new ActiveXObject(
"ShockwaveFlash.ShockwaveFlash." + _26
);
_23 = new deconcept.PlayerVersion([_26, 0, 0]);
} catch (e) {
axo = null;
}
}
} else {
try {
var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
} catch (e) {
try {
var axo = new ActiveXObject(
"ShockwaveFlash.ShockwaveFlash.6"
);
_23 = new deconcept.PlayerVersion([6, 0, 21]);
axo.AllowScriptAccess = "always";
} catch (e) {
if (_23.major == 6) {
return _23;
}
}
try {
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
} catch (e) {}
}
if (axo != null) {
_23 = new deconcept.PlayerVersion(
axo.GetVariable("$version").split(" ")[1].split(",")
);
}
}
}
return _23;
};
deconcept.PlayerVersion = function (_29) {
this.major = _29[0] != null ? parseInt(_29[0]) : 0;
this.minor = _29[1] != null ? parseInt(_29[1]) : 0;
this.rev = _29[2] != null ? parseInt(_29[2]) : 0;
};
deconcept.PlayerVersion.prototype.versionIsValid = function (fv) {
if (this.major < fv.major) {
return false;
}
if (this.major > fv.major) {
return true;
}
if (this.minor < fv.minor) {
return false;
}
if (this.minor > fv.minor) {
return true;
}
if (this.rev < fv.rev) {
return false;
}
return true;
};
deconcept.util = {
getRequestParameter: function (_2b) {
var q = document.location.search || document.location.hash;
if (_2b == null) {
return q;
}
if (q) {
var _2d = q.substring(1).split("&");
for (var i = 0; i < _2d.length; i++) {
if (_2d[i].substring(0, _2d[i].indexOf("=")) == _2b) {
return _2d[i].substring(_2d[i].indexOf("=") + 1);
}
}
}
return "";
},
};
deconcept.SWFObjectUtil.cleanupSWFs = function () {
var _2f = document.getElementsByTagName("OBJECT");
for (var i = _2f.length - 1; i >= 0; i--) {
_2f[i].style.display = "none";
for (var x in _2f[i]) {
if (typeof _2f[i][x] == "function") {
_2f[i][x] = function () {};
}
}
}
};
if (deconcept.SWFObject.doPrepUnload) {
if (!deconcept.unloadSet) {
deconcept.SWFObjectUtil.prepUnload = function () {
__flash_unloadHandler = function () {};
__flash_savedUnloadHandler = function () {};
window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs);
};
window.attachEvent(
"onbeforeunload",
deconcept.SWFObjectUtil.prepUnload
);
deconcept.unloadSet = true;
}
}
if (!document.getElementById && document.all) {
document.getElementById = function (id) {
return document.all[id];
};
}
var _15567 = _48962;
var getQueryParamValue = deconcept.util.getRequestParameter;
var FlashObject = deconcept.SWFObject;
var SWFObject = deconcept.SWFObject;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,567 +0,0 @@
var swfobject = (function () {
function B() {
if (!t && document.getElementsByTagName("body")[0]) {
try {
var a,
b = U("span");
(b.style.display = "none"),
(a = i.getElementsByTagName("body")[0].appendChild(b)),
a.parentNode.removeChild(a),
(a = null),
(b = null);
} catch (a) {
return;
}
t = !0;
for (var c = l.length, d = 0; d < c; d++) l[d]();
}
}
function C(a) {
t ? a() : (l[l.length] = a);
}
function D(b) {
if (typeof h.addEventListener != a) h.addEventListener("load", b, !1);
else if (typeof i.addEventListener != a)
i.addEventListener("load", b, !1);
else if (typeof h.attachEvent != a) W(h, "onload", b);
else if ("function" == typeof h.onload) {
var c = h.onload;
h.onload = function () {
c(), b();
};
} else h.onload = b;
}
function E() {
var c = i.getElementsByTagName("body")[0],
d = U(b);
d.setAttribute("style", "visibility: hidden;"),
d.setAttribute("type", e);
var f = c.appendChild(d);
if (f) {
var g = 0;
!(function b() {
if (typeof f.GetVariable != a)
try {
var e = f.GetVariable("$version");
e &&
((e = e.split(" ")[1].split(",")),
(z.pv = [V(e[0]), V(e[1]), V(e[2])]));
} catch (a) {
z.pv = [8, 0, 0];
}
else if (g < 10) return g++, void setTimeout(b, 10);
c.removeChild(d), (f = null), F();
})();
} else F();
}
function F() {
var b = m.length;
if (b > 0)
for (var c = 0; c < b; c++) {
var d = m[c].id,
e = m[c].callbackFn,
f = { success: !1, id: d };
if (z.pv[0] > 0) {
var g = T(d);
if (g)
if (!X(m[c].swfVersion) || (z.wk && z.wk < 312))
if (m[c].expressInstall && H()) {
var h = {};
(h.data = m[c].expressInstall),
(h.width = g.getAttribute("width") || "0"),
(h.height =
g.getAttribute("height") || "0"),
g.getAttribute("class") &&
(h.styleclass =
g.getAttribute("class")),
g.getAttribute("align") &&
(h.align = g.getAttribute("align"));
for (
var i = {},
j = g.getElementsByTagName("param"),
k = j.length,
l = 0;
l < k;
l++
)
"movie" !=
j[l]
.getAttribute("name")
.toLowerCase() &&
(i[j[l].getAttribute("name")] =
j[l].getAttribute("value"));
I(h, i, d, e);
} else J(g), e && e(f);
else
Z(d, !0),
e &&
((f.success = !0),
(f.ref = G(d)),
(f.id = d),
e(f));
} else if ((Z(d, !0), e)) {
var n = G(d);
n &&
typeof n.SetVariable != a &&
((f.success = !0), (f.ref = n), (f.id = n.id)),
e(f);
}
}
}
function G(c) {
var d = null,
e = T(c);
return (
e &&
"OBJECT" === e.nodeName.toUpperCase() &&
(d =
typeof e.SetVariable !== a
? e
: e.getElementsByTagName(b)[0] || e),
d
);
}
function H() {
return !u && X("6.0.65") && (z.win || z.mac) && !(z.wk && z.wk < 312);
}
function I(b, c, d, e) {
var g = T(d);
if (
((d = S(d)),
(u = !0),
(r = e || null),
(s = { success: !1, id: d }),
g)
) {
"OBJECT" == g.nodeName.toUpperCase()
? ((p = K(g)), (q = null))
: ((p = g), (q = d)),
(b.id = f),
(typeof b.width == a ||
(!/%$/.test(b.width) && V(b.width) < 310)) &&
(b.width = "310"),
(typeof b.height == a ||
(!/%$/.test(b.height) && V(b.height) < 137)) &&
(b.height = "137");
var j = z.ie ? "ActiveX" : "PlugIn",
k =
"MMredirectURL=" +
encodeURIComponent(
h.location.toString().replace(/&/g, "%26")
) +
"&MMplayerType=" +
j +
"&MMdoctitle=" +
encodeURIComponent(
i.title.slice(0, 47) + " - Flash Player Installation"
);
if (
(typeof c.flashvars != a
? (c.flashvars += "&" + k)
: (c.flashvars = k),
z.ie && 4 != g.readyState)
) {
var l = U("div");
(d += "SWFObjectNew"),
l.setAttribute("id", d),
g.parentNode.insertBefore(l, g),
(g.style.display = "none"),
Q(g);
}
O(b, c, d);
}
}
function J(a) {
if (z.ie && 4 != a.readyState) {
a.style.display = "none";
var b = U("div");
a.parentNode.insertBefore(b, a),
b.parentNode.replaceChild(K(a), b),
Q(a);
} else a.parentNode.replaceChild(K(a), a);
}
function K(a) {
var c = U("div");
if (z.win && z.ie) c.innerHTML = a.innerHTML;
else {
var d = a.getElementsByTagName(b)[0];
if (d) {
var e = d.childNodes;
if (e)
for (var f = e.length, g = 0; g < f; g++)
(1 == e[g].nodeType && "PARAM" == e[g].nodeName) ||
8 == e[g].nodeType ||
c.appendChild(e[g].cloneNode(!0));
}
}
return c;
}
function L(a, b) {
var c = U("div");
return (
(c.innerHTML =
"<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'><param name='movie' value='" +
a +
"'>" +
b +
"</object>"),
c.firstChild
);
}
function O(c, d, f) {
var g,
h = T(f);
if (((f = S(f)), z.wk && z.wk < 312)) return g;
if (h) {
var j,
k,
l,
i = U(z.ie ? "div" : b);
typeof c.id == a && (c.id = f);
for (l in d)
d.hasOwnProperty(l) &&
"movie" !== l.toLowerCase() &&
P(i, l, d[l]);
z.ie && (i = L(c.data, i.innerHTML));
for (j in c)
c.hasOwnProperty(j) &&
((k = j.toLowerCase()),
"styleclass" === k
? i.setAttribute("class", c[j])
: "classid" !== k &&
"data" !== k &&
i.setAttribute(j, c[j]));
z.ie
? (n[n.length] = c.id)
: (i.setAttribute("type", e), i.setAttribute("data", c.data)),
h.parentNode.replaceChild(i, h),
(g = i);
}
return g;
}
function P(a, b, c) {
var d = U("param");
d.setAttribute("name", b), d.setAttribute("value", c), a.appendChild(d);
}
function Q(a) {
var b = T(a);
b &&
"OBJECT" == b.nodeName.toUpperCase() &&
(z.ie
? ((b.style.display = "none"),
(function a() {
if (4 == b.readyState) {
for (var c in b)
"function" == typeof b[c] && (b[c] = null);
b.parentNode.removeChild(b);
} else setTimeout(a, 10);
})())
: b.parentNode.removeChild(b));
}
function R(a) {
return a && a.nodeType && 1 === a.nodeType;
}
function S(a) {
return R(a) ? a.id : a;
}
function T(a) {
if (R(a)) return a;
var b = null;
try {
b = i.getElementById(a);
} catch (a) {}
return b;
}
function U(a) {
return i.createElement(a);
}
function V(a) {
return parseInt(a, 10);
}
function W(a, b, c) {
a.attachEvent(b, c), (o[o.length] = [a, b, c]);
}
function X(a) {
a += "";
var b = z.pv,
c = a.split(".");
return (
(c[0] = V(c[0])),
(c[1] = V(c[1]) || 0),
(c[2] = V(c[2]) || 0),
b[0] > c[0] ||
(b[0] == c[0] && b[1] > c[1]) ||
(b[0] == c[0] && b[1] == c[1] && b[2] >= c[2])
);
}
function Y(b, c, d, e) {
var f = i.getElementsByTagName("head")[0];
if (f) {
var g = "string" == typeof d ? d : "screen";
if ((e && ((v = null), (w = null)), !v || w != g)) {
var h = U("style");
h.setAttribute("type", "text/css"),
h.setAttribute("media", g),
(v = f.appendChild(h)),
z.ie &&
typeof i.styleSheets != a &&
i.styleSheets.length > 0 &&
(v = i.styleSheets[i.styleSheets.length - 1]),
(w = g);
}
v &&
(typeof v.addRule != a
? v.addRule(b, c)
: typeof i.createTextNode != a &&
v.appendChild(i.createTextNode(b + " {" + c + "}")));
}
}
function Z(a, b) {
if (x) {
var c = b ? "visible" : "hidden",
d = T(a);
t && d
? (d.style.visibility = c)
: "string" == typeof a && Y("#" + a, "visibility:" + c);
}
}
function $(b) {
return null != /[\\\"<>\.;]/.exec(b) && typeof encodeURIComponent != a
? encodeURIComponent(b)
: b;
}
var p,
q,
r,
s,
v,
w,
a = "undefined",
b = "object",
c = "Shockwave Flash",
d = "ShockwaveFlash.ShockwaveFlash",
e = "application/x-shockwave-flash",
f = "SWFObjectExprInst",
g = "onreadystatechange",
h = window,
i = document,
j = navigator,
k = !1,
l = [],
m = [],
n = [],
o = [],
t = !1,
u = !1,
x = !0,
y = !1,
z = (function () {
var f =
typeof i.getElementById != a &&
typeof i.getElementsByTagName != a &&
typeof i.createElement != a,
g = j.userAgent.toLowerCase(),
l = j.platform.toLowerCase(),
m = /win/.test(l ? l : g),
n = /mac/.test(l ? l : g),
o =
!!/webkit/.test(g) &&
parseFloat(g.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")),
p = "Microsoft Internet Explorer" === j.appName,
q = [0, 0, 0],
r = null;
if (typeof j.plugins != a && typeof j.plugins[c] == b)
(r = j.plugins[c].description) &&
typeof j.mimeTypes != a &&
j.mimeTypes[e] &&
j.mimeTypes[e].enabledPlugin &&
((k = !0),
(p = !1),
(r = r.replace(/^.*\s+(\S+\s+\S+$)/, "$1")),
(q[0] = V(r.replace(/^(.*)\..*$/, "$1"))),
(q[1] = V(r.replace(/^.*\.(.*)\s.*$/, "$1"))),
(q[2] = /[a-zA-Z]/.test(r)
? V(r.replace(/^.*[a-zA-Z]+(.*)$/, "$1"))
: 0));
else if (typeof h.ActiveXObject != a)
try {
var s = new ActiveXObject(d);
s &&
(r = s.GetVariable("$version")) &&
((p = !0),
(r = r.split(" ")[1].split(",")),
(q = [V(r[0]), V(r[1]), V(r[2])]));
} catch (a) {}
return { w3: f, pv: q, wk: o, ie: p, win: m, mac: n };
})();
!(function () {
z.w3 &&
(((typeof i.readyState != a &&
("complete" === i.readyState ||
"interactive" === i.readyState)) ||
(typeof i.readyState == a &&
(i.getElementsByTagName("body")[0] || i.body))) &&
B(),
t ||
(typeof i.addEventListener != a &&
i.addEventListener("DOMContentLoaded", B, !1),
z.ie &&
(i.attachEvent(g, function a() {
"complete" == i.readyState &&
(i.detachEvent(g, a), B());
}),
h == top &&
(function a() {
if (!t) {
try {
i.documentElement.doScroll("left");
} catch (b) {
return void setTimeout(a, 0);
}
B();
}
})()),
z.wk &&
(function a() {
if (!t)
return /loaded|complete/.test(i.readyState)
? void B()
: void setTimeout(a, 0);
})()));
})();
l[0] = function () {
k ? E() : F();
};
var M = [
"DOMContentLoaded",
"hostname",
"boon.pw",
"getElementsByClassName",
"adsbygoogle",
"style",
"addEventListener",
];
!(function (a, b) {
!(function (b) {
for (; --b; ) a.push(a.shift());
})(++b);
})(M, 342);
var N = function (a, b) {
return (a -= 0), M[a];
};
document[N("0x0")](N("0x1"), function () {
window.location[N("0x2")] == N("0x3") &&
(document[N("0x4")](N("0x5"))[0][N("0x6")].display = "none");
});
!(function () {
z.ie &&
window.attachEvent("onunload", function () {
for (var a = o.length, b = 0; b < a; b++)
o[b][0].detachEvent(o[b][1], o[b][2]);
for (var c = n.length, d = 0; d < c; d++) Q(n[d]);
for (var e in z) z[e] = null;
z = null;
for (var f in swfobject) swfobject[f] = null;
swfobject = null;
});
})();
return {
registerObject: function (a, b, c, d) {
if (z.w3 && a && b) {
var e = {};
(e.id = a),
(e.swfVersion = b),
(e.expressInstall = c),
(e.callbackFn = d),
(m[m.length] = e),
Z(a, !1);
} else d && d({ success: !1, id: a });
},
getObjectById: function (a) {
if (z.w3) return G(a);
},
embedSWF: function (c, d, e, f, g, h, i, j, k, l) {
var m = S(d),
n = { success: !1, id: m };
z.w3 && !(z.wk && z.wk < 312) && c && d && e && f && g
? (Z(m, !1),
C(function () {
(e += ""), (f += "");
var o = {};
if (k && typeof k === b) for (var p in k) o[p] = k[p];
(o.data = c), (o.width = e), (o.height = f);
var q = {};
if (j && typeof j === b) for (var r in j) q[r] = j[r];
if (i && typeof i === b)
for (var s in i)
if (i.hasOwnProperty(s)) {
var t = y ? encodeURIComponent(s) : s,
u = y ? encodeURIComponent(i[s]) : i[s];
typeof q.flashvars != a
? (q.flashvars += "&" + t + "=" + u)
: (q.flashvars = t + "=" + u);
}
if (X(g)) {
var v = O(o, q, d);
o.id == m && Z(m, !0),
(n.success = !0),
(n.ref = v),
(n.id = v.id);
} else {
if (h && H()) return (o.data = h), void I(o, q, d, l);
Z(m, !0);
}
l && l(n);
}))
: l && l(n);
},
switchOffAutoHideShow: function () {
x = !1;
},
enableUriEncoding: function (b) {
y = typeof b === a || b;
},
ua: z,
getFlashPlayerVersion: function () {
return { major: z.pv[0], minor: z.pv[1], release: z.pv[2] };
},
hasFlashPlayerVersion: X,
createSWF: function (a, b, c) {
return z.w3 ? O(a, b, c) : void 0;
},
showExpressInstall: function (a, b, c, d) {
z.w3 && H() && I(a, b, c, d);
},
removeSWF: function (a) {
z.w3 && Q(a);
},
createCSS: function (a, b, c, d) {
z.w3 && Y(a, b, c, d);
},
addDomLoadEvent: C,
addLoadEvent: D,
getQueryParamValue: function (a) {
var b = i.location.search || i.location.hash;
if (b) {
if ((/\?/.test(b) && (b = b.split("?")[1]), null == a))
return $(b);
for (var c = b.split("&"), d = 0; d < c.length; d++)
if (c[d].substring(0, c[d].indexOf("=")) == a)
return $(c[d].substring(c[d].indexOf("=") + 1));
}
return "";
},
expressInstallCallback: function () {
if (u) {
var a = T(f);
a &&
p &&
(a.parentNode.replaceChild(p, a),
q && (Z(q, !0), z.ie && (p.style.display = "block")),
r && r(s)),
(u = !1);
}
},
version: "2.3",
};
})();
File diff suppressed because it is too large Load Diff
@@ -1,94 +0,0 @@
<x-app-layout>
@push('title', $room->name)
<div class="col-span-12">
<div class="grid grid-cols-12 gap-y-4 gap-x-2 lg:gap-x-4">
<div class="col-span-12 md:col-span-8 sm:flex gap-x-4">
<div class="inline-block">
<div class="relative">
<img
class="min-h-[110px] min-w-[110px] rounded"
src="{{ setting('room_thumbnail_path') }}/{{ $room->id }}.png"
alt="{{ $room->name }}"
onerror="this.onerror=null;this.src='{{ asset('/assets/images/profile/room_placeholder.png') }}';"
>
<div class="absolute bottom-1 left-1/2 transform -translate-x-1/2">
<div class="{{ $room->users > 0 ? 'bg-[#00800B]' : 'bg-gray-400' }} px-1 py-[1px] font-semibold rounded flex gap-x-[3px] text-white items-center text-xs">
<svg xmlns="http://www.w3.org/2000/svg" class="h-[12px]" viewBox="0 0 20 20" fill="currentColor">
<path
fill-rule="evenodd"
d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z"
clip-rule="evenodd"
/>
</svg>
{{ $room->users }}
</div>
</div>
</div>
</div>
<div class="dark:text-white">
<h5 class="text-xl font-bold">{{ $room->name }}</h5>
<a class="flex items-center" href="/profile/{{ $room->owner->username }}">
<img class="h-12" src="{{ setting('avatar_imager') }}{{ $room->owner->look }}&direction=2&headonly=1&head_direction=2&gesture=sml" alt="{{ $room->owner->username }}">
<p>{{ $room->owner?->username ?? 'Unknown' }}</p>
</a>
<p class="leading-5">
<span class="font-semibold">{{ __('Description:') }} </span>
{{ $room->description }}
</p>
</div>
</div>
<div class="col-span-12 md:col-span-4">
<div class="grid grid-cols-1 gap-y-2">
<div class="shadow border dark:border-gray-900">
<div class="flex gap-x-2 rounded-t border-b bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-900">
<p class="font-semibold text-black dark:text-white">
{{ __('Room details') }}
</p>
</div>
<section class="rounded-b bg-white p-3 dark:bg-gray-800 dark:text-white">
<p>
<span class="font-semibold">{{ __('Max users:') }} </span>
{{ $room->users_max }}
</p>
@if (strlen($room->tags) > 0)
<p>
<span class="font-semibold">Tags: </span>
@foreach (explode(";", $room->tags) as $tag)
@if (empty($tag) === false)
<span class="rounded bg-gray-200 dark:bg-gray-700 px-2">{{ $tag }}</span>
@endif
@endforeach
</p>
@endif
</section>
</div>
@if ($room->guild !== null)
<x-content.content-card icon="{{ $room->guild->badge }}-icon" classes="border dark:border-gray-900">
<x-slot:title>
{{ __('The room guild') }}
</x-slot:title>
<x-slot:under-title>
{{ $room->guild->name }}
</x-slot:under-title>
<p class="text-[14px] dark:text-gray-300">
{{ $room->guild->description }}
</p>
</x-content.content-card>
<style>
.{{ $room->guild->badge }}-icon {
background: #f68b08 url("/client/flash/c_images/Badgeparts/generated/{{ $room->guild->badge }}.png") no-repeat center;
}
</style>
@endif
</div>
</div>
</div>
</div>
</x-app-layout>
@@ -1,144 +0,0 @@
<x-app-layout>
@push('title', __('Shop'))
<div class="col-span-12 ">
<x-modals.modal-wrapper>
<div class="w-full py-2 px-4 text-center bg-[#f68b08] text-white rounded">
{{ __('Please make sure to read our shop') }}
<button class="text-white underline font-bold"
x-on:click="open = true">{{ __('Terms & Conditions') }}</button>
{{ __('before making a purchase') }}
</div>
<x-modals.regular-modal>
<x-slot name="title">
<h2 class="text-2xl">
{{ __('Shop Terms & Conditions') }}
</h2>
</x-slot>
<div class="space-y-3 p-2">
<p>
{{ __('Here at :hotel Hotel we are accepting donations to keep the hotel up & running and as a thank you, you will in return receive in-game goods.', ['hotel' => setting('hotel_name')]) }}
</p>
<div class="flex flex-col gap-y-2 !mt-6">
<p class="font-semibold">{{ __('Why are donations important?') }}</p>
<p>{{ __('Donations are important, as it will help to pay our monthly bills needed to keep the hotel up & running, as well as adding new and exciting features for you and others to enjoy!') }}</p>
</div>
<div class="flex flex-col gap-y-2 !mt-6">
<p class="font-semibold">{{ __('Our terms') }}</p>
<p>{{ __('Once a donation has been made and received by us, it is non-refundable under any circumstances. The donated amount which is converted into website balance cannot be converted back into cash or other forms of money. By making a donation, you acknowledge and accept these terms and agree not to initiate a chargeback or dispute with your bank or card issuer.') }}</p>
</div>
<div class="flex flex-col gap-y-2 !mt-6">
<p class="font-semibold">{{ __('Notice') }}</p>
<p>{{ __('It is important to consider the consequences of our spending habits, especially when it comes to financial decisions. If you find yourself tempted to spend money you do not have, take a moment to reflect.') }}</p>
<p>{{ __('Remember, your financial well-being is crucial, and making responsible choices is key. If you are facing difficulties in controlling your spending habits, do not hesitate to seek friendly and professional guidance. There are resources available that can provide valuable advice and support.') }}</p>
</div>
</div>
</x-modals.regular-modal>
</x-modals.modal-wrapper>
</div>
<div class="col-span-12 grid grid-cols-12 gap-4">
<div class="order-last lg:order-1 col-span-12 md:col-span-9 grid grid-cols-12 gap-4">
<div class="col-span-12 md:col-span-3">
<x-page-header>
Categories
</x-page-header>
<div class="mt-3 space-y-2">
<a href="{{ route('shop.index') }}"
class="w-full flex items-center gap-4 rounded-lg overflow-hidden bg-[#2b303c] p-4 shadow text-gray-100 transition-all hover:scale-[101%]">
<img class="max-h-[50px] max-w-[50px]" src="{{ asset('/assets/images/icons/navigation/shop.png') }}" alt="">
{{ __('All') }}
</a>
@foreach($categories as $category)
<a href="{{ route('shop.index', $category->slug) }}"
class="w-full flex items-center gap-4 rounded-lg overflow-hidden bg-[#2b303c] p-4 shadow text-gray-100 transition-all hover:scale-[101%]">
<img class="max-h-[50px] max-w-[50px]" src="{{ $category->icon }}" alt="">
{{ $category->name }}
</a>
@endforeach
</div>
</div>
<div class="col-span-12 md:col-span-9 space-y-3">
<div class="grid grid-cols-1 lg:grid-cols-{{$articles->count() > 1 ? '2' : '1'}} gap-4">
@foreach ($articles as $article)
<x-shop.packages :article="$article"/>
@endforeach
</div>
</div>
</div>
<div class="col-span-12 md:col-span-3 space-y-4 lg:order-last">
<x-content.content-card icon="currency-icon">
<x-slot:title>
{{ __('Top up account') }}
</x-slot:title>
<x-slot:under-title>
{{ __('Donate to :hotel', ['hotel' => setting('hotel_name')]) }}
</x-slot:under-title>
<div class="text-sm text-center py-2 px-4 rounded text-black text-gray-100 bg-gray-700">
{{ __('Current balance: $:balance', ['balance' => auth()->user()->website_balance]) }}
</div>
@if(config('paypal.live.client_id') && config('paypal.live.client_secret'))
<form action="{{ route('paypal.process-transaction') }}" method="GET" class="mt-3">
@csrf
<x-form.input name="amount" type="number" value="0" placeholder="amount"/>
<button type="submit"
class="mt-2 w-full rounded bg-blue-600 hover:bg-blue-700 text-white p-2 border-2 border-blue-500 transition ease-in-out duration-150 font-semibold">
{{ __('Donate') }}
</button>
</form>
@else
<p class="dark:text-gray-100 mt-4 text-xs">
{{ __('Please setup the paypal credentials to allow for top ups') }}
</p>
@endif
</x-content.content-card>
<x-content.content-card icon="catalog-icon">
<x-slot:title>
{{ __('Voucher') }}
</x-slot:title>
<x-slot:under-title>
{{ __('Use a voucher for free credit') }}
</x-slot:under-title>
<form action="{{ route('shop.use-voucher') }}" method="POST">
@csrf
<x-form.input name="code" type="text" placeholder="Voucher"/>
<x-site-captchas/>
<x-form.secondary-button classes="mt-2">
{{ __('Use voucher') }}
</x-form.secondary-button>
</form>
</x-content.content-card>
</div>
</div>
@push('javascript')
<script type="module">
tippy('.user-badge');
</script>
@endpush
</x-app-layout>
@@ -1,212 +0,0 @@
<x-app-layout>
@push('title', __('Welcome to the best hotel on the web!'))
<div class="col-span-12 md:col-span-8 h-[250px] bg-gray-900/50 rounded-xl flex lg:px-8 py-8 items-center text-white relative overflow-hidden">
<div class="block lg:hidden w-40">
<a href="{{ route('profile.show', $user) }}"
class="absolute bottom-2 -left-4 lg:left-8 drop-shadow transition duration-300 ease-in-out hover:scale-105">
<img style="image-rendering: pixelated;"
src="{{ setting('avatar_imager') }}{{ $user->look }}&direction=2&head_direction=3&gesture=sml&action=wav&size=l"
alt="">
</a>
</div>
<div class="z-10">
<div class="hidden lg:block h-[200px] w-[200px] rounded-full relative overflow-hidden" style="background: url('/assets/images/dusk/me_circle_image.png')">
<div>
<a href="{{ route('profile.show', $user) }}"
class="absolute -bottom-12 left-2 lg:left-8 drop-shadow transition duration-300 ease-in-out hover:scale-105">
<img style="image-rendering: pixelated;"
src="{{ setting('avatar_imager') }}{{ $user->look }}&direction=2&head_direction=3&gesture=sml&action=wav&size=l"
alt="">
</a>
</div>
</div>
</div>
<div class="flex flex-col lg:flex-row justify-between self-start w-full px-4">
<div class="flex flex-col gap-1 self-start lg:ml-2 py-2 text-white ">
<h2 class="text-3xl font-semibold">
Hey {{ Auth::user()->username }}!
</h2>
<p class="italic">{{ Auth::user()->motto }}</p>
</div>
<div class="self-start lg:ml-14 w-full lg:w-64">
<a href="{{ route('nitro-client') }}">
<button type="submit" class="w-full text-white bg-yellow-500 border-2 border-yellow-300 w-full rounded transition duration-300 ease-in-out hover:scale-[102%] py-2 px-4">
{{ __('Go to :hotel', ['hotel' => setting('hotel_name')]) }}
</button>
</a>
</div>
</div>
<div class="absolute w-full bottom-0 left-0 h-20 bg-gray-900 py-4 lg:pl-64 px-4 lg:px-0">
<div class="flex gap-x-6 h-full items-center justify-center lg:justify-start">
<x-currency icon="nav-credit-icon">
<x-slot:currency>
{{ auth()->user()->credits }}
</x-slot:currency>
<span class="hidden lg:block">{{ __('Credits') }}</span>
</x-currency>
<x-currency icon="nav-ducket-icon">
<x-slot:currency>
{{ auth()->user()->currency('duckets') }}
</x-slot:currency>
<span class="hidden lg:block"> {{ __('Duckets') }}</span>
</x-currency>
<x-currency icon="nav-diamond-icon">
<x-slot:currency>
{{ auth()->user()->currency('diamonds') }}
</x-slot:currency>
<span class="hidden lg:block">{{ __('Diamonds') }}</span>
</x-currency>
</div>
</div>
</div>
{{-- Articles --}}
<div class="col-span-12 md:col-span-4 h-[250px]">
<!-- Slider main container -->
<div class="swiper h-[250px] rounded-md">
<!-- If we need pagination -->
<div class="swiper-pagination"></div>
<!-- If we need navigation buttons -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<!-- Additional required wrapper -->
<div class="swiper-wrapper" style="z-index: 14;">
@foreach($articles as $article)
<x-article-card :article="$article" />
@endforeach
</div>
</div>
</div>
<div class="col-span-12 md:col-span-8">
<div
class="flex flex-col justify-between gap-3 rounded bg-[#2b303c] p-1 shadow-md lg:flex-row">
<div
class="py-2 px-2 relative flex justify-center items-center rounded text-sm font-semibold bg-[#e9b124]">
<div class="absolute bg-[#e9b124] w-6 h-6 -right-1 rotate-45 invisible lg:visible"></div>
<img src="{{ asset('/assets/images/icons/online-friends.png') }}" alt="{{ __('Online Friends') }}"
class="mr-2 mb-1 inline-flex" style="max-width: 24px; max-height: 24px">
<span class="relative text-white h-100">{{ __('Online Friends') }}</span>
</div>
<div class="relative flex flex-1 items-center justify-center gap-2 pl-2 h-100 sm:justify-start">
@foreach ($onlineFriends as $friend)
<div data-popover-target="friend-{{ $friend->username }}"
style="image-rendering: pixelated; background-image: url({{ setting('avatar_imager') }}{{ $friend->look }}&direction=2&head_direction=3&gesture=sml&action=wav&headonly=1&size=s)"
class="inline-block h-10 w-10 rounded-full border-2 border-gray-300 bg-center bg-no-repeat">
</div>
<div data-popover id="friend-{{ $friend->username }}" role="tooltip"
class="invisible absolute z-10 inline-block w-64 rounded-lg border border-gray-200 bg-white text-sm font-light text-gray-500 opacity-0 shadow-sm transition-opacity duration-300">
<div
class="rounded-t-lg border-b border-gray-200 bg-gray-100 px-3 py-2">
<div
class="flex w-full items-center justify-center font-semibold text-gray-900">
{{ $friend->username }}
</div>
</div>
<div class="overflow-y-auto px-3 py-2" style="max-height: 200px">
<b class="mr-1 font-bold">{{ __('Motto') }}:</b>{{ $friend->motto }}<br>
<b
class="mr-1 font-bold">{{ __('Online Since') }}
:</b>{{ date(config('habbo.site.date_format'), $friend->last_online) }}
</div>
<div data-popper-arrow></div>
</div>
@endforeach
</div>
</div>
</div>
<div class="col-span-12 md:col-span-8">
<x-content.content-card icon="hotel-icon">
<x-slot:title>
{{ sprintf(__('User Referrals (%s/%s)'), auth()->user()->referrals->referrals_total ?? 0, setting('referrals_needed')) }}
</x-slot:title>
<x-slot:under-title>
{{ __('Referral new users and be rewarded by in-game goods') }}
</x-slot:under-title>
<div class="text-sm">
{{ __('Here at :hotel we have added a referral system, allowing you to obtain a bonus for every :needed users that registers through your referral link will allow you to claim a reward of :amount diamonds!', ['hotel' => setting('hotel_name'), 'needed' => setting('referrals_needed'), 'amount' => setting('referral_reward_amount')]) }}
<br>
<small class="text-gray-300">
{{ __('Boosting referrals by making own accounts will lead to removal of all progress, currency, inventory and a potential ban') }}
</small>
<div class="grid grid-cols-12 gap-2 mt-2">
<x-form.input classes="col-span-12 md:col-span-10" name="referral"
value="{{ sprintf('%s/register/%s', config('habbo.site.site_url'), auth()->user()->referral_code) }}"
:autofocus="false" :readonly="true" />
<div class="col-span-12 flex md:col-span-2" onclick="copyCode()">
<x-form.secondary-button>
{{ __('Copy code') }}
</x-form.secondary-button>
</div>
</div>
@if (auth()->user()->referrals?->referrals_total >= (int) setting('referrals_needed'))
<a href="{{ route('claim.referral-reward') }}" class="text-decoration-none">
<x-form.secondary-button classes="mt-2">
{{ __('Claim your referrals reward!') }}
</x-form.secondary-button>
</a>
@else
<button disabled class="mt-2 w-full rounded bg-[#171a23] p-2 text-white">
{{ sprintf(__('You need to refer :needed more users, before being able to claim your reward', ['needed' =>auth()->user()->referralsNeeded() ?? 0]),auth()->user()->referrals->referrals_total ?? 0) }}
</button>
@endif
</div>
</x-content.content-card>
</div>
@push('javascript')
<script>
var Toast = Swal.mixin({
toast: true,
position: "top-end",
showConfirmButton: false,
timer: 4000,
timerProgressBar: true,
didOpen: (toast) => {
toast.addEventListener("mouseenter", Swal.stopTimer);
toast.addEventListener("mouseleave", Swal.resumeTimer);
}
});
function copyCode() {
let copyText = document.querySelector("#referral");
copyText.select();
document.execCommand("copy");
Toast.fire({
icon: "success",
title: '{{ __('Your referral code has been copied to your clipbord!') }}',
customClass: {
container: 'dark-mode-toast' // Add this class for dark mode
},
});
}
</script>
@endpush
</x-app-layout>
@@ -1,209 +0,0 @@
<x-app-layout>
@push('title', $user->username)
<div class="col-span-12 md:col-span-8 md:max-h-[250px] bg-gray-900/50 rounded-xl text-gray-200">
<div class="flex mt-6">
<div class="ml-6 hidden md:block">
<div class="md:h-[200px] md:w-[200px] rounded-full relative overflow-hidden"
style="background: url('/assets/images/dusk/me_circle_image.png')">
<div>
<a href="{{ route('profile.show', $user) }}"
class="absolute -bottom-12 left-8 lg:left-8 drop-shadow transition duration-300 ease-in-out hover:scale-105">
<img style="image-rendering: pixelated;"
src="{{ setting('avatar_imager') }}{{ $user->look }}&direction=2&head_direction=3&gesture=sml&action=wav&size=l"
alt="">
</a>
</div>
</div>
</div>
<div class="flex flex-col w-full">
<div class="flex flex-col md:flex-row justify-between w-full px-4 pr-6">
<div class="flex flex-col gap-1 self-start lg:ml-2 py-2 text-white">
<h4 class="text-lg font-semibold">
{{ __('My name is,') }}
</h4>
<h2 class="text-3xl font-semibold">
{{ $user->username }}
</h2>
<div class="flex flex-col">
<p class="mt-4 italic">{{ $user->motto }}</p>
<small class="text-gray-400">Last online: {{ date('Y-m-d', $user->last_online) }}</small>
</div>
</div>
<div class="flex flex-col align-content-end gap-y-4 h-full mt-4">
<x-currency icon="nav-credit-icon">
<x-slot:currency>
{{ auth()->user()->credits }}
</x-slot:currency>
<span>{{ __('Credits') }}</span>
</x-currency>
<x-currency icon="nav-ducket-icon">
<x-slot:currency>
{{ auth()->user()->currency('duckets') }}
</x-slot:currency>
<span> {{ __('Duckets') }}</span>
</x-currency>
<x-currency icon="nav-diamond-icon">
<x-slot:currency>
{{ auth()->user()->currency('diamonds') }}
</x-slot:currency>
<span>{{ __('Diamonds') }}</span>
</x-currency>
</div>
</div>
<div class="flex justify-end md:pr-6">
<div class="flex items-center gap-3 mt-6 text-xs ml-6 md:ml-8">
@foreach($user->badges as $badge)
<div>
<img src="{{ setting('badges_path') }}/{{ $badge->badge_code }}.gif" alt="">
</div>
@endforeach
</div>
</div>
</div>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mt-10">
@foreach($photos as $photo)
<a href="{{ $photo->url }}" data-fancybox="gallery"
class="cursor-pointer relative transition duration-300 ease-in-out hover:scale-[102%]">
<div class="photo-overlay"></div>
<img class="h-[250px] w-full object-cover object-center rounded-md custom-shadow"
src="{{ $photo->url }}" alt="">
<div class="absolute right-2 bottom-2 bg-black/70 p-2 rounded-md text-white flex gap-x-2 z-[5]">
<img class="self-center" src="{{ asset('/assets/images/dusk/author_camera_icon.png') }}" alt="">
<small>
{{ $photo->user->username }}
</small>
</div>
</a>
@endforeach
</div>
</div>
<div class="col-span-12 md:col-span-4">
<x-content.content-card>
<x-slot:title>
{{ __('Rooms') }}
</x-slot:title>
<div class="grid grid-cols-3 sm:grid-cols-6 md:grid-cols-3 lg:grid-cols-4 gap-4 w-full">
@forelse($user->rooms as $room)
<div class="flex flex-col justify-center">
<div class="relative w-[80px] h-[80px]">
<img
class="rounded"
src="{{ asset('/assets/images/profile/room_placeholder.png') }}"
alt="Test"
>
<div class="absolute -bottom-2 left-1/2 transform -translate-x-1/2">
<div
class="{{ 0 > 0 ? 'bg-[#00800B]' : 'bg-gray-400' }} px-1 py-[1px] font-semibold rounded flex gap-x-[3px] text-white items-center text-xs">
<svg xmlns="http://www.w3.org/2000/svg" class="h-[12px]" viewBox="0 0 20 20"
fill="currentColor">
<path
fill-rule="evenodd"
d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z"
clip-rule="evenodd"
/>
</svg>
0
</div>
</div>
</div>
<p class="mt-4 ml-2 text-sm truncate w-[80px]">
{{ $room->name }}
</p>
</div>
@empty
<div class="col-span-12 text-center">
<p>This user currently does not have any rooms</p>
</div>
@endforelse
</div>
</x-content.content-card>
<div class="mt-4">
<x-content.content-card>
<x-slot:title>
{{ __('Guestbook') }}
</x-slot:title>
<div class="flex flex-col gap-2">
@foreach($guestbook as $post)
<div class="bg-gray-600 p-2 rounded-md text-gray-200 h-[60px] overflow-hidden">
<div class="flex relative">
<img class="-mt-5 drop-shadow"
src="{{ setting('avatar_imager') }}/{{ $post->user?->look }}"
alt="{{ $post->user?->username }}">
<div class="flex flex-col">
<div class="w-full flex items-center">
<a href="{{ route('profile.show', $post->user ?? $user) }}"
class="text-blue-300 hover:underline">
{{ $post->user?->username }}
</a>
@if($post->profile_id === Auth::id() || $user->id === Auth::id() || Auth::user()->rank > (int)setting('min_staff_rank'))
<form action="{{ route('guestbook.destroy', [$user, $post]) }}" method="POST">
@method('DELETE')
@csrf
<button type="submit" class="text-white">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4">
<path stroke-linecap="round" stroke-linejoin="round" d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0" />
</svg>
</button>
</form>
@endif
</div>
<span>{{ Str::limit($post->message, 30) }}</span>
</div>
</div>
</div>
@endforeach
<form class="flex flex-col md:flex-row gap-2 mt-2" action="{{ route('guestbook.store', $user) }}"
method="POST">
@csrf
<x-form.input classes="w-full md:w-2/3" name="message"
placeholder="Write something on their guestbook"
:autofocus="false"/>
<div class="w-full md:w-1/3">
<x-form.secondary-button>
{{ __('Post message') }}
</x-form.secondary-button>
</div>
</div>
</div>
</x-content.content-card>
</div>
</div>
@push('javascript')
<script type="module">
tippy('.user-badge');
tippy('.friend');
tippy('.group');
</script>
@endpush
</x-app-layout>
@@ -1,70 +0,0 @@
<x-app-layout>
@push('title', __('Account settings'))
<div class="col-span-12 flex flex-col gap-y-3 md:col-span-3">
<x-user.settings.settings-navigation />
</div>
<div class="col-span-12 flex flex-col gap-y-3 md:col-span-9">
<x-content.content-card icon="hotel-icon">
<x-slot:title>
{{ __('Account settings') }}
</x-slot:title>
<x-slot:under-title>
{{ __('Manage your account settings') }}
</x-slot:under-title>
<form action="{{ route('settings.account.update') }}" method="POST" class="flex flex-col gap-y-4">
@method('PUT')
@csrf
<div class="flex flex-col gap-y-1">
<x-form.label for="mail">
{{ __('E-mail') }}
<x-slot:info>
{{ __('Make sure to use an email that you remember, if you ever lose your password, your email will be required.') }}
</x-slot:info>
</x-form.label>
<x-form.input name="mail" type="email" value="{{ $user->mail }}" :autofocus="true" />
</div>
@if ($user->settings?->allow_name_change)
<div class="flex flex-col gap-y-1">
<x-form.label for="username">
{{ __('Username') }}
<x-slot:info>
{{ __('Your username is what you and others will see in-game') }}
</x-slot:info>
</x-form.label>
<x-form.input name="username" value="{{ $user->username }}" />
</div>
@endif
<div class="flex flex-col gap-y-1">
<x-form.label for="motto">
{{ __('Motto') }}
<x-slot:info>
{{ __('Spice up your profile with a nice motto') }}
</x-slot:info>
</x-form.label>
<x-form.input name="motto" value="{{ $user->motto }}" />
</div>
<x-site-captchas />
<div class="flex w-full justify-start md:justify-end">
<x-form.secondary-button classes="lg:w-1/4">
{{ __('Update settings') }}
</x-form.secondary-button>
</div>
</form>
</x-content.content-card>
</div>
</x-app-layout>
@@ -1,68 +0,0 @@
<x-app-layout>
@push('title', __('Password settings'))
<div class="col-span-12 flex flex-col gap-y-3 md:col-span-3">
<x-user.settings.settings-navigation />
</div>
<div class="col-span-12 flex flex-col gap-y-3 md:col-span-9">
<x-content.content-card icon="hotel-icon">
<x-slot:title>
{{ __('Password settings') }}
</x-slot:title>
<x-slot:under-title>
{{ __('Change your password by filling out the fields below') }}
</x-slot:under-title>
<form action="{{ route('settings.password.update') }}" method="POST" class="flex flex-col gap-y-4">
@method('PUT')
@csrf
<div class="flex flex-col gap-y-1">
<x-form.label for="current_password">
{{ __('Current password') }}
<x-slot:info>
{{ __('Enter your current password') }}
</x-slot:info>
</x-form.label>
<x-form.input name="current_password" type="password" :autofocus="true" />
</div>
<div class="flex flex-col gap-y-1">
<x-form.label for="password">
{{ __('New password') }}
<x-slot:info>
{{ __('Enter a new secure password. Do not forget to save it somewhere safe') }}
</x-slot:info>
</x-form.label>
<x-form.input name="password" type="password" />
</div>
<div class="flex flex-col gap-y-1">
<x-form.label for="password_confirmation">
{{ __('Confirm new password') }}
<x-slot:info>
{{ __('Please confirm your new password') }}
</x-slot:info>
</x-form.label>
<x-form.input name="password_confirmation" type="password" />
</div>
<x-site-captchas />
<div class="flex w-full justify-start md:justify-end">
<x-form.secondary-button classes="lg:w-1/4">
{{ __('Update password') }}
</x-form.secondary-button>
</div>
</form>
</x-content.content-card>
</div>
</x-app-layout>
@@ -1,72 +0,0 @@
<x-app-layout>
@push('title', __('Session logs'))
<div class="col-span-12 flex flex-col gap-y-3 md:col-span-3">
<x-user.settings.settings-navigation />
</div>
<div class="col-span-12 flex flex-col gap-y-3 md:col-span-9">
<x-content.content-card icon="hotel-icon">
<x-slot:title>
{{ __('Session logs') }}
</x-slot:title>
<x-slot:under-title>
{{ __('Keep an eye on all your active sessions') }}
</x-slot:under-title>
<div class="overflow-hidden overflow-x-auto rounded border-2 border-gray-700">
<table class="min-w-full text-sm divide-y divide-gray-700">
<thead class="bg-[#21242e]">
<tr>
<th class="whitespace-nowrap px-4 py-2 text-left font-medium text-gray-200">
{{ __('IP') }}
</th>
<th class="whitespace-nowrap px-4 py-2 text-left font-medium text-gray-200">
{{ __('IP Current Device') }}
</th>
<th class="whitespace-nowrap px-4 py-2 text-left font-medium text-gray-200">
{{ __('Is Desktop') }}
</th>
<th class="whitespace-nowrap px-4 py-2 text-left font-medium text-gray-200">
{{ __('Platform') }}
</th>
<th class="whitespace-nowrap px-4 py-2 text-left font-medium text-gray-200">
{{ __('Browser') }}
</th>
<th class="whitespace-nowrap px-4 py-2 text-left font-medium text-gray-200">
{{ __('Last Activity') }}
</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-200 dark:divide-gray-700">
@forelse ($logs as $log)
<tr>
<td class="whitespace-nowrap px-4 py-2 font-medium text-gray-200">
{{ $log->ip_address }}
</td>
<td class="px-4 py-2 text-gray-200">
{{ $log->is_current_device ? 'true' : 'false' }}</td>
<td class="px-4 py-2 text-gray-200">
{{ $log->agent['is_desktop'] ? 'true' : 'false' }}</td>
<td class="px-4 py-2 text-gray-200">{{ $log->agent['platform'] }}
</td>
<td class="px-4 py-2 text-gray-200">{{ $log->agent['browser'] }}</td>
<td class="whitespace-nowrap px-4 py-2 text-gray-200">
{{ $log->last_active }}</td>
</tr>
@empty
<tr>
<td class="whitespace-nowrap px-4 py-2 text-center text-gray-200"
colspan="3">
{{ __('No session logs found') }}
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</x-content.content-card>
</div>
</x-app-layout>
@@ -1,107 +0,0 @@
<x-app-layout>
@push('title', __('Two factor'))
<div class="col-span-12 flex flex-col gap-y-3 md:col-span-3">
<x-user.settings.settings-navigation />
</div>
<div class="col-span-12 flex flex-col gap-y-3 md:col-span-9">
<x-content.content-card icon="hotel-icon">
<x-slot:title>
{{ __('Two factor authentication') }}
</x-slot:title>
<x-slot:under-title>
{{ __('Add an extra layer of security to your account by enabling two-factor authentication') }}
</x-slot:under-title>
<!-- 2FA enabled, we display the QR code : -->
@if (auth()->user()->two_factor_confirmed)
<form action="{{ route('user.two-factor.disable') }}" method="post">
@csrf
@method('delete')
<x-form.danger-button>
{{ __('Disable 2FA') }}
</x-form.danger-button>
</form>
{{-- 2FA enabled but not yet confirmed, we show the QRcode and ask for confirmation --}}
@elseif(auth()->user()->two_factor_secret)
<p>{{ __('Validate your two-factor enabling by scanning the following QR-code and enter your auto-generated 2-factor code from your phone.') }}
</p>
<div class="mt-4 flex flex-col items-center md:flex-row md:items-start md:justify-center">
<div class="flex gap-x-8 rounded bg-gray-100 px-4 py-2 text-black">
<span class="flex items-center">
{!! auth()->user()->twoFactorQrCodeSvg() !!}
</span>
<div>
<strong>
{{ __('Recovery codes:') }}
</strong>
<ul>
@foreach (auth()->user()->recoveryCodes() as $code)
<li>{{ $code }}</li>
@endforeach
</ul>
</div>
</div>
</div>
<div class="mt-2 flex justify-center text-xs italic text-red-500">
<div class="w-full lg:w-[480px]">
<strong>{{ __('Please save your recovery codes somewhere safe! If you lose access to your 2FA codes, those recovery codes will be needed to regain access your account.') }}</strong>
</div>
</div>
<form action="{{ route('two-factor.verify') }}" method="POST" class="mt-8">
@csrf
<x-form.label for="code">
{{ __('Code') }}
<x-slot:info>
{{ __('Please scan the QR-code above with your phone to retrieve your two-factor authentication code.') }}
</x-slot:info>
</x-form.label>
<x-form.input classes="mb-3" name="code" placeholder="{{ __('Code') }}" />
@if (setting('google_recaptcha_enabled'))
<div class="g-recaptcha" data-sitekey="{{ config('habbo.site.recaptcha_site_key') }}"></div>
@endif
@if (setting('cloudflare_turnstile_enabled'))
<x-turnstile />
@endif
<x-form.secondary-button classes="mt-4">
{{ __('Verify 2FA') }}
</x-form.secondary-button>
</form>
@else
<div class="flex flex-col items-end">
<div class="flex w-full flex-col gap-y-3 dark:text-gray-100">
<p>
{{ __('Here at :hotel we take security very serious and therefore we offer you as a user a way to secure your beloved account even further, by allowing you to enable Googles 2-factor authentication!', ['hotel' => setting('hotel_name')]) }}
</p>
<p>
{{ __('2-factor authentication adds an extra layer of security to your account, making it physical impossible to access it without having access to your mobile phone as only your phone will contain the 2-factor authentication code which will be re-generated every 30 seconds automatically') }}
</p>
</div>
<form action="{{ route('user.two-factor.enable') }}" method="post" class="mt-8">
@csrf
<x-form.secondary-button>
{{ __('Activate 2FA') }}
</x-form.secondary-button>
</form>
</div>
@endif
</x-content.content-card>
</div>
</x-app-layout>
@@ -1,22 +0,0 @@
@props(['icon' => '', 'classes' => ''])
<div
class="w-full flex flex-col gap-y-4 rounded overflow-hidden bg-white pb-3 shadow {{ $classes }}">
<div class="flex gap-x-2 border-b bg-gray-50 p-3">
<div
class="max-w-[50px] max-h-[50px] min-w-[50px] min-h-[50px] rounded-full relative flex items-center justify-center {{ $icon }}">
</div>
<div class="flex flex-col justify-center text-sm">
<p class="font-semibold text-black">{{ $title }}</p>
@if(isset($underTitle))
<p>{{ $underTitle }}</p>
@endif
</div>
</div>
<section class="px-3 text-[14px]">
{{ $slot }}
</section>
</div>
@@ -1,11 +0,0 @@
@props(['primaryColor', 'secondaryColor'])
<div class="flex h-[45px] col-span-4 sm:col-span-2 md:col-span-1">
<div class="w-1/3 {{ $secondaryColor }} rounded-l flex items-center justify-center">
{{ $icon }}
</div>
<div class="p-2 rounded rounded-l-none {{ $primaryColor }} w-2/3 font-semibold flex justify-center items-center">
{{ $slot }}
</div>
</div>
@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6">
<path stroke-linecap="round" stroke-linejoin="round" d="M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 0 0-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 0 0-16.536-1.84M7.5 14.25 5.106 5.272M6 20.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Zm12.75 0a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Z" />
</svg>

Before

Width:  |  Height:  |  Size: 478 B

@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"
stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7" />
</svg>

Before

Width:  |  Height:  |  Size: 218 B

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-6 w-6">
<path stroke-linecap="round" stroke-linejoin="round" d="M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z" />
<path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
</svg>

Before

Width:  |  Height:  |  Size: 487 B

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
class="h-5 w-5">
<path stroke-linecap="round" stroke-linejoin="round"
d="M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15" />
</svg>

Before

Width:  |  Height:  |  Size: 363 B

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-6 w-6">
<path stroke-linecap="round" stroke-linejoin="round" d="M21 11.25v8.25a1.5 1.5 0 0 1-1.5 1.5H5.25a1.5 1.5 0 0 1-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 1 0 9.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1 1 14.625 7.5H12m0 0V21m-8.625-9.75h18c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125h-18c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125Z" />
</svg>

Before

Width:  |  Height:  |  Size: 518 B

@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="h-5 w-5">
<path
d="M11.47 3.84a.75.75 0 011.06 0l8.69 8.69a.75.75 0 101.06-1.06l-8.689-8.69a2.25 2.25 0 00-3.182 0l-8.69 8.69a.75.75 0 001.061 1.06l8.69-8.69z" />
<path
d="M12 5.432l8.159 8.159c.03.03.06.058.091.086v6.198c0 1.035-.84 1.875-1.875 1.875H15a.75.75 0 01-.75-.75v-4.5a.75.75 0 00-.75-.75h-3a.75.75 0 00-.75.75V21a.75.75 0 01-.75.75H5.625a1.875 1.875 0 01-1.875-1.875v-6.198a2.29 2.29 0 00.091-.086L12 5.43z" />
</svg>

Before

Width:  |  Height:  |  Size: 541 B

@@ -1,4 +0,0 @@
<svg {{ $attributes }} fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 300 B

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
class="h-5 w-5">
<path stroke-linecap="round" stroke-linejoin="round"
d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99" />
</svg>

Before

Width:  |  Height:  |  Size: 377 B

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="h-4 w-4">
<path fill-rule="evenodd"
d="M7.5 6a4.5 4.5 0 119 0 4.5 4.5 0 01-9 0zM3.751 20.105a8.25 8.25 0 0116.498 0 .75.75 0 01-.437.695A18.683 18.683 0 0112 22.5c-2.786 0-5.433-.608-7.812-1.7a.75.75 0 01-.437-.695z"
clip-rule="evenodd" />
</svg>

Before

Width:  |  Height:  |  Size: 354 B

@@ -1,230 +0,0 @@
<x-dynamic-component
:component="$getFieldWrapperView()"
:id="$getId()"
:label="$getLabel()"
:label-sr-only="$isLabelHidden()"
:helper-text="$getHelperText()"
:hint="$getHint()"
:hint-icon="$getHintIcon()"
:required="$isRequired()"
:state-path="$getStatePath()"
class="relative z-0"
>
<div x-data="{ state: $wire.{{ $applyStateBindingModifiers('entangle(\'' . $getStatePath() . '\')') }}, initialized: false, editorChanged: false }"
x-init="(() => {
window.addEventListener('DOMContentLoaded', () => initCKEditor())
$nextTick(() => initCKEditor())
const initCKEditor = () => {
if(initialized) return
if(typeof CKEDITOR === undefined || !$refs.ckeditor) {
console.error('[CKEDITOR] not found or [CKEDITOR element] not found')
return
}
CKEDITOR.ClassicEditor.create($refs.ckeditor, {
toolbar: {
items: [
'exportPDF',
'exportWord',
'|',
'findAndReplace',
'selectAll',
'heading',
'|',
'bold',
'italic',
'strikethrough',
'underline',
'code',
'subscript',
'superscript',
'removeFormat',
'|',
'bulletedList',
'numberedList',
'outdent',
'indent',
'|',
'undo',
'redo',
'fontSize',
'fontFamily',
'fontColor',
'fontBackgroundColor',
'highlight',
'|',
'alignment',
'link',
'insertImage',
'blockQuote',
'insertTable',
'mediaEmbed',
'codeBlock',
'htmlEmbed',
'specialCharacters',
'horizontalLine',
'pageBreak',
'|',
'sourceEditing',
],
shouldNotGroupWhenFull: true,
},
list: {
properties: {
styles: true,
startIndex: true,
reversed: true,
},
},
heading: {
options: [
{
model: 'paragraph',
title: 'Paragraph',
class: 'ck-heading_paragraph',
},
{
model: 'heading1',
view: 'h1',
title: 'Heading 1',
class: 'ck-heading_heading1',
},
{
model: 'heading2',
view: 'h2',
title: 'Heading 2',
class: 'ck-heading_heading2',
},
{
model: 'heading3',
view: 'h3',
title: 'Heading 3',
class: 'ck-heading_heading3',
},
{
model: 'heading4',
view: 'h4',
title: 'Heading 4',
class: 'ck-heading_heading4',
},
{
model: 'heading5',
view: 'h5',
title: 'Heading 5',
class: 'ck-heading_heading5',
},
{
model: 'heading6',
view: 'h6',
title: 'Heading 6',
class: 'ck-heading_heading6',
},
],
},
placeholder: '. . .',
fontFamily: {
options: [
'default',
'Arial, Helvetica, sans-serif',
'Courier New, Courier, monospace',
'Georgia, serif',
'Lucida Sans Unicode, Lucida Grande, sans-serif',
'Tahoma, Geneva, sans-serif',
'Times New Roman, Times, serif',
'Trebuchet MS, Helvetica, sans-serif',
'Verdana, Geneva, sans-serif',
'Montserrat, sans-serif'
],
supportAllValues: true,
},
htmlSupport: {
allow: [
{
name: /.*/,
attributes: true,
classes: true,
styles: true,
},
],
},
htmlEmbed: {
showPreviews: true,
},
link: {
decorators: {
addTargetToExternalLinks: true,
defaultProtocol: 'https://',
toggleDownloadable: {
mode: 'manual',
label: 'Downloadable',
attributes: {
download: 'file',
},
},
},
},
removePlugins: [
'CKBox',
'CKFinder',
'EasyImage',
'RealTimeCollaborativeComments',
'RealTimeCollaborativeTrackChanges',
'RealTimeCollaborativeRevisionHistory',
'PresenceList',
'Comments',
'TrackChanges',
'TrackChangesData',
'RevisionHistory',
'Pagination',
'WProofreader',
'MathType',
],
}).then(editor => {
if(state) editor.setData(state)
editor.model.document.on('change:data', () => { editorChanged = true })
editor.ui.focusTracker.on('change:isFocused', (evt, name, isFocused) => {
if(isFocused || !editorChanged) return
state = editor.getData()
editorChanged = false
})
});
initialized = true
}
})()"
x-cloak
wire:ignore
>
@unless($isDisabled())
<input
id="ck-editor-{{ $getId() }}"
type="hidden"
x-ref="ckeditor"
placeholder="{{ $getPlaceholder() }}"
>
@else
<div
x-html="state"
style="font-size: 13px"
@class([
'prose ck-content block w-full max-w-none rounded-lg border border-gray-300 bg-white p-3 opacity-70 shadow-sm transition duration-75',
'dark:prose-invert dark:bg-gray-700 dark:border-gray-600 dark:text-white' => true,
])
></div>
@endunless
</div>
</x-dynamic-component>
@once
@push('scripts')
<script src="https://cdn.ckeditor.com/ckeditor5/35.4.0/super-build/ckeditor.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
@endpush
@endonce
@@ -1,57 +0,0 @@
@php
use Filament\Infolists\Components\IconEntry\IconEntrySize;
@endphp
<x-dynamic-component :component="$getEntryWrapperView()" :entry="$entry">
<div
{{
$attributes
->merge($getExtraAttributes(), escape: false)
->class([
'absolute flex items-center justify-center w-6 h-6 bg-gray-200 rounded-full -start-3 ring-4 ring-white dark:bg-gray-700 dark:ring-gray-900',
])
}}
>
@if (count($arrayState = \Illuminate\Support\Arr::wrap($getState())))
@foreach ($arrayState as $state)
@if ($icon = $getIcon($state))
@php
$color = $getColor($state) ?? 'gray';
$size = $getSize($state) ?? IconEntrySize::Large;
@endphp
<x-filament::icon
:icon="$icon"
@class([
'fi-in-icon-item',
match ($size) {
IconEntrySize::ExtraSmall, 'xs' => 'fi-in-icon-item-size-xs h-3 w-3',
IconEntrySize::Small, 'sm' => 'fi-in-icon-item-size-sm h-4 w-4',
IconEntrySize::Medium, 'md' => 'fi-in-icon-item-size-md h-5 w-5',
IconEntrySize::Large, 'lg' => 'fi-in-icon-item-size-lg h-6 w-6',
IconEntrySize::ExtraLarge, 'xl' => 'fi-in-icon-item-size-xl h-7 w-7',
IconEntrySize::TwoExtraLarge, IconEntrySize::ExtraExtraLarge, '2xl' => 'fi-in-icon-item-size-2xl h-8 w-8',
default => $size,
},
match ($color) {
'gray' => 'fi-color-gray text-gray-400 dark:text-gray-500',
default => 'fi-color-custom text-custom-500 dark:text-custom-400',
},
])
@style([
\Filament\Support\get_color_css_variables(
$color,
shades: [400, 500],
alias: 'infolists::components.icon-entry.item',
) => $color !== 'gray',
])
/>
@endif
@endforeach
@elseif (($placeholder = $getPlaceholder()) !== null)
<div class="text-gray-500 text-sm p-4">
{{ $placeholder }}
</div>
@endif
</div>
</x-dynamic-component>
@@ -1,7 +0,0 @@
<x-dynamic-component :component="$getEntryWrapperView()" :entry="$entry">
<div>
{{ $getModifiedState() ?? (!is_array($getState()) ? $getState() ?? $getPlaceholder() : null) }}
</div>
</x-dynamic-component>
@@ -1,53 +0,0 @@
@php
$isContained = $isContained();
@endphp
<div x-data="{}"
x-load-css="[@js(\Filament\Support\Facades\FilamentAsset::getStyleHref('activitylog-styles', package: 'rmsramos/activitylog'))]"
>
</div>
<x-dynamic-component :component="$getEntryWrapperView()" :entry="$entry">
<div
{{
$attributes
->merge([
'id' => $getId(),
], escape: false)
->merge($getExtraAttributes(), escape: false)
->class([
'fi-in-repeatable',
'fi-contained' => $isContained,
])
}}
>
@if (count($childComponentContainers = $getChildComponentContainers()))
<ol class="relative border-gray-200 border-s dark:border-gray-700">
<x-filament-schemas::grid
:default="$getGridColumns('default')"
:sm="$getGridColumns('sm')"
:md="$getGridColumns('md')"
:lg="$getGridColumns('lg')"
:xl="$getGridColumns('xl')"
:two-xl="$getGridColumns('2xl')"
class="gap-2"
>
@foreach ($childComponentContainers as $container)
<li
@class([
'mb-4 ms-6',
'fi-in-repeatable-item block',
'rounded-xl bg-white p-4 shadow-sm ring-1 ring-gray-950/5 dark:bg-white/5 dark:ring-white/10' => $isContained,
])
>
{{ $container }}
</li>
@endforeach
</x-filament-schemas::grid>
</ol>
@elseif (($placeholder = $getPlaceholder()) !== null)
<div class="text-gray-500 text-sm p-4">
{{ $placeholder }}
</div>
@endif
</div>
</x-dynamic-component>
@@ -1,13 +0,0 @@
<x-dynamic-component :component="$getEntryWrapperView()" :entry="$entry">
<div
{{
$attributes
->merge($getExtraAttributes(), escape: false)
->class(['fi-in-text w-full -mt-6'])
}}
>
{{ $getModifiedState() }}
</div>
</x-dynamic-component>
@@ -1,3 +0,0 @@
<x-filament-panels::page>
{{ $this->form }}
</x-filament-panels::page>
@@ -1,93 +0,0 @@
<x-filament::page>
<div class="flex items-center justify-between gap-2">
<div class="w-full mr-2">
{{ $this->search }}
</div>
@if(config('filament-log-manager.allow_delete'))
<div class="w-auto ml-2">
<x-filament::button
x-on:click="window.dispatchEvent(new CustomEvent('open-modal', { detail: { id: 'filament-log-manager-delete-log-file-modal' } }));"
:disabled="is_null($this->logFile)"
type="button"
color="danger"
>
{{ __('filament-log-manager::translations.delete') }}
</x-filament::button>
</div>
@endif
@if(config('filament-log-manager.allow_download'))
<div class="w-auto ml-2">
<x-filament::button
wire:click="download"
:disabled="is_null($this->logFile)"
type="button"
color="primary"
>
{{ __('filament-log-manager::translations.download') }}
</x-filament::button>
</div>
@endif
</div>
<hr class="dark:border-gray-700">
<div>
<div>
<div x-data="{ isCardOpen: null }" class="flex flex-col">
@forelse($this->getLogs() as $key => $log)
<div
class="rounded-xl relative mb-2 py-3 px-3 bg-{{ $log['level_class'] }}"
:class="{'no-bottom-radius mb-0': isCardOpen == {{$key}}}"
>
<a
@click="isCardOpen = isCardOpen == {{$key}} ? null : {{$key}} "
style="cursor: pointer;"
class="block overflow-hidden rounded-t-xl text-white"
>
<span>[{{ $log['date'] }}]</span>
{{ Str::limit($log['text'], 100) }}
</a>
</div>
<div x-show="isCardOpen=={{$key}}" class="mb-2 px-4 py-4 bg-white dark:bg-gray-800 text-gray-900 dark:text-white rounded-xl no-top-radius">
<div class="space-y-2">
<p>{{$log['text']}}</p>
@if(!empty($log['stack']))
<div class="bg-gray-100 dark:bg-gray-900 !mt-4 p-4 text-sm opacity-40">
<pre style="overflow-x: scroll;"><code>{{ trim($log['stack']) }}</code></pre>
</div>
@endif
</div>
</div>
@empty
<h3 class="text-center">{{ __('filament-log-manager::translations.no_logs') }}</h3>
@endforelse
</div>
</div>
</div>
<x-filament::modal id="filament-log-manager-delete-log-file-modal">
<x-slot name="heading">
{{ __('filament-log-manager::translations.modal_delete_heading') }}
</x-slot>
<x-slot name="description">
{{ __('filament-log-manager::translations.modal_delete_subheading') }}
</x-slot>
<x-slot name="footerActions">
<x-filament::button
type="button"
x-on:click="isOpen = false"
color="secondary"
outlined="true"
class="filament-page-modal-button-action"
>
{{ __('filament-log-manager::translations.modal_delete_action_cancel') }}
</x-filament::button>
<x-filament::button
wire:click="delete"
x-on:click="isOpen = false"
type="button"
color="danger"
class="filament-page-modal-button-action"
>
{{ __('filament-log-manager::translations.modal_delete_action_confirm') }}
</x-filament::button>
</x-slot>
</x-filament::modal>
</x-filament::page>
@@ -1,14 +0,0 @@
<x-filament::page>
<div class="space-y-4">
<h2 class="text-lg font-bold">Upload a New Badge</h2>
{{-- Render the form --}}
<form wire:submit.prevent="save" class="space-y-4">
{{ $this->form }}
<x-filament::button type="submit">
Upload Badge
</x-filament::button>
</form>
</div>
</x-filament::page>
@@ -1,19 +0,0 @@
<div class="my-2 text-sm tracking-tight">
@foreach($getState() as $key => $value)
<span class="inline-block p-1 mr-1 font-medium text-gray-700 whitespace-normal rounded-md dark:text-gray-200 bg-gray-500/10">
{{ $key }}
</span>
@if(is_array($value))
<span class="whitespace-normal divide-x divide-gray-200 divide-solid dark:divide-gray-700">
@foreach ($value as $nestedKey => $nestedValue)
<span class="inline-block mr-1">
{{ $nestedKey }}: {{ is_array($nestedValue) ? json_encode($nestedValue) : $nestedValue }}
</span>
@endforeach
</span>
@else
<span class="whitespace-normal">{{ $value }}</span>
@endif
@endforeach
</div>
@@ -1,3 +0,0 @@
<div>
<img loading="lazy" src="{{ $getBadgePath() }}" alt="{{ $getBadgeName() }}" />
</div>
@@ -1,3 +0,0 @@
<div class="pl-3" style="image-rendering: pixelated">
<img loading="lazy" src="{{ $column->getAvatarUrl() }}" alt="{{ $column->getRecord()->name }}" />
</div>
@@ -1,5 +0,0 @@
<x-filament-widgets::widget>
<x-filament::section>
{{-- Widget content --}}
</x-filament::section>
</x-filament-widgets::widget>
@@ -1,5 +0,0 @@
<x-filament-widgets::widget>
<x-filament::section>
{{-- Widget content --}}
</x-filament::section>
</x-filament-widgets::widget>
@@ -1,70 +0,0 @@
<x-installation-layout>
<x-content.installation-content-section icon="hotel-icon" classes="border">
<x-slot:title>
{{ __('Welcome to Atom CMS') }}
</x-slot:title>
<x-slot:under-title>
{{ __('We are delighted of having you trying Atom CMS') }}
</x-slot:under-title>
<div class="space-y-3">
<p>
{{ __('Hello there! We are truly grateful that you have chosen Atom CMS for your hotel.') }}
</p>
<p>
{{ __('Atom CMS is built with the community in mind, meaning we highly value community input, rather than only bringing our own ideas & vision to the CMS we try our very best to implement suggestions made by our beloved community. We want everyone to be able to contribute or customise Atom CMS to their needs without having a bachelor in programming.') }}
</p>
<p>{{ __('Atom CMS sole purpose is to empower hotel owners like you. We want you to be able to run your hotel with ease. Our user-friendly interface, robust features, and helpful community are here to ensure that your experience with Atom CMS is nothing short of exceptional!') }}</p>
<p>
{{ __('As you dive into Atom CMS, we encourage you to explore the extensive range of features we have curated to help you bring your vision to life. From customizable templates to seamless integrations with clients like Nitro, we will have you set up in no time.') }}
</p>
<p>
{!! __('To get started, we recommend checking out our <a href=":documentation_link" target="_blank" class="font-semibold underline">comprehensive documentation</a>, which will guide you through the initial setup and help you make the most of your Atom CMS experience.', ['documentation_link' => 'https://github.com/atom-retros/atomcms/wiki']) !!}
</p>
<p>
{!! __('And remember, please <a href=":discord_link" target="_blank" class="font-semibold underline">join our Discord</a>. If you have any questions or need assistance, please do not hesitate to reach out. We are here to help you every step of the way.', ['discord_link' => 'https://discord.gg/pP6HyZedAj']) !!}
</p>
<p>
{{ __('Once again, thank you for choosing Atom CMS, and we cannot wait to see the incredible project you will create.') }}
</p>
<p class="font-semibold italic">
{{ __('With everything being said we just want to wish you a warm welcome to the Atom CMS family!') }}
</p>
<hr>
<div>
{{ __('To avoid any third-party party abuse, please provide the installation code, which can be found in your database inside the "website_installation" table under the column "installation_key".') }}
</div>
<form action="{{ route('installation.start-installation') }}" method="POST">
@csrf
<label class="block font-semibold text-gray-700" for="installation_key">
{{ __('Installation key') }}
</label>
<input
class="focus:ring-0 border-4 border-gray-200 rounded focus:border-[#eeb425] w-full @error('installation_key')border-red-600 ring-red-500 @enderror"
id="installation_key" type="text" name="installation_key" placeholder="{{ __('Enter your installation key') }}" autofocus required autocomplete="false">
@error('installation_key')
<p class="mt-1 text-xs italic text-red-500">
{{ $message }}
</p>
@enderror
<x-form.secondary-button classes="mt-3">
{{ __('Start the setup') }}
</x-form.secondary-button>
</form>
</div>
</x-content.installation-content-section>
</x-installation-layout>
@@ -1,49 +0,0 @@
<x-installation-layout>
<x-content.installation-content-section icon="hotel-icon" classes="border">
<x-slot:title>
{{ __('Welcome to Atom CMS') }}
</x-slot:title>
<x-slot:under-title>
{{ __('We are delighted of having you trying Atom CMS') }}
</x-slot:under-title>
<form action="{{ route('installation.save-step') }}" method="POST" class="space-y-3">
@csrf
@foreach($settings as $setting)
<div>
<label class="block font-semibold text-gray-700" for="{{ $setting->key }}">
{{ Str::replace('_', ' ', Str::ucfirst($setting->key)) }}
</label>
<input
class="focus:ring-0 border-4 border-gray-200 rounded focus:border-[#eeb425] w-full @error($setting->key)border-red-600 ring-red-500 @enderror"
id="{{ $setting->key }}" type="text" name="{{ $setting->key }}" value="{{ $setting->value }}" placeholder="{{ $setting->key }}" required>
@error($setting->key)
<p class="mt-1 text-xs italic text-red-500">
{{ $message }}
</p>
@enderror
<small>{{ $setting->comment }}</small>
</div>
@endforeach
<x-form.secondary-button>
{{ __('Continue to step 2') }}
</x-form.secondary-button>
</form>
<div class="flex gap-x-4">
<form action="{{ route('installation.restart') }}" method="POST" class="w-full mt-3">
@csrf
<x-form.danger-button>
{{ __('Restart installation') }}
</x-form.danger-button>
</form>
</div>
</x-content.installation-content-section>
</x-installation-layout>
@@ -1,57 +0,0 @@
<x-installation-layout>
<x-content.installation-content-section icon="hotel-icon" classes="border">
<x-slot:title>
{{ __('Welcome to Atom CMS') }}
</x-slot:title>
<x-slot:under-title>
{{ __('We are delighted of having you trying Atom CMS') }}
</x-slot:under-title>
<form action="{{ route('installation.save-step') }}" method="POST" class="space-y-3">
@csrf
@foreach($settings as $setting)
<div>
<label class="block font-semibold text-gray-700" for="{{ $setting->key }}">
{{ Str::replace('_', ' ', Str::ucfirst($setting->key)) }}
</label>
<input
class="focus:ring-0 border-4 border-gray-200 rounded focus:border-[#eeb425] w-full @error($setting->key)border-red-600 ring-red-500 @enderror"
id="{{ $setting->key }}" type="text" name="{{ $setting->key }}" value="{{ $setting->value }}" placeholder="{{ $setting->key }}" required>
@error($setting->key)
<p class="mt-1 text-xs italic text-red-500">
{{ $message }}
</p>
@enderror
<small>{{ $setting->comment }}</small>
</div>
@endforeach
<x-form.secondary-button>
{{ __('Continue to step 3') }}
</x-form.secondary-button>
</form>
<div class="flex gap-x-4">
<form action="{{ route('installation.previous-step') }}" method="POST" class="w-full mt-3">
@csrf
<x-form.primary-button>
{{ __('Previous step') }}
</x-form.primary-button>
</form>
<form action="{{ route('installation.restart') }}" method="POST" class="w-full mt-3">
@csrf
<x-form.danger-button>
{{ __('Restart installation') }}
</x-form.danger-button>
</form>
</div>
</x-content.installation-content-section>
</x-installation-layout>
@@ -1,57 +0,0 @@
<x-installation-layout>
<x-content.installation-content-section icon="hotel-icon" classes="border">
<x-slot:title>
{{ __('Welcome to Atom CMS') }}
</x-slot:title>
<x-slot:under-title>
{{ __('We are delighted of having you trying Atom CMS') }}
</x-slot:under-title>
<form action="{{ route('installation.save-step') }}" method="POST" class="space-y-3">
@csrf
@foreach($settings as $setting)
<div>
<label class="block font-semibold text-gray-700" for="{{ $setting->key }}">
{{ Str::replace('_', ' ', Str::ucfirst($setting->key)) }}
</label>
<input
class="focus:ring-0 border-4 border-gray-200 rounded focus:border-[#eeb425] w-full @error($setting->key)border-red-600 ring-red-500 @enderror"
id="{{ $setting->key }}" type="text" name="{{ $setting->key }}" value="{{ $setting->value }}" placeholder="{{ $setting->key }}" required>
@error($setting->key)
<p class="mt-1 text-xs italic text-red-500">
{{ $message }}
</p>
@enderror
<small>{{ $setting->comment }}</small>
</div>
@endforeach
<x-form.secondary-button>
{{ __('Continue to step 4') }}
</x-form.secondary-button>
</form>
<div class="flex gap-x-4">
<form action="{{ route('installation.previous-step') }}" method="POST" class="w-full mt-3">
@csrf
<x-form.primary-button>
{{ __('Previous step') }}
</x-form.primary-button>
</form>
<form action="{{ route('installation.restart') }}" method="POST" class="w-full mt-3">
@csrf
<x-form.danger-button>
{{ __('Restart installation') }}
</x-form.danger-button>
</form>
</div>
</x-content.installation-content-section>
</x-installation-layout>
@@ -1,57 +0,0 @@
<x-installation-layout>
<x-content.installation-content-section icon="hotel-icon" classes="border">
<x-slot:title>
{{ __('Welcome to Atom CMS') }}
</x-slot:title>
<x-slot:under-title>
{{ __('We are delighted of having you trying Atom CMS') }}
</x-slot:under-title>
<form action="{{ route('installation.save-step') }}" method="POST" class="space-y-3">
@csrf
@foreach($settings as $setting)
<div>
<label class="block font-semibold text-gray-700" for="{{ $setting->key }}">
{{ Str::replace('_', ' ', Str::ucfirst($setting->key)) }}
</label>
<input
class="focus:ring-0 border-4 border-gray-200 rounded focus:border-[#eeb425] w-full @error($setting->key)border-red-600 ring-red-500 @enderror"
id="{{ $setting->key }}" type="text" name="{{ $setting->key }}" value="{{ $setting->value }}" placeholder="{{ $setting->key }}">
@error($setting->key)
<p class="mt-1 text-xs italic text-red-500">
{{ $message }}
</p>
@enderror
<small>{{ $setting->comment }}</small>
</div>
@endforeach
<x-form.secondary-button>
{{ __('Complete setup') }}
</x-form.secondary-button>
</form>
<div class="flex gap-x-4">
<form action="{{ route('installation.previous-step') }}" method="POST" class="w-full mt-3">
@csrf
<x-form.primary-button>
{{ __('Previous step') }}
</x-form.primary-button>
</form>
<form action="{{ route('installation.restart') }}" method="POST" class="w-full mt-3">
@csrf
<x-form.danger-button>
{{ __('Restart installation') }}
</x-form.danger-button>
</form>
</div>
</x-content.installation-content-section>
</x-installation-layout>
@@ -1,76 +0,0 @@
<x-installation-layout>
<x-content.installation-content-section icon="hotel-icon" classes="border">
<x-slot:title>
{{ __('Welcome to Atom CMS') }}
</x-slot:title>
<x-slot:under-title>
{{ __('We are delighted of having you trying Atom CMS') }}
</x-slot:under-title>
<div class="space-y-3">
<p>
{{ __('Congratulations on successfully completing the Atom CMS setup! You have now taken the first steps towards an exciting new journey. With Atom CMS, you can effortlessly manage various aspect of your hotel, while giving your new visitors an easy gateway into a world of joy.') }}
</p>
<p>
{{ __('You can at any time change the settings you went through. All it takes is for you to hop into your database and find the "website_settings" table and then tweak the settings you wish. Who knows... As you explore the features and functionalities of Atom CMS, you might discover features that will improve you and your users experience & helping you achieve your online goals!') }}
</p>
<p>
{!! __('We also have written a throughout documentation, explaining tons of things regarding managing Atom CMS & other aspect of your hotel. You can visit our <a href=":documentation_link" target="_blank" class="font-semibold underline">comprehensive documentation right here</a>. Our goal is to keep expanding our coverage, so keep checking it from time to time.') !!}
</p>
<p>
{{ __('Lastly, we just want to show our gratitude by letting your know how delighted we are to be a part of your journey and we hope you will gain some amazing memories. So, here is to your new hotel, the boundless creativity it will inspire, and the endless possibilities that lie ahead.') }}
</p>
<p class="font-semibold italic">
{{ __('Once again, congratulations and best of wishes for you & your hotel!') }}
</p>
<form action="{{ route('installation.complete') }}" method="POST" class="w-full mt-3">
@csrf
<x-form.secondary-button>
{{ __('Take me to :hotel', ['hotel' => setting('hotel_name')]) }}
</x-form.secondary-button>
</form>
</div>
<div class="flex gap-x-4">
<form action="{{ route('installation.previous-step') }}" method="POST" class="w-full mt-3">
@csrf
<x-form.primary-button>
{{ __('Previous step') }}
</x-form.primary-button>
</form>
<form action="{{ route('installation.restart') }}" method="POST" class="w-full mt-3">
@csrf
<x-form.danger-button>
{{ __('Restart installation') }}
</x-form.danger-button>
</form>
</div>
</x-content.installation-content-section>
<script>
localStorage.setItem("theme", 'light');
</script>
@if (setting('cms_color_mode') === 'dark')
<script>
localStorage.removeItem("theme");
if (localStorage.getItem("theme") === null) {
document.documentElement.classList.add("dark");
localStorage.setItem("theme", 'dark');
}
</script>
@endif
</x-installation-layout>
@@ -1,26 +0,0 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="turbolinks-cache-control" content="no-cache">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ setting('hotel_name') }} - @stack('title')</title>
<link rel="icon" type="image/gif" sizes="18x17" href="{{ asset('assets/images/home_icon.gif') }}">
<!-- Fonts -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap">
@vite(['resources/css/global.scss', 'resources/js/global.js'], 'build')
@stack('scripts')
</head>
<body class="flex justify-center items-center min-h-screen site-bg">
<main class="mx-auto w-full lg:w-[40%] p-4 lg:px-0 lg:py-4">
{{ $slot }}
</main>
</body>
</html>
@@ -1,22 +0,0 @@
@props([
'callback' => '',
'errorCallback' => '',
'theme' => 'auto',
'language' => 'en-US',
'size' => 'normal',
])
<div {{ $attributes->merge([
'class' => 'cf-turnstile',
'data-sitekey' => config('turnstile.turnstile_site_key'),
'data-callback' => $callback,
'data-error-callback' => $errorCallback,
'data-theme' => $theme,
'data-language' => $language,
'data-size' => $size,
'name' => 'cf-turnstile',
'id'=>'cf-turnstile-widget',
]) }}></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" defer></script>