├── .do ├── app.yaml └── deploy.template.yaml ├── .dockerignore ├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── Dockerfile ├── LICENSE.md ├── README.md ├── SECURITY.md ├── _ide_helper.php ├── app ├── Console │ └── Kernel.php ├── Exceptions │ └── Handler.php ├── Http │ ├── Controllers │ │ ├── Auth │ │ │ ├── ForgotPasswordController.php │ │ │ ├── LoginController.php │ │ │ ├── RegisterController.php │ │ │ └── ResetPasswordController.php │ │ └── Controller.php │ ├── Kernel.php │ ├── Livewire │ │ └── Wave │ │ │ └── DeployToDo.php │ └── Middleware │ │ ├── Authenticate.php │ │ ├── EncryptCookies.php │ │ ├── HttpsRedirect.php │ │ ├── PreventRequestsDuringMaintenance.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── TrimStrings.php │ │ ├── TrustHosts.php │ │ ├── TrustProxies.php │ │ └── VerifyCsrfToken.php ├── Models │ └── User.php └── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ └── RouteServiceProvider.php ├── artisan ├── bootstrap ├── app.php └── cache │ └── .gitignore ├── buildDocker.sh ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── cors.php ├── database.php ├── features.php ├── filesystems.php ├── hashing.php ├── image.php ├── jwt.php ├── logging.php ├── mail.php ├── passport.php ├── queue.php ├── services.php ├── session.php ├── themes.php ├── view.php ├── voyager.php ├── wave.php └── well-known.php ├── database ├── .gitignore ├── factories │ └── UserFactory.php └── seeders │ ├── AnnouncementsTableSeeder.php │ ├── ApiKeysTableSeeder.php │ ├── CategoriesTableSeeder.php │ ├── DataRowsTableSeeder.php │ ├── DataTypesTableSeeder.php │ ├── DatabaseSeeder.php │ ├── KeyValuesTableSeeder.php │ ├── MenuItemsTableSeeder.php │ ├── MenusTableSeeder.php │ ├── NotificationsTableSeeder.php │ ├── PagesTableSeeder.php │ ├── PasswordResetsTableSeeder.php │ ├── PermissionGroupsTableSeeder.php │ ├── PermissionRoleTableSeeder.php │ ├── PermissionsTableSeeder.php │ ├── PlansTableSeeder.php │ ├── PostsTableSeeder.php │ ├── RolesTableSeeder.php │ ├── SettingsTableSeeder.php │ ├── TranslationsTableSeeder.php │ ├── UserRolesTableSeeder.php │ ├── UsersTableSeeder.php │ ├── VoyagerThemeOptionsTableSeeder.php │ └── VoyagerThemesTableSeeder.php ├── deploy.json ├── docker-compose.yml ├── lang ├── al │ └── voyager.php ├── ar │ └── voyager.php ├── de │ └── voyager.php ├── en │ ├── auth.php │ ├── pagination.php │ ├── passwords.php │ ├── validation.php │ └── voyager.php ├── es │ └── voyager.php ├── fr │ └── voyager.php ├── it │ ├── auth.php │ ├── pagination.php │ ├── passwords.php │ ├── validation.php │ └── voyager.php ├── pt │ └── voyager.php ├── pt_br │ └── voyager.php ├── ro │ └── voyager.php ├── ru │ └── voyager.php ├── tr │ └── voyager.php ├── uk │ └── voyager.php └── zh_CN │ └── voyager.php ├── phpunit.xml ├── public ├── .htaccess ├── favicon.ico ├── index.php ├── mix-manifest.json ├── robots.txt ├── themes │ └── tailwind │ │ ├── css │ │ └── app.css │ │ ├── images │ │ ├── admin.png │ │ ├── announcements.png │ │ ├── api.png │ │ ├── authentication.png │ │ ├── blog.png │ │ ├── impersonation.png │ │ ├── notifications.png │ │ ├── plans.png │ │ ├── profile.png │ │ ├── roles.png │ │ ├── subscriptions.png │ │ ├── testimonial-1.jpg │ │ ├── testimonial-2.jpg │ │ ├── testimonial-3.jpg │ │ └── themes.png │ │ ├── js │ │ └── app.js │ │ ├── mix-manifest.json │ │ └── tailwind.jpg └── vendor │ ├── binarytorch │ └── larecipe │ │ └── assets │ │ ├── css │ │ ├── app.css │ │ ├── font-awesome-v4-shims.css │ │ └── font-awesome.css │ │ ├── fonts │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.svg │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.svg │ │ ├── fa-regular-400.ttf │ │ ├── fa-regular-400.woff │ │ ├── fa-regular-400.woff2 │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.svg │ │ ├── fa-solid-900.ttf │ │ ├── fa-solid-900.woff │ │ ├── fa-solid-900.woff2 │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ ├── fontawesome-webfont.woff2 │ │ ├── nucleo-icons.eot │ │ ├── nucleo-icons.svg │ │ ├── nucleo-icons.ttf │ │ ├── nucleo-icons.woff │ │ └── nucleo-icons.woff2 │ │ └── js │ │ └── app.js │ └── tcg │ └── voyager │ └── assets │ ├── css │ ├── app.css │ └── rtl.css │ ├── fonts │ ├── bootstrap │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── icons-reference.html │ ├── voyager.eot │ ├── voyager.svg │ ├── voyager.ttf │ └── voyager.woff │ ├── images │ ├── bg.jpg │ ├── captain-avatar.png │ ├── compass │ │ ├── documentation.jpg │ │ ├── hooks.jpg │ │ └── voyager-home.jpg │ ├── helm.svg │ ├── large-logo-icon-light.png │ ├── large-logo-icon.png │ ├── logo-icon-light.png │ ├── logo-icon.png │ ├── voyager-character.png │ ├── voyager-character.sketch │ └── widget-backgrounds │ │ ├── 01.jpg │ │ ├── 02.jpg │ │ └── 03.jpg │ └── js │ ├── app.js │ ├── plugins │ ├── advlist │ │ └── plugin.min.js │ ├── anchor │ │ └── plugin.min.js │ ├── autolink │ │ └── plugin.min.js │ ├── autoresize │ │ └── plugin.min.js │ ├── autosave │ │ └── plugin.min.js │ ├── bbcode │ │ └── plugin.min.js │ ├── charmap │ │ └── plugin.min.js │ ├── code │ │ └── plugin.js │ ├── codesample │ │ ├── css │ │ │ └── prism.css │ │ └── plugin.min.js │ ├── colorpicker │ │ └── plugin.min.js │ ├── contextmenu │ │ └── plugin.min.js │ ├── directionality │ │ └── plugin.min.js │ ├── emoticons │ │ ├── img │ │ │ ├── smiley-cool.gif │ │ │ ├── smiley-cry.gif │ │ │ ├── smiley-embarassed.gif │ │ │ ├── smiley-foot-in-mouth.gif │ │ │ ├── smiley-frown.gif │ │ │ ├── smiley-innocent.gif │ │ │ ├── smiley-kiss.gif │ │ │ ├── smiley-laughing.gif │ │ │ ├── smiley-money-mouth.gif │ │ │ ├── smiley-sealed.gif │ │ │ ├── smiley-smile.gif │ │ │ ├── smiley-surprised.gif │ │ │ ├── smiley-tongue-out.gif │ │ │ ├── smiley-undecided.gif │ │ │ ├── smiley-wink.gif │ │ │ └── smiley-yell.gif │ │ └── plugin.min.js │ ├── example │ │ ├── dialog.html │ │ └── plugin.min.js │ ├── example_dependency │ │ └── plugin.min.js │ ├── fullpage │ │ └── plugin.min.js │ ├── fullscreen │ │ └── plugin.min.js │ ├── giphy │ │ ├── html │ │ │ ├── css │ │ │ │ └── giphyPopup.css │ │ │ ├── giphy.html │ │ │ ├── img │ │ │ │ ├── clear.gif │ │ │ │ ├── giphy_icon_128.png │ │ │ │ ├── giphy_icon_16.png │ │ │ │ ├── giphy_icon_19.png │ │ │ │ ├── giphy_icon_38.png │ │ │ │ ├── giphy_icon_48.png │ │ │ │ ├── giphy_logo_laser.gif │ │ │ │ ├── giphy_logo_txt.png │ │ │ │ ├── icon_add.png │ │ │ │ ├── icon_back.png │ │ │ │ ├── icon_categories.png │ │ │ │ ├── icon_email.png │ │ │ │ ├── icon_facebook.png │ │ │ │ ├── icon_heart_red.png │ │ │ │ ├── icon_heart_white.png │ │ │ │ ├── icon_link_white.png │ │ │ │ ├── icon_menu.png │ │ │ │ ├── icon_reactions.png │ │ │ │ ├── icon_search.png │ │ │ │ ├── icon_sms.png │ │ │ │ ├── icon_twitter.png │ │ │ │ └── loader_purple.gif │ │ │ └── js │ │ │ │ ├── GiphySearch.js │ │ │ │ ├── giphy_cms_ext.js │ │ │ │ ├── imagesloaded.pkgd.min.js │ │ │ │ ├── init.js │ │ │ │ ├── jquery.xdomainrequest.min.js │ │ │ │ ├── masonry.pkgd.min.js │ │ │ │ └── newT.js │ │ ├── img │ │ │ ├── clear.gif │ │ │ ├── giphyicon20px.png │ │ │ └── giphyiconoff20px.png │ │ └── plugin.js │ ├── hr │ │ └── plugin.min.js │ ├── image │ │ └── plugin.js │ ├── imagetools │ │ └── plugin.min.js │ ├── importcss │ │ └── plugin.min.js │ ├── insertdatetime │ │ └── plugin.min.js │ ├── layer │ │ └── plugin.min.js │ ├── legacyoutput │ │ └── plugin.min.js │ ├── link │ │ └── plugin.js │ ├── lists │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── media │ │ ├── moxieplayer.swf │ │ └── plugin.min.js │ ├── nonbreaking │ │ └── plugin.min.js │ ├── noneditable │ │ └── plugin.min.js │ ├── pagebreak │ │ └── plugin.min.js │ ├── paste │ │ └── plugin.min.js │ ├── preview │ │ └── plugin.min.js │ ├── print │ │ └── plugin.min.js │ ├── save │ │ └── plugin.min.js │ ├── searchreplace │ │ └── plugin.min.js │ ├── spellchecker │ │ └── plugin.min.js │ ├── tabfocus │ │ └── plugin.min.js │ ├── table │ │ └── plugin.js │ ├── template │ │ └── plugin.min.js │ ├── textcolor │ │ └── plugin.js │ ├── textpattern │ │ └── plugin.min.js │ ├── toc │ │ └── plugin.min.js │ ├── visualblocks │ │ ├── css │ │ │ └── visualblocks.css │ │ └── plugin.min.js │ ├── visualchars │ │ └── plugin.min.js │ ├── wordcount │ │ └── plugin.min.js │ └── youtube │ │ ├── css │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap.min.css │ │ └── style.css │ │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ │ ├── icon.png │ │ ├── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ ├── jQuery.jQTubeUtil.js │ │ ├── jquery.js │ │ ├── jquery.yt_data_v3.js │ │ ├── modernizr.js │ │ ├── mustache.js │ │ └── youtube.js │ │ ├── langs │ │ ├── de.js │ │ ├── en.js │ │ └── nl.js │ │ ├── plugin.js │ │ ├── preview.jpg │ │ ├── slider │ │ ├── css │ │ │ ├── slide.png │ │ │ └── slider.css │ │ ├── js │ │ │ └── bootstrap-slider.js │ │ └── less │ │ │ └── slider.less │ │ ├── template │ │ └── forms.html │ │ └── youtube.html │ ├── skins │ ├── lightgray │ │ ├── content.inline.min.css │ │ ├── content.min.css │ │ ├── fonts │ │ │ ├── tinymce-small.eot │ │ │ ├── tinymce-small.svg │ │ │ ├── tinymce-small.ttf │ │ │ ├── tinymce-small.woff │ │ │ ├── tinymce.eot │ │ │ ├── tinymce.svg │ │ │ ├── tinymce.ttf │ │ │ └── tinymce.woff │ │ ├── img │ │ │ ├── anchor.gif │ │ │ ├── loader.gif │ │ │ ├── object.gif │ │ │ └── trans.gif │ │ ├── skin.ie7.min.css │ │ └── skin.min.css │ └── voyager │ │ ├── Variables.less │ │ ├── content.inline.min.css │ │ ├── content.min.css │ │ ├── fonts │ │ ├── readme.md │ │ ├── tinymce-small.eot │ │ ├── tinymce-small.json │ │ ├── tinymce-small.svg │ │ ├── tinymce-small.ttf │ │ ├── tinymce-small.woff │ │ ├── tinymce.eot │ │ ├── tinymce.json │ │ ├── tinymce.svg │ │ ├── tinymce.ttf │ │ └── tinymce.woff │ │ ├── img │ │ ├── anchor.gif │ │ ├── loader.gif │ │ ├── object.gif │ │ └── trans.gif │ │ ├── skin.ie7.min.css │ │ ├── skin.json │ │ └── skin.min.css │ └── themes │ └── modern │ └── theme.js ├── resources └── views │ ├── livewire │ └── wave │ │ └── deploy-to-do.blade.php │ ├── themes │ └── tailwind │ │ ├── .gitignore │ │ ├── announcements │ │ ├── index.blade.php │ │ └── show.blade.php │ │ ├── assets │ │ ├── js │ │ │ └── app.js │ │ └── sass │ │ │ └── app.scss │ │ ├── auth │ │ ├── login.blade.php │ │ ├── passwords │ │ │ ├── email.blade.php │ │ │ └── reset.blade.php │ │ ├── register.blade.php │ │ └── verify-email.blade.php │ │ ├── blog │ │ ├── index.blade.php │ │ └── post.blade.php │ │ ├── cancelled.blade.php │ │ ├── dashboard │ │ └── index.blade.php │ │ ├── emails │ │ └── verify-email.blade.php │ │ ├── home.blade.php │ │ ├── layouts │ │ └── app.blade.php │ │ ├── menus │ │ ├── authenticated-mobile.blade.php │ │ ├── authenticated.blade.php │ │ ├── guest-mobile.blade.php │ │ └── guest.blade.php │ │ ├── notifications │ │ └── index.blade.php │ │ ├── options.blade.php │ │ ├── package.json │ │ ├── page.blade.php │ │ ├── partials │ │ ├── announcements.blade.php │ │ ├── cancel-modal.blade.php │ │ ├── cancel.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── notifications.blade.php │ │ ├── pagination.blade.php │ │ ├── payment-form.blade.php │ │ ├── plans-minimal.blade.php │ │ ├── plans.blade.php │ │ ├── reactivate.blade.php │ │ ├── switch-plans-modal.blade.php │ │ └── toast.blade.php │ │ ├── pricing.blade.php │ │ ├── profile.blade.php │ │ ├── settings │ │ ├── index.blade.php │ │ └── partials │ │ │ ├── api.blade.php │ │ │ ├── invoices.blade.php │ │ │ ├── plans.blade.php │ │ │ ├── profile.blade.php │ │ │ ├── security.blade.php │ │ │ └── subscription.blade.php │ │ ├── tailwind.config.js │ │ ├── tailwind.json │ │ ├── trial_over.blade.php │ │ ├── webpack.mix.js │ │ └── welcome.blade.php │ └── vendor │ ├── larecipe │ └── partials │ │ ├── 404.blade.php │ │ ├── logo.blade.php │ │ ├── nav.blade.php │ │ └── sidebar.blade.php │ ├── mail │ ├── html │ │ ├── button.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── layout.blade.php │ │ ├── message.blade.php │ │ ├── panel.blade.php │ │ ├── promotion.blade.php │ │ ├── promotion │ │ │ └── button.blade.php │ │ ├── subcopy.blade.php │ │ ├── table.blade.php │ │ └── themes │ │ │ └── default.css │ ├── markdown │ │ ├── button.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── layout.blade.php │ │ ├── message.blade.php │ │ ├── panel.blade.php │ │ ├── promotion.blade.php │ │ ├── promotion │ │ │ └── button.blade.php │ │ ├── subcopy.blade.php │ │ └── table.blade.php │ └── text │ │ ├── button.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── layout.blade.php │ │ ├── message.blade.php │ │ ├── panel.blade.php │ │ ├── subcopy.blade.php │ │ └── table.blade.php │ ├── notifications │ └── email.blade.php │ └── voyager │ ├── index.blade.php │ ├── login.blade.php │ └── users │ ├── browse.blade.php │ └── edit-add.blade.php ├── routes ├── api.php ├── channels.php ├── console.php └── web.php ├── storage ├── app │ └── public │ │ ├── avatars │ │ └── admin.png │ │ ├── pages │ │ └── page1.jpg │ │ ├── posts │ │ └── March2018 │ │ │ ├── 4vI1gzsAvMZ30yfDIe67-cropped.jpg │ │ │ ├── 4vI1gzsAvMZ30yfDIe67-medium.jpg │ │ │ ├── 4vI1gzsAvMZ30yfDIe67-small.jpg │ │ │ ├── 4vI1gzsAvMZ30yfDIe67.jpg │ │ │ ├── K804BvnOehlLao0XmI08-cropped.jpg │ │ │ ├── K804BvnOehlLao0XmI08-medium.jpg │ │ │ ├── K804BvnOehlLao0XmI08-small.jpg │ │ │ ├── K804BvnOehlLao0XmI08.jpg │ │ │ ├── XV92hMp8LQ7pJkUSijzb-cropped.jpg │ │ │ ├── XV92hMp8LQ7pJkUSijzb-medium.jpg │ │ │ ├── XV92hMp8LQ7pJkUSijzb-small.jpg │ │ │ ├── XV92hMp8LQ7pJkUSijzb.jpg │ │ │ ├── blog-1.jpg │ │ │ ├── blog-2.jpg │ │ │ ├── h86hSqPMkT9oU8pjcrSu-cropped.jpg │ │ │ ├── h86hSqPMkT9oU8pjcrSu-medium.jpg │ │ │ ├── h86hSqPMkT9oU8pjcrSu-small.jpg │ │ │ ├── h86hSqPMkT9oU8pjcrSu.jpg │ │ │ ├── hWOT5yqNmzCnLhVWXB2u-cropped.jpg │ │ │ ├── hWOT5yqNmzCnLhVWXB2u-medium.jpg │ │ │ ├── hWOT5yqNmzCnLhVWXB2u-small.jpg │ │ │ ├── hWOT5yqNmzCnLhVWXB2u.jpg │ │ │ ├── rU26aWVsZ2zocWGSTE7J-cropped.jpg │ │ │ ├── rU26aWVsZ2zocWGSTE7J-medium.jpg │ │ │ ├── rU26aWVsZ2zocWGSTE7J-small.jpg │ │ │ ├── rU26aWVsZ2zocWGSTE7J.jpg │ │ │ ├── weZwLLpaXnxyTR989iDk-cropped.jpg │ │ │ ├── weZwLLpaXnxyTR989iDk-medium.jpg │ │ │ ├── weZwLLpaXnxyTR989iDk-small.jpg │ │ │ └── weZwLLpaXnxyTR989iDk.jpg │ │ ├── settings │ │ ├── April2021 │ │ │ ├── deploy-banner.png │ │ │ ├── deploy-to-do.png │ │ │ ├── digital-ocean.png │ │ │ ├── play-icon.png │ │ │ ├── popcorn-soda-icon.png │ │ │ ├── tails-bg.png │ │ │ ├── tails-icon.png │ │ │ └── wave-do-icon.png │ │ ├── March2020 │ │ │ └── u7EDIzZ1aBFm63xgATzW.jpg │ │ └── November2017 │ │ │ └── XPZ0wJqikgSgwqgrJAqr.png │ │ ├── themes │ │ ├── April2018 │ │ │ ├── OfDFlivKQ2mw84PqvSZT.jpg │ │ │ ├── YyOWx12ygRItmW1kx9c6.jpg │ │ │ ├── qrAnRGjfJEfc4wd7LR7x.jpg │ │ │ └── uQPiLPWGTZp7JVjmB9oB.jpg │ │ ├── August2018 │ │ │ └── TksmVWMqp5JXUQj8C6Ct.png │ │ ├── February2018 │ │ │ ├── UUgOwPG08CnLLBOtgNWR.png │ │ │ └── mFajn4fwpGFXzI1UsNH6.png │ │ └── November2017 │ │ │ ├── 14GIb9rpmhsQbnWotzaE.png │ │ │ ├── L0qMMYB8zihcObZa275J.png │ │ │ └── mheiiOAnQmWreBu6x3BX.png │ │ └── users │ │ └── default.png ├── database.sqlite ├── dump.sql ├── framework │ ├── .gitignore │ ├── cache │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore ├── logs │ └── .gitignore ├── test │ └── scooby.jpg ├── wave-logo.png └── wave-svg.sketch ├── tests ├── CreatesApplication.php ├── Datasets │ ├── AuthRoutes.php │ └── Routes.php ├── Feature │ └── RouteTest.php ├── Pest.php ├── TestCase.php ├── Traits │ └── RecursiveRefreshDatabase.php └── Unit │ └── ExampleTest.php ├── tools └── php-cs-fixer │ ├── composer.json │ └── composer.lock └── wave ├── composer.json ├── database └── migrations │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2015_09_19_000000_create_failed_jobs_table.php │ ├── 2016_01_01_000000_create_pages_table.php │ ├── 2016_01_01_000000_create_posts_table.php │ ├── 2016_02_15_204651_create_categories_table.php │ ├── 2017_09_22_234251_create_announcements_table.php │ ├── 2017_09_22_234251_create_api_keys_table.php │ ├── 2017_09_22_234251_create_notifications_table.php │ ├── 2017_09_22_234251_create_permission_groups_table.php │ ├── 2018_09_21_234251_create_themes_table.php │ ├── 2018_09_22_234251_add_permissions_group_id_to_permissions_table.php │ ├── 2018_09_22_234251_create_announcement_user_table.php │ ├── 2018_09_22_234251_create_plans_table.php │ ├── 2018_09_22_234251_create_subscriptions_table.php │ ├── 2018_09_22_234251_create_theme_options_table.php │ └── 2018_09_22_234251_create_wave_key_values_table.php ├── resources └── views │ ├── admin-boxes.blade.php │ ├── checkout.blade.php │ ├── do.blade.php │ └── install.blade.php ├── routes ├── api.php └── web.php ├── src ├── Announcement.php ├── ApiKey.php ├── Category.php ├── Helpers │ └── globals.php ├── Http │ ├── Controllers │ │ ├── API │ │ │ ├── ApiController.php │ │ │ └── AuthController.php │ │ ├── AnnouncementController.php │ │ ├── Auth │ │ │ ├── EmailVerificationController.php │ │ │ ├── ForgotPasswordController.php │ │ │ ├── LoginController.php │ │ │ ├── RegisterController.php │ │ │ └── ResetPasswordController.php │ │ ├── BlogController.php │ │ ├── DashboardController.php │ │ ├── HomeController.php │ │ ├── NotificationController.php │ │ ├── PageController.php │ │ ├── ProfileController.php │ │ ├── SettingsController.php │ │ ├── SubscriptionController.php │ │ └── WebhookController.php │ ├── Livewire │ │ └── Settings │ │ │ ├── Api.php │ │ │ ├── Invoices.php │ │ │ ├── Plans.php │ │ │ ├── Security.php │ │ │ └── Subscription.php │ └── Middleware │ │ ├── Cancelled.php │ │ ├── InstallMiddleware.php │ │ ├── TokenMiddleware.php │ │ ├── TrialEnded.php │ │ └── VerifyPaddleWebhookMiddleware.php ├── KeyValue.php ├── Notifications │ └── VerifyEmail.php ├── Page.php ├── Plan.php ├── Post.php ├── Subscription.php ├── Support │ └── Facades │ │ └── Wave.php ├── User.php ├── Wave.php └── WaveServiceProvider.php └── wave.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | indent_style = space 8 | indent_size = 4 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{yml,yaml}] 15 | indent_size = 2 16 | 17 | [docker-compose.yml] 18 | indent_size = 4 19 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=Wave 2 | APP_ENV=local 3 | APP_KEY=base64:8dQ7xw/kM9EYMV4cUkzKgET8jF4P0M0TOmmqN05RN2w= 4 | APP_DEBUG=false 5 | APP_URL=http://surf.test 6 | 7 | LOG_CHANNEL=stack 8 | LOG_DEPRECATIONS_CHANNEL=null 9 | LOG_LEVEL=debug 10 | 11 | DB_CONNECTION=mysql 12 | DB_HOST=127.0.0.1 13 | DB_PORT=3306 14 | DB_DATABASE=surf 15 | DB_USERNAME=root 16 | DB_PASSWORD= 17 | 18 | BROADCAST_DRIVER=log 19 | CACHE_DRIVER=file 20 | QUEUE_CONNECTION=sync 21 | SESSION_DRIVER=file 22 | SESSION_LIFETIME=9999 23 | 24 | REDIS_HOST=127.0.0.1 25 | REDIS_PASSWORD=null 26 | REDIS_PORT=6379 27 | 28 | MAIL_MAILER=smtp 29 | MAIL_HOST=smtp.mailtrap.io 30 | MAIL_PORT=2525 31 | MAIL_USERNAME= 32 | MAIL_PASSWORD= 33 | MAIL_ENCRYPTION=null 34 | MAIL_FROM_ADDRESS="hello@example.com" 35 | MAIL_FROM_NAME="${APP_NAME}" 36 | 37 | AWS_ACCESS_KEY_ID= 38 | AWS_SECRET_ACCESS_KEY= 39 | AWS_DEFAULT_REGION=us-east-1 40 | AWS_BUCKET= 41 | AWS_USE_PATH_STYLE_ENDPOINT=false 42 | 43 | PUSHER_APP_ID= 44 | PUSHER_APP_KEY= 45 | PUSHER_APP_SECRET= 46 | PUSHER_APP_CLUSTER=mt1 47 | 48 | MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 49 | MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 50 | 51 | JWT_SECRET=Jrsweag3Mf0srOqDizRkhjWm5CEFcrBy 52 | 53 | PADDLE_VENDOR_ID= 54 | PADDLE_VENDOR_AUTH_CODE= 55 | PADDLE_VENDOR_PUBLIC_KEY= 56 | PADDLE_ENV=sandbox 57 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.blade.php diff=html 4 | *.css diff=css 5 | *.html diff=html 6 | *.md diff=markdown 7 | *.php diff=php 8 | 9 | /.github export-ignore 10 | CHANGELOG.md export-ignore 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /public/storage 4 | /storage/*.key 5 | /vendor 6 | .env 7 | .env.backup 8 | .phpunit.result.cache 9 | Homestead.json 10 | Homestead.yaml 11 | npm-debug.log 12 | yarn-error.log 13 | /.idea 14 | /.vscode 15 | 16 | # Wave ignores. 17 | /public/.well-known 18 | /.vagrant 19 | /wave-pro 20 | Homestead.json 21 | Homestead.yaml 22 | npm-debug.log 23 | yarn-error.log 24 | .DS_Store 25 | /wave/vendor/ 26 | /public/wave/docs 27 | 28 | # Surf ignores. 29 | /tools/php-cs-fixer/vendor/ 30 | .php-cs-fixer.cache 31 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM haakco/stage3-ubuntu-20.04-php7.4-lv 2 | 3 | USER www-data 4 | 5 | ## Cleanout previous dev just in case 6 | RUN rm -rf /var/www/site/* 7 | 8 | ADD --chown=www-data:www-data . /var/www/site 9 | 10 | WORKDIR /var/www/site 11 | 12 | RUN composer install --no-ansi --no-suggest --no-scripts --prefer-dist --no-progress --no-interaction \ 13 | --optimize-autoloader 14 | 15 | USER root 16 | 17 | RUN find /usr/share/GeoIP -not -user www-data -execdir chown "www-data:" {} \+ && \ 18 | find /var/www/site -not -user www-data -execdir chown "www-data:" {} \+ 19 | 20 | #HEALTHCHECK \ 21 | # --interval=30s \ 22 | # --timeout=60s \ 23 | # --retries=10 \ 24 | # --start-period=60s \ 25 | # CMD if [[ "$(curl -f http://127.0.0.1/ | jq -e . >/dev/null 2>&1)" != "0" ]]; then exit 1; else exit 0; fi 26 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) DevDojo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | **PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY.** 4 | 5 | ## Reporting a Vulnerability 6 | 7 | If you discover a security vulnerability within Laravel Wave, please send an email to the DevDojo team at support@devdojo.com. All security vulnerabilities will be promptly addressed. 8 | -------------------------------------------------------------------------------- /app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire')->hourly(); 19 | } 20 | 21 | /** 22 | * Register the commands for the application. 23 | * 24 | * @return void 25 | */ 26 | protected function commands() 27 | { 28 | $this->load(__DIR__.'/Commands'); 29 | 30 | require base_path('routes/console.php'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Exceptions/Handler.php: -------------------------------------------------------------------------------- 1 | , \Psr\Log\LogLevel::*> 14 | */ 15 | protected $levels = [ 16 | // 17 | ]; 18 | 19 | /** 20 | * A list of the exception types that are not reported. 21 | * 22 | * @var array> 23 | */ 24 | protected $dontReport = [ 25 | // 26 | ]; 27 | 28 | /** 29 | * A list of the inputs that are never flashed to the session on validation exceptions. 30 | * 31 | * @var array 32 | */ 33 | protected $dontFlash = [ 34 | 'current_password', 35 | 'password', 36 | 'password_confirmation', 37 | ]; 38 | 39 | /** 40 | * Register the exception handling callbacks for the application. 41 | * 42 | * @return void 43 | */ 44 | public function register() 45 | { 46 | $this->reportable(function (Throwable $e) { 47 | // 48 | }); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ForgotPasswordController.php: -------------------------------------------------------------------------------- 1 | expectsJson()) { 18 | return route('login'); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | protected $except = [ 15 | // 16 | ]; 17 | } 18 | -------------------------------------------------------------------------------- /app/Http/Middleware/HttpsRedirect.php: -------------------------------------------------------------------------------- 1 | secure() && env('APP_ENV') === 'production') { 19 | return redirect()->secure($request->getRequestUri()); 20 | } 21 | 22 | return $next($request); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/PreventRequestsDuringMaintenance.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | protected $except = [ 15 | // 16 | ]; 17 | } 18 | -------------------------------------------------------------------------------- /app/Http/Middleware/RedirectIfAuthenticated.php: -------------------------------------------------------------------------------- 1 | check()) { 26 | return redirect(RouteServiceProvider::HOME); 27 | } 28 | } 29 | 30 | return $next($request); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrimStrings.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | protected $except = [ 15 | 'current_password', 16 | 'password', 17 | 'password_confirmation', 18 | ]; 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrustHosts.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | public function hosts() 15 | { 16 | return [ 17 | $this->allSubdomainsOfApplicationUrl(), 18 | ]; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrustProxies.php: -------------------------------------------------------------------------------- 1 | |string|null 14 | */ 15 | protected $proxies; 16 | 17 | /** 18 | * The headers that should be used to detect proxies. 19 | * 20 | * @var int 21 | */ 22 | protected $headers = 23 | Request::HEADER_X_FORWARDED_FOR | 24 | Request::HEADER_X_FORWARDED_HOST | 25 | Request::HEADER_X_FORWARDED_PORT | 26 | Request::HEADER_X_FORWARDED_PROTO | 27 | Request::HEADER_X_FORWARDED_AWS_ELB; 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | protected $except = [ 15 | '/billing/webhook' 16 | ]; 17 | } 18 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | app->environment() == 'production') { 28 | $this->app['request']->server->set('HTTPS', true); 29 | } 30 | 31 | $this->setSchemaDefaultLength(); 32 | } 33 | 34 | private function setSchemaDefaultLength(): void 35 | { 36 | try { 37 | Schema::defaultStringLength(191); 38 | } 39 | catch (\Exception $exception){} 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Providers/AuthServiceProvider.php: -------------------------------------------------------------------------------- 1 | 14 | */ 15 | protected $policies = [ 16 | // 'App\Models\Model' => 'App\Policies\ModelPolicy', 17 | ]; 18 | 19 | /** 20 | * Register any authentication / authorization services. 21 | * 22 | * @return void 23 | */ 24 | public function boot() 25 | { 26 | $this->registerPolicies(); 27 | 28 | // 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | > 16 | */ 17 | protected $listen = [ 18 | // Registered::class => [ 19 | // SendEmailVerificationNotification::class, 20 | // ], 21 | ]; 22 | 23 | /** 24 | * Register any events for your application. 25 | * 26 | * @return void 27 | */ 28 | public function boot() 29 | { 30 | // 31 | } 32 | 33 | /** 34 | * Determine if events and listeners should be automatically discovered. 35 | * 36 | * @return bool 37 | */ 38 | public function shouldDiscoverEvents() 39 | { 40 | return false; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/Providers/RouteServiceProvider.php: -------------------------------------------------------------------------------- 1 | configureRateLimiting(); 30 | 31 | $this->routes(function () { 32 | Route::middleware('api') 33 | ->prefix('api') 34 | ->group(base_path('routes/api.php')); 35 | 36 | Route::middleware('web') 37 | ->group(base_path('routes/web.php')); 38 | }); 39 | } 40 | 41 | /** 42 | * Configure the rate limiters for the application. 43 | * 44 | * @return void 45 | */ 46 | protected function configureRateLimiting() 47 | { 48 | RateLimiter::for('api', function (Request $request) { 49 | return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); 50 | }); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /buildDocker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | export IMAGE_NAME='haakco/stage3-ubuntu-20.04-php7.4-lv-wave' 3 | export DOCKER_FILE="${DOCKER_FILE:-"Dockerfile"}" 4 | 5 | echo "Tagged as : ${IMAGE_NAME}" 6 | echo "" 7 | echo "" 8 | 9 | CMD='docker build --rm --file '"${DOCKER_FILE}"' -t '"${IMAGE_NAME}"' .' 10 | 11 | echo "Build commmand: ${CMD}" 12 | echo "" 13 | ${CMD} 14 | -------------------------------------------------------------------------------- /config/cors.php: -------------------------------------------------------------------------------- 1 | ['api/*', 'sanctum/csrf-cookie'], 19 | 20 | 'allowed_methods' => ['*'], 21 | 22 | 'allowed_origins' => ['*'], 23 | 24 | 'allowed_origins_patterns' => [], 25 | 26 | 'allowed_headers' => ['*'], 27 | 28 | 'exposed_headers' => [], 29 | 30 | 'max_age' => 0, 31 | 32 | 'supports_credentials' => false, 33 | 34 | ]; 35 | -------------------------------------------------------------------------------- /config/image.php: -------------------------------------------------------------------------------- 1 | 'gd' 19 | 20 | ]; 21 | -------------------------------------------------------------------------------- /config/passport.php: -------------------------------------------------------------------------------- 1 | env('PASSPORT_PRIVATE_KEY'), 17 | 18 | 'public_key' => env('PASSPORT_PUBLIC_KEY'), 19 | 20 | ]; 21 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'domain' => env('MAILGUN_DOMAIN'), 19 | 'secret' => env('MAILGUN_SECRET'), 20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), 21 | 'scheme' => 'https', 22 | ], 23 | 24 | 'postmark' => [ 25 | 'token' => env('POSTMARK_TOKEN'), 26 | ], 27 | 28 | 'ses' => [ 29 | 'key' => env('AWS_ACCESS_KEY_ID'), 30 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 31 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 32 | ], 33 | 34 | 'sparkpost' => [ 35 | 'secret' => env('SPARKPOST_SECRET'), 36 | ] 37 | 38 | ]; 39 | -------------------------------------------------------------------------------- /config/themes.php: -------------------------------------------------------------------------------- 1 | resource_path('views/themes'), 6 | 'publish_assets' => false 7 | 8 | ]; -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | resource_path('views'), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled View Path 23 | |-------------------------------------------------------------------------- 24 | | 25 | | This option determines where all the compiled Blade templates will be 26 | | stored for your application. Typically, this is within the storage 27 | | directory. However, as usual, you are free to change this value. 28 | | 29 | */ 30 | 31 | 'compiled' => env( 32 | 'VIEW_COMPILED_PATH', 33 | realpath(storage_path('framework/views')) 34 | ), 35 | 36 | ]; 37 | -------------------------------------------------------------------------------- /config/wave.php: -------------------------------------------------------------------------------- 1 | [ 6 | 'about' 7 | ], 8 | 9 | 'api' => [ 10 | 'auth_token_expires' => 60, 11 | 'key_token_expires' => 1, 12 | ], 13 | 14 | 'auth' => [ 15 | 'min_password_length' => 5, 16 | ], 17 | 18 | 'user_model' => \App\Models\User::class, 19 | 20 | 'paddle' => [ 21 | 'vendor' => env('PADDLE_VENDOR_ID', ''), 22 | 'auth_code' => env('PADDLE_VENDOR_AUTH_CODE', ''), 23 | 'public_key' => env('PADDLE_VENDOR_PUBLIC_KEY', null), 24 | 'env' => env('PADDLE_ENV', 'sandbox') 25 | ] 26 | 27 | ]; 28 | -------------------------------------------------------------------------------- /config/well-known.php: -------------------------------------------------------------------------------- 1 | [ 8 | 'change-password' => '/settings/security', 9 | ], 10 | 11 | /** 12 | * Static - GET routes. 13 | */ 14 | 'static' => [ 15 | // 'security.txt' => fn () => response('Hello world.'), 16 | ], 17 | ]; 18 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | -------------------------------------------------------------------------------- /database/factories/UserFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class UserFactory extends Factory 13 | { 14 | /** 15 | * The name of the factory's corresponding model. 16 | * 17 | * @var string 18 | */ 19 | protected $model = User::class; 20 | 21 | /** 22 | * Define the model's default state. 23 | * 24 | * @return array 25 | */ 26 | public function definition() 27 | { 28 | return [ 29 | 'name' => $this->faker->name(), 30 | 'email' => $this->faker->unique()->safeEmail(), 31 | 'username' => $this->faker->userName(), 32 | 'avatar' => 'users/default.png', 33 | 'email_verified_at' => now(), 34 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 35 | 'remember_token' => Str::random(10), 36 | ]; 37 | } 38 | 39 | /** 40 | * Indicate that the model's email address should be unverified. 41 | * 42 | * @return static 43 | */ 44 | public function unverified() 45 | { 46 | return $this->state(function (array $attributes) { 47 | return [ 48 | 'email_verified_at' => null, 49 | ]; 50 | }); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /database/seeders/ApiKeysTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /database/seeders/CategoriesTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 18 | 19 | DB::table('categories')->insert(array( 20 | 0 => 21 | array( 22 | 'id' => 1, 23 | 'parent_id' => NULL, 24 | 'order' => 1, 25 | 'name' => 'Category 1', 26 | 'slug' => 'category-1', 27 | 'created_at' => '2017-11-21 16:23:22', 28 | 'updated_at' => '2017-11-21 16:23:22', 29 | ), 30 | 1 => 31 | array( 32 | 'id' => 2, 33 | 'parent_id' => NULL, 34 | 'order' => 1, 35 | 'name' => 'Category 2', 36 | 'slug' => 'category-2', 37 | 'created_at' => '2017-11-21 16:23:22', 38 | 'updated_at' => '2017-11-21 16:23:22', 39 | ), 40 | )); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /database/seeders/KeyValuesTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 18 | 19 | DB::table('key_values')->insert(array( 20 | 0 => 21 | array( 22 | 'id' => 10, 23 | 'type' => 'text_area', 24 | 'key_value_id' => 1, 25 | 'key_value_type' => 'users', 26 | 'key' => 'about', 27 | 'value' => 'Hello I am the admin user. You can update this information in the edit profile section. Hope you enjoy using Wave.', 28 | ), 29 | )); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/seeders/MenusTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 18 | 19 | DB::table('menus')->insert(array( 20 | 0 => 21 | array( 22 | 'id' => 1, 23 | 'name' => 'admin', 24 | 'created_at' => '2017-11-21 16:23:22', 25 | 'updated_at' => '2017-11-21 16:23:22', 26 | ), 27 | 1 => 28 | array( 29 | 'id' => 2, 30 | 'name' => 'authenticated-menu', 31 | 'created_at' => '2017-11-28 14:47:49', 32 | 'updated_at' => '2018-04-13 22:25:28', 33 | ), 34 | 2 => 35 | array( 36 | 'id' => 3, 37 | 'name' => 'guest-menu', 38 | 'created_at' => '2018-04-13 22:25:37', 39 | 'updated_at' => '2018-04-13 22:25:37', 40 | ), 41 | )); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /database/seeders/NotificationsTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /database/seeders/PasswordResetsTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /database/seeders/PermissionGroupsTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /database/seeders/UserRolesTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /database/seeders/UsersTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 20 | 21 | $attributes = collect([ 22 | 'name' => 'Wave Admin', 23 | 'email' => 'admin@admin.com', 24 | 'username' => 'admin', 25 | 'role_id' => 1, 26 | ]); 27 | 28 | if (Storage::disk('public')->exists('avatars/admin.png')) { 29 | $attributes->put('avatar', 'avatars/admin.png'); 30 | } 31 | 32 | User::factory()->create($attributes->toArray()); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /database/seeders/VoyagerThemesTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 18 | 19 | DB::table('themes')->insert(array( 20 | 0 => 21 | array( 22 | 'id' => 1, 23 | 'name' => 'Tailwind Theme', 24 | 'folder' => 'tailwind', 25 | 'active' => 1, 26 | 'version' => '1.0', 27 | 'created_at' => '2020-08-23 08:06:45', 28 | 'updated_at' => '2020-08-23 08:06:45', 29 | ) 30 | )); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'password' => 'The provided password is incorrect.', 18 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 19 | 20 | ]; 21 | -------------------------------------------------------------------------------- /lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Your password has been reset!', 17 | 'sent' => 'We have emailed your password reset link!', 18 | 'throttled' => 'Please wait before retrying.', 19 | 'token' => 'This password reset token is invalid.', 20 | 'user' => "We can't find a user with that email address.", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/it/auth.php: -------------------------------------------------------------------------------- 1 | 'Queste credenziali non corrispondono a quelle in archivio.', 17 | 'throttle' => 'Troppi tentativi di accesso. Riprova tra :seconds secondi.', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/it/pagination.php: -------------------------------------------------------------------------------- 1 | '« Precedente', 17 | 'next' => 'Successivo »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/it/passwords.php: -------------------------------------------------------------------------------- 1 | 'Le password devono contenere almeno sei caratteri e la conferma deve corrispondere.', 17 | 'reset' => 'La tua password è stata reimpostata!', 18 | 'sent' => 'Abbiamo inviato per e-mail il link per reimpostare la password!', 19 | 'token' => 'Questo token di reimpostazione della password non è valido.', 20 | 'user' => "Non riusciamo a trovare un utente con questo indirizzo e-mail.", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | ./tests/Unit 10 | 11 | 12 | ./tests/Feature 13 | 14 | 15 | 16 | 17 | ./app 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews -Indexes 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Handle Authorization Header 9 | RewriteCond %{HTTP:Authorization} . 10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 11 | 12 | # Redirect Trailing Slashes If Not A Folder... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_URI} (.+)/$ 15 | RewriteRule ^ %1 [L,R=301] 16 | 17 | # Send Requests To Front Controller... 18 | RewriteCond %{REQUEST_FILENAME} !-d 19 | RewriteCond %{REQUEST_FILENAME} !-f 20 | RewriteRule ^ index.php [L] 21 | 22 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/favicon.ico -------------------------------------------------------------------------------- /public/mix-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "/js/app.js": "/js/app.js" 3 | } -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/themes/tailwind/images/admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/admin.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/announcements.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/announcements.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/api.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/authentication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/authentication.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/blog.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/impersonation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/impersonation.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/notifications.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/plans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/plans.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/profile.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/roles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/roles.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/subscriptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/subscriptions.png -------------------------------------------------------------------------------- /public/themes/tailwind/images/testimonial-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/testimonial-1.jpg -------------------------------------------------------------------------------- /public/themes/tailwind/images/testimonial-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/testimonial-2.jpg -------------------------------------------------------------------------------- /public/themes/tailwind/images/testimonial-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/testimonial-3.jpg -------------------------------------------------------------------------------- /public/themes/tailwind/images/themes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/images/themes.png -------------------------------------------------------------------------------- /public/themes/tailwind/mix-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "/js/app.js": "/js/app.js", 3 | "/css/app.css": "/css/app.css" 4 | } 5 | -------------------------------------------------------------------------------- /public/themes/tailwind/tailwind.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/themes/tailwind/tailwind.jpg -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-brands-400.eot -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-brands-400.woff -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-regular-400.eot -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-regular-400.woff -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-solid-900.eot -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-solid-900.woff -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/nucleo-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/nucleo-icons.eot -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/nucleo-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/nucleo-icons.ttf -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/nucleo-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/nucleo-icons.woff -------------------------------------------------------------------------------- /public/vendor/binarytorch/larecipe/assets/fonts/nucleo-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/binarytorch/larecipe/assets/fonts/nucleo-icons.woff2 -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/fonts/voyager.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/fonts/voyager.eot -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/fonts/voyager.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/fonts/voyager.ttf -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/fonts/voyager.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/fonts/voyager.woff -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/bg.jpg -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/captain-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/captain-avatar.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/compass/documentation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/compass/documentation.jpg -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/compass/hooks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/compass/hooks.jpg -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/compass/voyager-home.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/compass/voyager-home.jpg -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/large-logo-icon-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/large-logo-icon-light.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/large-logo-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/large-logo-icon.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/logo-icon-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/logo-icon-light.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/logo-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/logo-icon.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/voyager-character.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/voyager-character.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/voyager-character.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/voyager-character.sketch -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/widget-backgrounds/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/widget-backgrounds/01.jpg -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/widget-backgrounds/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/widget-backgrounds/02.jpg -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/images/widget-backgrounds/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/images/widget-backgrounds/03.jpg -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/anchor/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("anchor",function(e){var t=function(e){return!e.attr("href")&&(e.attr("id")||e.attr("name"))&&!e.firstChild},n=function(e){return function(n){for(var r=0;r'}),e+=""}),e+=""}var r=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];e.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:n,onclick:function(t){var n=e.dom.getParent(t.target,"a");n&&(e.insertContent(''+n.getAttribute('),this.hide())}},tooltip:"Emoticons"})}); -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/example/dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Custom dialog

5 | Input some text: 6 | 7 | 8 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/example/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("example",function(e,t){e.addButton("example",{text:"My button",icon:!1,onclick:function(){e.windowManager.open({title:"Example plugin",body:[{type:"textbox",name:"title",label:"Title"}],onsubmit:function(t){e.insertContent("Title: "+t.data.title)}})}}),e.addMenuItem("example",{text:"Example plugin",context:"tools",onclick:function(){e.windowManager.open({title:"TinyMCE site",url:t+"/dialog.html",width:600,height:400,buttons:[{text:"Insert",onclick:function(){var t=e.windowManager.getWindows()[0];e.insertContent(t.getContentWindow().document.getElementById("content").value),t.close()}},{text:"Close",onclick:"close"}]})}})}); -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/example_dependency/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("example_dependency",function(){},["example"]); -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/clear.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/clear.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_icon_128.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_icon_16.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_icon_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_icon_19.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_icon_38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_icon_38.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_icon_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_icon_48.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_logo_laser.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_logo_laser.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_logo_txt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/giphy_logo_txt.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_add.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_back.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_categories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_categories.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_email.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_facebook.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_heart_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_heart_red.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_heart_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_heart_white.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_link_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_link_white.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_menu.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_reactions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_reactions.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_search.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_sms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_sms.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/icon_twitter.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/loader_purple.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/html/img/loader_purple.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/js/giphy_cms_ext.js: -------------------------------------------------------------------------------- 1 | var GiphyCMSExt = { 2 | init: function() { 3 | jQuery('#gif-inject-cms').html(''); 4 | }, 5 | doTinyMCEEmbed: function() { 6 | 7 | 8 | console.log("doTinyMCEEmbed"); 9 | 10 | var embedId = jQuery('img#gif-detail-gif').attr('data-id'); 11 | var width = jQuery('img#gif-detail-gif').width(); 12 | var height = jQuery('img#gif-detail-gif').height(); 13 | 14 | var gifToEmbed = jQuery('img#gif-detail-gif').attr('src'); 15 | 16 | var uri = ''; 17 | 18 | //parent.tinyMCE.activeEditor.execCommand("mceInsertRawHTML", false, uri); 19 | parent.tinyMCE.activeEditor.execCommand("mceInsertContent", false, uri); 20 | parent.tinyMCE.activeEditor.selection.select(parent.tinyMCE.activeEditor.getBody(), true); // ed is the editor instance 21 | parent.tinyMCE.activeEditor.selection.collapse(false); 22 | parent.tinyMCE.activeEditor.windowManager.close(window); 23 | } 24 | }; -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/html/js/init.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready(function() { 2 | jQuery('#gifs').masonry({ 3 | itemSelector: '#gifs li', 4 | columnWidth: 145, 5 | gutter: 10, 6 | transitionDuration: '0.2s', 7 | isFitWidth: true 8 | }); 9 | 10 | // init giphy 11 | GiphySearch.init(); 12 | 13 | // init the CMS extension app 14 | GiphyCMSExt.init(); 15 | 16 | // start the default search 17 | GiphySearch.search("giphytrending", 100, true); 18 | }); 19 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/img/clear.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/img/clear.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/img/giphyicon20px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/img/giphyicon20px.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/img/giphyiconoff20px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/giphy/img/giphyiconoff20px.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/giphy/plugin.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add('giphy', function(editor, url) { 2 | // Add a button that opens a window 3 | editor.addButton('giphy', { 4 | title: 'Giphy GIF Search', 5 | icon: true, 6 | image: tinyMCE.baseURL + '/plugins/giphy/html/img/giphy_icon_16.png', 7 | onclick : function(ev) { 8 | var modalw = 480; 9 | var modalh = 548; 10 | 11 | editor.windowManager.open({ 12 | title : "Giphy Search", 13 | file: url + '/html/giphy.html', 14 | width : modalw, 15 | height : modalh, 16 | inline : true, 17 | resizable: true, 18 | scrollbars: true 19 | }, { 20 | plugin_url : url, // Plugin absolute URL 21 | api_key : 'dc6zaTOxFJmzC', // the API key 22 | api_host : 'http://api.giphy.com' // the API host 23 | }); 24 | } 25 | }); 26 | }); -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("hr",function(e){e.addCommand("InsertHorizontalRule",function(){e.execCommand("mceInsertContent",!1,"
")}),e.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),e.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}); -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/lists/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "lists" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/lists') 5 | // ES2015: 6 | // import 'tinymce/plugins/lists' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/media/moxieplayer.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/media/moxieplayer.swf -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("nonbreaking",function(e){var t=e.getParam("nonbreaking_force_tab");if(e.addCommand("mceNonBreaking",function(){e.insertContent(e.plugins.visualchars&&e.plugins.visualchars.state?' ':" "),e.dom.setAttrib(e.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),e.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),e.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),t){var n=+t>1?+t:3;e.on("keydown",function(t){if(9==t.keyCode){if(t.shiftKey)return;t.preventDefault();for(var r=0;r0?a.charAt(r-1):"";if('"'===i)return t;if(">"===i){var o=a.lastIndexOf("<",r);if(o!==-1){var l=a.substring(o,r);if(l.indexOf('contenteditable="false"')!==-1)return t}}return''+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+""}var r=o.length,a=t.content,s=tinymce.trim(i);if("raw"!=t.format){for(;r--;)a=a.replace(o[r],n);t.content=a}}var r,i,o,a="contenteditable";r=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",i=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";var s=t(r),l=t(i);o=e.getParam("noneditable_regexp"),o&&!o.length&&(o=[o]),e.on("PreInit",function(){o&&e.on("BeforeSetContent",n),e.parser.addAttributeFilter("class",function(e){for(var t,n=e.length;n--;)t=e[n],s(t)?t.attr(a,"true"):l(t)&&t.attr(a,"false")}),e.serializer.addAttributeFilter(a,function(e){for(var t,n=e.length;n--;)t=e[n],(s(t)||l(t))&&(o&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):t.attr(a,null))})})}); 2 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/pagebreak/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("pagebreak",function(e){var t="mce-pagebreak",n=e.getParam("pagebreak_separator",""),r=new RegExp(n.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),i='';e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("

"+i+"

"):e.insertContent(i)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(n){"IMG"==n.target.nodeName&&e.dom.hasClass(n.target,t)&&(n.name="pagebreak")}),e.on("click",function(n){n=n.target,"IMG"===n.nodeName&&e.dom.hasClass(n,t)&&e.selection.select(n)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(r,i)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(t){for(var r,i,o=t.length;o--;)if(r=t[o],i=r.attr("class"),i&&i.indexOf("mce-pagebreak")!==-1){var a=r.parent;if(e.schema.getBlockElements()[a.name]&&e.settings.pagebreak_split_block){a.type=3,a.value=n,a.raw=!0,r.remove();continue}r.type=3,r.value=n,r.raw=!0}})})}); 2 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/preview/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("preview",function(e){var t=e.settings,n=!tinymce.Env.ie;e.addCommand("mcePreview",function(){e.windowManager.open({title:"Preview",width:parseInt(e.getParam("plugin_preview_width","650"),10),height:parseInt(e.getParam("plugin_preview_height","500"),10),html:'",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var r,i="";i+='',tinymce.each(e.contentCSS,function(t){i+=''});var o=t.body_id||"tinymce";o.indexOf("=")!=-1&&(o=e.getParam("body_id","","hash"),o=o[e.id]||o);var a=t.body_class||"";a.indexOf("=")!=-1&&(a=e.getParam("body_class","","hash"),a=a[e.id]||"");var s=' ',l=e.settings.directionality?' dir="'+e.settings.directionality+'"':"";if(r=""+i+'"+e.getContent()+s+"",n)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(r);else{var c=this.getEl("body").firstChild.contentWindow.document;c.open(),c.write(r),c.close()}}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}); 2 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/print/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("print",function(e){e.addCommand("mcePrint",function(){e.getWin().print()}),e.addButton("print",{title:"Print",cmd:"mcePrint"}),e.addShortcut("Meta+P","","mcePrint"),e.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Meta+P",context:"file"})}); -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/save/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("save",function(e){function t(){var t;if(t=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty",!0)||e.isDirty())return tinymce.triggerSave(),e.getParam("save_onsavecallback")?(e.execCallback("save_onsavecallback",e),void e.nodeChanged()):void(t?(e.setDirty(!1),t.onsubmit&&!t.onsubmit()||("function"==typeof t.submit?t.submit():n(e.translate("Error: Form submit field collision."))),e.nodeChanged()):n(e.translate("Error: No form element found.")))}function n(t){e.notificationManager.open({text:t,type:"error"})}function r(){var t=tinymce.trim(e.startContent);return e.getParam("save_oncancelcallback")?void e.execCallback("save_oncancelcallback",e):(e.setContent(t),e.undoManager.clear(),void e.nodeChanged())}function i(){var t=this;e.on("nodeChange dirty",function(){t.disabled(e.getParam("save_enablewhendirty",!0)&&!e.isDirty())})}e.addCommand("mceSave",t),e.addCommand("mceCancel",r),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:i}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:i}),e.addShortcut("Meta+S","","mceSave")}); 2 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/tabfocus/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("tabfocus",function(e){function t(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function n(t){function n(n){function o(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&o(e.parentNode)}function l(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&tinymce.get(t.id)&&e.tabIndex!=-1&&o(e)}if(s=r.select(":input:enabled,*[tabindex]:not(iframe)"),i(s,function(t,n){if(t.id==e.id)return a=n,!1}),n>0){for(c=a+1;c=0;c--)if(l(s[c]))return s[c];return null}var a,s,l,c;if(!(9!==t.keyCode||t.ctrlKey||t.altKey||t.metaKey||t.isDefaultPrevented())&&(l=o(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==l.length&&(l[1]=l[0],l[0]=":prev"),s=t.shiftKey?":prev"==l[0]?n(-1):r.get(l[0]):":next"==l[1]?n(1):r.get(l[1]))){var u=tinymce.get(s.id||s.name);s.id&&u?u.focus():tinymce.util.Delay.setTimeout(function(){tinymce.Env.webkit||window.focus(),s.focus()},10),t.preventDefault()}}var r=tinymce.DOM,i=tinymce.each,o=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null),e.on("keyup",t),tinymce.Env.gecko?e.on("keypress keydown",n):e.on("keydown",n)})}); 2 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/visualblocks/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("visualblocks",function(e,t){function n(){var t=this;t.active(o),e.on("VisualBlocks",function(){t.active(e.dom.hasClass(e.getBody(),"mce-visualblocks"))})}var r,i,o;window.NodeList&&(e.addCommand("mceVisualBlocks",function(){var n,a=e.dom;r||(r=a.uniqueId(),n=a.create("link",{id:r,rel:"stylesheet",href:t+"/css/visualblocks.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(n)),e.on("PreviewFormats AfterPreviewFormats",function(t){o&&a.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"==t.type)}),a.toggleClass(e.getBody(),"mce-visualblocks"),o=e.dom.hasClass(e.getBody(),"mce-visualblocks"),i&&i.active(a.hasClass(e.getBody(),"mce-visualblocks")),e.fire("VisualBlocks")}),e.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("init",function(){e.settings.visualblocks_default_state&&e.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")}))}); -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/visualchars/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("visualchars",function(e){function t(t){function n(e){return''+e+""}function o(){var e,t="";for(e in p)t+=e;return new RegExp("["+t+"]","g")}function a(){var e,t="";for(e in p)t&&(t+=","),t+="span.mce-"+p[e];return t}var s,l,c,u,d,f,p,m,h=e.getBody(),g=e.selection;if(p={"\xa0":"nbsp","\xad":"shy"},r=!r,i.state=r,e.fire("VisualChars",{state:r}),m=o(),t&&(f=g.getBookmark()),r)for(l=[],tinymce.walk(h,function(e){3==e.nodeType&&e.nodeValue&&m.test(e.nodeValue)&&l.push(e)},"childNodes"),c=0;c=0;c--)e.dom.remove(l[c],1);g.moveToBookmark(f)}function n(){var t=this;e.on("VisualChars",function(e){t.active(e.state)})}var r,i=this;e.addCommand("mceVisualChars",t),e.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n,selectable:!0,context:"view",prependToContext:!0})}); 2 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/youtube/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/youtube/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/youtube/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/youtube/icon.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/js/jquery.yt_data_v3.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ===================================================== 3 | * jQuery YT Data V3 4 | * ===================================================== 5 | * Version: 0.1 (13th August 2014) 6 | * Author: Rik de Vos (www.rikdevos.com) 7 | * 8 | */ 9 | 10 | var YTDataV3 = { /* singleton */ 11 | 12 | key: 'AIzaSyBykc_bErt-mcLNSZ4ejKViOu4Prlllvbw', 13 | order: 'relevance', 14 | next_page_token: '', 15 | 16 | init: function(param) { 17 | this.key = param.key; 18 | this.order = param.order; 19 | }, 20 | 21 | search: function(param, response) { 22 | 23 | //for more parameters see https://developers.google.com/youtube/v3/docs/search/list 24 | 25 | var q = encodeURIComponent(param.q); 26 | 27 | var url = 'https://www.googleapis.com/youtube/v3/search?q='+q+'&key='+this.key+'&maxResults='+param['max-results']+'&order='+this.order+'&type=video&safeSearch=none&videoEmbeddable=true&part=snippet'; 28 | 29 | if(param.next_page == true) { 30 | url += '&pageToken='+this.next_page_token; 31 | } 32 | 33 | $.getJSON(url, function(yt) { 34 | var vids = []; 35 | for(var i = 0; i < yt.items.length; i++) { 36 | //vids[i] = yt.items[i] 37 | } 38 | YTDataV3.next_page_token = yt.nextPageToken; 39 | //cs(vids); 40 | var data = { 41 | itemsPerPage: yt.pageInfo.resultsPerPage, 42 | searchURL: url, 43 | startIndex: 1, 44 | totalResults: yt.pageInfo.totalResults, 45 | version: "1.0", 46 | videos: yt.items 47 | }; 48 | // cs(yt); 49 | response(data); 50 | }); 51 | 52 | } 53 | 54 | }; -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/js/youtube.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/youtube/js/youtube.js -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/langs/de.js: -------------------------------------------------------------------------------- 1 | tinymce.addI18n('de',{ 2 | 'Choose YouTube Video' : 'YouTube Video suchen', 3 | 'Insert Youtube video' : 'Einf\u00fcgen youtube video', 4 | 'width' : 'Breite', 5 | 'height' : 'H\u00f6he', 6 | 'skin' : 'Skin', 7 | 'dark' : 'dunkel', 8 | 'light' : 'licht', 9 | 'Search' : 'Suche', 10 | 'Youtube URL' : 'Youtube URL', 11 | 'Title' : 'Titel', 12 | 'Insert and Close' : 'Einf\u00fcgen und Schlie\u00dfen', 13 | 'Insert' : 'Einf\u00fcgen', 14 | 'Load More' : 'Mehr laden', 15 | 'cancel' : 'stornieren' 16 | }); 17 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/langs/en.js: -------------------------------------------------------------------------------- 1 | tinymce.addI18n('en',{ 2 | 'Choose YouTube Video' : 'Search YouTube Video', 3 | 'Insert Youtube video' : 'Insert Youtube video', 4 | 'width' : 'Width', 5 | 'height' : 'Height', 6 | 'skin' : 'Skin', 7 | 'dark' : 'dark', 8 | 'light' : 'light', 9 | 'Search' : 'Search', 10 | 'Youtube URL' : 'Youtube URL', 11 | 'Title' : 'Title', 12 | 'Insert and Close' : 'Insert and Close', 13 | 'Insert' : 'Insert', 14 | 'Load More' : 'Load More', 15 | 'cancel' : 'cancel' 16 | }); 17 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/langs/nl.js: -------------------------------------------------------------------------------- 1 | tinymce.addI18n('nl',{ 2 | 'Choose YouTube Video' : 'Zoek YouTube Video', 3 | 'Insert Youtube video' : 'Voeg youtube video toe', 4 | 'width' : 'Breedte', 5 | 'height' : 'Hoogte', 6 | 'skin' : 'Skin', 7 | 'dark' : 'dark', 8 | 'light' : 'light', 9 | 'Search' : 'Zoeken', 10 | 'Youtube URL' : 'Youtube link', 11 | 'Title' : 'Titel', 12 | 'Insert and Close' : 'Voeg toe en Sluit', 13 | 'Insert' : 'Voeg toe', 14 | 'Load More' : 'Meer laden', 15 | 'cancel' : 'cancel' 16 | }); 17 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Youtube search - a TinyMCE youtube search and place plugin 3 | * youtube/plugin.js 4 | * 5 | * This is not free software 6 | * 7 | * Plugin info: http://www.cfconsultancy.nl/ 8 | * Author: Ceasar Feijen 9 | * 10 | * Version: 2.0 released 14/08/2014 11 | */ 12 | tinymce.PluginManager.requireLangPack('youtube', 'en,nl,de'); 13 | tinymce.PluginManager.add('youtube', function(editor) { 14 | 15 | function openmanager() { 16 | win = editor.windowManager.open({ 17 | title: 'Choose YouTube Video', 18 | file: tinyMCE.baseURL + '/plugins/youtube/youtube.html', 19 | filetype: 'video', 20 | width: 785, 21 | height: 560, 22 | inline: 1, 23 | buttons: [{ 24 | text: 'cancel', 25 | onclick: function() { 26 | this.parent() 27 | .parent() 28 | .close(); 29 | } 30 | }] 31 | }); 32 | 33 | } 34 | editor.addButton('youtube', { 35 | icon: true, 36 | image: tinyMCE.baseURL + '/plugins/youtube/icon.png', 37 | tooltip: 'Insert Youtube video', 38 | shortcut: 'Ctrl+Q', 39 | onclick: openmanager 40 | }); 41 | 42 | editor.addShortcut('Ctrl+Q', '', openmanager); 43 | 44 | editor.addMenuItem('youtube', { 45 | icon:'media', 46 | text: 'Insert Youtube video', 47 | shortcut: 'Ctrl+Q', 48 | onclick: openmanager, 49 | context: 'insert' 50 | }); 51 | }); 52 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/youtube/preview.jpg -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/slider/css/slide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/plugins/youtube/slider/css/slide.png -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/plugins/youtube/youtube.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Insert Youtube Video 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |
19 |
20 | 21 | 22 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce-small.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce-small.eot -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce-small.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce-small.ttf -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce-small.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce-small.woff -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce.eot -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce.ttf -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/lightgray/fonts/tinymce.woff -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/lightgray/img/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/lightgray/img/anchor.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/lightgray/img/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/lightgray/img/loader.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/lightgray/img/object.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/lightgray/img/object.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/lightgray/img/trans.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/lightgray/img/trans.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/readme.md: -------------------------------------------------------------------------------- 1 | Icons are generated and provided by the http://icomoon.io service. 2 | -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce-small.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce-small.eot -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce-small.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce-small.ttf -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce-small.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce-small.woff -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce.eot -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce.ttf -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/voyager/fonts/tinymce.woff -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/img/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/voyager/img/anchor.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/img/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/voyager/img/loader.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/img/object.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/voyager/img/object.gif -------------------------------------------------------------------------------- /public/vendor/tcg/voyager/assets/js/skins/voyager/img/trans.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/public/vendor/tcg/voyager/assets/js/skins/voyager/img/trans.gif -------------------------------------------------------------------------------- /resources/views/themes/tailwind/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | package-lock.json 3 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/announcements/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('theme::layouts.app') 2 | 3 | @section('content') 4 | 5 |
6 | 7 | 8 | All Announcements 9 | 10 |
11 | 12 |
13 | 14 |

Announcements

15 | 16 |
17 | 18 | @foreach($announcements as $announcement) 19 | 20 | {{ $announcement->title }} 21 | {{ $announcement->description }} 22 | 23 | @endforeach 24 | 25 |
26 | 27 |
28 | 29 | @endsection 30 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/auth/verify-email.blade.php: -------------------------------------------------------------------------------- 1 | @extends('theme::layouts.app') 2 | @section('content') 3 |
4 |
5 |
6 |
7 |

Seems like this area is restricted

8 |

9 | {{ __('This area is restricted to verified accounts only, verify your email address by clicking on the link emailed to you. If you didn\'t receive the email, we will gladly send you another.') }} 10 |

11 |
12 |
13 |
14 |
15 | @csrf 16 | 17 |
18 | 21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | @endsection 29 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/cancelled.blade.php: -------------------------------------------------------------------------------- 1 | @extends('theme::layouts.app') 2 | 3 | @section('content') 4 | 5 |
6 |

You no longer have an active subscription

7 |

Please Subscribe to a Plan to continue using {{ setting('site.title') }}. Thanks!

8 | View Plans 9 |
10 | 11 | @endsection 12 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/emails/verify-email.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Welcome Email 5 | 6 | 7 | 8 |

Welcome to the site {{$user['name']}}

9 |
10 | Your registered email-id is {{$user['email']}} , Please click on the below link to verify your email account 11 |
12 | Verify Email 13 | 14 | 15 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/notifications/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('theme::layouts.app') 2 | 3 | 4 | @section('content') 5 | 6 | 12 | 13 |
14 | 15 | 16 | 17 |

18 | 19 | All Notifications 20 |

21 |
22 | @include('theme::partials.notifications', ['show_all_notifications' => true]) 23 |
24 | 25 |
26 | 27 | @endsection -------------------------------------------------------------------------------- /resources/views/themes/tailwind/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "mix", 5 | "watch": "mix watch", 6 | "watch-poll": "mix watch -- --watch-options-poll=1000", 7 | "hot": "mix watch --hot", 8 | "production": "mix --production" 9 | }, 10 | "devDependencies": { 11 | "@tailwindcss/forms": "^0.4.0", 12 | "@tailwindcss/typography": "^0.5.0", 13 | "autoprefixer": "^10.4.0", 14 | "axios": "^0.24.0", 15 | "laravel-mix": "^6.0.39", 16 | "laravel-mix-purgecss": "^6.0.0", 17 | "laravel-mix-tailwind": "^0.1.2", 18 | "lodash": "^4.17.21", 19 | "postcss": "^8.4.4", 20 | "resolve-url-loader": "^4.0.0", 21 | "sass": "^1.43.4", 22 | "sass-loader": "^12.3.0", 23 | "tailwindcss": "^3.0.0" 24 | }, 25 | "dependencies": { 26 | "alpinejs": "^3.5.1", 27 | "glob-all": "^3.2.1" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/page.blade.php: -------------------------------------------------------------------------------- 1 | @extends('theme::layouts.app') 2 | 3 | @section('content') 4 | 5 | 6 |
7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |

{{ $page->title }}

15 | 16 | @if(!is_null($page->image)) 17 | {{ $page->title }} 18 | @endif 19 | 20 | {!! $page->body !!} 21 | 22 |
23 |
24 | 25 | @endsection 26 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/partials/cancel.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
Cancel Subscription Plan
4 |

Danger Zone! This will cancel your subscription

5 |
6 |
Cancel
7 |
-------------------------------------------------------------------------------- /resources/views/themes/tailwind/partials/reactivate.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
Reactivate My Subscription
4 |

You are currently on a grace period for your subscription plan

5 |
6 | Re-activate 7 |
-------------------------------------------------------------------------------- /resources/views/themes/tailwind/pricing.blade.php: -------------------------------------------------------------------------------- 1 | @extends('theme::layouts.app') 2 | 3 | @section('content') 4 | 5 |
6 |
7 | 8 |

Pricing Plans

9 |

Everything you need to help you succeed. Simple transparent pricing to fit businesses of any size.

10 | 11 |
12 | 13 | @include('theme::partials.plans') 14 |
15 | 16 | 17 | @endsection 18 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/profile.blade.php: -------------------------------------------------------------------------------- 1 | @extends('theme::layouts.app') 2 | 3 | 4 | @section('content') 5 | 6 |
7 | 8 |
9 | 10 |

{{ $user->name }}

11 |

{{ '@' . $user->username }}

12 |
{{ $user->role->display_name }}
13 |

{{ $user->profile('about') }}

14 |
15 | 16 |
17 |

Your application info about {{ $user->name }} here

18 |

You can edit this template inside of resources/views/{{ theme_folder('/profile.blade.php') }}

19 |
20 | 21 |
22 | 23 | @endsection 24 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/settings/partials/plans.blade.php: -------------------------------------------------------------------------------- 1 | @php $plans = Wave\Plan::all() @endphp 2 | 3 |
4 | 5 | @if( auth()->user()->onTrial() ) 6 |

You are currently on a trial subscription. Select a plan below to upgrade.

7 | @elseif(auth()->user()->subscribed('main')) 8 |
Switch Plans
9 | @else 10 |
Select a Plan
11 | @endif 12 | 13 |
14 | @include('theme::partials.plans-minimal') 15 | 16 | {{ csrf_field() }} 17 |
18 | 19 | 20 | @include('theme::partials.switch-plans-modal') 21 | 22 | 23 |
24 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/tailwind.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Tailwind Theme", 3 | "version": "1.1" 4 | } -------------------------------------------------------------------------------- /resources/views/themes/tailwind/trial_over.blade.php: -------------------------------------------------------------------------------- 1 | @extends('theme::layouts.app') 2 | 3 | @section('content') 4 | 5 |
6 |

Your trial has ended

7 |

Please Subscribe to a Plan to continue using {{ setting('site.title') }}. Thanks!

8 | View Plans 9 |
10 | 11 | @endsection 12 | -------------------------------------------------------------------------------- /resources/views/themes/tailwind/webpack.mix.js: -------------------------------------------------------------------------------- 1 | const mix = require('laravel-mix'); 2 | const glob = require('glob-all'); 3 | 4 | require('laravel-mix-tailwind'); 5 | require('laravel-mix-purgecss'); 6 | 7 | 8 | /* 9 | |-------------------------------------------------------------------------- 10 | | Mix Asset Management 11 | |-------------------------------------------------------------------------- 12 | | 13 | | Mix provides a clean, fluent API for defining some Webpack build steps 14 | | for your Laravel application. By default, we are compiling the Sass 15 | | file for the application as well as bundling up all the JS files. 16 | | 17 | */ 18 | 19 | mix.setPublicPath('../../../../public/themes/tailwind/') 20 | .sass('assets/sass/app.scss', 'css') 21 | .js('assets/js/app.js', 'js') 22 | .tailwind('./tailwind.config.js'); -------------------------------------------------------------------------------- /resources/views/vendor/larecipe/partials/sidebar.blade.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/button.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 18 | 19 |
4 | 5 | 6 | 15 | 16 |
7 | 8 | 9 | 12 | 13 |
10 | {{ $slot }} 11 |
14 |
17 |
20 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/footer.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/header.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ $slot }} 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/message.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::layout') 2 | {{-- Header --}} 3 | @slot('header') 4 | @component('mail::header', ['url' => config('app.url')]) 5 | {{ config('app.name') }} 6 | @endcomponent 7 | @endslot 8 | 9 | {{-- Body --}} 10 | {{ $slot }} 11 | 12 | {{-- Subcopy --}} 13 | @isset($subcopy) 14 | @slot('subcopy') 15 | @component('mail::subcopy') 16 | {{ $subcopy }} 17 | @endcomponent 18 | @endslot 19 | @endisset 20 | 21 | {{-- Footer --}} 22 | @slot('footer') 23 | @component('mail::footer') 24 | © {{ date('Y') }} {{ config('app.name') }}. All rights reserved. 25 | @endcomponent 26 | @endslot 27 | @endcomponent 28 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/panel.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 |
4 | 5 | 6 | 9 | 10 |
7 | {{ Illuminate\Mail\Markdown::parse($slot) }} 8 |
11 |
14 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/promotion.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 |
4 | {{ Illuminate\Mail\Markdown::parse($slot) }} 5 |
8 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/promotion/button.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 |
4 | 5 | 6 | 9 | 10 |
7 | {{ $slot }} 8 |
11 |
14 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/subcopy.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 |
4 | {{ Illuminate\Mail\Markdown::parse($slot) }} 5 |
8 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/table.blade.php: -------------------------------------------------------------------------------- 1 |
2 | {{ Illuminate\Mail\Markdown::parse($slot) }} 3 |
4 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/button.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }}: {{ $url }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/footer.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/header.blade.php: -------------------------------------------------------------------------------- 1 | [{{ $slot }}]({{ $url }}) 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/layout.blade.php: -------------------------------------------------------------------------------- 1 | {!! strip_tags($header) !!} 2 | 3 | {!! strip_tags($slot) !!} 4 | @isset($subcopy) 5 | 6 | {!! strip_tags($subcopy) !!} 7 | @endisset 8 | 9 | {!! strip_tags($footer) !!} 10 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/message.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::layout') 2 | {{-- Header --}} 3 | @slot('header') 4 | @component('mail::header', ['url' => config('app.url')]) 5 | {{ config('app.name') }} 6 | @endcomponent 7 | @endslot 8 | 9 | {{-- Body --}} 10 | {{ $slot }} 11 | 12 | {{-- Subcopy --}} 13 | @isset($subcopy) 14 | @slot('subcopy') 15 | @component('mail::subcopy') 16 | {{ $subcopy }} 17 | @endcomponent 18 | @endslot 19 | @endisset 20 | 21 | {{-- Footer --}} 22 | @slot('footer') 23 | @component('mail::footer') 24 | © {{ date('Y') }} {{ config('app.name') }}. All rights reserved. 25 | @endcomponent 26 | @endslot 27 | @endcomponent 28 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/panel.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/promotion.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/promotion/button.blade.php: -------------------------------------------------------------------------------- 1 | [{{ $slot }}]({{ $url }}) 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/subcopy.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/table.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/button.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }}: {{ $url }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/footer.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/header.blade.php: -------------------------------------------------------------------------------- 1 | [{{ $slot }}]({{ $url }}) 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/layout.blade.php: -------------------------------------------------------------------------------- 1 | {!! strip_tags($header) !!} 2 | 3 | {!! strip_tags($slot) !!} 4 | @isset($subcopy) 5 | 6 | {!! strip_tags($subcopy) !!} 7 | @endisset 8 | 9 | {!! strip_tags($footer) !!} 10 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/message.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::layout') 2 | {{-- Header --}} 3 | @slot('header') 4 | @component('mail::header', ['url' => config('app.url')]) 5 | {{ config('app.name') }} 6 | @endcomponent 7 | @endslot 8 | 9 | {{-- Body --}} 10 | {{ $slot }} 11 | 12 | {{-- Subcopy --}} 13 | @isset($subcopy) 14 | @slot('subcopy') 15 | @component('mail::subcopy') 16 | {{ $subcopy }} 17 | @endcomponent 18 | @endslot 19 | @endisset 20 | 21 | {{-- Footer --}} 22 | @slot('footer') 23 | @component('mail::footer') 24 | © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') 25 | @endcomponent 26 | @endslot 27 | @endcomponent 28 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/panel.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/subcopy.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/table.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/notifications/email.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::message') 2 | {{-- Greeting --}} 3 | @if (! empty($greeting)) 4 | # {{ $greeting }} 5 | @else 6 | @if ($level === 'error') 7 | # @lang('Whoops!') 8 | @else 9 | # @lang('Hello!') 10 | @endif 11 | @endif 12 | 13 | {{-- Intro Lines --}} 14 | @foreach ($introLines as $line) 15 | {{ $line }} 16 | 17 | @endforeach 18 | 19 | {{-- Action Button --}} 20 | @isset($actionText) 21 | 31 | @component('mail::button', ['url' => $actionUrl, 'color' => $color]) 32 | {{ $actionText }} 33 | @endcomponent 34 | @endisset 35 | 36 | {{-- Outro Lines --}} 37 | @foreach ($outroLines as $line) 38 | {{ $line }} 39 | 40 | @endforeach 41 | 42 | {{-- Salutation --}} 43 | @if (! empty($salutation)) 44 | {{ $salutation }} 45 | @else 46 | @lang('Regards'),
47 | {{ config('app.name') }} 48 | @endif 49 | 50 | {{-- Subcopy --}} 51 | @isset($actionText) 52 | @slot('subcopy') 53 | @lang( 54 | "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n". 55 | 'into your web browser:', 56 | [ 57 | 'actionText' => $actionText, 58 | ] 59 | ) [{{ $displayableActionUrl }}]({{ $actionUrl }}) 60 | @endslot 61 | @endisset 62 | @endcomponent 63 | -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | get('/user', function (Request $request) { 18 | return auth()->user(); 19 | }); 20 | 21 | Wave::api(); 22 | -------------------------------------------------------------------------------- /routes/channels.php: -------------------------------------------------------------------------------- 1 | id === (int) $id; 16 | }); 17 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 18 | })->describe('Display an inspiring quote'); 19 | -------------------------------------------------------------------------------- /routes/web.php: -------------------------------------------------------------------------------- 1 | 'admin'], function () { 24 | Voyager::routes(); 25 | }); 26 | 27 | // Wave routes 28 | Wave::routes(); 29 | -------------------------------------------------------------------------------- /storage/app/public/avatars/admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/avatars/admin.png -------------------------------------------------------------------------------- /storage/app/public/pages/page1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/pages/page1.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/4vI1gzsAvMZ30yfDIe67-cropped.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/4vI1gzsAvMZ30yfDIe67-cropped.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/4vI1gzsAvMZ30yfDIe67-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/4vI1gzsAvMZ30yfDIe67-medium.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/4vI1gzsAvMZ30yfDIe67-small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/4vI1gzsAvMZ30yfDIe67-small.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/4vI1gzsAvMZ30yfDIe67.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/4vI1gzsAvMZ30yfDIe67.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/K804BvnOehlLao0XmI08-cropped.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/K804BvnOehlLao0XmI08-cropped.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/K804BvnOehlLao0XmI08-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/K804BvnOehlLao0XmI08-medium.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/K804BvnOehlLao0XmI08-small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/K804BvnOehlLao0XmI08-small.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/K804BvnOehlLao0XmI08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/K804BvnOehlLao0XmI08.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/XV92hMp8LQ7pJkUSijzb-cropped.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/XV92hMp8LQ7pJkUSijzb-cropped.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/XV92hMp8LQ7pJkUSijzb-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/XV92hMp8LQ7pJkUSijzb-medium.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/XV92hMp8LQ7pJkUSijzb-small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/XV92hMp8LQ7pJkUSijzb-small.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/XV92hMp8LQ7pJkUSijzb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/XV92hMp8LQ7pJkUSijzb.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/blog-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/blog-1.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/blog-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/blog-2.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/h86hSqPMkT9oU8pjcrSu-cropped.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/h86hSqPMkT9oU8pjcrSu-cropped.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/h86hSqPMkT9oU8pjcrSu-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/h86hSqPMkT9oU8pjcrSu-medium.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/h86hSqPMkT9oU8pjcrSu-small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/h86hSqPMkT9oU8pjcrSu-small.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/h86hSqPMkT9oU8pjcrSu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/h86hSqPMkT9oU8pjcrSu.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/hWOT5yqNmzCnLhVWXB2u-cropped.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/hWOT5yqNmzCnLhVWXB2u-cropped.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/hWOT5yqNmzCnLhVWXB2u-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/hWOT5yqNmzCnLhVWXB2u-medium.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/hWOT5yqNmzCnLhVWXB2u-small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/hWOT5yqNmzCnLhVWXB2u-small.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/hWOT5yqNmzCnLhVWXB2u.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/hWOT5yqNmzCnLhVWXB2u.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/rU26aWVsZ2zocWGSTE7J-cropped.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/rU26aWVsZ2zocWGSTE7J-cropped.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/rU26aWVsZ2zocWGSTE7J-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/rU26aWVsZ2zocWGSTE7J-medium.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/rU26aWVsZ2zocWGSTE7J-small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/rU26aWVsZ2zocWGSTE7J-small.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/rU26aWVsZ2zocWGSTE7J.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/rU26aWVsZ2zocWGSTE7J.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/weZwLLpaXnxyTR989iDk-cropped.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/weZwLLpaXnxyTR989iDk-cropped.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/weZwLLpaXnxyTR989iDk-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/weZwLLpaXnxyTR989iDk-medium.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/weZwLLpaXnxyTR989iDk-small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/weZwLLpaXnxyTR989iDk-small.jpg -------------------------------------------------------------------------------- /storage/app/public/posts/March2018/weZwLLpaXnxyTR989iDk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/posts/March2018/weZwLLpaXnxyTR989iDk.jpg -------------------------------------------------------------------------------- /storage/app/public/settings/April2021/deploy-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/settings/April2021/deploy-banner.png -------------------------------------------------------------------------------- /storage/app/public/settings/April2021/deploy-to-do.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/settings/April2021/deploy-to-do.png -------------------------------------------------------------------------------- /storage/app/public/settings/April2021/digital-ocean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/settings/April2021/digital-ocean.png -------------------------------------------------------------------------------- /storage/app/public/settings/April2021/play-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/settings/April2021/play-icon.png -------------------------------------------------------------------------------- /storage/app/public/settings/April2021/popcorn-soda-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/settings/April2021/popcorn-soda-icon.png -------------------------------------------------------------------------------- /storage/app/public/settings/April2021/tails-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/settings/April2021/tails-bg.png -------------------------------------------------------------------------------- /storage/app/public/settings/April2021/tails-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/settings/April2021/tails-icon.png -------------------------------------------------------------------------------- /storage/app/public/settings/April2021/wave-do-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/settings/April2021/wave-do-icon.png -------------------------------------------------------------------------------- /storage/app/public/settings/March2020/u7EDIzZ1aBFm63xgATzW.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/settings/March2020/u7EDIzZ1aBFm63xgATzW.jpg -------------------------------------------------------------------------------- /storage/app/public/settings/November2017/XPZ0wJqikgSgwqgrJAqr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/settings/November2017/XPZ0wJqikgSgwqgrJAqr.png -------------------------------------------------------------------------------- /storage/app/public/themes/April2018/OfDFlivKQ2mw84PqvSZT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/themes/April2018/OfDFlivKQ2mw84PqvSZT.jpg -------------------------------------------------------------------------------- /storage/app/public/themes/April2018/YyOWx12ygRItmW1kx9c6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/themes/April2018/YyOWx12ygRItmW1kx9c6.jpg -------------------------------------------------------------------------------- /storage/app/public/themes/April2018/qrAnRGjfJEfc4wd7LR7x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/themes/April2018/qrAnRGjfJEfc4wd7LR7x.jpg -------------------------------------------------------------------------------- /storage/app/public/themes/April2018/uQPiLPWGTZp7JVjmB9oB.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/themes/April2018/uQPiLPWGTZp7JVjmB9oB.jpg -------------------------------------------------------------------------------- /storage/app/public/themes/August2018/TksmVWMqp5JXUQj8C6Ct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/themes/August2018/TksmVWMqp5JXUQj8C6Ct.png -------------------------------------------------------------------------------- /storage/app/public/themes/February2018/UUgOwPG08CnLLBOtgNWR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/themes/February2018/UUgOwPG08CnLLBOtgNWR.png -------------------------------------------------------------------------------- /storage/app/public/themes/February2018/mFajn4fwpGFXzI1UsNH6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/themes/February2018/mFajn4fwpGFXzI1UsNH6.png -------------------------------------------------------------------------------- /storage/app/public/themes/November2017/14GIb9rpmhsQbnWotzaE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/themes/November2017/14GIb9rpmhsQbnWotzaE.png -------------------------------------------------------------------------------- /storage/app/public/themes/November2017/L0qMMYB8zihcObZa275J.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/themes/November2017/L0qMMYB8zihcObZa275J.png -------------------------------------------------------------------------------- /storage/app/public/themes/November2017/mheiiOAnQmWreBu6x3BX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/themes/November2017/mheiiOAnQmWreBu6x3BX.png -------------------------------------------------------------------------------- /storage/app/public/users/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/app/public/users/default.png -------------------------------------------------------------------------------- /storage/database.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/database.sqlite -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | routes.php 3 | schedule-* 4 | compiled.php 5 | services.json 6 | events.scanned.php 7 | routes.scanned.php 8 | down 9 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/testing/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/test/scooby.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/test/scooby.jpg -------------------------------------------------------------------------------- /storage/wave-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/wave-logo.png -------------------------------------------------------------------------------- /storage/wave-svg.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkverse/surf/7e4123a86e471037682b5e2ba7f9ab8592b3c088/storage/wave-svg.sketch -------------------------------------------------------------------------------- /tests/CreatesApplication.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 19 | 20 | return $app; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tests/Datasets/Routes.php: -------------------------------------------------------------------------------- 1 | get($route)->assertOk(); 7 | })->with('routes'); 8 | 9 | it('can access available auth route', function ($route) { 10 | $this->actingAs(User::first()); 11 | 12 | $this->get($route)->assertOk(); 13 | })->with('authroutes'); 14 | -------------------------------------------------------------------------------- /tests/Pest.php: -------------------------------------------------------------------------------- 1 | in('Feature'); 18 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | artisan('migrate', ['--path' => 'database/migrations/']); 20 | $this->artisan('db:seed'); 21 | 22 | $this->app[Kernel::class]->setArtisan(null); 23 | } 24 | 25 | /** 26 | * Refresh a conventional test database. 27 | * 28 | * @return void 29 | */ 30 | protected function refreshTestDatabase() 31 | { 32 | if (! RefreshDatabaseState::$migrated) { 33 | $this->artisan('migrate:fresh', $this->migrateFreshUsing()); 34 | 35 | $this->app[Kernel::class]->setArtisan(null); 36 | 37 | $this->artisan('db:seed'); 38 | 39 | RefreshDatabaseState::$migrated = true; 40 | } 41 | 42 | $this->beginDatabaseTransaction(); 43 | } 44 | 45 | /** 46 | * The parameters that should be used when running "migrate:fresh". 47 | * 48 | * @return array 49 | */ 50 | protected function migrateFreshUsing() 51 | { 52 | 53 | return array_merge( 54 | [ 55 | '--drop-views' => $this->shouldDropViews(), 56 | '--drop-types' => $this->shouldDropTypes(), 57 | ], 58 | ); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /tests/Unit/ExampleTest.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tools/php-cs-fixer/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "friendsofphp/php-cs-fixer": "^3.8" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /wave/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "thedevdojo/wave", 3 | "description": "Wave is a SAAS and Web Application Starter Kit", 4 | "keywords": ["laravel", "admin", "panel", "saas"], 5 | "license": "MIT", 6 | "homepage": "https://wave.devdojo.com", 7 | "support": { 8 | "issues": "https://devdojo.com/forums", 9 | "source": "https://wave.devdojo.com" 10 | }, 11 | "authors": [ 12 | { 13 | "name": "Tony Lea", 14 | "email": "tony@devdojo.com" 15 | } 16 | ], 17 | "require": { 18 | "tcg/voyager": "1.*", 19 | }, 20 | "autoload": { 21 | "psr-4": { 22 | "Wave\\": "/" 23 | } 24 | }, 25 | "minimum-stability": "stable", 26 | "extra": { 27 | "laravel": { 28 | "providers": [ 29 | "Wave\\Http\\Providers\\WaveServiceProvider" 30 | ] 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /wave/database/migrations/2014_10_12_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('name'); 19 | $table->string('username')->unique(); 20 | $table->string('email')->unique(); 21 | $table->timestamp('email_verified_at')->nullable(); 22 | $table->string('password'); 23 | $table->rememberToken(); 24 | $table->timestamp('trial_ends_at')->nullable(); 25 | $table->timestamps(); 26 | }); 27 | } 28 | 29 | /** 30 | * Reverse the migrations. 31 | * 32 | * @return void 33 | */ 34 | public function down() 35 | { 36 | Schema::dropIfExists('users'); 37 | } 38 | }; 39 | -------------------------------------------------------------------------------- /wave/database/migrations/2014_10_12_100000_create_password_resets_table.php: -------------------------------------------------------------------------------- 1 | string('email')->index(); 18 | $table->string('token'); 19 | $table->timestamp('created_at')->nullable(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::dropIfExists('password_resets'); 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /wave/database/migrations/2015_09_19_000000_create_failed_jobs_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('uuid')->unique(); 19 | $table->text('connection'); 20 | $table->text('queue'); 21 | $table->longText('payload'); 22 | $table->longText('exception'); 23 | $table->timestamp('failed_at')->useCurrent(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('failed_jobs'); 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /wave/database/migrations/2016_01_01_000000_create_pages_table.php: -------------------------------------------------------------------------------- 1 | id(); 19 | $table->unsignedBigInteger('author_id'); 20 | $table->string('title'); 21 | $table->text('excerpt')->nullable(); 22 | $table->text('body')->nullable(); 23 | $table->string('image')->nullable(); 24 | $table->string('slug')->unique(); 25 | $table->text('meta_description')->nullable(); 26 | $table->text('meta_keywords')->nullable(); 27 | $table->enum('status', Page::$statuses)->default(Page::STATUS_INACTIVE); 28 | $table->timestamps(); 29 | }); 30 | } 31 | 32 | /** 33 | * Reverse the migrations. 34 | * 35 | * @return void 36 | */ 37 | public function down() 38 | { 39 | Schema::dropIfExists('pages'); 40 | } 41 | }; 42 | -------------------------------------------------------------------------------- /wave/database/migrations/2016_01_01_000000_create_posts_table.php: -------------------------------------------------------------------------------- 1 | getDatabasePlatform(); 18 | $platform->registerDoctrineTypeMapping('enum', 'string'); 19 | 20 | Schema::create('posts', function (Blueprint $table) { 21 | $table->id(); 22 | $table->unsignedBigInteger('author_id'); 23 | $table->unsignedBigInteger('category_id')->nullable(); 24 | $table->string('title'); 25 | $table->string('seo_title')->nullable(); 26 | $table->text('excerpt')->nullable(); 27 | $table->text('body'); 28 | $table->string('image')->nullable(); 29 | $table->string('slug')->unique(); 30 | $table->text('meta_description')->nullable(); 31 | $table->text('meta_keywords')->nullable(); 32 | $table->enum('status', ['PUBLISHED', 'DRAFT', 'PENDING'])->default('DRAFT'); 33 | $table->boolean('featured')->default(0); 34 | $table->timestamps(); 35 | }); 36 | } 37 | 38 | /** 39 | * Reverse the migrations. 40 | * 41 | * @return void 42 | */ 43 | public function down() 44 | { 45 | Schema::dropIfExists('posts'); 46 | } 47 | }; 48 | -------------------------------------------------------------------------------- /wave/database/migrations/2016_02_15_204651_create_categories_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->foreignId('parent_id')->nullable()->constrained('categories')->cascadeOnUpdate()->nullOnDelete(); 19 | $table->integer('order')->default(1); 20 | $table->string('name'); 21 | $table->string('slug')->unique(); 22 | $table->timestamps(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::dropIfExists('categories'); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /wave/database/migrations/2017_09_22_234251_create_announcements_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('title')->default(''); 19 | $table->string('description'); 20 | $table->text('body', 65535); 21 | $table->timestamps(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('announcements'); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /wave/database/migrations/2017_09_22_234251_create_api_keys_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->foreignId('user_id')->constrained()->cascadeOnDelete(); 19 | $table->string('name'); 20 | $table->string('key', 60)->default('')->unique('api_tokens_token_unique'); 21 | $table->timestamp('last_used_at')->nullable(); 22 | $table->timestamps(); 23 | $table->unique(['user_id', 'name']); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('api_keys'); 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /wave/database/migrations/2017_09_22_234251_create_notifications_table.php: -------------------------------------------------------------------------------- 1 | uuid('id')->primary(); 18 | $table->string('type'); 19 | $table->morphs('notifiable'); 20 | $table->text('data'); 21 | $table->timestamp('read_at')->nullable(); 22 | $table->timestamps(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::dropIfExists('notifications'); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /wave/database/migrations/2017_09_22_234251_create_permission_groups_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('name')->unique(); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | * 25 | * @return void 26 | */ 27 | public function down() 28 | { 29 | Schema::dropIfExists('permission_groups'); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /wave/database/migrations/2018_09_21_234251_create_themes_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('name'); 19 | $table->string('folder')->unique(); 20 | $table->boolean('active')->default(0); 21 | $table->string('version')->default(''); 22 | $table->timestamps(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::dropIfExists('themes'); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /wave/database/migrations/2018_09_22_234251_add_permissions_group_id_to_permissions_table.php: -------------------------------------------------------------------------------- 1 | foreignId('permission_group_id')->nullable()->constrained(); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | * 24 | * @return void 25 | */ 26 | public function down() 27 | { 28 | Schema::table('permissions', function (Blueprint $table) { 29 | $table->dropColumn('permission_group_id'); 30 | }); 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /wave/database/migrations/2018_09_22_234251_create_announcement_user_table.php: -------------------------------------------------------------------------------- 1 | foreignId('announcement_id')->constrained()->cascadeOnDelete(); 18 | $table->foreignId('user_id')->constrained()->cascadeOnDelete(); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | * 25 | * @return void 26 | */ 27 | public function down() 28 | { 29 | Schema::dropIfExists('announcement_user'); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /wave/database/migrations/2018_09_22_234251_create_plans_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('name'); 19 | $table->string('slug')->unique(); 20 | $table->text('description', 65535)->nullable(); 21 | $table->string('features'); 22 | $table->unsignedBigInteger('plan_id'); 23 | $table->foreignId('role_id')->constrained(); 24 | $table->boolean('default')->default(0); 25 | $table->string('price'); 26 | $table->integer('trial_days')->default(0); 27 | $table->timestamps(); 28 | }); 29 | } 30 | 31 | /** 32 | * Reverse the migrations. 33 | * 34 | * @return void 35 | */ 36 | public function down() 37 | { 38 | Schema::dropIfExists('plans'); 39 | } 40 | }; 41 | -------------------------------------------------------------------------------- /wave/database/migrations/2018_09_22_234251_create_subscriptions_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->unsignedBigInteger('subscription_id')->unique(); 19 | $table->foreignId('plan_id')->nullable(); 20 | $table->foreignId('user_id')->nullable()->constrained(); 21 | $table->string('status')->nullable(); 22 | $table->string('update_url')->nullable(); 23 | $table->string('cancel_url')->nullable(); 24 | $table->timestamp('last_payment_at')->nullable(); 25 | $table->timestamp('next_payment_at')->nullable(); 26 | $table->timestamp('cancelled_at')->nullable(); 27 | $table->timestamps(); 28 | }); 29 | } 30 | 31 | /** 32 | * Reverse the migrations. 33 | * 34 | * @return void 35 | */ 36 | public function down() 37 | { 38 | Schema::dropIfExists('subscriptions'); 39 | } 40 | }; 41 | -------------------------------------------------------------------------------- /wave/database/migrations/2018_09_22_234251_create_theme_options_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->foreignId('theme_id')->constrained(); 19 | $table->string('key'); 20 | $table->text('value', 65535)->nullable(); 21 | $table->timestamps(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('theme_options'); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /wave/database/migrations/2018_09_22_234251_create_wave_key_values_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('type'); 19 | $table->string('key'); 20 | $table->string('value'); 21 | $table->numericMorphs('key_value'); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('key_values'); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /wave/resources/views/do.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | @if(isset($seo->title)) 6 | {{ $seo->title }} 7 | @else 8 | {{ setting('site.title', 'Laravel Wave') . ' - ' . setting('site.description', 'The Software as a Service Starter Kit built on Laravel & Voyager') }} 9 | @endif 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | @if(isset($seo->description)) 23 | 24 | @endif 25 | 26 | 27 | 28 | @livewireStyles 29 | 30 | 31 | 32 | @livewire('wave.deploy-to-do') 33 | 34 | @livewireScripts 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /wave/routes/api.php: -------------------------------------------------------------------------------- 1 | group(function (Router $router) { 11 | $router->post('/login', 'login'); 12 | $router->post('/register', 'register'); 13 | $router->post('/logout', 'logout'); 14 | $router->post('/refresh', 'refresh'); 15 | $router->post('/token', 'token'); 16 | }); 17 | 18 | // BREAD 19 | Route::controller(ApiController::class) 20 | ->group(function (Router $router) { 21 | $router->get('/{datatype}', 'browse'); 22 | $router->get('/{datatype}/{id}', 'read'); 23 | $router->post('/{datatype}/{id}', 'edit'); 24 | $router->post('/{datatype}', 'add'); 25 | $router->delete('/{datatype}/{id}', 'delete'); 26 | }); 27 | -------------------------------------------------------------------------------- /wave/src/Announcement.php: -------------------------------------------------------------------------------- 1 | belongsToMany('Wave\User'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /wave/src/Category.php: -------------------------------------------------------------------------------- 1 | hasMany('Wave\Post'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /wave/src/Http/Controllers/AnnouncementController.php: -------------------------------------------------------------------------------- 1 | user(); 25 | $announcements = Announcement::all(); 26 | foreach ($announcements as $announcement) { 27 | if (!$user->announcements()->where('id', $announcement->id)->exists()) { 28 | $user->announcements()->attach($announcement->id); 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /wave/src/Http/Controllers/Auth/EmailVerificationController.php: -------------------------------------------------------------------------------- 1 | user()->sendEmailVerificationNotification(); 19 | 20 | return back() 21 | ->with(['message' => 'Verification link sent!', 'message_type' => 'success']); 22 | } 23 | 24 | public function verify(EmailVerificationRequest $request) 25 | { 26 | $request->fulfill(); 27 | 28 | return redirect() 29 | ->intended(route('wave.dashboard')) 30 | ->with(['message' => 'Successfully verified your email.', 'message_type' => 'success']); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /wave/src/Http/Controllers/Auth/ForgotPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 31 | } 32 | 33 | /** 34 | * Display the form to request a password reset link. 35 | * 36 | * @return \Illuminate\Http\Response 37 | */ 38 | public function showLinkRequestForm() 39 | { 40 | return view('theme::auth.passwords.email'); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /wave/src/Http/Controllers/BlogController.php: -------------------------------------------------------------------------------- 1 | paginate(6); 14 | $categories = Category::all(); 15 | 16 | $seo = [ 17 | 'seo_title' => 'Blog', 18 | 'seo_description' => 'Our Blog', 19 | ]; 20 | 21 | return view('theme::blog.index', compact('posts', 'categories', 'seo')); 22 | } 23 | 24 | public function category($slug) 25 | { 26 | $category = Category::where('slug', '=', $slug)->firstOrFail(); 27 | $posts = $category->posts()->orderBy('created_at', 'DESC')->paginate(6); 28 | $categories = Category::all(); 29 | 30 | $seo = [ 31 | 'seo_title' => $category->name . '- Blog', 32 | 'seo_description' => $category->name . '- Blog', 33 | ]; 34 | 35 | return view('theme::blog.index', compact('posts', 'category', 'categories', 'seo')); 36 | } 37 | 38 | public function post($category, $slug) 39 | { 40 | $post = Post::where('slug', '=', $slug)->firstOrFail(); 41 | 42 | $seo = [ 43 | 'seo_title' => $post->title, 44 | 'seo_description' => $post->seo_description, 45 | ]; 46 | 47 | return view('theme::blog.post', compact('post', 'seo')); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /wave/src/Http/Controllers/DashboardController.php: -------------------------------------------------------------------------------- 1 | middleware('auth'); 17 | } 18 | 19 | /** 20 | * Show the application dashboard. 21 | * 22 | * @return \Illuminate\Http\Response 23 | */ 24 | public function index() 25 | { 26 | return view('theme::dashboard.index'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /wave/src/Http/Controllers/HomeController.php: -------------------------------------------------------------------------------- 1 | setting('site.title', 'Laravel Wave'), 25 | 'description' => setting('site.description', 'Software as a Service Starter Kit'), 26 | 'image' => url('/og_image.png'), 27 | 'type' => 'website' 28 | ]; 29 | 30 | return view('theme::home', compact('seo')); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /wave/src/Http/Controllers/NotificationController.php: -------------------------------------------------------------------------------- 1 | user()->notifications()->where('id', $id)->first(); 18 | if ($notification) { 19 | $notification->delete(); 20 | return response()->json(['type' => 'success', 'message' => 'Marked Notification as Read', 'listid' => $request->listid]); 21 | } else { 22 | return response()->json(['type' => 'error', 'message' => 'Could not find the specified notification.']); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /wave/src/Http/Controllers/PageController.php: -------------------------------------------------------------------------------- 1 | firstOrFail(); 13 | 14 | $seo = [ 15 | 'seo_title' => $page->title, 16 | 'seo_description' => $page->meta_description, 17 | ]; 18 | 19 | return view('theme::page', compact('page', 'seo')); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /wave/src/Http/Controllers/ProfileController.php: -------------------------------------------------------------------------------- 1 | firstOrFail(); 12 | return view('theme::profile', compact('user')); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /wave/src/Http/Controllers/WebhookController.php: -------------------------------------------------------------------------------- 1 | setMethod('POST'); 17 | $request->request->add(['checkout_id' => $payload['checkout_id']]); 18 | 19 | $subscription = new SubscriptionController(); 20 | $checkoutResponse = $subscription->checkout($request); 21 | $this->dispatchBrowserEvent('checkoutCompleteResponse', $checkoutResponse->getData(true)); 22 | } 23 | 24 | public function render() 25 | { 26 | return view('theme::livewire.settings.plans'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /wave/src/Http/Livewire/Settings/Security.php: -------------------------------------------------------------------------------- 1 | 'required|password', 17 | 'password' => 'required|confirmed|min:'.config('wave.auth.min_password_length') 18 | ]; 19 | } 20 | 21 | public function save() 22 | { 23 | $this->validate(); 24 | 25 | auth()->user()->forceFill([ 26 | 'password' => bcrypt($this->password) 27 | ])->save(); 28 | 29 | // Display success toast notification 30 | $this->dispatchBrowserEvent('popToast', ['type' => 'success', 'message' => 'Successfully updated your password']); 31 | 32 | // Clear the input fields 33 | $this->current_password = $this->password = $this->password_confirmation = ""; 34 | } 35 | 36 | public function render() 37 | { 38 | return view('theme::livewire.settings.security'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /wave/src/Http/Livewire/Settings/Subscription.php: -------------------------------------------------------------------------------- 1 | setMethod('POST'); 17 | $request->request->add(['id' => $payload['id']]); 18 | 19 | $subscription = new SubscriptionController(); 20 | $cancelResponse = $subscription->cancel($request); 21 | $this->dispatchBrowserEvent('checkoutCancelResponse', $cancelResponse->getData(true)); 22 | } 23 | 24 | public function render() 25 | { 26 | return view('theme::livewire.settings.subscription'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /wave/src/Http/Middleware/Cancelled.php: -------------------------------------------------------------------------------- 1 | user()->role->name == 'cancelled') { 20 | return redirect()->route('wave.cancelled'); 21 | } 22 | 23 | return $next($request); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /wave/src/Http/Middleware/InstallMiddleware.php: -------------------------------------------------------------------------------- 1 | count() < 1) { 22 | if ($request->route()->getName() != 'wave.install') { 23 | return redirect()->route('wave.install'); 24 | } 25 | } 26 | return $next($request); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /wave/src/Http/Middleware/TokenMiddleware.php: -------------------------------------------------------------------------------- 1 | auth = $auth; 19 | } 20 | 21 | /** 22 | * Handle an incoming request. 23 | * 24 | * @param \Illuminate\Http\Request $request 25 | * @param \Closure $next 26 | * @param string|null $guard 27 | * @return mixed 28 | */ 29 | public function handle($request, Closure $next, $guard = null) 30 | { 31 | if ($request->token && strlen($request->token) <= 60) { 32 | $api_token = ApiToken::where('token', '=', $request->token)->first(); 33 | if (isset($api_token->id)) { 34 | $token = JWTAuth::fromUser($api_token->user); 35 | } 36 | } else { 37 | $this->auth->authenticate(); 38 | } 39 | 40 | //Then process the next request if every tests passed. 41 | return $next($request); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /wave/src/Http/Middleware/TrialEnded.php: -------------------------------------------------------------------------------- 1 | 0 && !setting('billing.card_upfront') && auth()->user()->daysLeftOnTrial() < 1) { 19 | if (auth()->user()->role->name == 'trial' && ($request->route()->getName() != 'wave.trial_over' && $request->route()->getName() != 'wave.settings.show')) { 20 | return redirect()->route('wave.trial_over'); 21 | } 22 | } 23 | 24 | return $next($request); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /wave/src/KeyValue.php: -------------------------------------------------------------------------------- 1 | 36 | */ 37 | protected $fillable = [ 38 | 'type', 39 | 'key', 40 | 'value', 41 | 'key_value_id', 42 | 'key_value_type', 43 | ]; 44 | 45 | public function keyValue() 46 | { 47 | return $this->morphTo(); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /wave/src/Support/Facades/Wave.php: -------------------------------------------------------------------------------- 1 |