Add email tool tracking
This commit is contained in:
@@ -20,7 +20,7 @@ protected function schedule(Schedule $schedule)
|
||||
{
|
||||
|
||||
$schedule->command('sitemap:generate')->everySixHours()->name('sitemap-generate-every-six-hours');
|
||||
|
||||
|
||||
$schedule->call(function () {
|
||||
$url_to_crawl = UrlToCrawl::where('is_crawling', false)->inRandomOrder()->first();
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
namespace App\Helpers\FirstParty\SitemapCrawler;
|
||||
|
||||
use Spatie\Crawler\CrawlProfiles\CrawlProfile;
|
||||
use Psr\Http\Message\UriInterface;
|
||||
use Spatie\Crawler\CrawlProfiles\CrawlProfile;
|
||||
|
||||
class CustomCrawlProfile extends CrawlProfile
|
||||
{
|
||||
@@ -20,9 +20,7 @@ public function shouldCrawl(UriInterface $url): bool
|
||||
if ($url->getQuery() !== '') {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return ($this->callback)($url);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
54
app/Http/Controllers/BasicAuthAdmin/AIToolListController.php
Normal file
54
app/Http/Controllers/BasicAuthAdmin/AIToolListController.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\BasicAuthAdmin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AiTool;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AIToolListController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$view = $request->input('view', 'all');
|
||||
|
||||
$ai_tool_list = AiTool::orderBy('created_at', 'DESC')
|
||||
->when($view == 'emailed', function ($query) {
|
||||
$query->where('has_emailed', true);
|
||||
})
|
||||
->when($view == 'not_emailed', function ($query) {
|
||||
$query->where('has_emailed', false);
|
||||
})
|
||||
->when($view == 'all', function ($query) {
|
||||
|
||||
})
|
||||
->orderBy('created_at', 'DESC')
|
||||
->paginate(50);
|
||||
|
||||
$ai_tool_list_count =
|
||||
|
||||
$counts = (object) [
|
||||
'all' => AiTool::count(),
|
||||
'emailed' => AiTool::where('has_emailed', true)->count(),
|
||||
'not_emailed' => AiTool::where('has_emailed', false)->count(),
|
||||
];
|
||||
|
||||
return view('ba.aitoollist', compact('ai_tool_list', 'counts', 'view'));
|
||||
}
|
||||
|
||||
public function setToEmailed(Request $request)
|
||||
{
|
||||
$ai_tool = AiTool::find($request->input('id'));
|
||||
|
||||
if (is_null($ai_tool)) {
|
||||
return redirect()->back()->with('error', 'AI Tool not found.');
|
||||
}
|
||||
|
||||
$ai_tool->has_emailed = true;
|
||||
$ai_tool->email = $request->input('email');
|
||||
|
||||
if ($ai_tool->save()) {
|
||||
return redirect()->back()->with('success', 'Saved successfully.');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,23 +6,21 @@
|
||||
use App\Models\SubmitTool;
|
||||
use App\Models\UrlToCrawl;
|
||||
use App\Notifications\AiToolSubmitted;
|
||||
use Artesaos\SEOTools\Facades\SEOTools;
|
||||
use Illuminate\Http\Request;
|
||||
use Notification;
|
||||
|
||||
use Artesaos\SEOTools\Facades\SEOMeta;
|
||||
use Artesaos\SEOTools\Facades\SEOTools;
|
||||
|
||||
class FrontSubmitToolController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
|
||||
SEOTools::metatags();
|
||||
SEOTools::twitter();
|
||||
SEOTools::opengraph();
|
||||
SEOTools::jsonLd();
|
||||
SEOTools::setTitle('Free AI Tool Submission', false);
|
||||
SEOTools::setDescription('Submit your AI tool for free into AIBuddyTool to get free backlinks and traffic. Limited slots available!');
|
||||
SEOTools::metatags();
|
||||
SEOTools::twitter();
|
||||
SEOTools::opengraph();
|
||||
SEOTools::jsonLd();
|
||||
SEOTools::setTitle('Free AI Tool Submission', false);
|
||||
SEOTools::setDescription('Submit your AI tool for free into AIBuddyTool to get free backlinks and traffic. Limited slots available!');
|
||||
|
||||
$submitted_tool_count = SubmitTool::whereIn('status', ['initial', 'queued_for_crawl', 'crawled'])->count();
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ class AiTool extends Model
|
||||
'view_count' => 'int',
|
||||
'is_ai_tool' => 'bool',
|
||||
'qna' => 'object',
|
||||
'has_emailed' => 'bool',
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
@@ -62,6 +63,8 @@ class AiTool extends Model
|
||||
'qna',
|
||||
'external_url
|
||||
',
|
||||
'has_emailed',
|
||||
'email',
|
||||
];
|
||||
|
||||
protected function screenshotImg(): Attribute
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
use App\Helpers\FirstParty\SitemapCrawler\CustomCrawlProfile;
|
||||
use GuzzleHttp\RequestOptions;
|
||||
use Spatie\Sitemap\Crawler\Profile;
|
||||
|
||||
return [
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('ai_tools', function (Blueprint $table) {
|
||||
$table->boolean('has_emailed')->default(false);
|
||||
$table->string('email')->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('ai_tools', function (Blueprint $table) {
|
||||
$table->dropColumn('has_emailed');
|
||||
$table->dropColumn(('email'));
|
||||
});
|
||||
}
|
||||
};
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
import{_ as a,l as r,c as n,a as t,o as c}from"./app-front-d6902e40.js";const m={name:"GetEmbedCode",mixins:[],components:{},props:["url","name"],data:()=>({imgSrc:"https://cdn.aibuddytool.com/featured-on-aibuddytool-1-1000.webp",showToast:!1}),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 e=document.createElement("textarea");e.value=this.embedCode,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e),r("Copied! Paste the HTML embed code at the bottom of your business website footer.",{position:"bottom-center",type:"success",timeout:3e3,closeOnClick:!0,pauseOnFocusLoss:!0,pauseOnHover:!0,draggable:!0,draggablePercent:.6,showCloseButtonOnHover:!1,hideProgressBar:!1,closeButton:!0,icon:!0,rtl:!1})}},mounted(){}},u={class:"d-grid gap-2 mx-auto",style:{width:"250px"}},i=["src"];function l(e,o,b,p,h,s){return c(),n("div",null,[t("div",u,[t("img",{style:{width:"250px",height:"auto"},src:e.imgSrc,alt:"Featured banner"},null,8,i),t("button",{onClick:o[0]||(o[0]=(...d)=>s.getEmbedCode&&s.getEmbedCode(...d)),class:"btn btn-sm btn-outline-primary px-3"}," Get HTML embed code ")])])}const f=a(m,[["render",l]]);export{f as default};
|
||||
import{_ as a,l as r,c as n,a as t,o as c}from"./app-front-b9536f4d.js";const m={name:"GetEmbedCode",mixins:[],components:{},props:["url","name"],data:()=>({imgSrc:"https://cdn.aibuddytool.com/featured-on-aibuddytool-1-1000.webp",showToast:!1}),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 e=document.createElement("textarea");e.value=this.embedCode,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e),r("Copied! Paste the HTML embed code at the bottom of your business website footer.",{position:"bottom-center",type:"success",timeout:3e3,closeOnClick:!0,pauseOnFocusLoss:!0,pauseOnHover:!0,draggable:!0,draggablePercent:.6,showCloseButtonOnHover:!1,hideProgressBar:!1,closeButton:!0,icon:!0,rtl:!1})}},mounted(){}},u={class:"d-grid gap-2 mx-auto",style:{width:"250px"}},i=["src"];function l(e,o,b,p,h,s){return c(),n("div",null,[t("div",u,[t("img",{style:{width:"250px",height:"auto"},src:e.imgSrc,alt:"Featured banner"},null,8,i),t("button",{onClick:o[0]||(o[0]=(...d)=>s.getEmbedCode&&s.getEmbedCode(...d)),class:"btn btn-sm btn-outline-primary px-3"}," Get HTML embed code ")])])}const f=a(m,[["render",l]]);export{f as default};
|
||||
BIN
public/build/assets/GetEmbedCode-6f92c617.js.gz
Normal file
BIN
public/build/assets/GetEmbedCode-6f92c617.js.gz
Normal file
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
public/build/assets/NativeImageBlock-68fd4e62.js.gz
Normal file
BIN
public/build/assets/NativeImageBlock-68fd4e62.js.gz
Normal file
Binary file not shown.
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
import Qn from"./VueEditorJs-c40f6d08.js";import{r as Ft,_ as Mr}from"./NativeImageBlock-3623204f.js";import{L as hn}from"./bundle-f4b2cd77.js";import{H as yn}from"./bundle-7ca97fea.js";import{g as Cr,d as Pr,b as ua,r as zt,e as ne,f as vt,u as nn,t as da,h as ct,i as rn,w as Nt,j as Z,o as R,c as Q,k as _t,m as nt,n as Fe,p as _e,q as ie,s as ze,v as ft,x as j,y as Qe,z as gn,A as Pe,B as G,C as Gn,T as Sr,D as Ce,E as he,a as J,F as ot,G as we,H as It,I as rt,J as Ve,K as Zt,L as At,M as yt,N as wa,O as Or,P as Nr,Q as Ar,_ as $r,R as Ir,S as Er,U as Yr,V as Ia,W as Ur,X as Lr,Y as wn}from"./app-front-d6902e40.js";var Xn={exports:{}};/*!
|
||||
import Qn from"./VueEditorJs-04c9fa58.js";import{r as Ft,_ as Mr}from"./NativeImageBlock-68fd4e62.js";import{L as hn}from"./bundle-84836216.js";import{H as yn}from"./bundle-1ccfe0bb.js";import{g as Cr,d as Pr,b as ua,r as zt,e as ne,f as vt,u as nn,t as da,h as ct,i as rn,w as Nt,j as Z,o as R,c as Q,k as _t,m as nt,n as Fe,p as _e,q as ie,s as ze,v as ft,x as j,y as Qe,z as gn,A as Pe,B as G,C as Gn,T as Sr,D as Ce,E as he,a as J,F as ot,G as we,H as It,I as rt,J as Ve,K as Zt,L as At,M as yt,N as wa,O as Or,P as Nr,Q as Ar,_ as $r,R as Ir,S as Er,U as Yr,V as Ia,W as Ur,X as Lr,Y as wn}from"./app-front-b9536f4d.js";var Xn={exports:{}};/*!
|
||||
* Image tool
|
||||
*
|
||||
* @version 2.8.1
|
||||
BIN
public/build/assets/PostEditor-404ecaec.js.gz
Normal file
BIN
public/build/assets/PostEditor-404ecaec.js.gz
Normal file
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
import{_ as t,l as e,c as s,o}from"./app-front-d6902e40.js";const r={name:"ToastMessage",mixins:[],components:{},props:["type","message","timeout"],data:()=>({}),watch:{},computed:{},methods:{triggerMounted(){this.type=="error"&&e(this.message,{position:"bottom-center",type:"error",timeout:3e3,closeOnClick:!0,pauseOnFocusLoss:!0,pauseOnHover:!0,draggable:!0,draggablePercent:.6,showCloseButtonOnHover:!1,hideProgressBar:!1,closeButton:!0,icon:!0,rtl:!1}),this.type=="success"&&e(this.message,{position:"bottom-center",type:"success",timeout:3e3,closeOnClick:!0,pauseOnFocusLoss:!0,pauseOnHover:!0,draggable:!0,draggablePercent:.6,showCloseButtonOnHover:!1,hideProgressBar:!1,closeButton:!0,icon:!0,rtl:!1})}},mounted(){this.triggerMounted()}};function a(n,u,c,i,l,p){return o(),s("div")}const m=t(r,[["render",a]]);export{m as default};
|
||||
import{_ as t,l as e,c as s,o}from"./app-front-b9536f4d.js";const r={name:"ToastMessage",mixins:[],components:{},props:["type","message","timeout"],data:()=>({}),watch:{},computed:{},methods:{triggerMounted(){this.type=="error"&&e(this.message,{position:"bottom-center",type:"error",timeout:3e3,closeOnClick:!0,pauseOnFocusLoss:!0,pauseOnHover:!0,draggable:!0,draggablePercent:.6,showCloseButtonOnHover:!1,hideProgressBar:!1,closeButton:!0,icon:!0,rtl:!1}),this.type=="success"&&e(this.message,{position:"bottom-center",type:"success",timeout:3e3,closeOnClick:!0,pauseOnFocusLoss:!0,pauseOnHover:!0,draggable:!0,draggablePercent:.6,showCloseButtonOnHover:!1,hideProgressBar:!1,closeButton:!0,icon:!0,rtl:!1})}},mounted(){this.triggerMounted()}};function a(n,u,c,i,l,p){return o(),s("div")}const m=t(r,[["render",a]]);export{m as default};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{_ as Oe,a1 as Zt,f as Ne,c as De,r as Re,h as Pe,o as Fe}from"./app-front-d6902e40.js";var He=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function xt(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}function Ct(){}Object.assign(Ct,{default:Ct,register:Ct,revert:function(){},__esModule:!0});Element.prototype.matches||(Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector||function(s){const t=(this.document||this.ownerDocument).querySelectorAll(s);let e=t.length;for(;--e>=0&&t.item(e)!==this;);return e>-1});Element.prototype.closest||(Element.prototype.closest=function(s){let t=this;if(!document.documentElement.contains(t))return null;do{if(t.matches(s))return t;t=t.parentElement||t.parentNode}while(t!==null);return null});Element.prototype.prepend||(Element.prototype.prepend=function(s){const t=document.createDocumentFragment();Array.isArray(s)||(s=[s]),s.forEach(e=>{const o=e instanceof Node;t.appendChild(o?e:document.createTextNode(e))}),this.insertBefore(t,this.firstChild)});Element.prototype.scrollIntoViewIfNeeded||(Element.prototype.scrollIntoViewIfNeeded=function(s){s=arguments.length===0?!0:!!s;const t=this.parentNode,e=window.getComputedStyle(t,null),o=parseInt(e.getPropertyValue("border-top-width")),i=parseInt(e.getPropertyValue("border-left-width")),n=this.offsetTop-t.offsetTop<t.scrollTop,r=this.offsetTop-t.offsetTop+this.clientHeight-o>t.scrollTop+t.clientHeight,a=this.offsetLeft-t.offsetLeft<t.scrollLeft,l=this.offsetLeft-t.offsetLeft+this.clientWidth-i>t.scrollLeft+t.clientWidth,c=n&&!r;(n||r)&&s&&(t.scrollTop=this.offsetTop-t.offsetTop-t.clientHeight/2-o+this.clientHeight/2),(a||l)&&s&&(t.scrollLeft=this.offsetLeft-t.offsetLeft-t.clientWidth/2-i+this.clientWidth/2),(n||r||a||l)&&!s&&this.scrollIntoView(c)});window.requestIdleCallback=window.requestIdleCallback||function(s){const t=Date.now();return setTimeout(function(){s({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})},1)};window.cancelIdleCallback=window.cancelIdleCallback||function(s){clearTimeout(s)};let je=(s=21)=>crypto.getRandomValues(new Uint8Array(s)).reduce((t,e)=>(e&=63,e<36?t+=e.toString(36):e<62?t+=(e-26).toString(36).toUpperCase():e>62?t+="-":t+="_",t),"");var se=(s=>(s.VERBOSE="VERBOSE",s.INFO="INFO",s.WARN="WARN",s.ERROR="ERROR",s))(se||{});const E={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,LEFT:37,UP:38,DOWN:40,RIGHT:39,DELETE:46,META:91},ze={LEFT:0,WHEEL:1,RIGHT:2,BACKWARD:3,FORWARD:4};function mt(s,t,e="log",o,i="color: inherit"){if(!("console"in window)||!window.console[e])return;const n=["info","log","warn","error"].includes(e),r=[];switch(mt.logLevel){case"ERROR":if(e!=="error")return;break;case"WARN":if(!["error","warn"].includes(e))return;break;case"INFO":if(!n||s)return;break}o&&r.push(o);const a="Editor.js 2.28.0",l=`line-height: 1em;
|
||||
import{_ as Oe,a1 as Zt,f as Ne,c as De,r as Re,h as Pe,o as Fe}from"./app-front-b9536f4d.js";var He=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function xt(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}function Ct(){}Object.assign(Ct,{default:Ct,register:Ct,revert:function(){},__esModule:!0});Element.prototype.matches||(Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector||function(s){const t=(this.document||this.ownerDocument).querySelectorAll(s);let e=t.length;for(;--e>=0&&t.item(e)!==this;);return e>-1});Element.prototype.closest||(Element.prototype.closest=function(s){let t=this;if(!document.documentElement.contains(t))return null;do{if(t.matches(s))return t;t=t.parentElement||t.parentNode}while(t!==null);return null});Element.prototype.prepend||(Element.prototype.prepend=function(s){const t=document.createDocumentFragment();Array.isArray(s)||(s=[s]),s.forEach(e=>{const o=e instanceof Node;t.appendChild(o?e:document.createTextNode(e))}),this.insertBefore(t,this.firstChild)});Element.prototype.scrollIntoViewIfNeeded||(Element.prototype.scrollIntoViewIfNeeded=function(s){s=arguments.length===0?!0:!!s;const t=this.parentNode,e=window.getComputedStyle(t,null),o=parseInt(e.getPropertyValue("border-top-width")),i=parseInt(e.getPropertyValue("border-left-width")),n=this.offsetTop-t.offsetTop<t.scrollTop,r=this.offsetTop-t.offsetTop+this.clientHeight-o>t.scrollTop+t.clientHeight,a=this.offsetLeft-t.offsetLeft<t.scrollLeft,l=this.offsetLeft-t.offsetLeft+this.clientWidth-i>t.scrollLeft+t.clientWidth,c=n&&!r;(n||r)&&s&&(t.scrollTop=this.offsetTop-t.offsetTop-t.clientHeight/2-o+this.clientHeight/2),(a||l)&&s&&(t.scrollLeft=this.offsetLeft-t.offsetLeft-t.clientWidth/2-i+this.clientWidth/2),(n||r||a||l)&&!s&&this.scrollIntoView(c)});window.requestIdleCallback=window.requestIdleCallback||function(s){const t=Date.now();return setTimeout(function(){s({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})},1)};window.cancelIdleCallback=window.cancelIdleCallback||function(s){clearTimeout(s)};let je=(s=21)=>crypto.getRandomValues(new Uint8Array(s)).reduce((t,e)=>(e&=63,e<36?t+=e.toString(36):e<62?t+=(e-26).toString(36).toUpperCase():e>62?t+="-":t+="_",t),"");var se=(s=>(s.VERBOSE="VERBOSE",s.INFO="INFO",s.WARN="WARN",s.ERROR="ERROR",s))(se||{});const E={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,LEFT:37,UP:38,DOWN:40,RIGHT:39,DELETE:46,META:91},ze={LEFT:0,WHEEL:1,RIGHT:2,BACKWARD:3,FORWARD:4};function mt(s,t,e="log",o,i="color: inherit"){if(!("console"in window)||!window.console[e])return;const n=["info","log","warn","error"].includes(e),r=[];switch(mt.logLevel){case"ERROR":if(e!=="error")return;break;case"WARN":if(!["error","warn"].includes(e))return;break;case"INFO":if(!n||s)return;break}o&&r.push(o);const a="Editor.js 2.28.0",l=`line-height: 1em;
|
||||
color: #006FEA;
|
||||
display: inline-block;
|
||||
font-size: 11px;
|
||||
@@ -80,4 +80,4 @@ import{_ as Oe,a1 as Zt,f as Ne,c as De,r as Re,h as Pe,o as Fe}from"./app-front
|
||||
* @license Apache-2.0
|
||||
* @see Editor.js <https://editorjs.io>
|
||||
* @author CodeX Team <https://codex.so>
|
||||
*/class Si{static get version(){return"2.28.0"}constructor(t){let e=()=>{};z(t)&&R(t.onReady)&&(e=t.onReady);const o=new Ti(t);this.isReady=o.isReady.then(()=>{this.exportAPI(o),e()})}exportAPI(t){const e=["configuration"],o=()=>{Object.values(t.moduleInstances).forEach(i=>{R(i.destroy)&&i.destroy(),i.listeners.removeAll()}),t=null;for(const i in this)Object.prototype.hasOwnProperty.call(this,i)&&delete this[i];Object.setPrototypeOf(this,null)};e.forEach(i=>{this[i]=t[i]}),this.destroy=o,Object.setPrototypeOf(this,t.moduleInstances.API.methods),delete this.exportAPI,Object.entries({blocks:{clear:"clear",render:"render"},caret:{focus:"focus"},events:{on:"on",off:"off",emit:"emit"},saver:{save:"save"}}).forEach(([i,n])=>{Object.entries(n).forEach(([r,a])=>{this[a]=t.moduleInstances.API.methods[i][r]})})}}const Tt={header:Zt(()=>import("./bundle-7ca97fea.js").then(s=>s.b),["assets/bundle-7ca97fea.js","assets/app-front-d6902e40.js","assets/app-front-935fc652.css"]),list:Zt(()=>import("./bundle-f4b2cd77.js").then(s=>s.b),["assets/bundle-f4b2cd77.js","assets/app-front-d6902e40.js","assets/app-front-935fc652.css"])},Ii=Ne({name:"vue-editor-js",props:{holder:{type:String,default:()=>"vue-editor-js",require:!0},config:{type:Object,default:()=>({}),require:!0},initialized:{type:Function,default:()=>{}}},setup:(s,t)=>{const e=Re({editor:null});function o(r){i(),e.editor=new Si({holder:r.holder||"vue-editor-js",...r.config,onChange:(a,l)=>{n()}}),r.initialized(e.editor)}function i(){e.editor&&(e.editor.destroy(),e.editor=null)}function n(){console.log("saveEditor"),e.editor&&e.editor.save().then(r=>{console.log(r),t.emit("saved",r)})}return Pe(r=>o(s)),{props:s,state:e}},methods:{useTools(s,t){const e=Object.keys(Tt),o={...s.customTools};return e.every(i=>!s[i])?(e.forEach(i=>o[i]={class:Tt[i]}),Object.keys(t).forEach(i=>{o[i]!==void 0&&o[i]!==null&&(o[i].config=t[i])}),o):(e.forEach(i=>{const n=s[i];if(n&&(o[i]={class:Tt[i]},typeof n=="object")){const r=Object.assign({},s[i]);delete r.class,o[i]=Object.assign(o[i],r)}}),Object.keys(t).forEach(i=>{o[i]!==void 0&&o[i]!==null&&(o[i].config=t[i])}),o)}}}),Mi=["id"];function _i(s,t,e,o,i,n){return Fe(),De("div",{id:s.holder},null,8,Mi)}const Li=Oe(Ii,[["render",_i]]);export{Tt as PLUGINS,Li as default};
|
||||
*/class Si{static get version(){return"2.28.0"}constructor(t){let e=()=>{};z(t)&&R(t.onReady)&&(e=t.onReady);const o=new Ti(t);this.isReady=o.isReady.then(()=>{this.exportAPI(o),e()})}exportAPI(t){const e=["configuration"],o=()=>{Object.values(t.moduleInstances).forEach(i=>{R(i.destroy)&&i.destroy(),i.listeners.removeAll()}),t=null;for(const i in this)Object.prototype.hasOwnProperty.call(this,i)&&delete this[i];Object.setPrototypeOf(this,null)};e.forEach(i=>{this[i]=t[i]}),this.destroy=o,Object.setPrototypeOf(this,t.moduleInstances.API.methods),delete this.exportAPI,Object.entries({blocks:{clear:"clear",render:"render"},caret:{focus:"focus"},events:{on:"on",off:"off",emit:"emit"},saver:{save:"save"}}).forEach(([i,n])=>{Object.entries(n).forEach(([r,a])=>{this[a]=t.moduleInstances.API.methods[i][r]})})}}const Tt={header:Zt(()=>import("./bundle-1ccfe0bb.js").then(s=>s.b),["assets/bundle-1ccfe0bb.js","assets/app-front-b9536f4d.js","assets/app-front-935fc652.css"]),list:Zt(()=>import("./bundle-84836216.js").then(s=>s.b),["assets/bundle-84836216.js","assets/app-front-b9536f4d.js","assets/app-front-935fc652.css"])},Ii=Ne({name:"vue-editor-js",props:{holder:{type:String,default:()=>"vue-editor-js",require:!0},config:{type:Object,default:()=>({}),require:!0},initialized:{type:Function,default:()=>{}}},setup:(s,t)=>{const e=Re({editor:null});function o(r){i(),e.editor=new Si({holder:r.holder||"vue-editor-js",...r.config,onChange:(a,l)=>{n()}}),r.initialized(e.editor)}function i(){e.editor&&(e.editor.destroy(),e.editor=null)}function n(){console.log("saveEditor"),e.editor&&e.editor.save().then(r=>{console.log(r),t.emit("saved",r)})}return Pe(r=>o(s)),{props:s,state:e}},methods:{useTools(s,t){const e=Object.keys(Tt),o={...s.customTools};return e.every(i=>!s[i])?(e.forEach(i=>o[i]={class:Tt[i]}),Object.keys(t).forEach(i=>{o[i]!==void 0&&o[i]!==null&&(o[i].config=t[i])}),o):(e.forEach(i=>{const n=s[i];if(n&&(o[i]={class:Tt[i]},typeof n=="object")){const r=Object.assign({},s[i]);delete r.class,o[i]=Object.assign(o[i],r)}}),Object.keys(t).forEach(i=>{o[i]!==void 0&&o[i]!==null&&(o[i].config=t[i])}),o)}}}),Mi=["id"];function _i(s,t,e,o,i,n){return Fe(),De("div",{id:s.holder},null,8,Mi)}const Li=Oe(Ii,[["render",_i]]);export{Tt as PLUGINS,Li as default};
|
||||
BIN
public/build/assets/VueEditorJs-04c9fa58.js.gz
Normal file
BIN
public/build/assets/VueEditorJs-04c9fa58.js.gz
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
public/build/assets/app-front-b9536f4d.js.gz
Normal file
BIN
public/build/assets/app-front-b9536f4d.js.gz
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
import{g as N}from"./app-front-d6902e40.js";function P(x,H){for(var g=0;g<H.length;g++){const b=H[g];if(typeof b!="string"&&!Array.isArray(b)){for(const l in b)if(l!=="default"&&!(l in x)){const n=Object.getOwnPropertyDescriptor(b,l);n&&Object.defineProperty(x,l,n.get?n:{enumerable:!0,get:()=>b[l]})}}}return Object.freeze(Object.defineProperty(x,Symbol.toStringTag,{value:"Module"}))}var E={exports:{}};(function(x,H){(function(g,b){x.exports=b()})(window,function(){return function(g){var b={};function l(n){if(b[n])return b[n].exports;var i=b[n]={i:n,l:!1,exports:{}};return g[n].call(i.exports,i,i.exports,l),i.l=!0,i.exports}return l.m=g,l.c=b,l.d=function(n,i,h){l.o(n,i)||Object.defineProperty(n,i,{enumerable:!0,get:h})},l.r=function(n){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},l.t=function(n,i){if(1&i&&(n=l(n)),8&i||4&i&&typeof n=="object"&&n&&n.__esModule)return n;var h=Object.create(null);if(l.r(h),Object.defineProperty(h,"default",{enumerable:!0,value:n}),2&i&&typeof n!="string")for(var m in n)l.d(h,m,(function(f){return n[f]}).bind(null,m));return h},l.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return l.d(i,"a",i),i},l.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},l.p="/",l(l.s=5)}([function(g,b,l){var n=l(1);typeof n=="string"&&(n=[[g.i,n,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};l(3)(n,i),n.locals&&(g.exports=n.locals)},function(g,b,l){(g.exports=l(2)(!1)).push([g.i,`/**
|
||||
import{g as N}from"./app-front-b9536f4d.js";function P(x,H){for(var g=0;g<H.length;g++){const b=H[g];if(typeof b!="string"&&!Array.isArray(b)){for(const l in b)if(l!=="default"&&!(l in x)){const n=Object.getOwnPropertyDescriptor(b,l);n&&Object.defineProperty(x,l,n.get?n:{enumerable:!0,get:()=>b[l]})}}}return Object.freeze(Object.defineProperty(x,Symbol.toStringTag,{value:"Module"}))}var E={exports:{}};(function(x,H){(function(g,b){x.exports=b()})(window,function(){return function(g){var b={};function l(n){if(b[n])return b[n].exports;var i=b[n]={i:n,l:!1,exports:{}};return g[n].call(i.exports,i,i.exports,l),i.l=!0,i.exports}return l.m=g,l.c=b,l.d=function(n,i,h){l.o(n,i)||Object.defineProperty(n,i,{enumerable:!0,get:h})},l.r=function(n){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},l.t=function(n,i){if(1&i&&(n=l(n)),8&i||4&i&&typeof n=="object"&&n&&n.__esModule)return n;var h=Object.create(null);if(l.r(h),Object.defineProperty(h,"default",{enumerable:!0,value:n}),2&i&&typeof n!="string")for(var m in n)l.d(h,m,(function(f){return n[f]}).bind(null,m));return h},l.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return l.d(i,"a",i),i},l.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},l.p="/",l(l.s=5)}([function(g,b,l){var n=l(1);typeof n=="string"&&(n=[[g.i,n,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};l(3)(n,i),n.locals&&(g.exports=n.locals)},function(g,b,l){(g.exports=l(2)(!1)).push([g.i,`/**
|
||||
* Plugin styles
|
||||
*/
|
||||
.ce-header {
|
||||
BIN
public/build/assets/bundle-1ccfe0bb.js.gz
Normal file
BIN
public/build/assets/bundle-1ccfe0bb.js.gz
Normal file
Binary file not shown.
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
import{g as E}from"./app-front-d6902e40.js";function P(_,j){for(var v=0;v<j.length;v++){const p=j[v];if(typeof p!="string"&&!Array.isArray(p)){for(const c in p)if(c!=="default"&&!(c in _)){const o=Object.getOwnPropertyDescriptor(p,c);o&&Object.defineProperty(_,c,o.get?o:{enumerable:!0,get:()=>p[c]})}}}return Object.freeze(Object.defineProperty(_,Symbol.toStringTag,{value:"Module"}))}var T={exports:{}};(function(_,j){(function(v,p){_.exports=p()})(window,function(){return function(v){var p={};function c(o){if(p[o])return p[o].exports;var l=p[o]={i:o,l:!1,exports:{}};return v[o].call(l.exports,l,l.exports,c),l.l=!0,l.exports}return c.m=v,c.c=p,c.d=function(o,l,d){c.o(o,l)||Object.defineProperty(o,l,{enumerable:!0,get:d})},c.r=function(o){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},c.t=function(o,l){if(1&l&&(o=c(o)),8&l||4&l&&typeof o=="object"&&o&&o.__esModule)return o;var d=Object.create(null);if(c.r(d),Object.defineProperty(d,"default",{enumerable:!0,value:o}),2&l&&typeof o!="string")for(var f in o)c.d(d,f,(function(b){return o[b]}).bind(null,f));return d},c.n=function(o){var l=o&&o.__esModule?function(){return o.default}:function(){return o};return c.d(l,"a",l),l},c.o=function(o,l){return Object.prototype.hasOwnProperty.call(o,l)},c.p="/",c(c.s=4)}([function(v,p,c){var o=c(1),l=c(2);typeof(l=l.__esModule?l.default:l)=="string"&&(l=[[v.i,l,""]]);var d={insert:"head",singleton:!1};o(l,d),v.exports=l.locals||{}},function(v,p,c){var o,l=function(){return o===void 0&&(o=!!(window&&document&&document.all&&!window.atob)),o},d=function(){var r={};return function(i){if(r[i]===void 0){var s=document.querySelector(i);if(window.HTMLIFrameElement&&s instanceof window.HTMLIFrameElement)try{s=s.contentDocument.head}catch{s=null}r[i]=s}return r[i]}}(),f=[];function b(r){for(var i=-1,s=0;s<f.length;s++)if(f[s].identifier===r){i=s;break}return i}function S(r,i){for(var s={},u=[],m=0;m<r.length;m++){var g=r[m],y=i.base?g[0]+i.base:g[0],C=s[y]||0,O="".concat(y," ").concat(C);s[y]=C+1;var L=b(O),M={css:g[1],media:g[2],sourceMap:g[3]};L!==-1?(f[L].references++,f[L].updater(M)):f.push({identifier:O,updater:h(M,i),references:1}),u.push(O)}return u}function k(r){var i=document.createElement("style"),s=r.attributes||{};if(s.nonce===void 0){var u=c.nc;u&&(s.nonce=u)}if(Object.keys(s).forEach(function(g){i.setAttribute(g,s[g])}),typeof r.insert=="function")r.insert(i);else{var m=d(r.insert||"head");if(!m)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");m.appendChild(i)}return i}var w,x=(w=[],function(r,i){return w[r]=i,w.filter(Boolean).join(`
|
||||
import{g as E}from"./app-front-b9536f4d.js";function P(_,j){for(var v=0;v<j.length;v++){const p=j[v];if(typeof p!="string"&&!Array.isArray(p)){for(const c in p)if(c!=="default"&&!(c in _)){const o=Object.getOwnPropertyDescriptor(p,c);o&&Object.defineProperty(_,c,o.get?o:{enumerable:!0,get:()=>p[c]})}}}return Object.freeze(Object.defineProperty(_,Symbol.toStringTag,{value:"Module"}))}var T={exports:{}};(function(_,j){(function(v,p){_.exports=p()})(window,function(){return function(v){var p={};function c(o){if(p[o])return p[o].exports;var l=p[o]={i:o,l:!1,exports:{}};return v[o].call(l.exports,l,l.exports,c),l.l=!0,l.exports}return c.m=v,c.c=p,c.d=function(o,l,d){c.o(o,l)||Object.defineProperty(o,l,{enumerable:!0,get:d})},c.r=function(o){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},c.t=function(o,l){if(1&l&&(o=c(o)),8&l||4&l&&typeof o=="object"&&o&&o.__esModule)return o;var d=Object.create(null);if(c.r(d),Object.defineProperty(d,"default",{enumerable:!0,value:o}),2&l&&typeof o!="string")for(var f in o)c.d(d,f,(function(b){return o[b]}).bind(null,f));return d},c.n=function(o){var l=o&&o.__esModule?function(){return o.default}:function(){return o};return c.d(l,"a",l),l},c.o=function(o,l){return Object.prototype.hasOwnProperty.call(o,l)},c.p="/",c(c.s=4)}([function(v,p,c){var o=c(1),l=c(2);typeof(l=l.__esModule?l.default:l)=="string"&&(l=[[v.i,l,""]]);var d={insert:"head",singleton:!1};o(l,d),v.exports=l.locals||{}},function(v,p,c){var o,l=function(){return o===void 0&&(o=!!(window&&document&&document.all&&!window.atob)),o},d=function(){var r={};return function(i){if(r[i]===void 0){var s=document.querySelector(i);if(window.HTMLIFrameElement&&s instanceof window.HTMLIFrameElement)try{s=s.contentDocument.head}catch{s=null}r[i]=s}return r[i]}}(),f=[];function b(r){for(var i=-1,s=0;s<f.length;s++)if(f[s].identifier===r){i=s;break}return i}function S(r,i){for(var s={},u=[],m=0;m<r.length;m++){var g=r[m],y=i.base?g[0]+i.base:g[0],C=s[y]||0,O="".concat(y," ").concat(C);s[y]=C+1;var L=b(O),M={css:g[1],media:g[2],sourceMap:g[3]};L!==-1?(f[L].references++,f[L].updater(M)):f.push({identifier:O,updater:h(M,i),references:1}),u.push(O)}return u}function k(r){var i=document.createElement("style"),s=r.attributes||{};if(s.nonce===void 0){var u=c.nc;u&&(s.nonce=u)}if(Object.keys(s).forEach(function(g){i.setAttribute(g,s[g])}),typeof r.insert=="function")r.insert(i);else{var m=d(r.insert||"head");if(!m)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");m.appendChild(i)}return i}var w,x=(w=[],function(r,i){return w[r]=i,w.filter(Boolean).join(`
|
||||
`)});function a(r,i,s,u){var m=s?"":u.media?"@media ".concat(u.media," {").concat(u.css,"}"):u.css;if(r.styleSheet)r.styleSheet.cssText=x(i,m);else{var g=document.createTextNode(m),y=r.childNodes;y[i]&&r.removeChild(y[i]),y.length?r.insertBefore(g,y[i]):r.appendChild(g)}}function e(r,i,s){var u=s.css,m=s.media,g=s.sourceMap;if(m?r.setAttribute("media",m):r.removeAttribute("media"),g&&btoa&&(u+=`
|
||||
/*# sourceMappingURL=data:application/json;base64,`.concat(btoa(unescape(encodeURIComponent(JSON.stringify(g))))," */")),r.styleSheet)r.styleSheet.cssText=u;else{for(;r.firstChild;)r.removeChild(r.firstChild);r.appendChild(document.createTextNode(u))}}var t=null,n=0;function h(r,i){var s,u,m;if(i.singleton){var g=n++;s=t||(t=k(i)),u=a.bind(null,s,g,!1),m=a.bind(null,s,g,!0)}else s=k(i),u=e.bind(null,s,i),m=function(){(function(y){if(y.parentNode===null)return!1;y.parentNode.removeChild(y)})(s)};return u(r),function(y){if(y){if(y.css===r.css&&y.media===r.media&&y.sourceMap===r.sourceMap)return;u(r=y)}else m()}}v.exports=function(r,i){(i=i||{}).singleton||typeof i.singleton=="boolean"||(i.singleton=l());var s=S(r=r||[],i);return function(u){if(u=u||[],Object.prototype.toString.call(u)==="[object Array]"){for(var m=0;m<s.length;m++){var g=b(s[m]);f[g].references--}for(var y=S(u,i),C=0;C<s.length;C++){var O=b(s[C]);f[O].references===0&&(f[O].updater(),f.splice(O,1))}s=y}}}},function(v,p,c){(p=c(3)(!1)).push([v.i,`.cdx-list {
|
||||
margin: 0;
|
||||
BIN
public/build/assets/bundle-84836216.js.gz
Normal file
BIN
public/build/assets/bundle-84836216.js.gz
Normal file
Binary file not shown.
Binary file not shown.
@@ -3,25 +3,25 @@
|
||||
"file": "assets/NativeImageBlock-e3b0c442.css",
|
||||
"src": "NativeImageBlock.css"
|
||||
},
|
||||
"_NativeImageBlock-3623204f.js": {
|
||||
"_NativeImageBlock-68fd4e62.js": {
|
||||
"css": [
|
||||
"assets/NativeImageBlock-e3b0c442.css"
|
||||
],
|
||||
"file": "assets/NativeImageBlock-3623204f.js",
|
||||
"file": "assets/NativeImageBlock-68fd4e62.js",
|
||||
"imports": [
|
||||
"resources/js/app-front.js"
|
||||
],
|
||||
"isDynamicEntry": true
|
||||
},
|
||||
"_bundle-7ca97fea.js": {
|
||||
"file": "assets/bundle-7ca97fea.js",
|
||||
"_bundle-1ccfe0bb.js": {
|
||||
"file": "assets/bundle-1ccfe0bb.js",
|
||||
"imports": [
|
||||
"resources/js/app-front.js"
|
||||
],
|
||||
"isDynamicEntry": true
|
||||
},
|
||||
"_bundle-f4b2cd77.js": {
|
||||
"file": "assets/bundle-f4b2cd77.js",
|
||||
"_bundle-84836216.js": {
|
||||
"file": "assets/bundle-84836216.js",
|
||||
"imports": [
|
||||
"resources/js/app-front.js"
|
||||
],
|
||||
@@ -45,17 +45,17 @@
|
||||
],
|
||||
"dynamicImports": [
|
||||
"resources/js/vue/GetEmbedCode.vue",
|
||||
"_NativeImageBlock-3623204f.js",
|
||||
"_NativeImageBlock-68fd4e62.js",
|
||||
"resources/js/vue/PostEditor.vue",
|
||||
"resources/js/vue/ToastMessage.vue",
|
||||
"resources/js/vue/VueEditorJs.vue"
|
||||
],
|
||||
"file": "assets/app-front-d6902e40.js",
|
||||
"file": "assets/app-front-b9536f4d.js",
|
||||
"isEntry": true,
|
||||
"src": "resources/js/app-front.js"
|
||||
},
|
||||
"resources/js/vue/GetEmbedCode.vue": {
|
||||
"file": "assets/GetEmbedCode-1d44bdf3.js",
|
||||
"file": "assets/GetEmbedCode-6f92c617.js",
|
||||
"imports": [
|
||||
"resources/js/app-front.js"
|
||||
],
|
||||
@@ -70,19 +70,19 @@
|
||||
"css": [
|
||||
"assets/PostEditor-8d534a4a.css"
|
||||
],
|
||||
"file": "assets/PostEditor-3a06f7cf.js",
|
||||
"file": "assets/PostEditor-404ecaec.js",
|
||||
"imports": [
|
||||
"resources/js/vue/VueEditorJs.vue",
|
||||
"_NativeImageBlock-3623204f.js",
|
||||
"_bundle-f4b2cd77.js",
|
||||
"_bundle-7ca97fea.js",
|
||||
"_NativeImageBlock-68fd4e62.js",
|
||||
"_bundle-84836216.js",
|
||||
"_bundle-1ccfe0bb.js",
|
||||
"resources/js/app-front.js"
|
||||
],
|
||||
"isDynamicEntry": true,
|
||||
"src": "resources/js/vue/PostEditor.vue"
|
||||
},
|
||||
"resources/js/vue/ToastMessage.vue": {
|
||||
"file": "assets/ToastMessage-cef385bb.js",
|
||||
"file": "assets/ToastMessage-35fcfb39.js",
|
||||
"imports": [
|
||||
"resources/js/app-front.js"
|
||||
],
|
||||
@@ -91,10 +91,10 @@
|
||||
},
|
||||
"resources/js/vue/VueEditorJs.vue": {
|
||||
"dynamicImports": [
|
||||
"_bundle-7ca97fea.js",
|
||||
"_bundle-f4b2cd77.js"
|
||||
"_bundle-1ccfe0bb.js",
|
||||
"_bundle-84836216.js"
|
||||
],
|
||||
"file": "assets/VueEditorJs-c40f6d08.js",
|
||||
"file": "assets/VueEditorJs-04c9fa58.js",
|
||||
"imports": [
|
||||
"resources/js/app-front.js"
|
||||
],
|
||||
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -4,8 +4,8 @@
|
||||
<div class="container-xl">
|
||||
<ul class="navbar-nav">
|
||||
|
||||
<li class="nav-item @if (request()->routeIs('home')) active @endif">
|
||||
<a class="nav-link" href="{{ route('home') }}">
|
||||
<li class="nav-item @if (request()->routeIs('front.home')) active @endif">
|
||||
<a class="nav-link" href="{{ route('front.home') }}">
|
||||
<span
|
||||
class="nav-link-icon d-md-none d-lg-inline-block"><!-- Download SVG icon from http://tabler-icons.io/i/home -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-door-exit"
|
||||
@@ -44,7 +44,7 @@ class="nav-link-icon d-md-none d-lg-inline-block"><!-- Download SVG icon from ht
|
||||
</a>
|
||||
</li>
|
||||
--}}
|
||||
<li class="nav-item @if (request()->routeIs('posts.manage')) active @endif">
|
||||
{{-- <li class="nav-item @if (request()->routeIs('posts.manage')) active @endif">
|
||||
<a class="nav-link" href="{{ route('posts.manage') }}">
|
||||
<span
|
||||
class="nav-link-icon d-md-none d-lg-inline-block"><!-- Download SVG icon from http://tabler-icons.io/i/home -->
|
||||
@@ -64,7 +64,7 @@ class="nav-link-icon d-md-none d-lg-inline-block"><!-- Download SVG icon from ht
|
||||
{{ __('Posts') }}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</li> --}}
|
||||
{{--
|
||||
<li class="nav-item @if (request()->routeIs('users.index')) active @endif">
|
||||
<a class="nav-link" href="{{ route('users.index') }}">
|
||||
|
||||
117
resources/views/ba/aitoollist.blade.php
Normal file
117
resources/views/ba/aitoollist.blade.php
Normal file
@@ -0,0 +1,117 @@
|
||||
@extends('admin.layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container py-5">
|
||||
@if ($view == 'all')
|
||||
<h1>All AI Tool List ({{ $counts->all }})</h1>
|
||||
@elseif ($view == 'emailed')
|
||||
<h1>Emailed AI Tool List ({{ $counts->emailed }})</h1>
|
||||
@elseif ($view == 'not_emailed')
|
||||
<h1>Not Emailed AI Tool List ({{ $counts->not_emailed }})</h1>
|
||||
@endif
|
||||
<p>Please do not share this list to others.</p>
|
||||
|
||||
<div class="d-flex justify-content-center mb-5 gap-2">
|
||||
<a class="btn btn-light border-primary {{ $view == 'all' ? 'fw-bolder' : '' }}"
|
||||
href="{{ route('ba.ai-tool-list', ['view' => 'all']) }}">All AI Tools ({{ $counts->all }})</a>
|
||||
<a class="btn btn-light border-primary {{ $view == 'emailed' ? 'fw-bolder' : '' }}"
|
||||
href="{{ route('ba.ai-tool-list', ['view' => 'emailed']) }}">Emailed ({{ $counts->emailed }})</a>
|
||||
<a class="btn btn-light border-primary {{ $view == 'not_emailed' ? 'fw-bolder' : '' }}"
|
||||
href="{{ route('ba.ai-tool-list', ['view' => 'not_emailed']) }}">Not Emailed
|
||||
({{ $counts->not_emailed }})</a>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
@if ($ai_tool_list->count() > 0)
|
||||
@foreach ($ai_tool_list as $ai_tool)
|
||||
<div class="col-12">
|
||||
<div class="card mb-2">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a style="font-size: 1.3em;" class="fw-bold mb-4" rel="noopener noreferrer nofollow"
|
||||
target="_blank"
|
||||
href="{{ route('front.aitool.show', ['ai_tool_slug' => $ai_tool->slug]) }}">{{ $ai_tool->tool_name }}</a><br>
|
||||
<b>ID</b>: {{ $ai_tool->id }}<br>
|
||||
<b>Added</b>: {{ $ai_tool->created_at->toDateTimeString() }}
|
||||
</div>
|
||||
|
||||
@if ($ai_tool->has_emailed)
|
||||
<div class="col d-flex">
|
||||
<span class="align-self-center text-success">
|
||||
Already emailed
|
||||
</span>
|
||||
</div>
|
||||
<div class="col d-flex">
|
||||
<span class="align-self-center text-success">
|
||||
{{ $ai_tool->email }}
|
||||
</span>
|
||||
</div>
|
||||
@else
|
||||
<div class="col d-flex">
|
||||
<span class="align-self-center text-danger">
|
||||
Not yet emailed
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="col d-inline-flex justify-content-end">
|
||||
|
||||
<!-- Button trigger modal -->
|
||||
<button type="button" class="btn btn-outline-primary d-inline"
|
||||
data-bs-toggle="modal" data-bs-target="#staticBackdrop{{ $ai_tool->id }}">
|
||||
Set to emailed
|
||||
</button>
|
||||
|
||||
<!-- Modal -->
|
||||
<form class="align-self-center" action="{{ route('ba.ai-tool-list.post') }}"
|
||||
method="POST">
|
||||
@csrf
|
||||
<input type="hidden" name="id" value="{{ $ai_tool->id }}">
|
||||
<div class="modal fade" id="staticBackdrop{{ $ai_tool->id }}"
|
||||
data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
|
||||
aria-labelledby="staticBackdropLabel{{ $ai_tool->id }}"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5"
|
||||
id="staticBackdropLabel{{ $ai_tool->id }}">Set to
|
||||
Emailed</h1>
|
||||
<button type="button" class="btn-close"
|
||||
data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<input required type="text" class="form-control"
|
||||
name="email"
|
||||
placeholder="Enter AI Tool Email (aitoolemail@email.com)">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
||||
<button class="btn btn-outline-primary" type="submit">I
|
||||
have emailed, Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@else
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-body p-5 text-center">
|
||||
<p>No records found.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
@@ -14,7 +14,7 @@ class="btn btn-link d-inline-flex text-decoration-none hover-grow text-center ga
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{-- <div class="align-self-center">
|
||||
{{-- <div class="align-self-center">
|
||||
<a href="{{ route('front.submit-tool') }}">Submit your AI Tool <span
|
||||
class="badge text-bg-primary text-white">FREE!</span></a>
|
||||
</div> --}}
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
<p class="mb-3">Perks of a new AI tool directory: <span
|
||||
class="bg-highlighter-pink py-1 px-2 fw-bold ">free tool submission!</span> We are grateful
|
||||
for your initial support and we wish to reward our early adopters with AI tool submission at
|
||||
<span class="bg-highlighter-yellow py-1 px-2 fw-bold">$0 charge.</span></p>
|
||||
<span class="bg-highlighter-yellow py-1 px-2 fw-bold">$0 charge.</span>
|
||||
</p>
|
||||
|
||||
<p class="mb-3">
|
||||
While our platform is still relatively new, we are commited to becoming one of the leading AI
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
@php
|
||||
$class = '';
|
||||
|
||||
|
||||
if ('center' === $data['alignment']) {
|
||||
$class = 'text-center';
|
||||
} elseif ('left' === $data['alignment']) {
|
||||
|
||||
30
resources/views/vendor/sitemap/image.blade.php
vendored
30
resources/views/vendor/sitemap/image.blade.php
vendored
@@ -1,17 +1,17 @@
|
||||
<image:image>
|
||||
@if (! empty($image->url))
|
||||
<image:loc>{{ url($image->url) }}</image:loc>
|
||||
@endif
|
||||
@if (! empty($image->caption))
|
||||
<image:caption>{{ $image->caption }}</image:caption>
|
||||
@endif
|
||||
@if (! empty($image->geo_location))
|
||||
<image:geo_location>{{ $image->geo_location }}</image:geo_location>
|
||||
@endif
|
||||
@if (! empty($image->title))
|
||||
<image:title>{{ $image->title }}</image:title>
|
||||
@endif
|
||||
@if (! empty($image->license))
|
||||
<image:license>{{ $image->license }}</image:license>
|
||||
@endif
|
||||
@if (!empty($image->url))
|
||||
<image:loc>{{ url($image->url) }}</image:loc>
|
||||
@endif
|
||||
@if (!empty($image->caption))
|
||||
<image:caption>{{ $image->caption }}</image:caption>
|
||||
@endif
|
||||
@if (!empty($image->geo_location))
|
||||
<image:geo_location>{{ $image->geo_location }}</image:geo_location>
|
||||
@endif
|
||||
@if (!empty($image->title))
|
||||
<image:title>{{ $image->title }}</image:title>
|
||||
@endif
|
||||
@if (!empty($image->license))
|
||||
<image:license>{{ $image->license }}</image:license>
|
||||
@endif
|
||||
</image:image>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
</news:publication>
|
||||
<news:title>{{ $news->title }}</news:title>
|
||||
<news:publication_date>{{ $news->publicationDate->toW3cString() }}</news:publication_date>
|
||||
@foreach($news->options as $tag => $value)
|
||||
<news:{{$tag}}>{{$value}}</news:{{$tag}}>
|
||||
@endforeach
|
||||
</news:news>
|
||||
@foreach ($news->options as $tag => $value)
|
||||
<news:{{ $tag }}>{{ $value }}</news:{{ $tag }}>
|
||||
@endforeach
|
||||
</news:news>
|
||||
|
||||
13
resources/views/vendor/sitemap/sitemap.blade.php
vendored
13
resources/views/vendor/sitemap/sitemap.blade.php
vendored
@@ -1,6 +1,9 @@
|
||||
<?= '<'.'?'.'xml version="1.0" encoding="UTF-8"?>'."\n"; ?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
|
||||
@foreach($tags as $tag)
|
||||
@include('sitemap::' . $tag->getType())
|
||||
@endforeach
|
||||
<?= '<' . '?' . 'xml version="1.0" encoding="UTF-8"?>' . "\n" ?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"
|
||||
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
|
||||
xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"
|
||||
xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
|
||||
@foreach ($tags as $tag)
|
||||
@include('sitemap::' . $tag->getType())
|
||||
@endforeach
|
||||
</urlset>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?= '<'.'?'.'xml version="1.0" encoding="UTF-8"?>'."\n" ?>
|
||||
<?= '<' . '?' . 'xml version="1.0" encoding="UTF-8"?>' . "\n" ?>
|
||||
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
@foreach($tags as $tag)
|
||||
@include('sitemap::sitemapIndex/' . $tag->getType())
|
||||
@endforeach
|
||||
@foreach ($tags as $tag)
|
||||
@include('sitemap::sitemapIndex/' . $tag->getType())
|
||||
@endforeach
|
||||
</sitemapindex>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<sitemap>
|
||||
@if (! empty($tag->url))
|
||||
<loc>{{ url($tag->url) }}</loc>
|
||||
@if (!empty($tag->url))
|
||||
<loc>{{ url($tag->url) }}</loc>
|
||||
@endif
|
||||
@if (! empty($tag->lastModificationDate))
|
||||
<lastmod>{{ $tag->lastModificationDate->format(DateTime::ATOM) }}</lastmod>
|
||||
@if (!empty($tag->lastModificationDate))
|
||||
<lastmod>{{ $tag->lastModificationDate->format(DateTime::ATOM) }}</lastmod>
|
||||
@endif
|
||||
</sitemap>
|
||||
|
||||
26
resources/views/vendor/sitemap/url.blade.php
vendored
26
resources/views/vendor/sitemap/url.blade.php
vendored
@@ -1,19 +1,19 @@
|
||||
<url>
|
||||
@if (! empty($tag->url))
|
||||
<loc>{{ url($tag->url) }}</loc>
|
||||
@if (!empty($tag->url))
|
||||
<loc>{{ url($tag->url) }}</loc>
|
||||
@endif
|
||||
@if (count($tag->alternates))
|
||||
@foreach ($tag->alternates as $alternate)
|
||||
<xhtml:link rel="alternate" hreflang="{{ $alternate->locale }}" href="{{ url($alternate->url) }}" />
|
||||
@endforeach
|
||||
@endif
|
||||
@if (! empty($tag->lastModificationDate))
|
||||
<lastmod>{{ $tag->lastModificationDate->format(DateTime::ATOM) }}</lastmod>
|
||||
@endif
|
||||
@if (! empty($tag->changeFrequency))
|
||||
<changefreq>{{ $tag->changeFrequency }}</changefreq>
|
||||
@if (count($tag->alternates))
|
||||
@foreach ($tag->alternates as $alternate)
|
||||
<xhtml:link rel="alternate" hreflang="{{ $alternate->locale }}" href="{{ url($alternate->url) }}" />
|
||||
@endforeach
|
||||
@endif
|
||||
<priority>{{ number_format($tag->priority,1) }}</priority>
|
||||
@if (!empty($tag->lastModificationDate))
|
||||
<lastmod>{{ $tag->lastModificationDate->format(DateTime::ATOM) }}</lastmod>
|
||||
@endif
|
||||
@if (!empty($tag->changeFrequency))
|
||||
<changefreq>{{ $tag->changeFrequency }}</changefreq>
|
||||
@endif
|
||||
<priority>{{ number_format($tag->priority, 1) }}</priority>
|
||||
@each('sitemap::image', $tag->images, 'image')
|
||||
@each('sitemap::video', $tag->videos, 'video')
|
||||
@each('sitemap::news', $tag->news, 'news')
|
||||
|
||||
36
resources/views/vendor/sitemap/video.blade.php
vendored
36
resources/views/vendor/sitemap/video.blade.php
vendored
@@ -2,22 +2,22 @@
|
||||
<video:thumbnail_loc>{{ $video->thumbnailLoc }}</video:thumbnail_loc>
|
||||
<video:title>{{ $video->title }}</video:title>
|
||||
<video:description>{{ $video->description }}</video:description>
|
||||
@if ($video->contentLoc)
|
||||
<video:content_loc>{{ $video->contentLoc }}</video:content_loc>
|
||||
@endif
|
||||
@if ($video->playerLoc)
|
||||
<video:player_loc>{{ $video->playerLoc }}</video:player_loc>
|
||||
@endif
|
||||
@foreach($video->options as $tag => $value)
|
||||
<video:{{$tag}}>{{$value}}</video:{{$tag}}>
|
||||
@endforeach
|
||||
@foreach($video->allow as $tag => $value)
|
||||
<video:{{$tag}} relationship="allow">{{$value}}</video:{{$tag}}>
|
||||
@endforeach
|
||||
@foreach($video->deny as $tag => $value)
|
||||
<video:{{$tag}} relationship="deny">{{$value}}</video:{{$tag}}>
|
||||
@endforeach
|
||||
@foreach($video->tags as $tag)
|
||||
<video:tag>{{ $tag }}</video:tag>
|
||||
@endforeach
|
||||
@if ($video->contentLoc)
|
||||
<video:content_loc>{{ $video->contentLoc }}</video:content_loc>
|
||||
@endif
|
||||
@if ($video->playerLoc)
|
||||
<video:player_loc>{{ $video->playerLoc }}</video:player_loc>
|
||||
@endif
|
||||
@foreach ($video->options as $tag => $value)
|
||||
<video:{{ $tag }}>{{ $value }}</video:{{ $tag }}>
|
||||
@endforeach
|
||||
@foreach ($video->allow as $tag => $value)
|
||||
<video:{{ $tag }} relationship="allow">{{ $value }}</video:{{ $tag }}>
|
||||
@endforeach
|
||||
@foreach ($video->deny as $tag => $value)
|
||||
<video:{{ $tag }} relationship="deny">{{ $value }}</video:{{ $tag }}>
|
||||
@endforeach
|
||||
@foreach ($video->tags as $tag)
|
||||
<video:tag>{{ $tag }}</video:tag>
|
||||
@endforeach
|
||||
</video:video>
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
|
||||
Auth::routes();
|
||||
|
||||
|
||||
|
||||
// Route::prefix('admin')->middleware('auth')->group(function () {
|
||||
|
||||
// Route::get('/', [App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard');
|
||||
@@ -45,7 +43,6 @@
|
||||
|
||||
// Route::get('/prime/;ogin', [App\Http\Controllers\Admin\AdminLoginController::class, 'index'])->name('admin.login');
|
||||
|
||||
|
||||
Route::get('/', [App\Http\Controllers\Front\FrontHomeController::class, 'index'])->name('front.home');
|
||||
|
||||
Route::prefix('discover')->group(function () {
|
||||
@@ -87,3 +84,9 @@
|
||||
Route::get('/privacy', [App\Http\Controllers\Front\FrontHomeController::class, 'privacy'])->name('front.privacy')->middleware('cacheResponse:2630000');
|
||||
|
||||
Route::get('/disclaimer', [App\Http\Controllers\Front\FrontHomeController::class, 'disclaimer'])->name('front.disclaimer')->middleware('cacheResponse:2630000');
|
||||
|
||||
Route::prefix('ba')->middleware('horizonBasicAuth')->group(function () {
|
||||
Route::get('ai-tool-list', [App\Http\Controllers\BasicAuthAdmin\AIToolListController::class, 'index'])->name('ba.ai-tool-list');
|
||||
|
||||
Route::post('ai-tool-list/set-to-emailed', [App\Http\Controllers\BasicAuthAdmin\AIToolListController::class, 'setToEmailed'])->name('ba.ai-tool-list.post');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user