Skip to content

Commit 2eb6924

Browse files
committed
refactor: improve landing page and footer
1 parent a5f2777 commit 2eb6924

File tree

7 files changed

+5252
-36
lines changed

7 files changed

+5252
-36
lines changed

_media/app.css

Lines changed: 2401 additions & 3 deletions
Large diffs are not rendered by default.

_media/app.js

Lines changed: 171 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,171 @@
1-
(()=>{var r,e={430:()=>{},507:()=>{}},o={};function n(r){var t=o[r];if(void 0!==t)return t.exports;var a=o[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.m=e,r=[],n.O=(e,o,t,a)=>{if(!o){var v=1/0;for(p=0;p<r.length;p++){for(var[o,t,a]=r[p],i=!0,f=0;f<o.length;f++)(!1&a||v>=a)&&Object.keys(n.O).every(r=>n.O[r](o[f]))?o.splice(f--,1):(i=!1,a<v&&(v=a));if(i){r.splice(p--,1);var l=t();void 0!==l&&(e=l)}}return e}a=a||0;for(var p=r.length;p>0&&r[p-1][2]>a;p--)r[p]=r[p-1];r[p]=[o,t,a]},n.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={895:0,524:0};n.O.j=e=>0===r[e];var e=(e,o)=>{var t,a,[v,i,f]=o,l=0;if(v.some(e=>0!==r[e])){for(t in i)n.o(i,t)&&(n.m[t]=i[t]);if(f)var p=f(n)}for(e&&e(o);l<v.length;l++)a=v[l],n.o(r,a)&&r[a]&&r[a][0](),r[a]=0;return n.O(p)},o=self.webpackChunk=self.webpackChunk||[];o.forEach(e.bind(null,0)),o.push=e.bind(null,o.push.bind(o))})(),n.O(void 0,[524],()=>n(430));var t=n.O(void 0,[524],()=>n(507));t=n.O(t)})();
1+
/******/ (() => { // webpackBootstrap
2+
/******/ var __webpack_modules__ = ({
3+
4+
/***/ "./resources/assets/app.css":
5+
/*!**********************************!*\
6+
!*** ./resources/assets/app.css ***!
7+
\**********************************/
8+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9+
10+
"use strict";
11+
__webpack_require__.r(__webpack_exports__);
12+
// extracted by mini-css-extract-plugin
13+
14+
15+
/***/ }),
16+
17+
/***/ "./resources/assets/app.js":
18+
/*!*********************************!*\
19+
!*** ./resources/assets/app.js ***!
20+
\*********************************/
21+
/***/ (() => {
22+
23+
/*
24+
* This is the main JavaScript used by webpack to build the app.js file.
25+
*/
26+
27+
/***/ })
28+
29+
/******/ });
30+
/************************************************************************/
31+
/******/ // The module cache
32+
/******/ var __webpack_module_cache__ = {};
33+
/******/
34+
/******/ // The require function
35+
/******/ function __webpack_require__(moduleId) {
36+
/******/ // Check if module is in cache
37+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
38+
/******/ if (cachedModule !== undefined) {
39+
/******/ return cachedModule.exports;
40+
/******/ }
41+
/******/ // Create a new module (and put it into the cache)
42+
/******/ var module = __webpack_module_cache__[moduleId] = {
43+
/******/ // no module.id needed
44+
/******/ // no module.loaded needed
45+
/******/ exports: {}
46+
/******/ };
47+
/******/
48+
/******/ // Execute the module function
49+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
50+
/******/
51+
/******/ // Return the exports of the module
52+
/******/ return module.exports;
53+
/******/ }
54+
/******/
55+
/******/ // expose the modules object (__webpack_modules__)
56+
/******/ __webpack_require__.m = __webpack_modules__;
57+
/******/
58+
/************************************************************************/
59+
/******/ /* webpack/runtime/chunk loaded */
60+
/******/ (() => {
61+
/******/ var deferred = [];
62+
/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
63+
/******/ if(chunkIds) {
64+
/******/ priority = priority || 0;
65+
/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
66+
/******/ deferred[i] = [chunkIds, fn, priority];
67+
/******/ return;
68+
/******/ }
69+
/******/ var notFulfilled = Infinity;
70+
/******/ for (var i = 0; i < deferred.length; i++) {
71+
/******/ var [chunkIds, fn, priority] = deferred[i];
72+
/******/ var fulfilled = true;
73+
/******/ for (var j = 0; j < chunkIds.length; j++) {
74+
/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
75+
/******/ chunkIds.splice(j--, 1);
76+
/******/ } else {
77+
/******/ fulfilled = false;
78+
/******/ if(priority < notFulfilled) notFulfilled = priority;
79+
/******/ }
80+
/******/ }
81+
/******/ if(fulfilled) {
82+
/******/ deferred.splice(i--, 1)
83+
/******/ var r = fn();
84+
/******/ if (r !== undefined) result = r;
85+
/******/ }
86+
/******/ }
87+
/******/ return result;
88+
/******/ };
89+
/******/ })();
90+
/******/
91+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
92+
/******/ (() => {
93+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
94+
/******/ })();
95+
/******/
96+
/******/ /* webpack/runtime/make namespace object */
97+
/******/ (() => {
98+
/******/ // define __esModule on exports
99+
/******/ __webpack_require__.r = (exports) => {
100+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
101+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
102+
/******/ }
103+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
104+
/******/ };
105+
/******/ })();
106+
/******/
107+
/******/ /* webpack/runtime/jsonp chunk loading */
108+
/******/ (() => {
109+
/******/ // no baseURI
110+
/******/
111+
/******/ // object to store loaded and loading chunks
112+
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
113+
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
114+
/******/ var installedChunks = {
115+
/******/ "/app": 0,
116+
/******/ "app": 0
117+
/******/ };
118+
/******/
119+
/******/ // no chunk on demand loading
120+
/******/
121+
/******/ // no prefetching
122+
/******/
123+
/******/ // no preloaded
124+
/******/
125+
/******/ // no HMR
126+
/******/
127+
/******/ // no HMR manifest
128+
/******/
129+
/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
130+
/******/
131+
/******/ // install a JSONP callback for chunk loading
132+
/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
133+
/******/ var [chunkIds, moreModules, runtime] = data;
134+
/******/ // add "moreModules" to the modules object,
135+
/******/ // then flag all "chunkIds" as loaded and fire callback
136+
/******/ var moduleId, chunkId, i = 0;
137+
/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
138+
/******/ for(moduleId in moreModules) {
139+
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
140+
/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
141+
/******/ }
142+
/******/ }
143+
/******/ if(runtime) var result = runtime(__webpack_require__);
144+
/******/ }
145+
/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
146+
/******/ for(;i < chunkIds.length; i++) {
147+
/******/ chunkId = chunkIds[i];
148+
/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
149+
/******/ installedChunks[chunkId][0]();
150+
/******/ }
151+
/******/ installedChunks[chunkId] = 0;
152+
/******/ }
153+
/******/ return __webpack_require__.O(result);
154+
/******/ }
155+
/******/
156+
/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || [];
157+
/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
158+
/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
159+
/******/ })();
160+
/******/
161+
/************************************************************************/
162+
/******/
163+
/******/ // startup
164+
/******/ // Load entry module and return exports
165+
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
166+
/******/ __webpack_require__.O(undefined, ["app"], () => (__webpack_require__("./resources/assets/app.js")))
167+
/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["app"], () => (__webpack_require__("./resources/assets/app.css")))
168+
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
169+
/******/
170+
/******/ })()
171+
;

_pages/index.blade.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class="inline-block px-8 py-3 bg-blue-600 text-white text-lg font-semibold round
3131
<div class="p-6 bg-white rounded-2xl shadow dark:bg-slate-700">
3232
<h2 class="text-xl font-semibold text-gray-800 dark:text-slate-200 mb-2 ">Standards Compliant</h2>
3333
<p class="text-gray-600 dark:text-slate-200">
34-
Implements the official <a href="https://json-schema.org/specification" class="text-blue-600 hover:text-blue-700 dark:text-sky-400 hover:underline dark:hover:text-sky-300">JSON Schema specification</a>
34+
Implements the official <a href="https://json-schema.org/specification" target="_blank" class="text-blue-600 hover:text-blue-700 dark:text-sky-400 hover:underline dark:hover:text-sky-300">JSON Schema specification</a>
3535
(Draft 3 and 4), ensuring predictable and reliable validation.
3636
</p>
3737
</div>
@@ -42,9 +42,9 @@ class="inline-block px-8 py-3 bg-blue-600 text-white text-lg font-semibold round
4242
</p>
4343
</div>
4444
<div class="p-6 bg-white dark:bg-slate-700 rounded-2xl shadow">
45-
<h2 class="text-xl font-semibold text-gray-800 dark:text-slate-200 mb-2">Extensible</h2>
45+
<h2 class="text-xl font-semibold text-gray-800 dark:text-slate-200 mb-2">Robust validation engine</h2>
4646
<p class="text-gray-600 dark:text-slate-200">
47-
Built with extensibility in mind — customize validation rules, add formats, or adapt to domain-specific requirements.
47+
Validate data against schemas with precision and speed, independently verified through the <a href="https://bowtie.report/#/implementations/php-justinrainbow-json-schema" target="_blank" class="text-blue-600 hover:text-blue-700 dark:text-sky-400 hover:underline dark:hover:text-sky-300">Bowtie</a> compliance suite.
4848
</p>
4949
</div>
5050
</div>

_site/index.html

Lines changed: 55 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<style>[x-cloak] {display: none!important}</style>
2121

2222

23-
<link rel="stylesheet" href="media/app.css?v=a59783ccdd4cd8cac4dda07ccf5e1ce3">
23+
<link rel="stylesheet" href="media/app.css?v=75a67e3d44d3899b5b36454e617be55f">
2424

2525

2626

@@ -112,7 +112,7 @@ <h1 class="text-3xl md:text-5xl font-bold text-stone-800 dark:text-stone-200">JS
112112
<div class="p-6 bg-white rounded-2xl shadow dark:bg-slate-700">
113113
<h2 class="text-xl font-semibold text-gray-800 dark:text-slate-200 mb-2 ">Standards Compliant</h2>
114114
<p class="text-gray-600 dark:text-slate-200">
115-
Implements the official <a href="https://json-schema.org/specification" class="text-blue-600 hover:text-blue-700 dark:text-sky-400 hover:underline dark:hover:text-sky-300">JSON Schema specification</a>
115+
Implements the official <a href="https://json-schema.org/specification" target="_blank" class="text-blue-600 hover:text-blue-700 dark:text-sky-400 hover:underline dark:hover:text-sky-300">JSON Schema specification</a>
116116
(Draft 3 and 4), ensuring predictable and reliable validation.
117117
</p>
118118
</div>
@@ -123,9 +123,9 @@ <h2 class="text-xl font-semibold text-gray-800 dark:text-slate-200 mb-2">Develop
123123
</p>
124124
</div>
125125
<div class="p-6 bg-white dark:bg-slate-700 rounded-2xl shadow">
126-
<h2 class="text-xl font-semibold text-gray-800 dark:text-slate-200 mb-2">Extensible</h2>
126+
<h2 class="text-xl font-semibold text-gray-800 dark:text-slate-200 mb-2">Robust validation engine</h2>
127127
<p class="text-gray-600 dark:text-slate-200">
128-
Built with extensibility in mind — customize validation rules, add formats, or adapt to domain-specific requirements.
128+
Validate data against schemas with precision and speed, independently verified through the <a href="https://bowtie.report/#/implementations/php-justinrainbow-json-schema" target="_blank" class="text-blue-600 hover:text-blue-700 dark:text-sky-400 hover:underline dark:hover:text-sky-300">Bowtie</a> compliance suite.
129129
</p>
130130
</div>
131131
</div>
@@ -157,20 +157,60 @@ <h2 class="text-3xl font-bold mb-6 text-center">Example</h2>
157157
</div>
158158
</section>
159159

160-
<footer aria-label="Page footer" class="flex py-4 px-6 w-full text-center mt-auto bg-slate-50 dark:bg-gray-800">
161-
<div class="prose dark:prose-invert text-center mx-auto ">
162-
<p>Site proudly built with <a class="text-blue-600 hover:text-blue-700 dark:text-sky-400 hover:underline dark:hover:text-sky-300" href="https://github.com/hydephp/hyde">HydePHP</a> 🎩</p>
160+
<footer class="w-full bg-gray-100 dark:bg-gray-800">
161+
<div class="max-w-5xl mx-auto py-4">
162+
<h2 class="text-lg mb-4">
163+
JSON Schema for PHP
164+
</h2>
165+
166+
<div class="flex flex-wrap justify-between items-start gap-6 mb-4">
167+
<div class="text-stone-600 dark:text-stone-300 text-sm flex-1">
168+
<p class="">
169+
Validate, interpret, and work with JSON Schemas in PHP — fully compatible with the specifications.
170+
</p>
171+
</div>
172+
173+
<!-- Resources -->
174+
<div class="flex flex-col space-y-2 text-sm flex-1 ml-32">
175+
<h4 class="text-l font-semibold">Developers</h4>
176+
<a href="https://github.com/jsonrainbow" class="flex items-center space-x-2 text-gray-600 dark:text-gray-300 hover:text-indigo-600">
177+
<span>GitHub Organization</span>
178+
</a>
179+
<a href="https://github.com/jsonrainbow/json-schema" class="flex items-center space-x-2 text-gray-600 dark:text-gray-300 hover:text-indigo-600">
180+
<span>Source code</span>
181+
</a>
182+
</div>
183+
184+
<!-- Developers -->
185+
<div class="flex flex-col space-y-2 text-sm flex-1">
186+
<h4 class="text-l font-semibold">Resources</h4>
187+
<a href="docs/getting-started" class="flex items-center space-x-2 text-gray-600 dark:text-gray-300 hover:text-indigo-600">
188+
<span>Documentation</span>
189+
</a>
190+
</div>
191+
192+
<!-- Extra -->
193+
<div class="flex flex-col space-y-2 text-sm flex-1">
194+
<h4 class="text-l font-semibold">Extra</h4>
195+
<a href="sitemap.html" class="flex items-center space-x-2 text-gray-600 dark:text-gray-300 hover:text-indigo-600">
196+
<span>Sitemap</span>
197+
</a>
198+
<a href="feed.xml" class="flex items-center space-x-2 text-gray-600 dark:text-gray-300 hover:text-indigo-600">
199+
<span>RSS Feed</span>
200+
</a>
201+
</div>
202+
</div>
203+
204+
<!-- Attribution -->
205+
<div class="text-gray-600 dark:text-gray-300 text-sm flex-1 text-center
206+
">
207+
<p> This site was build using <a href="https://hydephp.com/" class="text-indigo-600">HydePHP</a>
208+
and <a href="https://torchlight.dev/" class="text-indigo-600">Torchlight.dev</a></p>
209+
</div>
163210
</div>
164-
<a href="#app" aria-label="Go to top of page" class="float-right">
165-
<button title="Scroll to top">
166-
<svg width="1.5rem" height="1.5rem" role="presentation" class="fill-current text-gray-500 h-6 w-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
167-
<path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z" />
168-
</svg>
169-
</button>
170-
</a>
171211
</footer>
172212

173-
<script defer src="media/app.js?v=df4829542141b3634f113c4cb9e386aa"></script>
213+
<script defer src="media/app.js?v=193cddf0008948834d6c443cca212826"></script>
174214

175215

176216
<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/cdn.min.js" integrity="sha256-gOkV4d9/FmMNEkjOzVlyM2eNAWSUXisT+1RbMTTIgXI=" crossorigin="anonymous"></script>

0 commit comments

Comments
 (0)