Update (ui)

This commit is contained in:
2023-11-21 22:17:18 +08:00
parent 4827130183
commit 028c9b5190
29 changed files with 193 additions and 159 deletions

View File

@@ -4,4 +4,4 @@
require 'geo_helper.php';
require 'platform_helper.php';
require 'proxy_helper.php';
require 'route_helper.php';
require 'route_helper.php';

View File

@@ -166,7 +166,6 @@ function get_domain_from_url($url)
}
}
if (! function_exists('get_country_name_by_iso')) {
function get_country_name_by_iso($country_iso)
{

View File

@@ -40,13 +40,12 @@ public function searchResults(Request $request, $query)
SEOTools::jsonLd();
SEOTools::setTitle($title, false);
$rss_posts = RssPost::with('category')
->where('status', 'published')
->whereRaw("to_tsvector('english', title || ' ' || bites || ' ' || keyword_list) @@ plainto_tsquery('english', ?)", [trim(preg_replace('/\s+/', ' ', $query))])
->where('published_at', '<=', now())
->orderBy('published_at', 'desc')
->cursorPaginate(60);
$rss_posts = RssPost::with('category')
->where('status', 'published')
->whereRaw("to_tsvector('english', title || ' ' || bites || ' ' || keyword_list) @@ plainto_tsquery('english', ?)", [trim(preg_replace('/\s+/', ' ', $query))])
->where('published_at', '<=', now())
->orderBy('published_at', 'desc')
->cursorPaginate(60);
// breadcrumb json ld
$listItems = [];
@@ -112,12 +111,10 @@ public function category(Request $request, $category_slug)
$category = Category::where('slug', $category_slug)->first();
if (is_null($category))
{
abort(404);
if (is_null($category)) {
abort(404);
}
$breadcrumbs = collect([
['name' => 'Home', 'url' => route('front.home')],
['name' => $category->name, 'url' => null],
@@ -125,7 +122,6 @@ public function category(Request $request, $category_slug)
$title = 'Latest News from FutureWalker';
SEOTools::metatags();
SEOTools::twitter();
SEOTools::opengraph();
@@ -154,6 +150,6 @@ public function category(Request $request, $category_slug)
'itemListElement' => $listItems,
]);
return view('front.rss_post_list', compact('rss_posts', 'breadcrumbs', 'breadcrumb_context', 'page_type','category'));
return view('front.rss_post_list', compact('rss_posts', 'breadcrumbs', 'breadcrumb_context', 'page_type', 'category'));
}
}

View File

@@ -60,7 +60,7 @@ public static function handle(int $rss_post_id)
$rss_post->body = 'EMPTY CONTENT';
}
if ((is_empty($rss_post->body)) || ($rss_post->body == 'EMPTY CONTENT') || (strlen($rss_post->body) < 800)){
if ((is_empty($rss_post->body)) || ($rss_post->body == 'EMPTY CONTENT') || (strlen($rss_post->body) < 800)) {
$rss_post->status = 'blocked';
}

View File

@@ -54,9 +54,8 @@ public static function handle(int $rss_post_id)
if (count($post_meta_response->output->keywords) > 0) {
$rss_post->keywords = $post_meta_response->output->keywords;
foreach ($post_meta_response->output->keywords as $word)
{
$words_to_add_in_body[] = $word;
foreach ($post_meta_response->output->keywords as $word) {
$words_to_add_in_body[] = $word;
}
}
}
@@ -65,9 +64,8 @@ public static function handle(int $rss_post_id)
if (count($post_meta_response->output->entities) > 0) {
$rss_post->entities = $post_meta_response->output->entities;
foreach ($post_meta_response->output->entities as $word)
{
$words_to_add_in_body[] = $word;
foreach ($post_meta_response->output->entities as $word) {
$words_to_add_in_body[] = $word;
}
}
}
@@ -106,7 +104,7 @@ public static function handle(int $rss_post_id)
$rss_post->category_id = $category->id;
}
$rss_post->keyword_list = implode(",", $words_to_add_in_body);
$rss_post->keyword_list = implode(',', $words_to_add_in_body);
$rss_post->status = 'published';
$rss_post->save();

View File

@@ -11,7 +11,6 @@
use Spatie\Feed\Feedable;
use Spatie\Feed\FeedItem;
/**
* Class RssPost
*
@@ -74,12 +73,12 @@ public function category()
public function getAllKeywordsAttribute()
{
if (!is_empty($this->keyword_list))
{
return array_unique(explode(",",$this->keyword_list));
}
return [];
if (! is_empty($this->keyword_list)) {
return array_unique(explode(',', $this->keyword_list));
}
return [];
}
public function toFeedItem(): FeedItem

View File

@@ -2,9 +2,8 @@
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
@@ -42,7 +41,6 @@ public function up(): void
DB::statement('CREATE INDEX idx_rss_posts_entities ON rss_posts USING gin (entities jsonb_path_ops)');
DB::statement('CREATE INDEX idx_rss_posts_keywords ON rss_posts USING gin (keywords jsonb_path_ops)');
}

View File

@@ -1 +1 @@
import{_ as i}from"./vue-541dc6d3.js";const n={name:"LqipLoader",mounted(){this.initLqipLoading()},methods:{initLqipLoading(){const e=document.getElementsByTagName("img");for(let t=0;t<e.length;t++)e[t].getAttribute("data-src")&&(e[t].onload=function(){this.classList.remove("lqip-blur")},e[t].setAttribute("src",e[t].getAttribute("data-src")))}}};function o(e,t,r,s,a,c){return null}const m=i(n,[["render",o]]);export{m as default};
import{_ as i}from"./vue-1b15f6c7.js";const n={name:"LqipLoader",mounted(){this.initLqipLoading()},methods:{initLqipLoading(){const e=document.getElementsByTagName("img");for(let t=0;t<e.length;t++)e[t].getAttribute("data-src")&&(e[t].onload=function(){this.classList.remove("lqip-blur")},e[t].setAttribute("src",e[t].getAttribute("data-src")))}}};function o(e,t,r,s,a,c){return null}const m=i(n,[["render",o]]);export{m as default};

View File

@@ -1 +1 @@
import{_ as o,o as p,c,a as r,b as u,p as i,d as m,e as g,f as _,g as d,v as f,Z as n,h as l}from"./vue-541dc6d3.js";const A={name:"AppAuth"};function $(s,a,t,Z,w,x){return p(),c("div")}const h=o(A,[["render",$]]),e=r({AppAuth:h}),v=Object.assign({});e.use(u());e.use(i,m);e.use(g);e.use(_);e.use(d);e.use(f.ZiggyVue,n);window.Ziggy=n;Object.entries({...v}).forEach(([s,a])=>{const t=s.split("/").pop().replace(/\.\w+$/,"").replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();e.component(t,l(a))});e.mount("#app");
import{_ as o,o as p,c,a as r,b as u,p as i,d as m,e as g,f as _,g as d,v as f,Z as n,h as l}from"./vue-1b15f6c7.js";const A={name:"AppAuth"};function $(s,a,t,Z,w,x){return p(),c("div")}const h=o(A,[["render",$]]),e=r({AppAuth:h}),v=Object.assign({});e.use(u());e.use(i,m);e.use(g);e.use(_);e.use(d);e.use(f.ZiggyVue,n);window.Ziggy=n;Object.entries({...v}).forEach(([s,a])=>{const t=s.split("/").pop().replace(/\.\w+$/,"").replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();e.component(t,l(a))});e.mount("#app");

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -1,9 +1,9 @@
{
"_vue-541dc6d3.js": {
"_vue-1b15f6c7.js": {
"css": [
"assets/vue-935fc652.css"
],
"file": "assets/vue-541dc6d3.js"
"file": "assets/vue-1b15f6c7.js"
},
"node_modules/bootstrap-icons/font/fonts/bootstrap-icons.woff": {
"file": "assets/bootstrap-icons-4d4572ef.woff",
@@ -121,6 +121,10 @@
"file": "assets/RobotoCondensed-ThinItalic-5ab37aa6.ttf",
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-ThinItalic.ttf"
},
"resources/images/futurewalker-cover-fb.jpg": {
"file": "assets/futurewalker-cover-fb-ea8d61e2.jpg",
"src": "resources/images/futurewalker-cover-fb.jpg"
},
"resources/images/tints/caption-bg.png": {
"file": "assets/caption-bg-49b89c07.png",
"src": "resources/images/tints/caption-bg.png"
@@ -174,9 +178,9 @@
"src": "resources/images/tints/tint-9.png"
},
"resources/js/app-auth.js": {
"file": "assets/app-auth-fabb569c.js",
"file": "assets/app-auth-25a86e45.js",
"imports": [
"_vue-541dc6d3.js"
"_vue-1b15f6c7.js"
],
"isEntry": true,
"src": "resources/js/app-auth.js"
@@ -185,17 +189,17 @@
"dynamicImports": [
"resources/js/vue/front/LqipLoader.vue"
],
"file": "assets/app-front-dc31ce01.js",
"file": "assets/app-front-3e4d9dac.js",
"imports": [
"_vue-541dc6d3.js"
"_vue-1b15f6c7.js"
],
"isEntry": true,
"src": "resources/js/app-front.js"
},
"resources/js/vue/front/LqipLoader.vue": {
"file": "assets/LqipLoader-3a6dd892.js",
"file": "assets/LqipLoader-5f2dcf6c.js",
"imports": [
"_vue-541dc6d3.js"
"_vue-1b15f6c7.js"
],
"isDynamicEntry": true,
"src": "resources/js/vue/front/LqipLoader.vue"
@@ -206,7 +210,7 @@
"src": "resources/sass/app-auth.scss"
},
"resources/sass/app-front.scss": {
"file": "assets/app-front-1cc890bf.css",
"file": "assets/app-front-8a16d797.css",
"isEntry": true,
"src": "resources/sass/app-front.scss"
},

Binary file not shown.

View File

@@ -64,3 +64,40 @@ .bg-globe {
inset -20px 0 80px #0ff, inset 20px 0 300px #f0f, inset -20px 0 300px #0ff,
0 0 50px #fff, -10px 0 80px #f0f, 10px 0 80px #0ff;
}
/* Custom illuminated button style */
.illuminated {
position: relative;
overflow: hidden;
z-index: 1;
animation: shimmer 2s infinite linear; /* Apply the animation to the button */
}
/* Shimmer gradient */
.illuminated::before {
content: "";
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: linear-gradient(
-45deg,
rgba(255, 255, 255, 0) 25%,
rgba(255, 255, 255, 0.6) 50%,
rgba(255, 255, 255, 0) 75%
);
background-size: 400% 400%;
z-index: -1;
animation: shimmer 3s infinite; /* Apply the animation to the gradient */
}
/* Define the shimmer effect using keyframes */
@keyframes shimmer {
0% {
background-position: 0 0;
}
100% {
background-position: -400% 0;
}
}

View File

@@ -1,4 +1,4 @@
const Ziggy = {"url":"https:\/\/futurewalker.co","port":null,"defaults":{},"routes":{"debugbar.openhandler":{"uri":"_debugbar\/open","methods":["GET","HEAD"]},"debugbar.clockwork":{"uri":"_debugbar\/clockwork\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"debugbar.assets.css":{"uri":"_debugbar\/assets\/stylesheets","methods":["GET","HEAD"]},"debugbar.assets.js":{"uri":"_debugbar\/assets\/javascript","methods":["GET","HEAD"]},"debugbar.cache.delete":{"uri":"_debugbar\/cache\/{key}\/{tags?}","methods":["DELETE"],"parameters":["key","tags"]},"horizon.stats.index":{"uri":"chorizo\/api\/stats","methods":["GET","HEAD"]},"horizon.workload.index":{"uri":"chorizo\/api\/workload","methods":["GET","HEAD"]},"horizon.masters.index":{"uri":"chorizo\/api\/masters","methods":["GET","HEAD"]},"horizon.monitoring.index":{"uri":"chorizo\/api\/monitoring","methods":["GET","HEAD"]},"horizon.monitoring.store":{"uri":"chorizo\/api\/monitoring","methods":["POST"]},"horizon.monitoring-tag.paginate":{"uri":"chorizo\/api\/monitoring\/{tag}","methods":["GET","HEAD"],"parameters":["tag"]},"horizon.monitoring-tag.destroy":{"uri":"chorizo\/api\/monitoring\/{tag}","methods":["DELETE"],"wheres":{"tag":".*"},"parameters":["tag"]},"horizon.jobs-metrics.index":{"uri":"chorizo\/api\/metrics\/jobs","methods":["GET","HEAD"]},"horizon.jobs-metrics.show":{"uri":"chorizo\/api\/metrics\/jobs\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"horizon.queues-metrics.index":{"uri":"chorizo\/api\/metrics\/queues","methods":["GET","HEAD"]},"horizon.queues-metrics.show":{"uri":"chorizo\/api\/metrics\/queues\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"horizon.jobs-batches.index":{"uri":"chorizo\/api\/batches","methods":["GET","HEAD"]},"horizon.jobs-batches.show":{"uri":"chorizo\/api\/batches\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"horizon.jobs-batches.retry":{"uri":"chorizo\/api\/batches\/retry\/{id}","methods":["POST"],"parameters":["id"]},"horizon.pending-jobs.index":{"uri":"chorizo\/api\/jobs\/pending","methods":["GET","HEAD"]},"horizon.completed-jobs.index":{"uri":"chorizo\/api\/jobs\/completed","methods":["GET","HEAD"]},"horizon.silenced-jobs.index":{"uri":"chorizo\/api\/jobs\/silenced","methods":["GET","HEAD"]},"horizon.failed-jobs.index":{"uri":"chorizo\/api\/jobs\/failed","methods":["GET","HEAD"]},"horizon.failed-jobs.show":{"uri":"chorizo\/api\/jobs\/failed\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"horizon.retry-jobs.show":{"uri":"chorizo\/api\/jobs\/retry\/{id}","methods":["POST"],"parameters":["id"]},"horizon.jobs.show":{"uri":"chorizo\/api\/jobs\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"horizon.index":{"uri":"chorizo\/{view?}","methods":["GET","HEAD"],"wheres":{"view":"(.*)"},"parameters":["view"]},"sanctum.csrf-cookie":{"uri":"sanctum\/csrf-cookie","methods":["GET","HEAD"]},"laravelpwa.manifest":{"uri":"manifest.json","methods":["GET","HEAD"]},"laravelpwa.":{"uri":"offline","methods":["GET","HEAD"]},"ignition.healthCheck":{"uri":"_ignition\/health-check","methods":["GET","HEAD"]},"ignition.executeSolution":{"uri":"_ignition\/execute-solution","methods":["POST"]},"ignition.updateConfig":{"uri":"_ignition\/update-config","methods":["POST"]},"feeds.main":{"uri":"feeds\/posts-feed","methods":["GET","HEAD"]},"front.home":{"uri":"\/","methods":["GET","HEAD"]},"front.terms":{"uri":"terms","methods":["GET","HEAD"]},"front.privacy":{"uri":"privacy","methods":["GET","HEAD"]},"front.disclaimer":{"uri":"disclaimer","methods":["GET","HEAD"]},"front.all":{"uri":"latest","methods":["GET","HEAD"]},"front.search":{"uri":"search","methods":["POST"]},"front.post":{"uri":"{category_slug}\/{slug}","methods":["GET","HEAD"],"parameters":["category_slug","slug"]},"front.category":{"uri":"{category_slug}","methods":["GET","HEAD"],"wheres":{"category_slug":"^(updates|opinions|features|new-launches|how-tos|reviews)$"},"parameters":["category_slug"]}}};
const Ziggy = {"url":"https:\/\/futurewalker.co","port":null,"defaults":{},"routes":{"debugbar.openhandler":{"uri":"_debugbar\/open","methods":["GET","HEAD"]},"debugbar.clockwork":{"uri":"_debugbar\/clockwork\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"debugbar.assets.css":{"uri":"_debugbar\/assets\/stylesheets","methods":["GET","HEAD"]},"debugbar.assets.js":{"uri":"_debugbar\/assets\/javascript","methods":["GET","HEAD"]},"debugbar.cache.delete":{"uri":"_debugbar\/cache\/{key}\/{tags?}","methods":["DELETE"],"parameters":["key","tags"]},"horizon.stats.index":{"uri":"chorizo\/api\/stats","methods":["GET","HEAD"]},"horizon.workload.index":{"uri":"chorizo\/api\/workload","methods":["GET","HEAD"]},"horizon.masters.index":{"uri":"chorizo\/api\/masters","methods":["GET","HEAD"]},"horizon.monitoring.index":{"uri":"chorizo\/api\/monitoring","methods":["GET","HEAD"]},"horizon.monitoring.store":{"uri":"chorizo\/api\/monitoring","methods":["POST"]},"horizon.monitoring-tag.paginate":{"uri":"chorizo\/api\/monitoring\/{tag}","methods":["GET","HEAD"],"parameters":["tag"]},"horizon.monitoring-tag.destroy":{"uri":"chorizo\/api\/monitoring\/{tag}","methods":["DELETE"],"wheres":{"tag":".*"},"parameters":["tag"]},"horizon.jobs-metrics.index":{"uri":"chorizo\/api\/metrics\/jobs","methods":["GET","HEAD"]},"horizon.jobs-metrics.show":{"uri":"chorizo\/api\/metrics\/jobs\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"horizon.queues-metrics.index":{"uri":"chorizo\/api\/metrics\/queues","methods":["GET","HEAD"]},"horizon.queues-metrics.show":{"uri":"chorizo\/api\/metrics\/queues\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"horizon.jobs-batches.index":{"uri":"chorizo\/api\/batches","methods":["GET","HEAD"]},"horizon.jobs-batches.show":{"uri":"chorizo\/api\/batches\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"horizon.jobs-batches.retry":{"uri":"chorizo\/api\/batches\/retry\/{id}","methods":["POST"],"parameters":["id"]},"horizon.pending-jobs.index":{"uri":"chorizo\/api\/jobs\/pending","methods":["GET","HEAD"]},"horizon.completed-jobs.index":{"uri":"chorizo\/api\/jobs\/completed","methods":["GET","HEAD"]},"horizon.silenced-jobs.index":{"uri":"chorizo\/api\/jobs\/silenced","methods":["GET","HEAD"]},"horizon.failed-jobs.index":{"uri":"chorizo\/api\/jobs\/failed","methods":["GET","HEAD"]},"horizon.failed-jobs.show":{"uri":"chorizo\/api\/jobs\/failed\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"horizon.retry-jobs.show":{"uri":"chorizo\/api\/jobs\/retry\/{id}","methods":["POST"],"parameters":["id"]},"horizon.jobs.show":{"uri":"chorizo\/api\/jobs\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"horizon.index":{"uri":"chorizo\/{view?}","methods":["GET","HEAD"],"wheres":{"view":"(.*)"},"parameters":["view"]},"sanctum.csrf-cookie":{"uri":"sanctum\/csrf-cookie","methods":["GET","HEAD"]},"laravelpwa.manifest":{"uri":"manifest.json","methods":["GET","HEAD"]},"laravelpwa.":{"uri":"offline","methods":["GET","HEAD"]},"ignition.healthCheck":{"uri":"_ignition\/health-check","methods":["GET","HEAD"]},"ignition.executeSolution":{"uri":"_ignition\/execute-solution","methods":["POST"]},"ignition.updateConfig":{"uri":"_ignition\/update-config","methods":["POST"]},"feeds.main":{"uri":"feeds\/posts-feed","methods":["GET","HEAD"]},"front.home":{"uri":"\/","methods":["GET","HEAD"]},"front.terms":{"uri":"terms","methods":["GET","HEAD"]},"front.privacy":{"uri":"privacy","methods":["GET","HEAD"]},"front.disclaimer":{"uri":"disclaimer","methods":["GET","HEAD"]},"front.all":{"uri":"bites","methods":["GET","HEAD"]},"front.search":{"uri":"search","methods":["POST"]},"front.search.results":{"uri":"bites\/{query}","methods":["GET","HEAD"],"parameters":["query"]},"front.post":{"uri":"{category_slug}\/{slug}","methods":["GET","HEAD"],"parameters":["category_slug","slug"]},"front.category":{"uri":"{category_slug}","methods":["GET","HEAD"],"wheres":{"category_slug":"^(updates|opinions|features|new-launches|how-tos|reviews)$"},"parameters":["category_slug"]}}};
if (typeof window !== 'undefined' && typeof window.Ziggy !== 'undefined') {
Object.assign(Ziggy.routes, window.Ziggy.routes);

View File

@@ -1,6 +1,7 @@
<aside class="p-4 mb-3 bg-black text-white rounded-3 shadow-sm">
<h4 class="font-family-roboto-condensed">About <span class="text-uppercase">FutureWalker</span></h4>
<p class="mb-0">
FutureWalker offers specialized coverage of advanced technology and AI breakthroughs, delivering the latest trends and insights through concise, 1-2 minute news updates to quickly bring you up to speed.
FutureWalker offers specialized coverage of advanced technology and AI breakthroughs, delivering the latest
trends and insights through concise, 1-2 minute news updates to quickly bring you up to speed.
</p>
</aside>

View File

@@ -1,87 +1,82 @@
<div class="accordion" id="accordionTechBites">
@foreach ($rss_posts as $key => $post)
@foreach ($rss_posts as $key => $post)
<div class="accordion-item">
<h2 class="accordion-header" id="heading{{ $post->id }}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#collapse{{ $post->id }}" aria-controls="collapse{{ $post->id }}">
<div>
<h3 class="h6 mb-2 fw fw-semibold font-family-roboto-condensed">
{{ $post->title }}
</h3>
<div class="accordion-item">
<h2 class="accordion-header" id="heading{{ $post->id }}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#collapse{{ $post->id }}" aria-controls="collapse{{ $post->id }}">
<div>
<h3 class="h6 mb-2 fw fw-semibold font-family-roboto-condensed">
{{ $post->title }}
</h3>
<div class="d-flex flex-wrap mb-1">
@if ($post->entities)
@foreach ($post->entities as $key => $keyword)
@if ($key == 0)
<h4
class="mb-1 pb-1 d-inline badge bg-secondary border-secondary text-white border me-1 small fw-bold">
{{ $keyword }}
</h4>
@else
<h4
class="mb-1 pb-1 d-inline badge text-bg-light border me-1 small fw-normal">
{{ $keyword }}
</h4>
@endif
@endforeach
@endif
@if ($post->impact_level == 'high')
<h4
class="font-family-roboto-condensed mb-1 pb-1 d-inline badge bg-danger border-danger text-white border me-1 small fw-bold text-uppercase">
🔥 High Impact
</h4>
@endif
@if ($post->entities)
@foreach ($post->entities as $key => $keyword)
@if ($key == 0)
<h4
class="mb-1 pb-1 d-inline badge bg-secondary border-secondary text-white border me-1 small fw-bold">
{{ $keyword }}
</h4>
@else
<h4 class="mb-1 pb-1 d-inline badge text-bg-light border me-1 small fw-normal">
{{ $keyword }}
</h4>
@endif
@endforeach
@endif
@if ($post->impact_level == 'high')
<h4
class="font-family-roboto-condensed mb-1 pb-1 d-inline badge bg-danger border-danger text-white border me-1 small fw-bold text-uppercase">
🔥 High Impact
</h4>
@endif
</div>
<div class="small">
@if ($post->category)
<span
class="d-inline text-secondary small">{{ $post->category->name }}</span>
<i class="bi bi-dot"></i>
@endif
<div class="small">
@if ($post->category)
<span class="d-inline text-secondary small">{{ $post->category->name }}</span>
<i class="bi bi-dot"></i>
@endif
<span
class="d-inline text-secondary small">{{ $post->published_at->format('d M') }}</span>
<i class="bi bi-dot"></i>
<span
class="d-inline text-secondary small">{{ min_read($post->bites) }}</span>
<span class="d-inline text-secondary small">{{ $post->published_at->format('d M') }}</span>
<i class="bi bi-dot"></i>
<span class="d-inline text-secondary small">{{ min_read($post->bites) }}</span>
</div>
</div>
</button>
</h2>
<div id="collapse{{ $post->id }}" class="accordion-collapse collapse"
aria-labelledby="heading{{ $post->id }}" data-bs-parent="#accordionTechBites">
<div class="accordion-body small">
<div class="fw-bold">The Bite:</div>
<div class="mb-3">{{ $post->bites }}</div>
@if (in_array($post->impact_level, ['medium', 'high']))
<div class="card mb-2">
<div class="card-body">
<div class="fw-bold">Social Impact:</div>
<div>{{ $post->impact }}</div>
</div>
</div>
@endif
@if ($post->entities)
<div class="mb-2">
More about: @foreach ($post->all_keywords as $keyword)
<a class="ms-1"
href="{{ get_route_search_result($keyword) }}">{{ $keyword }}</a>
@endforeach
</div>
@endif
<div>
Read more at:
<a class="" target="_blank" rel="nofollow noopener noreferrer"
href="{{ $post->post_url }}"> {{ get_domain_from_url($post->post_url) }} </a>
</div>
</div>
</button>
</h2>
<div id="collapse{{ $post->id }}" class="accordion-collapse collapse" aria-labelledby="heading{{ $post->id }}"
data-bs-parent="#accordionTechBites">
<div class="accordion-body small">
<div class="fw-bold">The Bite:</div>
<div class="mb-3">{{ $post->bites }}</div>
@if (in_array($post->impact_level, ['medium','high']))
<div class="card mb-2">
<div class="card-body">
<div class="fw-bold">Social Impact:</div>
<div>{{ $post->impact }}</div>
</div>
</div>
@endif
@if ($post->entities)
<div class="mb-2">
More about: @foreach( $post->all_keywords as $keyword) <a class="ms-1" href="{{ get_route_search_result($keyword) }}">{{ $keyword }}</a> @endforeach
</div>
@endif
<div>
Read more at:
<a class="" target="_blank" rel="nofollow noopener noreferrer" href="{{ $post->post_url }}"> {{ get_domain_from_url($post->post_url) }} </a>
</div>
</div>
</div>
</div>
@endforeach
@endforeach
</div>
</div>

View File

@@ -24,18 +24,18 @@
@include('front.partials.news_bites')
<div class="mt-3 mb-3">
@if ($rss_posts->count() > 0)
@if ($rss_posts instanceof \Illuminate\Pagination\CursorPaginator)
<div class="flex justify-center">
{{ $rss_posts->links('pagination::simple-bootstrap-5-rounded') }}
</div>
@endif
@else
<div class="py-3 text-center">
<div class="mb-4">No 🍪 bites found yet.</div>
<div><a href="{{ route('front.all') }}">See more News Bites</a></div>
</div>
@endif
@if ($rss_posts->count() > 0)
@if ($rss_posts instanceof \Illuminate\Pagination\CursorPaginator)
<div class="flex justify-center">
{{ $rss_posts->links('pagination::simple-bootstrap-5-rounded') }}
</div>
@endif
@else
<div class="py-3 text-center">
<div class="mb-4">No 🍪 bites found yet.</div>
<div><a href="{{ route('front.all') }}">See more News Bites</a></div>
</div>
@endif
</div>

View File

@@ -5,8 +5,8 @@
<div class="container-lg">
<div class="text-center row justify-content-center">
<div class="col-12 col-md-10 col-lg-8">
<div class="display-6 fw-bold font-family-roboto-condensed mb-2">Your future depends<wbr> on today's
news.</div>
<div class="display-6 fw-bold font-family-roboto-condensed mb-2">Your Future Depends<wbr> on Today's
News</div>
<h1 class="h4 fw-normal mb-4">In the fast-evolving world of AI and tech, staying updated is not
optional—it's critical for your future success. Stay updated with daily news 🍪 bites from
<strong>FutureWalker</strong>.
@@ -18,7 +18,7 @@
</div>
</div>
{{-- @if ($featured_posts->count() > 0)
{{-- @if ($featured_posts->count() > 0)
<div class="container-lg py-4">
<div class="text-center">
<h2 id="latest-news" class="font-family-roboto-condensed mb-3 h2">Featured News</h2>
@@ -60,7 +60,17 @@ class="text-secondary">{{ $post->published_at->diffForHumans() }}</small>
@if ($rss_posts->count() > 0)
<div class="text-start mb-3">
<h2 id="latest-news" class="fw-bold font-family-roboto-condensed mb-1 h2">🍪 Tech Bites</h2>
<div class="d-flex">
<h2 id="latest-news" class="align-self-center fw-bold font-family-roboto-condensed mb-1 h2">
🍪 Tech Bites </h2>
<div class="align-self-center">
<span
class="mb-2 ms-2 badge illuminated text-bg-primary d-inline-flex font-family-roboto-condensed"><i
class="bi bi-clock-history me-1"></i> UPDATED HOURLY</span>
</div>
</div>
<h5>1-2 minute news bites worth every second</h5>
</div>
@@ -71,11 +81,9 @@ class="text-secondary">{{ $post->published_at->diffForHumans() }}</small>
<a href="{{ route('front.all') }}"
class="btn btn-primary px-4 rounded-pill text-decoration-none">Read more News Bites</a>
</div>
@endif
{{-- @if ($latest_posts->count() > 0)
{{-- @if ($latest_posts->count() > 0)
<div class="text-start">
<h2 id="latest-news" class="fw-semibold font-family-roboto-condensed mb-3 h2">Latest News</h2>
</div>

View File

@@ -45,9 +45,8 @@
$hours = $request->input('hours');
if (is_empty($hours))
{
return "Missing 'hours'.";
if (is_empty($hours)) {
return "Missing 'hours'.";
}
BrowseRSSPostJob::dispatch($hours)->onQueue('default')->onConnection('default');