This commit is contained in:
2023-11-28 04:39:36 +08:00
parent a9ac0e48b3
commit dc37274b6c
86 changed files with 2106 additions and 191 deletions

View File

@@ -0,0 +1,9 @@
<template>
<div></div>
</template>
<script>
export default {
name: "App",
};
</script>
<style></style>

View File

@@ -1 +1,57 @@
import * as bootstrap from "~bootstrap";
import "@tabler/core/src/js/tabler.js";
import "./bootstrap";
import { createApp, defineAsyncComponent } from "vue";
import FrontApp from "@/FrontApp.vue";
const app = createApp({ FrontApp });
const vueComponents = import.meta.glob("@/vue/**/*.vue", {
eager: false,
});
console.log(vueComponents);
import.meta.glob(["../images/**", "../fonts/**"]);
import { createPinia } from "pinia";
app.use(createPinia());
import axios from "./plugins/axios";
import VueAxios from "vue-axios";
app.use(VueAxios, axios);
import auth from "./plugins/auth";
app.use(auth);
import eventBus from "./plugins/event-bus";
app.use(eventBus);
import Vue3Toastify from "vue3-toastify";
import "../css/toastify.css";
app.use(Vue3Toastify);
import { Ziggy as ZiggyRoute } from "./ziggy";
import { ZiggyVue } from "ziggy-js/dist/vue";
app.use(ZiggyVue, ZiggyRoute);
window.Ziggy = ZiggyRoute;
Object.entries({ ...vueComponents }).forEach(([path, definition]) => {
// Get name of component, based on filename
// "./components/Fruits.vue" will become "Fruits"
const componentName = path
.split("/")
.pop()
.replace(/\.\w+$/, "")
.replace(/([a-z])([A-Z])/g, "$1-$2")
.toLowerCase();
// console.log(componentName);
// console.log(typeof definition);
// Register component on this Vue instance
app.component(componentName, defineAsyncComponent(definition));
});
app.mount("#app");

View File

@@ -0,0 +1,75 @@
<template>
<div>
<div class="d-grid gap-2 mx-auto" style="width: 250px">
<img
style="width: 250px; height: auto"
:src="imgSrc"
alt="Featured banner"
/>
<button @click="getEmbedCode" class="btn btn-sm btn-outline-primary px-3">
Get HTML embed code
</button>
</div>
</div>
</template>
<script>
import { toast } from "vue3-toastify";
export default {
name: "GetEmbedCode",
mixins: [],
components: {},
props: ["url", "name"],
data: () => ({
imgSrc: "https://cdn.aibuddytool.com/featured-on-aibuddytool-1-1000.webp",
showToast: false,
}),
computed: {
embedCode() {
return (
"<!-- " +
this.name +
' featured by AiBuddyTool.com --><a href="' +
this.url +
'" target="_blank"><img alt="' +
this.name +
'" style="width: 250px; height: auto" src="' +
this.imgSrc +
'"></a>'
);
},
},
methods: {
getEmbedCode() {
const el = document.createElement("textarea");
el.value = this.embedCode;
document.body.appendChild(el);
el.select();
document.execCommand("copy");
document.body.removeChild(el);
toast(
"Copied! Paste the HTML embed code at the bottom of your business website footer.",
{
position: "bottom-center",
type: "success",
timeout: 3000,
closeOnClick: true,
pauseOnFocusLoss: true,
pauseOnHover: true,
draggable: true,
draggablePercent: 0.6,
showCloseButtonOnHover: false,
hideProgressBar: false,
closeButton: true,
icon: true,
rtl: false,
},
);
},
},
mounted() {},
};
</script>
<style scoped></style>

View File

@@ -1,4 +1,4 @@
const Ziggy = {"url":"https:\/\/aibuddytool.test","port":null,"defaults":{},"routes":{"debugbar.openhandler":{"uri":"_debugbar\/open","methods":["GET","HEAD"]},"debugbar.clockwork":{"uri":"_debugbar\/clockwork\/{id}","methods":["GET","HEAD"]},"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"]},"sanctum.csrf-cookie":{"uri":"sanctum\/csrf-cookie","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"]},"api.auth.login.post":{"uri":"api\/login","methods":["POST"]},"api.auth.logout.post":{"uri":"api\/logout","methods":["POST"]},"api.admin.post.get":{"uri":"api\/admin\/post\/{id}","methods":["GET","HEAD"]},"api.admin.country-locales":{"uri":"api\/admin\/country-locales","methods":["GET","HEAD"]},"api.admin.categories":{"uri":"api\/admin\/categories\/{country_locale_slug}","methods":["GET","HEAD"]},"api.admin.authors":{"uri":"api\/admin\/authors","methods":["GET","HEAD"]},"api.admin.upload.cloud.image":{"uri":"api\/admin\/image\/upload","methods":["POST"]},"api.admin.post.upsert":{"uri":"api\/admin\/admin\/post\/upsert","methods":["POST"]},"feeds.main":{"uri":"posts.rss","methods":["GET","HEAD"]},"login":{"uri":"login","methods":["GET","HEAD"]},"logout":{"uri":"logout","methods":["POST"]},"register":{"uri":"register","methods":["GET","HEAD"]},"password.request":{"uri":"password\/reset","methods":["GET","HEAD"]},"password.email":{"uri":"password\/email","methods":["POST"]},"password.reset":{"uri":"password\/reset\/{token}","methods":["GET","HEAD"]},"password.update":{"uri":"password\/reset","methods":["POST"]},"password.confirm":{"uri":"password\/confirm","methods":["GET","HEAD"]},"dashboard":{"uri":"admin","methods":["GET","HEAD"]},"admin.changelog":{"uri":"admin\/changelog","methods":["GET","HEAD"]},"about":{"uri":"admin\/about","methods":["GET","HEAD"]},"users.index":{"uri":"admin\/users","methods":["GET","HEAD"]},"posts.manage":{"uri":"admin\/posts","methods":["GET","HEAD"]},"posts.manage.edit":{"uri":"admin\/posts\/edit\/{post_id}","methods":["GET","HEAD"]},"posts.manage.delete":{"uri":"admin\/posts\/delete\/{post_id}","methods":["GET","HEAD"]},"posts.manage.indexing":{"uri":"admin\/posts\/indexing\/{post_id}","methods":["GET","HEAD"]},"posts.manage.new":{"uri":"admin\/posts\/new","methods":["GET","HEAD"]},"profile.show":{"uri":"admin\/profile","methods":["GET","HEAD"]},"profile.update":{"uri":"admin\/profile","methods":["PUT"]},"front.home":{"uri":"\/","methods":["GET","HEAD"]},"front.discover.home":{"uri":"discover","methods":["GET","HEAD"]},"front.discover.category":{"uri":"discover\/{category_slug}","methods":["GET","HEAD"]},"front.terms":{"uri":"terms","methods":["GET","HEAD"]},"front.privacy":{"uri":"privacy","methods":["GET","HEAD"]},"front.disclaimer":{"uri":"disclaimer","methods":["GET","HEAD"]}}};
const Ziggy = {"url":"https:\/\/aibuddytool.test","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"]},"sanctum.csrf-cookie":{"uri":"sanctum\/csrf-cookie","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"]},"api.auth.login.post":{"uri":"api\/login","methods":["POST"]},"api.auth.logout.post":{"uri":"api\/logout","methods":["POST"]},"api.admin.post.get":{"uri":"api\/admin\/post\/{id}","methods":["GET","HEAD"],"parameters":["id"]},"api.admin.country-locales":{"uri":"api\/admin\/country-locales","methods":["GET","HEAD"]},"api.admin.categories":{"uri":"api\/admin\/categories\/{country_locale_slug}","methods":["GET","HEAD"],"parameters":["country_locale_slug"]},"api.admin.authors":{"uri":"api\/admin\/authors","methods":["GET","HEAD"]},"api.admin.upload.cloud.image":{"uri":"api\/admin\/image\/upload","methods":["POST"]},"api.admin.post.upsert":{"uri":"api\/admin\/admin\/post\/upsert","methods":["POST"]},"feeds.main":{"uri":"posts.rss","methods":["GET","HEAD"]},"login":{"uri":"login","methods":["GET","HEAD"]},"logout":{"uri":"logout","methods":["POST"]},"register":{"uri":"register","methods":["GET","HEAD"]},"password.request":{"uri":"password\/reset","methods":["GET","HEAD"]},"password.email":{"uri":"password\/email","methods":["POST"]},"password.reset":{"uri":"password\/reset\/{token}","methods":["GET","HEAD"],"parameters":["token"]},"password.update":{"uri":"password\/reset","methods":["POST"]},"password.confirm":{"uri":"password\/confirm","methods":["GET","HEAD"]},"dashboard":{"uri":"admin","methods":["GET","HEAD"]},"admin.changelog":{"uri":"admin\/changelog","methods":["GET","HEAD"]},"about":{"uri":"admin\/about","methods":["GET","HEAD"]},"users.index":{"uri":"admin\/users","methods":["GET","HEAD"]},"posts.manage":{"uri":"admin\/posts","methods":["GET","HEAD"]},"posts.manage.edit":{"uri":"admin\/posts\/edit\/{post_id}","methods":["GET","HEAD"],"parameters":["post_id"]},"posts.manage.delete":{"uri":"admin\/posts\/delete\/{post_id}","methods":["GET","HEAD"],"parameters":["post_id"]},"posts.manage.indexing":{"uri":"admin\/posts\/indexing\/{post_id}","methods":["GET","HEAD"],"parameters":["post_id"]},"posts.manage.new":{"uri":"admin\/posts\/new","methods":["GET","HEAD"]},"profile.show":{"uri":"admin\/profile","methods":["GET","HEAD"]},"profile.update":{"uri":"admin\/profile","methods":["PUT"]},"front.home":{"uri":"\/","methods":["GET","HEAD"]},"front.discover.home":{"uri":"discover","methods":["GET","HEAD"]},"front.discover.category":{"uri":"discover\/{category_slug}","methods":["GET","HEAD"],"parameters":["category_slug"]},"front.search.post":{"uri":"ai-search","methods":["POST"]},"front.search.results":{"uri":"ai-search\/{query}","methods":["GET","HEAD"],"parameters":["query"]},"front.aitool.show":{"uri":"ai-tool\/{ai_tool_slug}","methods":["GET","HEAD"],"parameters":["ai_tool_slug"]},"front.terms":{"uri":"terms","methods":["GET","HEAD"]},"front.privacy":{"uri":"privacy","methods":["GET","HEAD"]},"front.disclaimer":{"uri":"disclaimer","methods":["GET","HEAD"]}}};
if (typeof window !== 'undefined' && typeof window.Ziggy !== 'undefined') {
Object.assign(Ziggy.routes, window.Ziggy.routes);

View File

@@ -26,4 +26,4 @@ ## **5. Agreement**
## **6. Contact**
If you have any questions regarding this disclaimer, contact us via email: support@aibuddytool.com
If you have any questions regarding this disclaimer, contact us via email: contact@aibuddytool.com

View File

@@ -238,4 +238,4 @@ ## Contact Us
Don't hesitate to contact us if you have any questions.
-Via Email: support@aibuddytool.com
-Via Email: contact@aibuddytool.com

View File

@@ -160,7 +160,7 @@ ## Agreement to Arbitrate
## Notice of Dispute
In the event of a dispute, you or aibuddytool.com must give the other a Notice of Dispute, which is a written statement that sets forth the name, address, and contact information of the party giving it, the facts giving rise to the dispute, and the relief requested. You must send any Notice of Dispute via email to: support@aibuddytool.com. aibuddytool.com will send any Notice of Dispute to you by mail to your address if we have it, or otherwise to your email address. You and aibuddytool.com will attempt to resolve any dispute through informal negotiation within sixty (60) days from the date the Notice of Dispute is sent. After sixty (60) days, you or aibuddytool.com may commence arbitration.
In the event of a dispute, you or aibuddytool.com must give the other a Notice of Dispute, which is a written statement that sets forth the name, address, and contact information of the party giving it, the facts giving rise to the dispute, and the relief requested. You must send any Notice of Dispute via email to: contact@aibuddytool.com. aibuddytool.com will send any Notice of Dispute to you by mail to your address if we have it, or otherwise to your email address. You and aibuddytool.com will attempt to resolve any dispute through informal negotiation within sixty (60) days from the date the Notice of Dispute is sent. After sixty (60) days, you or aibuddytool.com may commence arbitration.
## Binding Arbitration
@@ -198,4 +198,4 @@ ## Contact Us
Don't hesitate to contact us if you have any questions.
- Via Email: support@aibuddytool.com
- Via Email: contact@aibuddytool.com

View File

@@ -52,7 +52,7 @@ $green: #198754;
$teal: #20c997;
$cyan: #0dcaf0;
$highlighter-yellow: #ccf62b;
$highlighter-pink: #ff90ea;
$highlighter-pink: #feacf5;
$highlighter-orange: #ff962a;
$highlighter-blue: #507fff;
$highlighter-purple: #952fff;
@@ -314,7 +314,7 @@ $cyans: (
// fusv-enable
// scss-docs-start theme-color-variables
$primary: $highlighter-blue;
$primary: $highlighter-purple;
$secondary: $gray-600;
$success: $green;
$info: $cyan;
@@ -347,4 +347,3 @@ $highlighter-colors: (
);
$theme-colors: map-merge($theme-colors, $highlighter-colors);
$link-color: $highlighter-purple;

View File

@@ -0,0 +1,160 @@
@extends('front.layouts.app')
@section('content')
<div class="container-lg pt-3">
<div class="mb-3">
@include('front.partials.breadcrumbs')
<h1 class="fw-bold mb-0">{{ $ai_tool->tool_name }}</h1>
<h2 class="text-secondary"><span class="h6">{{ $ai_tool->tagline }}</span></h2>
</div>
<div class="row mb-3 g-3">
<div class="col-12 col-sm-7 col-md-8 col-lg-8 col-xl-9">
<div class="mb-3">
<ul class="nav nav-underline gap-4 h5">
@if (!is_empty($ai_tool->screenshot_img))
<li class="nav-item">
<a class="text-decoration-none nav-link active instant-scroll" aria-current="page"
href="#screenshot">Screenshot</a>
</li>
@endif
<li class="nav-item">
<a title="Details about {{ $ai_tool->category->name }} AI tool: {{ $ai_tool->tool_name }}"
class="text-decoration-none nav-link instant-scroll" href="#details">Details</a>
</li>
<li class="nav-item">
<a title="Embed {{ $ai_tool->tool_name }}" class="text-decoration-none nav-link instant-scroll"
href="#embed">Embed</a>
</li>
@if (count($ai_tool->qna) > 0)
<li class="nav-item">
<a title="Frequently asked questions about the AI tool {{ $ai_tool->tool_name }}"
class="text-decoration-none nav-link instant-scroll" href="#faq">FAQ</a>
</li>
@endif
</ul>
</div>
<div>
@if (!is_empty($ai_tool->screenshot_img))
<div id="screenshot" class="ratio ratio-16x9 mb-5">
<figure class="text-center">
<img class="img-fluid rounded-3 shadow mb-2" src="{{ $ai_tool->screenshot_img }}"
alt="Screenshot of {{ $ai_tool->tool_name }} website">
<figcaption class="small text-secondary">Screenshot of {{ $ai_tool->tool_name }} ({{ get_domain_from_url($ai_tool->external_url) }}) website
</figcaption>
</figure>
</div>
@endif
<div id="embed">
<div class="card border-2 border-primary mb-4">
<div class="card-body text-center">
<div class="mb-3">This AI tool, <span
class="fw-semibold">{{ $ai_tool->tool_name }}</span>
was first featured in AiBuddyTool.com
on {{ dmy($ai_tool->created_at) }}.</div>
<get-embed-code name="{{ $ai_tool->tool_name }}"
url="{{ route('front.aitool.show', ['ai_tool_slug' => $ai_tool->slug, 'ref' => get_domain_from_url($ai_tool->external_url)]) }}"></get-embed-code>
</div>
</div>
</div>
</div>
<div id="details" class="card mb-4">
<div class="card-body">
<h3 class="mb-2 fw-bold h5 text-primary">{{ $ai_tool->tool_name }} summary by AIToolBuddy</h3>
<div>{!! $ai_tool->summary !!}</div>
<br>
<h3 class="mb-2 fw-bold h5 text-primary">Details</h3>
<table class="table">
<tbody>
<tr>
<th scope="row">Pricing Structure</th>
<td>{{ $ai_tool->pricing_type }}</td>
</tr>
<tr>
<th scope="row">AI Tool Platform</th>
<td>
@if ($ai_tool->is_app_web_both == 'both')
App & Web
@else
{{ ucwords($ai_tool->is_app_web_both) }} Only
@endif
</td>
</tr>
</tbody>
</table>
<br>
<h3 class="mb-2 fw-bold h5 text-primary">{{ $ai_tool->tool_name }} Features</h3>
<div class="d-flex flex-wrap gap-1">
@foreach ($ai_tool->keywords as $keyword)
<a href="{{ get_route_search_result($keyword->value_lowercased) }}"
class="btn btn-outline-dark btn-sm border-2 px-2 py-1 rounded-pill text-decoration-none text-nowrap">{{ $keyword->value }}
</a>
@endforeach
</div>
</div>
</div>
@if (count($ai_tool->qna) > 0)
<div id="faq" class="mb-4">
<div class="card">
<div class="card-body">
<h3 class="mb-2 fw-bold h5 text-primary">Frequently Asked Questions about
{{ $ai_tool->tool_name }}</h3>
<div class="accordion" id="accordionAiToolFaq">
@foreach ($ai_tool->qna as $key => $faq)
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button"
data-bs-toggle="collapse" data-bs-target="#collapse{{ $key }}"
{{ $key == 0 ? 'aria-expanded="true"' : '' }}
aria-controls="collapse{{ $key }}">
{{ $faq->q }}
</button>
</h2>
<div id="collapse{{ $key }}"
class="accordion-collapse collapse {{ $key == 0 ? 'show' : '' }}"
data-bs-parent="#accordionAiToolFaq">
<div class="accordion-body">
{!! $faq->a !!}
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
</div>
@endif
</div>
<div class="col-12 col-sm-5 col-md-4 col-lg-4 col-xl-3">
<div class="d-grid">
<a class="btn btn-primary breathing-effect text-decoration-none px-4 mb-4" href="{{ add_params_to_url($ai_tool->external_url, ['ref' => 'aibuddytool.com']) }}">Visit {{ $ai_tool->tool_name }} page ({{ get_domain_from_url($ai_tool->external_url) }})</a>
</div>
@include('front.partials.sidebar')
</div>
</div>
</div>
</div>
@endsection
@push('top_head')
{!! $faq_context !!}
@endpush

View File

@@ -10,6 +10,12 @@
Discover over <span class="bg-highlighter-yellow fw-bold px-2">{{ $tools_count }} AI Tools</span> Today
@endif
</h1>
<div class="row justify-content-center">
<div class="col-12 col-md-9 col-lg-8 col-xl-7 mx-auto mb-4">
@include('front.partials.search')
</div>
</div>
</div>
<div class="container-lg pb-5">
@@ -19,15 +25,20 @@
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#collapseCategory" aria-controls="collapseCategory">
<span class="h5 fw-bold mb-0">Filter by Category ({{ $parent_categories->count() }})</span>
<span class="h5 mb-0">Filter by {{ $parent_categories->count() }} AI Tool Categories </span>
</button>
</h2>
<div id="collapseCategory" class="accordion-collapse collapse" data-bs-parent="#accordionCategory">
<div class="accordion-body">
<div class="accordion-body d-inline-flex justify-content-center flex-wrap gap-1">
<h3 class="d-inline mb-0">
<a href="{{ route('front.discover.home') }}"
class="btn btn-outline-dark text-decoration-none btn-sm border-2 fw-bold mb-0 rounded-pill px-3 {{ is_null($category) ? 'active' : '' }}">All
Categories</a>
</h3>
@foreach ($parent_categories as $parent_category)
<h3 class="d-inline">
<h3 class="d-inline mb-0">
<a href="{{ route('front.discover.category', ['category_slug' => $parent_category->slug]) }}"
class="btn btn-outline-dark text-decoration-none btn-sm border-2 fw-bold mb-1 rounded-pill px-3 {{ !is_null($category) && $category->slug == $parent_category->slug ? 'active' : '' }}">{{ $parent_category->name }}
class="btn btn-outline-dark text-decoration-none btn-sm border-2 fw-bold mb-0 rounded-pill px-3 {{ !is_null($category) && $category->slug == $parent_category->slug ? 'active' : '' }}">{{ $parent_category->name }}
{{ $parent_category->emoji }}</a>
</h3>
@endforeach
@@ -36,12 +47,46 @@ class="btn btn-outline-dark text-decoration-none btn-sm border-2 fw-bold mb-1 ro
</div>
</div>
<div class="row justify-content-center g-3">
@for ($i = 1; $i <= 18; $i++)
<div class="col-6 col-lg-4">
@include('front.partials.ai-tool-card')
@if ($ai_tools->count() > 0)
<div class="row justify-content-center g-3 mb-4">
@foreach ($ai_tools as $ai_tool)
<div class="col-6 col-lg-4">
@include('front.partials.ai-tool-card')
</div>
@endforeach
</div>
@else
<div class="card">
<div class="card-body text-center p-5">
<p class="h4 fw-bold">😱 Yikes!</p>
<p class="h5 mb-3">This is embarassing, there are no AI tools in this category yet.<br> We will find
more AI to add here. In the meantime:</p>
<a class="btn btn-primary btn-lg rounded-pill px-4 text-decoration-none"
href="{{ route('front.discover.home') }}">See more AI Tools</a>
</div>
@endfor
</div>
@endif
<div class="mb-2">
@if ($ai_tools instanceof \Illuminate\Pagination\LengthAwarePaginator)
@if ($ai_tools->hasPages())
<div class="d-flex justify-content-center">
{{ $ai_tools->onEachSide(1)->links('pagination::bootstrap-5-pagination-limit-10') }}
</div>
@endif
@elseif ($ai_tools instanceof \Illuminate\Pagination\CursorPaginator)
@if ($ai_tools->hasPages())
<div class="d-flex justify-content-center">
{{ $ai_tools->links('pagination::simple-bootstrap-5') }}
</div>
@endif
@endif
</div>
<div class="d-flex justify-content-center text-center text-secondary">
<small>Use <b>Search</b> to discover AI tools by brand, task or features.</small>
</div>
</div>
@endsection

View File

@@ -1,7 +0,0 @@
@extends('front.layouts.app')
@section('content')
<h1 class="display-5 text-body-emphasis font-family-zilla-slab">
Discover Art AI Tools Today
</h1>
@endsection

View File

@@ -8,42 +8,43 @@ class="bg-highlighter-pink fw-bold px-2">Any Task</span>
</h1>
<h2 class="lead h4 mb-4">Curating over 750+ AI tools and growing 🛠️</h2>
<div class="col-12 col-md-9 col-lg-8 col-xl-7 mx-auto mb-4">
<div class="row justify-content-center">
<div class="col-12 col-md-9 col-lg-8 col-xl-7 mx-auto mb-4">
@include('front.partials.search')
</div>
<form class="form-inline d-flex justify-content-center border rounded-pill p-2">
<input class="form-control form-control-lg border-0 rounded-pill" type="search" placeholder="Search AI Tools"
aria-label="Search">
<button class="btn btn-lg btn-primary bg-gradient text-white rounded-pill ms-2 text-nowrap px-4 fw-bold"
type="submit">Search with AI </button>
</form>
</div>
<div class="col-12 col-md-9 col-lg-9 col-xl-9 mx-auto">
Filter by
@foreach ($top_parent_categories as $category)
<a href="{{ route('front.discover.category', ['category_slug' => $category->slug]) }}"
class="btn btn-outline-dark text-decoration-none border-2 fw-bold mb-1 rounded-pill px-3">{{ $category->name }}
{{ $category->emoji }}</a>
@endforeach
<a href="{{ route('front.discover.home') }}"
class="btn btn-outline-dark text-decoration-none border-2 fw-bold mb-1 rounded-pill px-3">and
{{ $non_top_parent_categories->count() }} more top categories!</a>
</div>
</div>
<div class="container-lg">
<p class="text-center h3 fw-bold mb-3">Featured AI Tools</p>
<div class="row justify-content-center g-3">
@for ($i = 1; $i <= 18; $i++)
<div class="col-6 col-lg-4">
@include('front.partials.ai-tool-card')
<div class="col-12 col-md-9 col-lg-9 col-xl-9 mx-auto">
<div class="d-inline-flex justify-content-center flex-wrap gap-1">
<span class="align-self-center">Filter by</span>
@foreach ($top_parent_categories as $category)
<a href="{{ route('front.discover.category', ['category_slug' => $category->slug]) }}"
class="btn btn-outline-dark text-decoration-none border-2 fw-bold rounded-pill px-3">{{ $category->name }}
{{ $category->emoji }}</a>
@endforeach
<a href="{{ route('front.discover.home') }}"
class="btn btn-outline-dark text-decoration-none border-2 fw-bold rounded-pill px-3">and
{{ $non_top_parent_categories->count() }} more top categories!</a>
</div>
@endfor
</div>
</div>
</div>
@if ($latest_ai_tools->count() > 0)
<div class="container-lg">
<p class="text-center h3 fw-bold mb-3">Featured AI Tools</p>
<div class="row justify-content-center g-3">
@foreach ($latest_ai_tools as $ai_tool)
<div class="col-6 col-lg-4">
@include('front.partials.ai-tool-card', ['ai_tool' => $ai_tool])
</div>
@endforeach
</div>
</div>
@endif
<div class="container-lg mt-3 mb-3 text-center">
<a class="btn btn-primary rounded-pill px-4 breathing-effect btn-lg text-decoration-none bg-gradient"
href="{{ route('front.discover.home') }}">Discover {{ $tools_count }} More AI Tools</a>

View File

@@ -13,15 +13,14 @@
<meta property="fb:app_id" content="{{ config('seotools.fb_app_id') }}" />
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}">
<link rel="icon" href="{{ asset('ai-buddy-tool-logo-512x512.svg') }}" type="image/svg+xml">
<link rel="apple-touch-icon" sizes="180x180" href="{{ asset('apple-touch-icon.png') }}">
<link rel="icon" type="image/png" sizes="32x32" href="{{ asset('favicon-32x32.png') }}">
<link rel="icon" type="image/png" sizes="16x16" href="{{ asset('favicon-16x16.png') }}">
<link rel="manifest" href="{{ asset('site.webmanifest') }}">
@vite('resources/sass/app-front.scss')
@stack('top_head')
<!-- Custom styles for this Page-->
@yield('custom_styles')
@@ -31,19 +30,23 @@
<body>
@include('googletagmanager::body')
<div id="app">
@include('front.layouts.navigation')
@include('googletagmanager::body')
@yield('content')
@include('front.layouts.navigation')
@include('front.layouts.footer')
@yield('content')
<!-- Core plugin JavaScript-->
@vite('resources/js/app-front.js')
@include('front.layouts.footer')
<!-- Page level custom scripts -->
@yield('custom_scripts')
<!-- Core plugin JavaScript-->
@vite('resources/js/app-front.js')
<!-- Page level custom scripts -->
@yield('custom_scripts')
</div>
</body>

View File

@@ -1,9 +1,10 @@
<div class="container-fluid shadow-sm">
<header class="d-flex flex-wrap align-items-center justify-content-center py-3">
<header class="d-flex flex-wrap align-items-center justify-content-center py-2">
<div class="col-auto">
<a href="{{ route('front.home') }}" class="btn btn-link d-inline-flex text-decoration-none text-center">
<p class="display-6 mb-0 font-family-black-ops-one">
<a href="{{ route('front.home') }}" class="btn btn-link d-inline-flex text-decoration-none hover-grow text-center gap-2">
<img class="align-self-center" style="height:50px; width:auto;" src="{{ asset('ai-buddy-tool-logo-512x512.svg') }}" alt="AIBuddyTool.com Logo">
<p class="align-self-center display-6 mb-0 font-family-zilla-slab fw-bold">
{{ config('app.name') }}
</p>
</a>

View File

@@ -1,22 +1,48 @@
<div class="card border-0 shadow hover-grow">
<div class="ratio ratio-16x9">
<a href="#">
<img class="card-img-top" src="https://placekitten.com/g/1024/576">
<div class="card border-0 shadow hover-grow" style="height: 100%;">
<div class="ratio ratio-16x9 shadow">
<a href="{{ route('front.aitool.show', ['ai_tool_slug' => $ai_tool->slug]) }}">
<img class="card-img-top" src="{{ $ai_tool->screenshot_img }}">
</a>
</div>
<div class="card-body">
<a class="fw-bold" href="#">
<h3 class="h5 fw-bold line-clamp-1">Yada {{ $i }}</h3>
<a class="fw-bold" href="{{ route('front.aitool.show', ['ai_tool_slug' => $ai_tool->slug]) }}">
<h3 class="h5 fw-bold line-clamp-1">{{ $ai_tool->tool_name }}</h3>
</a>
<p class="line-clamp-2">Rewin.ai is an AI tool that helps content creators generate unique and engaging scripts
for their chicken rice that is very tasty.</p>
<div class="d-flex">
<a class="btn btn-outline-dark btn-sm border-2 px-2 py-1 rounded-pill text-decoration-none">Light</a>
<p class="line-clamp-2 mb-2">{!! str_first_sentence($ai_tool->summary) !!}</p>
<div class="mb-3 d-flex gap-1">
<span class="badge rounded-pill text-bg-highlighter-yellow">
<i class="bi bi-currency-dollar"></i> {{ $ai_tool->pricing_type }}
</span>
<span class="badge rounded-pill text-bg-highlighter-orange">
<i class="bi bi-globe"></i>
@if ($ai_tool->is_app_web_both == 'both')
App & Web
@else
{{ ucwords($ai_tool->is_app_web_both) }}
@endif
</span>
</div>
<div class="d-flex flex-wrap gap-1">
@foreach ($ai_tool->keywords as $keyword)
@if ($loop->iteration <= 3)
<a href="{{ get_route_search_result($keyword->value_lowercased) }}"
class="btn btn-outline-dark btn-sm border-2 px-2 py-1 rounded-pill text-decoration-none text-nowrap">{{ $keyword->value }}</a>
@else
<a href="{{ route('front.discover.home') }}"
class="btn btn-outline-dark btn-sm border-2 px-2 py-1 rounded-pill text-decoration-none text-nowrap">
+ {{ $ai_tool->keywords->count() - 3 }} more
</a>
@break
@endif
@endforeach
</div>
</div>
</div>

View File

@@ -5,8 +5,17 @@
@if ($loop->last)
<li class="breadcrumb-item active" aria-current="page">{{ $breadcrumb['name'] }}</li>
@else
<li class="breadcrumb-item"><a href="{{ $breadcrumb['url'] }}">{{ $breadcrumb['name'] }}</a></li>
@if (!is_empty($breadcrumb['url']))
<li class="breadcrumb-item text-primary"><a
href="{{ $breadcrumb['url'] }}">{{ $breadcrumb['name'] }}</a></li>
@else
<li class="breadcrumb-item text-secondary">{{ $breadcrumb['name'] }}</li>
@endif
@endif
@endforeach
</ol>
</nav>
@push('top_head')
{!! $breadcrumb_context !!}
@endpush

View File

@@ -0,0 +1,8 @@
<form action="{{ route('front.search.post') }}" method="POST"
class="form-inline d-flex justify-content-center border rounded-pill p-2">
@csrf
<input class="form-control form-control-lg border-0 rounded-pill" type="search" placeholder="Search AI Tools"
name="query" value="{{ session()->get('query') }}" aria-label="Search">
<button class="btn btn-lg btn-primary bg-gradient text-white rounded-pill ms-2 text-nowrap px-4 fw-bold"
type="submit">Search with Buddy AI </button>
</form>

View File

@@ -0,0 +1,34 @@
<aside class="p-4 mb-3 bg-white border-primary text-secondary rounded-3 shadow-sm">
<p class="h4 font-family-roboto-condensed fw-bold text-primary">About aibuddytool.com</p>
<p class="mb-0">
AI Buddy Tool is your go-to platform for exploring the world of artificial intelligence. Centered around
<b>Buddy AI</b>, our intuitive AI-powered search assistant, we make discovering and understanding AI tools
effortless and engaging. Whether you're a tech enthusiast or a curious explorer, our platform simplifies AI,
offering you a seamless experience in finding the perfect AI solutions for your needs. Join us to unlock AI's
potential and see how it can transform your world. 🌟🤖💡
</p>
</aside>
<aside class="mb-3">
<div class="text-secondary small mb-1">Our sponsors</div>
<div style="--bs-aspect-ratio: 66.67%;" class="ratio ratio-1x1 rounded-2 shadow-sm">
<a target="_blank" href="https://futurewalker.co?utm_source=external&utm_medium=sidebar&utm_campaign=aibuddytool&ref=aibuddytool">
<img class="img-fluid rounded-2" src="https://cdn.futurewalker.co/futurewalker-600x400-banner.webp" alt="Futurewalker.co: 1 minute AI + tech news bites worth every second">
</a>
</div>
</aside>
<aside class="mb-3">
<form action="{{ route('front.search.post') }}" method="POST"
class="form-inline d-flex justify-content-center">
@csrf
<input class="form-control form-control-lg " type="search" placeholder="Search AI Tools"
name="query" value="{{ session()->get('query') }}" aria-label="Search">
<button class="btn btn-outline-primary bg-gradient ms-2 text-nowrap px-2 fw-bold border-2"
type="submit">
<i class="bi bi-search"></i><br>
Search
</button>
</form>
</aside>

View File

@@ -0,0 +1,110 @@
@extends('front.layouts.app')
@section('content')
<div class="container-lg pt-3 mb-3">
@include('front.partials.breadcrumbs')
<div class="mb-3">
@include('front.partials.search')
</div>
<h1 class="h2 text-body-emphasis font-family-zilla-slab">
<i class="bi bi-search"></i> <span class="fw-bold">{{ $query }}</span> AI tools
</h1>
</div>
<div class="container-lg pb-5">
<div class="row">
<div class="col-12 col-lg-8 col-xl-9">
@foreach ($results as $result)
<div class="card mb-4 hover-grow shadow">
<div class="card-body p-3 p-lg-3">
<div class="row g-2 overflow-hidden flex-md-row h-md-250 position-relative">
<div class="col-3 col-lg-3 d-none d-lg-flex" style="height:100%;">
<div class="align-self-center p-1">
<img class="img-fluid rounded-3 shadow-sm"
src="{{ $result->ai_tool->screenshot_img }}" alt="{{ $result->tool_name }}">
</div>
</div>
<div class="col-12 col-lg-9 d-flex flex-column position-static">
<a class="fw-bold" href="#">
<h3 class="h5 fw-bold line-clamp-1">{{ $result->ai_tool->tool_name }}</h3>
</a>
<p class="line-clamp-2 mb-2">
@foreach (str_extract_sentences($result->ai_tool->summary, 2) as $sentence)
{!! $sentence !!}
@endforeach
</p>
<div class="mb-3 d-flex gap-1">
<span class="badge rounded-pill text-bg-highlighter-yellow">
<i class="bi bi-currency-dollar"></i> {{ $result->ai_tool->pricing_type }}
</span>
<span class="badge rounded-pill text-bg-highlighter-orange">
<i class="bi bi-globe"></i>
@if ($result->ai_tool->is_app_web_both == 'both')
App & Web
@else
{{ ucwords($result->ai_tool->is_app_web_both) }}
@endif
</span>
</div>
<div class="d-flex flex-wrap gap-1">
@foreach ($result->ai_tool->keywords as $keyword)
@if ($loop->iteration <= 3)
<a href="{{ get_route_search_result($keyword->value_lowercased) }}"
class="btn btn-outline-dark btn-sm border-2 px-2 py-1 rounded-pill text-decoration-none text-nowrap">{{ $keyword->value }}</a>
@else
<a href="{{ route('front.discover.home') }}"
class="btn btn-outline-dark btn-sm border-2 px-2 py-1 rounded-pill text-decoration-none text-nowrap">
+ {{ $result->ai_tool->keywords->count() - 3 }} more
</a>
@break
@endif
@endforeach
</div>
</div>
</div>
</div>
</div>
@endforeach
<div class="mb-2">
@if ($results instanceof \Illuminate\Pagination\LengthAwarePaginator)
@if ($results->hasPages())
<div class="d-flex justify-content-center">
{{ $results->onEachSide(1)->links('pagination::bootstrap-5-pagination-limit-10') }}
</div>
@endif
@elseif ($results instanceof \Illuminate\Pagination\CursorPaginator)
@if ($results->hasPages())
<div class="d-flex justify-content-center">
{{ $results->links('pagination::simple-bootstrap-5') }}
</div>
@endif
@endif
</div>
<div class="d-flex justify-content-center text-center text-secondary mb-3">
<small>Use <b>Search</b> to discover AI tools by brand, task or features.</small>
</div>
</div>
<div class="col-12 col-lg-4 col-xl-3">
@include('front.partials.sidebar')
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,51 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev"
aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span
class="page-link">{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span
class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link"
href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next"
aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@@ -0,0 +1,73 @@
@if ($paginator->hasPages())
<nav class="d-flex justify-items-center justify-content-between">
<!-- Mobile View Pagination -->
<div class="d-flex justify-content-between flex-fill d-sm-none">
<ul class="pagination mb-0 pb-0">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.previous')</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}"
rel="prev">@lang('pagination.previous')</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages() && $paginator->currentPage() < 10)
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.next')</span>
</li>
@endif
</ul>
</div>
<!-- Desktop View Pagination -->
<div class="d-none flex-sm-fill d-sm-flex align-items-sm-center justify-content-sm-between">
<div class="mx-1">
<ul class="pagination pb-0 mb-0">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev"
aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach (range(1, min(10, $paginator->lastPage())) as $i)
@if ($i == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span
class="page-link">{{ $i }}</span></li>
@else
<li class="page-item"><a class="page-link"
href="{{ $paginator->url($i) }}">{{ $i }}</a></li>
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages() && $paginator->currentPage() < 10)
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next"
aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</div>
</div>
</nav>
@endif

View File

@@ -0,0 +1,83 @@
@if ($paginator->hasPages())
<nav class="d-flex justify-items-center justify-content-between">
<div class="d-flex justify-content-between flex-fill d-sm-none">
<ul class="pagination mb-0 pb-0">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.previous')</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}"
rel="prev">@lang('pagination.previous')</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.next')</span>
</li>
@endif
</ul>
</div>
<div class="d-none flex-sm-fill d-sm-flex align-items-sm-center justify-content-sm-between">
<div class="mx-1">
<ul class="pagination pb-0 mb-0">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev"
aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span
class="page-link">{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span
class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link"
href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next"
aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</div>
</div>
</nav>
@endif

View File

@@ -0,0 +1,11 @@
@if ($paginator->hasPages())
<p class="small text-muted mb-0 pb-0">
{!! __('Showing') !!}
<span class="fw-semibold">{{ $paginator->firstItem() }}</span>
{!! __('to') !!}
<span class="fw-semibold">{{ $paginator->lastItem() }}</span>
{{-- {!! __('of') !!}
<span class="fw-semibold">{{ $paginator->total() }}</span> --}}
{!! __('results') !!}
</p>
@endif

View File

@@ -0,0 +1,94 @@
@if ($paginator->hasPages())
<nav class="d-flex justify-items-center justify-content-between">
<div class="d-flex justify-content-between flex-fill d-sm-none">
<ul class="pagination mb-0 pb-0">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.previous')</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}"
rel="prev">@lang('pagination.previous')</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.next')</span>
</li>
@endif
</ul>
</div>
<div class="d-none flex-sm-fill d-sm-flex align-items-sm-center justify-content-sm-between">
<div class="mx-1">
<p class="small text-muted mb-0 pb-0">
{!! __('Showing') !!}
<span class="fw-semibold">{{ $paginator->firstItem() }}</span>
{!! __('to') !!}
<span class="fw-semibold">{{ $paginator->lastItem() }}</span>
{!! __('of') !!}
<span class="fw-semibold">{{ $paginator->total() }}</span>
{!! __('results') !!}
</p>
</div>
<div class="mx-1">
<ul class="pagination pb-0 mb-0">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev"
aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span
class="page-link">{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span
class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link"
href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next"
aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</div>
</div>
</nav>
@endif

View File

@@ -0,0 +1,47 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span aria-hidden="true">&lsaquo;</span>
</li>
@else
<li>
<a href="{{ $paginator->previousPageUrl() }}" rel="prev"
aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="disabled" aria-disabled="true"><span>{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active" aria-current="page"><span>{{ $page }}</span></li>
@else
<li><a href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li>
<a href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@@ -0,0 +1,40 @@
@if ($paginator->hasPages())
<div class="ui pagination menu" role="navigation">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<a class="icon item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')"> <i
class="left chevron icon"></i> </a>
@else
<a class="icon item" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">
<i class="left chevron icon"></i> </a>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<a class="icon item disabled" aria-disabled="true">{{ $element }}</a>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<a class="item active" href="{{ $url }}" aria-current="page">{{ $page }}</a>
@else
<a class="item" href="{{ $url }}">{{ $page }}</a>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a class="icon item" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">
<i class="right chevron icon"></i> </a>
@else
<a class="icon item disabled" aria-disabled="true" aria-label="@lang('pagination.next')"> <i
class="right chevron icon"></i> </a>
@endif
</div>
@endif

View File

@@ -0,0 +1,27 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.previous')</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.next')</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@@ -0,0 +1,30 @@
@if ($paginator->hasPages())
<nav role="navigation" aria-label="Pagination Navigation">
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">{!! __('pagination.previous') !!}</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">
{!! __('pagination.previous') !!}
</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}"
rel="next">{!! __('pagination.next') !!}</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">{!! __('pagination.next') !!}</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@@ -0,0 +1,19 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true"><span>@lang('pagination.previous')</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a></li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a></li>
@else
<li class="disabled" aria-disabled="true"><span>@lang('pagination.next')</span></li>
@endif
</ul>
</nav>
@endif

View File

@@ -0,0 +1,29 @@
@if ($paginator->hasPages())
<nav role="navigation" aria-label="Pagination Navigation" class="flex justify-between">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<span
class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
{!! __('pagination.previous') !!}
</span>
@else
<a href="{{ $paginator->previousPageUrl() }}" rel="prev"
class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.previous') !!}
</a>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}" rel="next"
class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.next') !!}
</a>
@else
<span
class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
{!! __('pagination.next') !!}
</span>
@endif
</nav>
@endif

View File

@@ -0,0 +1,130 @@
@if ($paginator->hasPages())
<nav role="navigation" aria-label="{{ __('Pagination Navigation') }}" class="flex items-center justify-between">
<div class="flex justify-between flex-1 sm:hidden">
@if ($paginator->onFirstPage())
<span
class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
{!! __('pagination.previous') !!}
</span>
@else
<a href="{{ $paginator->previousPageUrl() }}"
class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.previous') !!}
</a>
@endif
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}"
class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.next') !!}
</a>
@else
<span
class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
{!! __('pagination.next') !!}
</span>
@endif
</div>
<div class="hidden sm:flex-1 sm:flex sm:items-center sm:justify-between">
<div>
<p class="text-sm text-gray-700 leading-5">
{!! __('Showing') !!}
@if ($paginator->firstItem())
<span class="font-medium">{{ $paginator->firstItem() }}</span>
{!! __('to') !!}
<span class="font-medium">{{ $paginator->lastItem() }}</span>
@else
{{ $paginator->count() }}
@endif
{!! __('of') !!}
<span class="font-medium">{{ $paginator->total() }}</span>
{!! __('results') !!}
</p>
</div>
<div>
<span class="relative z-0 inline-flex shadow-sm rounded-md">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<span aria-disabled="true" aria-label="{{ __('pagination.previous') }}">
<span
class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default rounded-l-md leading-5"
aria-hidden="true">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd"
d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"
clip-rule="evenodd" />
</svg>
</span>
</span>
@else
<a href="{{ $paginator->previousPageUrl() }}" rel="prev"
class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-l-md leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150"
aria-label="{{ __('pagination.previous') }}">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd"
d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"
clip-rule="evenodd" />
</svg>
</a>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<span aria-disabled="true">
<span
class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 cursor-default leading-5">{{ $element }}</span>
</span>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<span aria-current="page">
<span
class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5">{{ $page }}</span>
</span>
@else
<a href="{{ $url }}"
class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 focus:z-10 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150"
aria-label="{{ __('Go to page :page', ['page' => $page]) }}">
{{ $page }}
</a>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}" rel="next"
class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-r-md leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150"
aria-label="{{ __('pagination.next') }}">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd" />
</svg>
</a>
@else
<span aria-disabled="true" aria-label="{{ __('pagination.next') }}">
<span
class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default rounded-r-md leading-5"
aria-hidden="true">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd" />
</svg>
</span>
</span>
@endif
</span>
</div>
</div>
</nav>
@endif